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;