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