[Модуль] Simple Calendar (app_calendar)
Модератор: immortal
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
[Модуль] Simple Calendar (app_calendar)
После обновления из исходников становится доступен модуль Календарь/менеджер задач.
Запустить модуль можно по ссылке http://localhost/popup/app_calendar.html (вместо localhost поставьте ваш хост, если нужно)
Модуль (как и почти всё) в режиме тестирования и будет ещё дорабатываться.
На данный момент присутствуют следующие возможности:
* Добавление событий на определённую дату
* Повторяющиеся события (ежегодные, ежемесячные, еженедельные)
* Добавление задач на определённую дату (либо без даты)
* Повторяющиеся задачи
* Возможность задать скрипт, выполняющийся при отметке задачи как завершённая
Экран списка текущих задач:
Редактирование/добавления события или задачи:
Запустить модуль можно по ссылке http://localhost/popup/app_calendar.html (вместо localhost поставьте ваш хост, если нужно)
Модуль (как и почти всё) в режиме тестирования и будет ещё дорабатываться.
На данный момент присутствуют следующие возможности:
* Добавление событий на определённую дату
* Повторяющиеся события (ежегодные, ежемесячные, еженедельные)
* Добавление задач на определённую дату (либо без даты)
* Повторяющиеся задачи
* Возможность задать скрипт, выполняющийся при отметке задачи как завершённая
Экран списка текущих задач:
Редактирование/добавления события или задачи:
- За это сообщение автора sergejey поблагодарил:
- vitosmaxim80sad145 (Ср май 06, 2020 6:05 am)
- Рейтинг: 1.16%
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Календарь/менеджер задач
Небольшой скрипт, который по утрам может говорить запланированные на сегодня дела и события, используя данные из вышеописанного модуля.
Итак, делаем сценарий, называем его к примеру sayTodayAgenda
Ставим такой код:
теперь если его вызвать с помощью runScript('sayTodayAgenda'); то вы услышите запланированные дела и события из календаря на сегодня. я его поставил как часть сценария утреннего пробуждения, описанного здесь: http://smartliving.ru/Main/ScSecurityWireless
Итак, делаем сценарий, называем его к примеру sayTodayAgenda
Ставим такой код:
Код: Выделить всё
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 (is_array($events)) {
$total=count($events);
$tasks=array();
$cals=array();
for($i=0;$i<$total;$i++) {
if ($events[$i]['IS_TASK']=='1' && $events[$i]['IS_DONE']!='1') {
$tasks[]=$events[$i]['TITLE'];
} elseif ($events[$i]['IS_TASK']!='1') {
$cals[]=$events[$i]['TITLE'];
}
}
$total_tasks=count($tasks);
if ($total_tasks) {
$say_phrase.="У вас на сегодня запланированы задачи. ";
for($i=0;$i<$total_tasks;$i++) {
$say_phrase.=($i+1).". ".$tasks[$i].". ";
}
} else {
// say("Никаких дел не запланировано.",1);
}
$total_cals=count($cals);
if ($total_cals) {
$say_phrase.=("Сегодняшние события. ");
for($i=0;$i<$total_cals;$i++) {
$say_phrase.=$cals[$i].'. ';
}
}
}
$events=$out['EVENTS_PAST'];
if ($events[0]['TITLE']) {
$say_phrase.=" Так же напоминаю о пропущенных задачах. ";
$total_tasks=count($events);
for($i=0;$i<$total_tasks;$i++) {
$say_phrase.=($i+1).". ".$events[$i]['TITLE'].". ";
}
}
}
if ($say_phrase) {
say($say_phrase,1);
}
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Re: Календарь/менеджер задач
Доброго времени суток. Я сам только начинаю изучать php. А никто не пробовал настроить синхрониронизацию с ms outlook, А в идеале с icloud apple? Вот это было б по настоящему удобно. Есть идеи реализации?
-
- Сообщения: 469
- Зарегистрирован: Вт мар 12, 2013 1:22 am
- Благодарил (а): 41 раз
- Поблагодарили: 81 раз
Re: Календарь/менеджер задач
Заметил что при создании/редктировании в базу не сохраняется параметр "без конкретной даты". Причем именно не сохраняется, т.к. если вручную изменить в таблице "calendar_events" поле "IS_NODATE" с "0" на "1", то при открытии записи календаря для редактирования галка стоит на месте как и положено.
-
- Сообщения: 560
- Зарегистрирован: Ср сен 04, 2013 10:31 am
- Откуда: Самара
- Благодарил (а): 99 раз
- Поблагодарили: 140 раз
- Контактная информация:
Re: Календарь/менеджер задач
Клевый скрипт! И никаких селектов! Круто!
Есть идея
Сделаю напоминалку как у Невела Долгопупса из Гарри Поттера (угу, я фанат этого произведения).
Будет гореть лампочка (хоть управляемый выелючатель, хоть диод от Ардуины) когда есть не выполненные дела на сегодня. Типа видишь что что-то забыл
Такая вот идейка.
Ну и раз уж заговорили...
Меняющийся потолок обеденного зала я сделал (диодная RGB лента по периметру меняющая цвет по времени)
Часы дома Уизли - показывают не время, а местонахождение членов семьи. Есть в МЖД из коробки.
Ну и порекламиную фанфик по Гарри Поттера: http://hpmor.ru/
Есть идея
Сделаю напоминалку как у Невела Долгопупса из Гарри Поттера (угу, я фанат этого произведения).
Будет гореть лампочка (хоть управляемый выелючатель, хоть диод от Ардуины) когда есть не выполненные дела на сегодня. Типа видишь что что-то забыл
Такая вот идейка.
Ну и раз уж заговорили...
Меняющийся потолок обеденного зала я сделал (диодная RGB лента по периметру меняющая цвет по времени)
Часы дома Уизли - показывают не время, а местонахождение членов семьи. Есть в МЖД из коробки.
Ну и порекламиную фанфик по Гарри Поттера: http://hpmor.ru/
-
- Сообщения: 560
- Зарегистрирован: Ср сен 04, 2013 10:31 am
- Откуда: Самара
- Благодарил (а): 99 раз
- Поблагодарили: 140 раз
- Контактная информация:
Re: Календарь/менеджер задач
Реализовал я задумку.
Напоминалка.
Одна лампочка и 2 кнопки. Я сделал на NooLite, но можно и на чем-то другом: 1wire, arduino, ...
Итак функционал.
Лампочка горит, если на сегодня есть невыполненные дела.
Кнопка 1 проговаривает по кругу каждую задачу. В конце списка начинает с начала.
Кнопка 2 помечает задачу как выполненную.
Итого: смотрим горит лампочка, тыкаем 1 кнопку, слушаем. При желании помечаем как выполнено тыкая кнопку 2. Тыкаем опять кнопку 1. И так пока не погаснет лампочка или не пойдем делать оставшиеся дела .
Лампочка:
Реализовано через состояния системы. Проверка каждую минуту. Если статус 1, лампочка горит, 0 - не горит.
Class: OperationalModes/Объект: TaskExistMode/Method: Все -> -> check
Код:
Кнопка 1
Для хранения свойств lastSelectId, lastSelectTimeStamp и lastSelectTitle используем объект TaskExistMode
Кнопка 2
Помечаем последнюю проговоренную задачу как выполненную.
Напоминалка.
Одна лампочка и 2 кнопки. Я сделал на NooLite, но можно и на чем-то другом: 1wire, arduino, ...
Итак функционал.
Лампочка горит, если на сегодня есть невыполненные дела.
Кнопка 1 проговаривает по кругу каждую задачу. В конце списка начинает с начала.
Кнопка 2 помечает задачу как выполненную.
Итого: смотрим горит лампочка, тыкаем 1 кнопку, слушаем. При желании помечаем как выполнено тыкая кнопку 2. Тыкаем опять кнопку 1. И так пока не погаснет лампочка или не пойдем делать оставшиеся дела .
Лампочка:
Реализовано через состояния системы. Проверка каждую минуту. Если статус 1, лампочка горит, 0 - не горит.
Class: OperationalModes/Объект: TaskExistMode/Method: Все -> -> check
Код:
Код: Выделить всё
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'];
$task_exists=0;
if (is_array($events)) {
$total=count($events);
$tasks=array();
for($i=0;$i<$total;$i++) {
if ($events[$i]['IS_TASK']=='1' && $events[$i]['IS_DONE']!='1') {
$tasks[]=$events[$i]['TITLE'];
}
}
$total_tasks=count($tasks);
if ($total_tasks) {
$task_exists=1;
}
}
$events=$out['EVENTS_PAST']; // напоминание о пропущенных задачах
if ($events[0]['TITLE']) {
$task_exists=1;
}
if ($this->getProperty("active")!=$task_exists){
$this->setProperty("active",$task_exists);
}
}
Для хранения свойств lastSelectId, lastSelectTimeStamp и lastSelectTitle используем объект TaskExistMode
Код: Выделить всё
//Напомним о делах
if(time()-gg("TaskExistMode.lastSelectTimeStamp")<60){ // защита от простоя больше минуты, начать с начала
$lastSelectId = gg("TaskExistMode.lastSelectId");
}else{
$lastSelectId = 0;
}
sg("TaskExistMode.lastSelectTimeStamp",time());
$SQLText = " SELECT e.id as ID, e.title as TITLE, e.notes as NOTES, u.name AS USERNAME";
$SQLText.= " FROM calendar_events e ";
$SQLText.= " LEFT JOIN users u ON e.USER_ID = u.ID ";
$SQLText.= " WHERE IS_TASK =1 ";
$SQLText.= " AND IS_DONE =0 ";
$SQLText.= " AND DUE < NOW( ) ";
$SQLText.= " AND e.ID > ".$lastSelectId." ";
$SQLText.= " ORDER BY e.ID ";
$SQLText.= " LIMIT 1 ";
$SQLResult = SQLSelectOne($SQLText);
if ($SQLResult['ID']){
$sayText = "";
if($SQLResult['USERNAME']){
$sayText .= $SQLResult['USERNAME']." ";
}
$sayText .= $SQLResult['TITLE'].". ".$SQLResult['NOTES'];
sg("TaskExistMode.lastSelectId",$SQLResult['ID']);
sg("TaskExistMode.lastSelectTitle",$SQLResult['TITLE']);
}else{
if($lastSelectId){
$sayText = "Конец списка";
sg("TaskExistMode.lastSelectId",0);
}else{
$sayText = "Дел больше нет";
}
}
say($sayText,1);
Помечаем последнюю проговоренную задачу как выполненную.
Код: Выделить всё
//Помечаем последнюю проговоренную задачу как выполненную.
if(time()-gg("TaskExistMode.lastSelectTimeStamp")<60){
include_once('./modules/app_calendar/app_calendar.class.php');
$calendar=new app_calendar();
$calendar->task_done(gg("TaskExistMode.lastSelectId"));
say("Задача ".gg("TaskExistMode.lastSelectTitle")." выполнена.",1);
}
callMethod("TaskExistMode.check");
- За это сообщение автора ErmolenkoM поблагодарили (всего 3):
- mirsum (Чт янв 29, 2015 5:56 pm) • shemnik69 (Пт янв 30, 2015 12:10 pm) • vitosmaxim80sad145 (Ср май 06, 2020 6:05 am)
- Рейтинг: 3.49%
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Календарь/менеджер задач
Сделайте пожалуйста просмотр всех событий для редактирования, а также категорий
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
-
- Сообщения: 66
- Зарегистрирован: Пт июл 11, 2014 11:08 am
- Благодарил (а): 16 раз
- Поблагодарили: 9 раз
Re: Календарь/менеджер задач
Подскажите пожалуйста, как можно (если это можно) добавлять события/задачи в календарь из скрипта?
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Календарь/менеджер задач
Новая задача:LocalBrownie писал(а):Подскажите пожалуйста, как можно (если это можно) добавлять события/задачи в календарь из скрипта?
Код: Выделить всё
$rec=array();
$rec['TITLE']="Название"
$rec['NOTES']="Заметки к задаче"
$rec['DUE']=date('Y-m-d'); // срок выполнения
$rec['IS_TASK']=1;
$rec['ADDED']=date('Y-m-d H:i:s');
$rec['ID']=SQLInsert('calendar_events', $rec);
Код: Выделить всё
$rec=array();
$rec['TITLE']="Название"
$rec['NOTES']="Заметки к событию"
$rec['DUE']=date('Y-m-d'); // дата события
$rec['IS_REPEATING']=1; // повторяющееся событие
$rec['REPEAT_TYPE']=1; // повторять ежегодно (1), ежемесячно (2), еженедельно (3)
$rec['IS_TASK']=0;
$rec['ADDED']=date('Y-m-d H:i:s');
$rec['ID']=SQLInsert('calendar_events', $rec);
- За это сообщение автора sergejey поблагодарили (всего 8):
- dmw (Пн авг 25, 2014 1:34 pm) • Dark_Veter (Пн авг 25, 2014 8:06 pm) • LocalBrownie (Вт авг 26, 2014 5:27 pm) • ErmolenkoM (Пт окт 17, 2014 12:16 pm) • shemnik69 (Пт янв 30, 2015 12:11 pm) • C_3AXAPOB (Пт окт 07, 2016 12:23 am) • London (Вт дек 03, 2019 4:04 pm) • IrisKo (Сб фев 08, 2020 12:38 am)
- Рейтинг: 9.3%
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 66
- Зарегистрирован: Пт июл 11, 2014 11:08 am
- Благодарил (а): 16 раз
- Поблагодарили: 9 раз
Re: Календарь/менеджер задач
Я вот заметил недавно, что назначить выполнение скрипта можно не только на задачу, а и на событие. При этом настройки сохраняются даже после перезагрузки мажордома. Понятно, что скрипт не выполняется, потому как событие - это не задача и "выполнить событие" трудно. Но имя скрипта как-бы есть, так что можно превратить небольшой баг в интересную фичу.
Есть ли возможность вручную запустить скрипт, привязанный к событию, допустим при проговаривании в sayTodayAgenda?
Идея такая - есть праздники с выходными, которые чётко привязаны к дате - например НГ, Рождество, 8-марта и т.д. Понятно, что попадают они чаще всего на будние дни.
Т.е. будний становится выходным, но алисе про это как-бы не известно, и она честно, дабы не обидеть хозяев утром 1-го января, в четверг, начнёт будить всех в 7 утра и выгонять на работу.
С чем моё тело будет явно не согласно!
А вот если-б на 31-е, ну или на 1-е (в зависимости от реализации) прописать событие "Новый год!" и пнуть небольшой скриптец на пару строчек, например:
sg('ThisComputer.Holiday', 1);
sg('ThisComputer.HolidayText', "Новый Год");
То уже отталкиваясь от этих переменных можно спокойно заставить систему правильно среагировать на "случайный выходной", и обойтись без человеческих и "технических" жертв!
Есть ли возможность вручную запустить скрипт, привязанный к событию, допустим при проговаривании в sayTodayAgenda?
Идея такая - есть праздники с выходными, которые чётко привязаны к дате - например НГ, Рождество, 8-марта и т.д. Понятно, что попадают они чаще всего на будние дни.
Т.е. будний становится выходным, но алисе про это как-бы не известно, и она честно, дабы не обидеть хозяев утром 1-го января, в четверг, начнёт будить всех в 7 утра и выгонять на работу.
С чем моё тело будет явно не согласно!
А вот если-б на 31-е, ну или на 1-е (в зависимости от реализации) прописать событие "Новый год!" и пнуть небольшой скриптец на пару строчек, например:
sg('ThisComputer.Holiday', 1);
sg('ThisComputer.HolidayText', "Новый Год");
То уже отталкиваясь от этих переменных можно спокойно заставить систему правильно среагировать на "случайный выходной", и обойтись без человеческих и "технических" жертв!