Modules/devices/devices manage groups inc php

Материал из MajorDoMo инфо


ᐂ В корневой раздел ᐃ В директорию расположения файла

<?php

// Получение значения параметра 'id' из запроса
$id = gr('id');

// Получение значения параметра 'delete_id' из запроса, преобразование его в целое число
$delete_id = gr('delete_id','int');
// Если 'delete_id' не пусто, выполняем удаление группы устройств
if ($delete_id) {
    // Выборка группы устройств по ID
    $rec=SQLSelectOne("SELECT * FROM devices_groups WHERE ID=".(int)$delete_id);
    // Формирование названия свойства для объектов группы
    $property_title='group'.$rec['SYS_NAME'];
    // Получение объектов, имеющих свойство с названием 'property_title'
    $objects = getObjectsByProperty($property_title);
    // Подсчет количества объектов
    $total = count($objects);
    // Цикл по объектам для удаления связанных свойств и значений
    for($i=0;$i<$total;$i++) {
        // Получение ID объекта
        $object_id=gg($objects[$i].'.object_id');
        // Выборка ID свойства объекта
        $property_id=current(SQLSelectOne("SELECT ID FROM properties WHERE OBJECT_ID=".(int)$object_id." AND TITLE='".DBSafe($property_title)."'"));
        // Если свойство найдено, удаляем его значения и само свойство
        if ($property_id) {
            SQLExec("DELETE FROM pvalues WHERE PROPERTY_ID=".$property_id." AND OBJECT_ID=".$object_id);
            SQLExec("DELETE FROM properties WHERE ID=".$property_id);
        }
    }
    // Удаление группы устройств
    SQLExec("DELETE FROM devices_groups WHERE ID=".$rec['ID']);
    // Очистка кэша значений
    SQLTruncateTable('cached_values');
    // Обновление объектов группы
    $this->updateGroupObjects();
    // Перенаправление на страницу с текущим режимом просмотра
    $this->redirect("?view_mode=".$this->view_mode);
}

// Проверяем, не пусто ли значение 'id', чтобы определить, нужно ли выполнять обновление или отображение информации о группе устройств
if ($id) {
    // Выполняем SQL-запрос для выбора группы устройств по ID, преобразуя ID в целое число для безопасности
    $rec=SQLSelectOne("SELECT * FROM devices_groups WHERE ID=".(int)$id);
    // Проверяем, является ли текущий режим обновлением, чтобы выполнить обновление группы
    if ($this->mode=='update') {
        // Инициализируем переменную $ok значением 1, предполагая, что все данные корректны
        $ok=1;
        // Получаем новое значение названия группы из запроса
        $rec['TITLE']=gr('title');
        // Проверяем, не пусто ли новое значение названия группы
        if (!$rec['TITLE']) {
            // Если название пустое, устанавливаем $ok в 0 и добавляем ошибку в вывод
            $ok=0;
            $out['ERR_TITLE']=1;
        }
        // Очищаем системное имя группы от недопустимых символов и преобразуем его в формат, подходящий для использования в качестве имени
        $rec['SYS_NAME']=trim(preg_replace('/\W/','',gr('sys_name')));
        
// Обрабатываем типы устройств, применяемых к группе, преобразуя массив типов в строку, разделенную запятыми
// Объявляем глобальную переменную $types, которая содержит типы устройств
global $types;
// Проверяем, является ли переменная $types массивом
if (is_array($types)) {
    // Если да, то преобразуем массив в строку, разделяя элементы запятыми
    $rec['APPLY_TYPES']=implode(',',$types);
} else {
    // Если переменная $types не является массивом, устанавливаем значение 'APPLY_TYPES' как пустую строку
    $rec['APPLY_TYPES']='';
}
        // Проверяем, все ли данные корректны, и если да, то обновляем или добавляем группу
        if ($ok) {
            // Если ID группы уже существует, обновляем группу
            if ($rec['ID']) {
                SQLUpdate('devices_groups',$rec);
            } else {
                // Если ID группы не существует, добавляем новую группу и получаем ее ID
                $rec['ID']=SQLInsert('devices_groups',$rec);
            }

            // Если системное имя группы не задано, генерируем его на основе ID группы
            if (!$rec['SYS_NAME']) {
                $rec['SYS_NAME']='Num'.$rec['ID'];
                SQLUpdate('devices_groups',$rec);
            }
            // Вызываем метод для обновления объектов группы
            $this->updateGroupObjects();
            // Перенаправляем пользователя на страницу с текущим режимом просмотра
            $this->redirect("?view_mode=".$this->view_mode);
        }
    }

    // Если группа существует (т.е. ID группы не пусто), выводим ее данные
    if ($rec['ID']) {
        // Выводим данные группы в формате хеша
        outHash($rec,$out);
    }

    // Инициализируем массив для типов устройств, применяемых к группе
    $types=array();

    // Проверяем, не пусто ли значение типов устройств, применяемых к группе
    if ($rec['APPLY_TYPES']!='') {
        // Если значение не пусто, разбиваем строку на массив типов
        $applied=explode(',',$rec['APPLY_TYPES']);
    } else {
        // Если значение пусто, инициализируем массив как пустой
        $applied=array();
    }
    
    // Проходим по всем типам устройств, определенным в системе
    foreach($this->device_types as $k=>$v) {
        // Пропускаем типы устройств без названия
        if (!$v['TITLE']) continue;
        // Создаем массив с информацией о типе устройства
        $type_rec=array('NAME'=>$k,'TITLE'=>$v['TITLE']);
        // Проверяем, применяется ли текущий тип устройства к группе
        if (in_array($k,$applied)) {
            // Если тип применяется, устанавливаем флаг SELECTED
            $type_rec['SELECTED']=1;
        }
        // Добавляем массив с информацией о типе устройства в массив типов
        $types[]=$type_rec;
    }
    // Добавляем массив типов устройств в вывод
    $out['TYPES']=$types;
    
} else {
    // Если 'id' пусто, выводим список всех групп устройств
    $groups=SQLSelect("SELECT * FROM devices_groups ORDER BY TITLE");
    // Проходим по каждой группе в списке
    foreach($groups as &$group) {
        // Получаем объект группы по системному имени
        $object_rec=getObject('group'.$group['SYS_NAME']);
        // Проверяем, существует ли объект группы
        if ($object_rec->object_title) {
            // Если объект существует, добавляем его название в данные группы
            $group['OBJECT_TITLE']=$object_rec->object_title;
        }
    }
    // Добавляем список групп устройств в вывод
    $out['GROUPS']=$groups;
}

// Добавляем ID группы в вывод
$out['ID']=$id;