с минутным опросом автор перемудрил и не только там, просто заинтересовал такой подход (из-за незнания приходится учится на чужих примерах, стараюсь понять и переделать, иногда получается совсем кардинально)Нет смысла проверять что-то каждую минуту - с точки зрения расхода ресурсов лучше добавить проверки в местах изменения
[Модуль] Simple Calendar (app_calendar)
Модератор: immortal
Re: Календарь/менеджер задач
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
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'].". "; } } }
Твой код почему то выводит абсолютно все будущие задачи.
Можно как то сделать чтоб только ближайшие дни которые в настройке указал.
А вообще было здорово если только ближайшие три дня
Re: Календарь/менеджер задач
Действительно - для задач срок не фильтруется, нужно исправление, в app_calendar.class.php в 310 строчке вместоwebms писал(а): Вс апр 01, 2018 11:16 pm
Да, ты был прав, задачи которые повторяются через год не проговорил.
Твой код почему то выводит абсолютно все будущие задачи.
Можно как то сделать чтоб только ближайшие дни которые в настройке указал.
А вообще было здорово если только ближайшие три дня
Код: Выделить всё
$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");Re: Календарь/менеджер задач
говорить и События и Задачи в диапазоне 3 дня.
Просто например у меня в настройках стоит 14 дней (хочу видеть ближайшие задачи и события), но вот слышать о них только три дня)
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');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');
Re: Календарь/менеджер задач
только не работает))
Re: Календарь/менеджер задач
А точно правильно всё изменено?
Define ПЕРЕД include стоит?
Re: Календарь/менеджер задач
SPOILERSPOILER_SHOW
Код: Выделить всё
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);
}
}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;
}