Modules/devices/devices schedule inc php
Материал из MajorDoMo инфо
ᐂ В корневой раздел ᐃ В директорию расположения файла
<?php // Получаем ID точки из запроса $point_id = gr('point_id'); // Если ID точки предоставлен if ($point_id) { // Выбираем точку из базы данных по ID $point = SQLSelectOne("SELECT * FROM devices_scheduler_points WHERE ID=" . (int)$point_id); // Если текущий режим - обновление if ($this->mode == 'update') { // Флаг успешности операции $ok = 1; // Устанавливаем ID устройства $point['DEVICE_ID'] = $rec['ID']; // Получаем связанный метод из запроса $point['LINKED_METHOD'] = gr('linked_method', 'trim'); // Если связанный метод не указан if (!$point['LINKED_METHOD']) { // Устанавливаем ошибку $out['ERR_LINKED_METHOD'] = 1; // Отменяем операцию $ok = 0; } // Получаем значение из запроса $point['VALUE'] = gr('value', 'trim'); // Устанавливаем время $set_time = gr('hour') . ':' . gr('minute'); // Получаем дни недели $set_days = gr('set_days'); // Если дни недели не указаны, устанавливаем все дни недели if (!isset($set_days[0])) { $set_days = array(0, 1, 2, 3, 4, 5, 6); } // Если время и дни недели указаны корректно if (isset($set_days[0]) && preg_match('/^\d+:\d+$/', $set_time)) { // Устанавливаем время $point['SET_TIME'] = $set_time; // Устанавливаем дни недели $point['SET_DAYS'] = implode(',', $set_days); } else { // Отменяем операцию $ok = 0; } // Если все проверки прошли успешно if ($ok) { // Если ID точки не установлен, создаем новую точку if (!$point['ID']) { // Активируем точку $point['ACTIVE'] = 1; // Сохраняем точку в базу данных $point['ID'] = SQLInsert('devices_scheduler_points', $point); } else { // Иначе обновляем существующую точку SQLUpdate('devices_scheduler_points', $point); } // Перенаправляем пользователя на страницу с сообщением об успехе $this->redirect("?id=" . $rec['ID'] . "&view_mode=" . $this->view_mode . "&tab=" . $this->tab . "&ok_msg=" . urlencode(LANG_DATA_SAVED)); } } // Добавляем данные точки в вывод foreach ($point as $k => $v) { $out['POINT_' . $k] = $v; } // Если установлено время if ($point['SET_TIME']) { } // Проверяем, определено ли правило доступа для точки if (checkAccessDefined('spoint', $point_id)) { // Устанавливаем флаг, что правило доступа определено $out['POINT_ACCESS_DEFINED'] = 1; } } // Определяем дни недели $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), ); // Выбираем все точки для устройства $points = SQLSelect("SELECT * FROM devices_scheduler_points WHERE DEVICE_ID=" . (int)$rec['ID']); // Если найдены точки if (isset($points[0]['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']; } } // Находим метод, связанный с точкой 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); // Проверяем, определено ли правило доступа для точки if (checkAccessDefined('spoint', $point_item['ID'])) { // Устанавливаем флаг, что правило доступа определено $point_item['HAS_RULE'] = 1; } } // Добавляем точки в вывод $out['POINTS'] = $points; } // Если запрос на удаление точки if (gr('delete_id', 'int')) { // Удаляем точку из базы данных SQLExec("DELETE FROM devices_scheduler_points WHERE DEVICE_ID=" . $rec['ID'] . " AND ID='" . gr('delete_id', 'int') . "'"); // Перенаправляем пользователя на страницу без сообщения об удалении $this->redirect("?id=" . $rec['ID'] . "&view_mode=" . $this->view_mode . "&tab=" . $this->tab); } // Добавляем дни недели в вывод $out['DAYS'] = $days; // Если установлены дни недели для точки if (isset($point['SET_DAYS']) && $point['SET_DAYS'] != '') { // Разбиваем дни недели на массив $tmp = explode(',', $point['SET_DAYS']); foreach ($out['DAYS'] as &$day) { // Если день недели входит в массив дней точки if (in_array($day['VALUE'], $tmp)) { // Устанавливаем флаг, что день выбран $day['SELECTED'] = 1; } } } // Если установлено время для точки if (isset($point['SET_TIME']) && $point['SET_TIME'] != '') { // Разбиваем время на часы и минуты $tmp = explode(':', $point['SET_TIME']); // Устанавливаем часы $out['HOUR'] = $tmp[0]; // Устанавливаем минуты $out['MINUTE'] = $tmp[1]; } // Генерируем массив часов $hours = array(); for ($i = 0; $i < 24; $i++) { // Добавляем часы в массив $hours[] = array('VALUE' => str_pad($i, 2, '0', STR_PAD_LEFT)); } // Добавляем массив часов в вывод $out['HOURS'] = $hours; // Генерируем массив минут $minutes = array(); for ($i = 0; $i < 60; $i++) { // Добавляем минуты в массив $minutes[] = array('VALUE' => str_pad($i, 2, '0', STR_PAD_LEFT)); } // Добавляем массив минут в вывод $out['MINUTES'] = $minutes; // Закомментированный на гите участок кода /* devices_scheduler_points: ID int(10) unsigned NOT NULL auto_increment - ID: Уникальный идентификатор точки расписания. - Тип данных: int(10) unsigned, что означает целое число без знака, длиной до 10 цифр. - NOT NULL: Поле не может быть пустым. - auto_increment: Значение автоматически увеличивается при добавлении новой записи. devices_scheduler_points: LINKED_METHOD varchar(255) NOT NULL DEFAULT '' - LINKED_METHOD: Связанный метод, который будет вызываться по расписанию. - Тип данных: varchar(255), что означает строку символов длиной до 255 символов. - NOT NULL: Поле не может быть пустым. - DEFAULT '': По умолчанию поле будет пустым. devices_scheduler_points: VALUE varchar(255) NOT NULL DEFAULT '' - VALUE: Значение, которое будет передано в связанный метод. - Тип данных: varchar(255), что означает строку символов длиной до 255 символов. - NOT NULL: Поле не может быть пустым. - DEFAULT '': По умолчанию поле будет пустым. devices_scheduler_points: SET_TIME varchar(50) NOT NULL DEFAULT '' - SET_TIME: Время, когда должен быть вызван связанный метод. - Тип данных: varchar(50), что означает строку символов длиной до 50 символов. - NOT NULL: Поле не может быть пустым. - DEFAULT '': По умолчанию поле будет пустым. devices_scheduler_points: SET_DAYS varchar(50) NOT NULL DEFAULT '' - SET_DAYS: Дни недели, когда должен быть вызван связанный метод. - Тип данных: varchar(50), что означает строку символов длиной до 50 символов. - NOT NULL: Поле не может быть пустым. - DEFAULT '': По умолчанию поле будет пустым. devices_scheduler_points: DEVICE_ID int(10) NOT NULL DEFAULT '0' - DEVICE_ID: Идентификатор устройства, к которому относится точка расписания. - Тип данных: int(10), что означает целое число длиной до 10 цифр. - NOT NULL: Поле не может быть пустым. - DEFAULT '0': По умолчанию поле будет равно 0. devices_scheduler_points: ACTIVE int(3) NOT NULL DEFAULT '1' - ACTIVE: Статус активности точки расписания (1 - активна, 0 - не активна). - Тип данных: int(3), что означает целое число длиной до 3 цифр. - NOT NULL: Поле не может быть пустым. - DEFAULT '1': По умолчанию точка расписания будет активна. devices_scheduler_points: LATEST_RUN datetime - LATEST_RUN: Время последнего выполнения связанного метода. - Тип данных: datetime, что означает дату и время. */