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;