Re: Календарь/менеджер задач
Добавлено: Пн мар 26, 2018 5:05 am
он последнюю версию модуля правил по тому что ранее на страницах описано (это не нужно все уже в модуле на маркете), вот и ошибки
Код: Выделить всё
function dayss($day)
{
$a = substr($day, strlen($day) - 1, 1);
if ($a == 1) $str = "день";
if ($a == 2 || $a == 3 || $a == 4) $str = "дня";
if ($a == 5 || $a == 6 || $a == 7 || $a == 8 || $a == 9 || $a == 0) $str = "дней";
return $str;
}
if (!empty($params['PropushhennyeDela'])) {
$stateOff = $params['PropushhennyeDela'];
}
else {
$stateOff = "";
}
if (file_exists('./modules/app_calendar/app_calendar.class.php'))
{
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['EVENTS_PASTPLAN'];
if ($events[0]['TITLE'])
{
$say_phrase.= "Напоминаю что";
$total_tasks = count($events);
for ($i = 0; $i < $total_tasks; $i++)
{
$datetime1 = date_create($events[$i]['DUE']);
$datetime2 = date_create(date('Y-m-d'));
$timeRASCHET = date_diff($datetime1, $datetime2);
$say_phrase.= " через ".$timeRASCHET -> days." ".dayss($timeRASCHET -> days)." ".$events[$i]['TITLE'].". ";
}
}
}
if ($say_phrase)
{
sleep(2);
echo $say_phrase;
//rs('DemoSay', $say_phrase); //Алиса говорит, но в чат не пишет.
//say($say_phrase,3);
}
Код: Выделить всё
rs("sayDela",array("PropushhennyeDela"=>"OFF")); Код: Выделить всё
if ($events)
{
$say_phrase.= "Напоминаю что";
foreach ($events as $tasks)
{
$say_phrase.= " через ". $tasks['AGE'] ." ".dayss($tasks['AGE'])." ".$tasks['TITLE'].". ";
}
} Код: Выделить всё
$events_pastplan=SQLSelect("SELECT *, (TO_DAYS(DUE)-TO_DAYS(NOW())) as AGE FROM calendar_events WHERE (TO_DAYS(DUE)>TO_DAYS(NOW()) AND (TO_DAYS(DUE)-TO_DAYS(NOW())<=3) AND IS_DONE=0 AND IS_TASK=1) ORDER BY AGE");
if ($events_pastplan) {
$out['EVENTS_PASTPLAN']=$events_pastplan;
} Код: Выделить всё
$events_pastplan=SQLSelect("SELECT *, (TO_DAYS(DUE)-TO_DAYS(NOW())) as AGE,calendar_categories.TITLE as CATEGORY FROM calendar_events LEFT JOIN calendar_categories ON calendar_events.CALENDAR_CATEGORY_ID=calendar_categories.ID WHERE (TO_DAYS(DUE)>TO_DAYS(NOW()) AND (TO_DAYS(DUE)-TO_DAYS(NOW())<=3) AND IS_DONE=0 AND IS_TASK=1) ORDER BY calendar_categories.TITLE,AGE");
if ($events_pastplan) {
$out['EVENTS_PASTPLAN']=$events_pastplan;
} Код: Выделить всё
if ($events)
{
$say_phrase.= "Напоминаю что";
$category='';
foreach ($events as $tasks)
{
if ($category!=$tasks['CATEGORY']) {
$category=$tasks['CATEGORY'];
$say_phrase.=" в категории " . $category;
}
$say_phrase.= " через ". $tasks['AGE'] ." ".dayss($tasks['AGE'])." ".$tasks['TITLE'].". ";
}
} ДР в PAST_PLAN не попадёт, так как это повторяющееся событие и DUE там может быть любого года. Если мы, например вносили Новый Год в прошлом году, то в таблице будет запись с DUE='2017-01-01',IS_REPEATING=1,REPEAT_TYPE=1.webms писал(а):fandaymon, очередное спасибо)
Pull requests отправил Сергею, но только убрал условие произносить только будущие задачи, не понимаю зачем это нужно (ведь события тоже нужно озвучивать, например из категории ДР)
Код: Выделить всё
$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'].". ";
}
}
}Код: Выделить всё
$events = $out['CALENDAR_CATEGORIES']; // в массиве $events у нас все категории
if ($events) { // проверяем есть ли у нас какие-нибудь категории
foreach($events as $category) { // если есть, то открываем цикл и заносим в массив $category все что относится к текущей категории
// в $category у нас будет (ID=>1,TITLE=>'1 категория'..., EVENTS_PAST=>array(задачи относящиеся к 1 категории))
$events_past= $category['EVENTS_PAST']; // в массив $event_past заносим блок EVENTS_PAST относящийся к текущей категории
if ($events_past) { //проверяем есть ли там что-нибудь
foreach($events_past as $ev) { // если есть, то открываем цикл и заносим в массив $ev одну запись из блока EVENTS_PAST
//$ev['AGE'] - количество дней от DUE до текущей даты
//$ev['DAYS'] - слово дней, согласованное с AGE
//$ev['TITLE'] - название задачи
//$ev['DUE'] - когда она должна была быть сделана
//$category['TITLE'] - название категории
//$category['ICON'] - иконка категории
}
}
}
А зачем такие сложности с подключением модуля календаря и кучей циклов для того чтобы выяснить есть ли не выполненные задачи?!Logrus писал(а):viewtopic.php?f=5&t=34#p7324 ага, автор нашелся, aka msh555 )))
не-е, но не суть как индикацию обозвать (сама идея и реализация, ну дальнейшее применение/использование интересны)
Код: Выделить всё
$rec=SQLSelectOne("select id from calendar_events where IS_TASK=1 and IS_DONE=0 and TO_DAYS(DUE)<=TO_DAYS(NOW())");
if $rec {
echo 'Есть не выполненные задания'; \\ включаем лампочку
}