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; }