Modules/devices/devices manage schedule inc php
Материал из MajorDoMo инфо
ᐂ В корневой раздел ᐃ В директорию расположения файла
<?php
// Выполняем SQL-запрос для выбора всех устройств, включая их ID и название, и сортируем результат по названию
$out['ALL_DEVICES'] = SQLSelect("SELECT ID, TITLE FROM devices ORDER BY TITLE");
// Создаем массив дней недели с соответствующими значениями и названиями
$days = array(
// Создаем элемент для воскресенья
array('VALUE' => 0, 'TITLE' => LANG_WEEK_SUN),
// Создаем элемент для понедельника
array('VALUE' => 1, 'TITLE' => LANG_WEEK_MON),
// Создаем элемент для вторника
array('VALUE' => 2, 'TITLE' => LANG_WEEK_TUE),
// Создаем элемент для среды
array('VALUE' => 3, 'TITLE' => LANG_WEEK_WED),
// Создаем элемент для четверга
array('VALUE' => 4, 'TITLE' => LANG_WEEK_THU),
// Создаем элемент для пятницы
array('VALUE' => 5, 'TITLE' => LANG_WEEK_FRI),
// Создаем элемент для субботы
array('VALUE' => 6, 'TITLE' => LANG_WEEK_SAT),
);
// Закомментированные строк на гите
//$point=SQLSelectOne("SELECT * FROM devices_scheduler_points WHERE ID=".(int)$point_id);
//$devices = SQLSelect("SELECT devices.* FROM devices")
// Выполняет SQL-запрос для выбора уникальных идентификаторов устройств из таблицы devices_scheduler_points
$tmp = array_map('current', SQLSelect("SELECT DEVICE_ID FROM devices_scheduler_points GROUP BY DEVICE_ID"));
// Инициализируем пустой массив для хранения методов типов устройств
$type_methods = array();
// Проверяем, является ли переменная $tmp массивом и содержит ли она элементы
if (is_array($tmp) && count($tmp)) {
// Выполняет SQL-запрос для выбора всех устройств, идентификаторы которых присутствуют в массиве $tmp
$devices = SQLSelect("SELECT * FROM devices WHERE ID IN (" . implode(',', $tmp) . ") ORDER BY devices.TITLE");
// Подсчитываем общее количество устройств
$total = count($devices);
// Начинаем цикл по всем устройствам
for ($i = 0; $i < $total; $i++) {
// Проверяем, не установлены ли уже методы для данного типа устройства
if (!isset($type_methods[$devices[$i]['TYPE']])) {
// Вызывает метод getAllMethods с аргументом $devices[$i]['TYPE']
$all_methods = $this->getAllMethods($devices[$i]['TYPE']);
// Сохраняем полученные методы в массив
$type_methods[$devices[$i]['TYPE']] = $all_methods;
}
// Выполняет SQL-запрос для выбора всех точек планировщика для устройства с идентификатором $devices[$i]['ID']
$points = SQLSelect("SELECT * FROM devices_scheduler_points WHERE DEVICE_ID=" . (int)$devices[$i]['ID']);
// Начинаем цикл по всем точкам планировщика
foreach ($points as &$point_item) {
// Разбиваем строку дней на массив
$point_days = explode(',', $point_item['SET_DAYS']);
// Инициализируем пустой массив для хранения названий дней
$point_days_title = array();
// Начинаем цикл по всем дням недели
foreach ($days as $k => $v) {
// Проверяем, присутствует ли день в массиве дней точки
if (in_array($v['VALUE'], $point_days)) {
// Если да, добавляем название дня в массив
$point_days_title[] = $v['TITLE'];
}
}
// Выполняет SQL-запрос для выбора одного элемента из таблицы security_rules
$rule = SQLSelectOne("SELECT ID FROM security_rules WHERE OBJECT_TYPE='spoint' AND OBJECT_ID=" . $point_item['ID']);
// Проверяем, существует ли правило безопасности для данной точки
if ($rule['ID']) {
// Если да, устанавливаем флаг наличия правила
$point_item['HAS_RULE'] = 1;
}
// Проверяем, есть ли описание для связанного метода
if (isset($type_methods[$devices[$i]['TYPE']][$point_item['LINKED_METHOD']]['DESCRIPTION'])) {
// Если да, заменяем имя метода на его описание
$point_item['LINKED_METHOD'] = $type_methods[$devices[$i]['TYPE']][$point_item['LINKED_METHOD']]['DESCRIPTION'];
}
/*
// Закомментированные строки на гите
// Начинаем цикл по всем методам для отображения
foreach($out['SHOW_METHODS'] as $method) {
// Проверяем, совпадает ли имя метода с именем связанного метода
if ($method['NAME']==$point_item['LINKED_METHOD']) {
// Если да, заменяем имя метода на его описание
$point_item['LINKED_METHOD']=$method['DESCRIPTION'];
// Прерываем цикл
break;
}
}
*/
// Объединяем названия дней в строку, разделяя их запятыми
$point_item['SET_DAYS'] = implode(', ', $point_days_title);
}
// Сохраняем точки планировщика для текущего устройства
$devices[$i]['POINTS'] = $points;
}
// Сохраняем список устройств в вывод
$out['DEVICES'] = $devices;
}