с минутным опросом автор перемудрил и не только там, просто заинтересовал такой подход (из-за незнания приходится учится на чужих примерах, стараюсь понять и переделать, иногда получается совсем кардинально)Нет смысла проверять что-то каждую минуту - с точки зрения расхода ресурсов лучше добавить проверки в местах изменения
[Модуль] Simple Calendar (app_calendar)
Модератор: immortal
-
- Сообщения: 2113
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 317 раз
- Поблагодарили: 466 раз
Re: Календарь/менеджер задач
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Календарь/менеджер задач
Да, ты был прав, задачи которые повторяются через год не проговорил.fandaymon писал(а):ДР в PAST_PLAN не попадёт, так как это повторяющееся событие и DUE там может быть любого года. Если мы, например вносили Новый Год в прошлом году, то в таблице будет запись с DUE='2017-01-01',IS_REPEATING=1,REPEAT_TYPE=1.webms писал(а):fandaymon, очередное спасибо)
Pull requests отправил Сергею, но только убрал условие произносить только будущие задачи, не понимаю зачем это нужно (ведь события тоже нужно озвучивать, например из категории ДР)
Если стоит задача озвучивать и то и другое, то есть же 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'].". "; } } }
Твой код почему то выводит абсолютно все будущие задачи.
Можно как то сделать чтоб только ближайшие дни которые в настройке указал.
А вообще было здорово если только ближайшие три дня
-
- Сообщения: 1570
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 40 раз
- Поблагодарили: 578 раз
Re: Календарь/менеджер задач
Действительно - для задач срок не фильтруется, нужно исправление, в 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");
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Календарь/менеджер задач
говорить и События и Задачи в диапазоне 3 дня.
Просто например у меня в настройках стоит 14 дней (хочу видеть ближайшие задачи и события), но вот слышать о них только три дня)
-
- Сообщения: 1570
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 40 раз
- Поблагодарили: 578 раз
Re: Календарь/менеджер задач
Тогда можно сделать маленький хак - в файле app_calendar.class.php в строке 307
Код: Выделить всё
$how_soon=SETTINGS_APP_CALENDAR_SOONLIMIT;
Код: Выделить всё
$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');
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Календарь/менеджер задач
огромное спасибо, то что нужно!fandaymon писал(а): ↑Пн апр 02, 2018 11:06 pmТогда можно сделать маленький хак - в файле app_calendar.class.php в строке 307если вместо неё записать 4 такие строкиКод: Выделить всё
$how_soon=SETTINGS_APP_CALENDAR_SOONLIMIT;
то в функции для проговаривания можно дать командуКод: Выделить всё
$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
В результате для вывода на экран soonlimit будет браться из settings, а для своих нужд можно задавать другойКод: Выделить всё
include_once('./modules/app_calendar/app_calendar.class.php');
-
- Сообщения: 1570
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 40 раз
- Поблагодарили: 578 раз
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Календарь/менеджер задач
СпойлерПоказать
Код: Выделить всё
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);
}
}
-
- Сообщения: 1570
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 40 раз
- Поблагодарили: 578 раз
Re: Календарь/менеджер задач
Странно - взял скрипт из поста, скопировал его в новый сценарий, запустил, получил задачи за 3 дня, изменил define на 12 - получил за 12...
А в app_calendar_class.php изменения внесены?
Может конечно седьмой php не так отрабатывает не определенные константы...
А если попробовать так -
А в app_calendar_class.php изменения внесены?
Может конечно седьмой php не так отрабатывает не определенные константы...
А если попробовать так -
Код: Выделить всё
if (defined('TEMP_APP_CALENDAR_SOONLIMIT')) {
$how_soon=TEMP_APP_CALENDAR_SOONLIMIT;
} else {
$how_soon=SETTINGS_APP_CALENDAR_SOONLIMIT;
}