Страница 20 из 38
Re: Календарь/менеджер задач
Добавлено: Вс апр 01, 2018 7:00 am
Logrus
Нет смысла проверять что-то каждую минуту - с точки зрения расхода ресурсов лучше добавить проверки в местах изменения
с минутным опросом автор перемудрил и не только там, просто заинтересовал такой подход (из-за незнания приходится учится на чужих примерах, стараюсь понять и переделать, иногда получается совсем кардинально)
Re: Календарь/менеджер задач
Добавлено: Вс апр 01, 2018 11:16 pm
webms
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'].". ";
}
}
}
Да, ты был прав, задачи которые повторяются через год не проговорил.
Твой код почему то выводит абсолютно все будущие задачи.
Можно как то сделать чтоб только ближайшие дни которые в настройке указал.
А вообще было здорово если только ближайшие три дня
Re: Календарь/менеджер задач
Добавлено: Пн апр 02, 2018 4:21 am
fandaymon
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 дня? Если так, то будет наверное правильней ввести в Настройке отдельный параметр для Событий и отдельный для Задач.
Re: Календарь/менеджер задач
Добавлено: Пн апр 02, 2018 9:20 am
webms
говорить и События и Задачи в диапазоне 3 дня.
Просто например у меня в настройках стоит 14 дней (хочу видеть ближайшие задачи и события), но вот слышать о них только три дня)
Re: Календарь/менеджер задач
Добавлено: Пн апр 02, 2018 11:06 pm
fandaymon
webms писал(а): Пн апр 02, 2018 9:20 am
говорить и События и Задачи в диапазоне 3 дня.
Просто например у меня в настройках стоит 14 дней (хочу видеть ближайшие задачи и события), но вот слышать о них только три дня)
Тогда можно сделать маленький хак - в файле app_calendar.class.php в строке 307
если вместо неё записать 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, а для своих нужд можно задавать другой
Re: Календарь/менеджер задач
Добавлено: Вт апр 03, 2018 11:06 am
webms
fandaymon писал(а): Пн апр 02, 2018 11:06 pm
webms писал(а): Пн апр 02, 2018 9:20 am
говорить и События и Задачи в диапазоне 3 дня.
Просто например у меня в настройках стоит 14 дней (хочу видеть ближайшие задачи и события), но вот слышать о них только три дня)
Тогда можно сделать маленький хак - в файле app_calendar.class.php в строке 307
если вместо неё записать 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, а для своих нужд можно задавать другой
огромное спасибо, то что нужно!
Re: Календарь/менеджер задач
Добавлено: Вт апр 03, 2018 11:11 am
webms
только не работает))
Re: Календарь/менеджер задач
Добавлено: Вт апр 03, 2018 11:17 am
fandaymon
webms писал(а): Вт апр 03, 2018 11:11 am
только не работает))
А точно правильно всё изменено?
Define ПЕРЕД include стоит?
Re: Календарь/менеджер задач
Добавлено: Вт апр 03, 2018 11:18 am
webms
Код: Выделить всё
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: Календарь/менеджер задач
Добавлено: Вт апр 03, 2018 11:47 am
fandaymon
Странно - взял скрипт из поста, скопировал его в новый сценарий, запустил, получил задачи за 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;
}