<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://mdminfo.ru/index.php?action=history&amp;feed=atom&amp;title=Modules%2Fdevices%2Fdevices_schedule_inc_php</id>
	<title>Modules/devices/devices schedule inc php - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://mdminfo.ru/index.php?action=history&amp;feed=atom&amp;title=Modules%2Fdevices%2Fdevices_schedule_inc_php"/>
	<link rel="alternate" type="text/html" href="https://mdminfo.ru/index.php?title=Modules/devices/devices_schedule_inc_php&amp;action=history"/>
	<updated>2026-06-02T09:58:08Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://mdminfo.ru/index.php?title=Modules/devices/devices_schedule_inc_php&amp;diff=1975&amp;oldid=prev</id>
		<title>Elmax: + файл devices_schedule.inc.php</title>
		<link rel="alternate" type="text/html" href="https://mdminfo.ru/index.php?title=Modules/devices/devices_schedule_inc_php&amp;diff=1975&amp;oldid=prev"/>
		<updated>2024-03-31T18:02:52Z</updated>

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