[Модуль] Simple Calendar (app_calendar)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Календарь/менеджер задач

Сообщение Logrus » Вс апр 01, 2018 7:00 am

Нет смысла проверять что-то каждую минуту - с точки зрения расхода ресурсов лучше добавить проверки в местах изменения
с минутным опросом автор перемудрил и не только там, просто заинтересовал такой подход (из-за незнания приходится учится на чужих примерах, стараюсь понять и переделать, иногда получается совсем кардинально)
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Календарь/менеджер задач

Сообщение webms » Вс апр 01, 2018 11:16 pm

fandaymon писал(а):
webms писал(а):fandaymon, очередное спасибо)
Pull requests отправил Сергею, но только убрал условие произносить только будущие задачи, не понимаю зачем это нужно (ведь события тоже нужно озвучивать :), например из категории ДР)
ДР в PAST_PLAN не попадёт, так как это повторяющееся событие и DUE там может быть любого года. Если мы, например вносили Новый Год в прошлом году, то в таблице будет запись с DUE='2017-01-01',IS_REPEATING=1,REPEAT_TYPE=1.

Если стоит задача озвучивать и то и другое, то есть же EVENTS_SOON. Туда попадают все будущие задачи и события, в диапазоне который задаётся в Настройках модуля. Работать с ними так же, как с EVENTS_PAST. И функция dayss тогда не нужна, потому что в массиве уже есть поле DAYS.

Код: Выделить всё

    $events = $out['CALENDAR_CATEGORIES'];
    $tasks = '';
    if ($events)
    {
      foreach($events as $category)
      {
        $say_phrase.= "Напоминаю что";
        $events_soon= $category['EVENTS_SOON'];
        if ($events_soon)
        {
          $say_phrase.= 'в категории: ' . $category['TITLE'] . '. '; //Если нужно перед пропущенными задачами указывать категорию   
          foreach($events_soon as $ev)
          {
            $say_phrase.= " через ".  $ev['AGE'] ." ". $ev['DAYS'] ." ".$ev['TITLE'].". ";
          }
        }
      } 
Да, ты был прав, задачи которые повторяются через год не проговорил.
Твой код почему то выводит абсолютно все будущие задачи.
Можно как то сделать чтоб только ближайшие дни которые в настройке указал.
А вообще было здорово если только ближайшие три дня
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Календарь/менеджер задач

Сообщение fandaymon » Пн апр 02, 2018 4:21 am

webms писал(а):
Вс апр 01, 2018 11:16 pm

Да, ты был прав, задачи которые повторяются через год не проговорил.
Твой код почему то выводит абсолютно все будущие задачи.
Можно как то сделать чтоб только ближайшие дни которые в настройке указал.
А вообще было здорово если только ближайшие три дня
Действительно - для задач срок не фильтруется, нужно исправление, в app_calendar.class.php в 310 строчке вместо

Код: Выделить всё

  $tasks_soon=SQLSelect("SELECT *, (TO_DAYS(DUE)-TO_DAYS(NOW())) as AGE FROM calendar_events WHERE IS_TASK=1 AND IS_DONE=0 AND (TO_DAYS(DUE)>TO_DAYS(NOW()) OR (IS_NODATE=1)) and CALENDAR_CATEGORY_ID=" . $v1['ID'] . " ORDER BY AGE");
вписать

Код: Выделить всё

  $tasks_soon=SQLSelect("SELECT *, (TO_DAYS(DUE)-TO_DAYS(NOW())) as AGE FROM calendar_events WHERE IS_TASK=1 AND IS_DONE=0 AND ((TO_DAYS(DUE)>TO_DAYS(NOW()) AND (TO_DAYS(DUE)-TO_DAYS(NOW())<=".(int)$how_soon.")) OR (IS_NODATE=1)) and CALENDAR_CATEGORY_ID=" . $v1['ID'] . " ORDER BY AGE");
Про только ближайшие 3 дня не очень понял, т.е. события указывать в диапазоне, указанном в настройках (по умолчанию 6 дней), а задачи в диапазоне 3 дня? Если так, то будет наверное правильней ввести в Настройке отдельный параметр для Событий и отдельный для Задач.
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Календарь/менеджер задач

Сообщение webms » Пн апр 02, 2018 9:20 am

fandaymon писал(а):
Пн апр 02, 2018 4:21 am
говорить и События и Задачи в диапазоне 3 дня.
Просто например у меня в настройках стоит 14 дней (хочу видеть ближайшие задачи и события), но вот слышать о них только три дня)
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Календарь/менеджер задач

Сообщение fandaymon » Пн апр 02, 2018 11:06 pm

webms писал(а):
Пн апр 02, 2018 9:20 am
fandaymon писал(а):
Пн апр 02, 2018 4:21 am
говорить и События и Задачи в диапазоне 3 дня.
Просто например у меня в настройках стоит 14 дней (хочу видеть ближайшие задачи и события), но вот слышать о них только три дня)
Тогда можно сделать маленький хак - в файле app_calendar.class.php в строке 307

Код: Выделить всё

$how_soon=SETTINGS_APP_CALENDAR_SOONLIMIT;
если вместо неё записать 4 такие строки

Код: Выделить всё

 $how_soon=TEMP_APP_CALENDAR_SOONLIMIT;
  if ($how_soon=='TEMP_APP_CALENDAR_SOONLIMIT') {
    $how_soon=SETTINGS_APP_CALENDAR_SOONLIMIT;
  } 
то в функции для проговаривания можно дать команду

Код: Выделить всё

Define('TEMP_APP_CALENDAR_SOONLIMIT', '3'); \\3 это новый soonlimit
перед строчкой

Код: Выделить всё

include_once('./modules/app_calendar/app_calendar.class.php');
В результате для вывода на экран soonlimit будет браться из settings, а для своих нужд можно задавать другой
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Календарь/менеджер задач

Сообщение webms » Вт апр 03, 2018 11:06 am

fandaymon писал(а):
Пн апр 02, 2018 11:06 pm
webms писал(а):
Пн апр 02, 2018 9:20 am
fandaymon писал(а):
Пн апр 02, 2018 4:21 am
говорить и События и Задачи в диапазоне 3 дня.
Просто например у меня в настройках стоит 14 дней (хочу видеть ближайшие задачи и события), но вот слышать о них только три дня)
Тогда можно сделать маленький хак - в файле app_calendar.class.php в строке 307

Код: Выделить всё

$how_soon=SETTINGS_APP_CALENDAR_SOONLIMIT;
если вместо неё записать 4 такие строки

Код: Выделить всё

 $how_soon=TEMP_APP_CALENDAR_SOONLIMIT;
  if ($how_soon=='TEMP_APP_CALENDAR_SOONLIMIT') {
    $how_soon=SETTINGS_APP_CALENDAR_SOONLIMIT;
  } 
то в функции для проговаривания можно дать команду

Код: Выделить всё

Define('TEMP_APP_CALENDAR_SOONLIMIT', '3'); \\3 это новый soonlimit
перед строчкой

Код: Выделить всё

include_once('./modules/app_calendar/app_calendar.class.php');
В результате для вывода на экран soonlimit будет браться из settings, а для своих нужд можно задавать другой
огромное спасибо, то что нужно!
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Календарь/менеджер задач

Сообщение webms » Вт апр 03, 2018 11:11 am

только не работает))
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Календарь/менеджер задач

Сообщение fandaymon » Вт апр 03, 2018 11:17 am

webms писал(а):
Вт апр 03, 2018 11:11 am
только не работает))
А точно правильно всё изменено? 8-)

Define ПЕРЕД include стоит?
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Календарь/менеджер задач

Сообщение webms » Вт апр 03, 2018 11:18 am

СпойлерПоказать

Код: Выделить всё

if (!empty($params['PropushhennyeDela'])) {
    $stateOff = $params['PropushhennyeDela'];
} else {
 $stateOff = "";
}

if (file_exists('./modules/app_calendar/app_calendar.class.php'))
{
    Define('TEMP_APP_CALENDAR_SOONLIMIT', '3'); //лимит дней которые проговаривает
    include_once('./modules/app_calendar/app_calendar.class.php');
    $calendar = new app_calendar();
    $calendar -> usual($out);
    $events = $out['EVENTS_TODAY'];
    $say_phrase = '';
    if ($events)
    {
        $tasks = '';
        $cals = '';
        $i = 0;
        $j = 0;
        foreach($events as $ev)
        {
            if ($ev['IS_TASK'] == 1 and $ev['IS_DONE'] == 0)
            {
                $i++;
                $tasks.= $i.'. '.$ev['TITLE'].'. ';
            }
            else
            {
                $j++;
                $cals.= $j.'. '.$ev['TITLE'].'. ';
            }
        }
        if ($i != 0) $say_phrase.= "У вас на сегодня запланированы задачи, ".$tasks;
        if ($j != 0) $say_phrase.= "Сегодняшние события, ".$cals;
    }
    if ($stateOff != 'OFF')
    { //вызывается параметром, если ничего не пришло - будет говорить. 
        $events = $out['CALENDAR_CATEGORIES'];
        $i = 0;
        $tasks = '';
        if ($events)
        {
            foreach($events as $category)
            {
                $events_past = $category['EVENTS_PAST'];
                if ($events_past)
                {
                    $tasks.= 'из категории: '.$category['TITLE'].'. '; //Если нужно перед пропущенными задачами указывать категорию   
                    foreach($events_past as $ev)
                    {
                        $i++;
                        $tasks.= $i.'. '.$ev['TITLE'].'. ';
                    }
                }
            }
            if ($i != 0) $say_phrase.= " Напоминаю пропущенные задачи, ".$tasks;
        }
    }
    $events = $out['CALENDAR_CATEGORIES'];
    $tasks = '';
    $i = 0;
    if ($events)
    {
        foreach($events as $category)
        {
            $events_soon = $category['EVENTS_SOON'];
            if ($events_soon)
            {
                //$say_phrase.= ' в категории: '.$category['TITLE'].'. ';
                foreach($events_soon as $ev)
                {
                    $i++;
                    $tasks.= " через ".$ev['AGE']." ".$ev['DAYS']." ".$ev['TITLE'].". ";
                }
            }
        }
     if ($i != 0) $say_phrase.= "Напоминаю что".$tasks;
    }
    if ($say_phrase)
    {
        echo $say_phrase;
        //rs('DemoSay', $say_phrase); //Алиса говорит, но в чат не пишет.
        //say($say_phrase,3);
    }
}
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Календарь/менеджер задач

Сообщение fandaymon » Вт апр 03, 2018 11:47 am

Странно - взял скрипт из поста, скопировал его в новый сценарий, запустил, получил задачи за 3 дня, изменил define на 12 - получил за 12...
А в app_calendar_class.php изменения внесены?
Может конечно седьмой php не так отрабатывает не определенные константы...

А если попробовать так -

Код: Выделить всё

  if (defined('TEMP_APP_CALENDAR_SOONLIMIT')) {
    $how_soon=TEMP_APP_CALENDAR_SOONLIMIT;
  } else {
    $how_soon=SETTINGS_APP_CALENDAR_SOONLIMIT;
  }
Ответить