Продолжение развития модуля календаря-планировщика
В продолжение предыдущего
Гит тут
Модуль у меня выполняет функции календаря со списками дел + планировщика выполнения задач. Обе эти функции существуют паралелльно и пользоваться обеими сразу необязательно)
Рассмотрим сначала календарь .
Единица информации в модуле - задача.
У задачи должно быть имя. Оно может быть и неуникальным. Только сами не запутайтесь(
Задача может иметь временные рамки - начало и конец, либо не иметь их совсем - быть бессрочной.
Если у задачи есть начало и конец, она может быть повторяющейся и ей можно задать период повторения - установку нового начала и конца. Так же, можно установить срок повторов(Повторять до) - до абсолютного момента времени - например, создать задачу Тест с 8:00 01/01/21 до 16:30 02/01/21 с повторами каждый второй месяц до 31/12/21
Задаче можно установить напоминание - относительное (за несколько минут, часов, ...) или абсолютное (в 12:30 20/02/2021). Задаче без срока можно установить только абсолютное время напоминания, естественно. Напоминание может быть простым - Алиса просто произнесет напоминание в нужное время, или можно запустить свой код.
И еще задача может быть выполненой и, соответственно, невыполненой (вкладка Основное)
У задачи может быть установлен признак Автозавершение по сроку, при его установке задача считается выполненной при наступлении времени конца задачи.
К моменту начала и конца задачи можно привязать выполнение кода. Причём, при начале задачи код всегда выполняется, а код для конца задачи выполнится только при установке признака выполненной задачи - либо если вручную поставить галочку Готово, либо при установленном признаке Автозавершение при достижении времени конца (обе галки ставятся на вкладке Основное).
Про категории задач:
Тут тоже не без выкрутасов(
Если категории не установлен цвет, то задачи этой категории будут скрыты и их можно увидеть только в админке. В этом есть тайный смысл, который будет раскрыт позже.
Еще у категорий есть признак Праздники, он нужен для того, чтобы одну категорию пометить 1 - Календарные праздники и выходные дни, а вторую пометить 2 - для суббот и воскресений, которые оказались рабочими. Эти неочевидные вещи нужны для работы внутренней процедуры модуля, подгружающей производственный календарь РФ.
Раз в сутки для обновления праздников у меня запускается скрипт:
include_once('./modules/todoer/todoer.class.php');
$calendar = new todoer();
$calendar->clnd_getholidays();
Календарь позволяет вести, так сказать, дела вручную, а возможность выполнения кода по времени позволяет использовать этот модуль и как планировщик выполнения внутрисистемных задач - тех, повторяющихся во времени или имеющих точную привязку к моменту.
Сразу скажу - модуль не оперирует секундами, его квант времени - минута. Но при этом не используются циклы, а только привязка к событию minutely. По статистике все задачки у меня успевают выполниться в первые несколько секунд каждой минуты.
С помощью одной задачи легко задать работу, например, будильника, который звонит только по рабочим дням, устанавливать/снимать режим энергосбережения и т.п. и т.д.
Подробнее об использовании модуля как планировщика в системе, об иерархии задач, о создании задач из кода - в следующей статье
Спасибо за внимание!
Домодедово, Россия
На форуме: xor