с минутным опросом автор перемудрил и не только там, просто заинтересовал такой подход (из-за незнания приходится учится на чужих примерах, стараюсь понять и переделать, иногда получается совсем кардинально)Нет смысла проверять что-то каждую минуту - с точки зрения расхода ресурсов лучше добавить проверки в местах изменения
[Модуль] Simple Calendar (app_calendar)
Модератор: immortal
-
- Сообщения: 2079
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 313 раз
- Поблагодарили: 457 раз
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'].". "; } } }
Твой код почему то выводит абсолютно все будущие задачи.
Можно как то сделать чтоб только ближайшие дни которые в настройке указал.
А вообще было здорово если только ближайшие три дня
-
- Сообщения: 1553
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
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 дней (хочу видеть ближайшие задачи и события), но вот слышать о них только три дня)
-
- Сообщения: 1553
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
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');
-
- Сообщения: 1553
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
- 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);
}
}
-
- Сообщения: 1553
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
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;
}