<?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_links_inc_php</id>
	<title>Modules/devices/devices links 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_links_inc_php"/>
	<link rel="alternate" type="text/html" href="https://mdminfo.ru/index.php?title=Modules/devices/devices_links_inc_php&amp;action=history"/>
	<updated>2026-06-02T15:16:15Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://mdminfo.ru/index.php?title=Modules/devices/devices_links_inc_php&amp;diff=1963&amp;oldid=prev</id>
		<title>Elmax: + devices_links.inc.php</title>
		<link rel="alternate" type="text/html" href="https://mdminfo.ru/index.php?title=Modules/devices/devices_links_inc_php&amp;diff=1963&amp;oldid=prev"/>
		<updated>2024-03-30T21:10:47Z</updated>

		<summary type="html">&lt;p&gt;+ devices_links.inc.php&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Modules/devices/devices_links_inc_php | devices_links.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;
// Проверяем, если режим редактирования установлен на 'delete_link'&lt;br /&gt;
if ($this-&amp;gt;edit_mode=='delete_link') {&lt;br /&gt;
    // Объявляем глобальную переменную $link_id&lt;br /&gt;
    global $link_id;&lt;br /&gt;
    // Выполняем SQL-запрос для удаления связанных правил безопасности&lt;br /&gt;
    SQLExec(&amp;quot;DELETE FROM security_rules WHERE OBJECT_TYPE='sdevice' AND OBJECT_ID=&amp;quot;.(int)$link_id);&lt;br /&gt;
    // Выполняем SQL-запрос для удаления связи устройств&lt;br /&gt;
    SQLExec(&amp;quot;DELETE FROM devices_linked WHERE ID=&amp;quot;.(int)$link_id);&lt;br /&gt;
    // Перенаправляем пользователя на страницу с обновленными данными&lt;br /&gt;
    $this-&amp;gt;redirect(&amp;quot;?id=&amp;quot;.$rec['ID'].&amp;quot;&amp;amp;tab=&amp;quot;.$this-&amp;gt;tab.&amp;quot;&amp;amp;view_mode=&amp;quot;.$this-&amp;gt;view_mode);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Проверяем, если режим редактирования установлен на 'edit_link'&lt;br /&gt;
if ($this-&amp;gt;edit_mode=='edit_link') {&lt;br /&gt;
    // Объявляем глобальные переменные $link_name и $link_id&lt;br /&gt;
    global $link_name;&lt;br /&gt;
    global $link_id;&lt;br /&gt;
&lt;br /&gt;
    // Получаем детали связи&lt;br /&gt;
    $link_details=$this-&amp;gt;getLinkDetails($link_name);&lt;br /&gt;
&lt;br /&gt;
    // Выполняем SQL-запрос для получения записи связи&lt;br /&gt;
    $link_rec=SQLSelectOne(&amp;quot;SELECT * FROM devices_linked WHERE ID=&amp;quot;.(int)$link_id);&lt;br /&gt;
    // Проверяем, если запись существует&lt;br /&gt;
    if ($link_rec['ID']) {&lt;br /&gt;
        // Заполняем массив $out данными из записи связи&lt;br /&gt;
        $out['DEVICE2_ID']=$link_rec['DEVICE2_ID'];&lt;br /&gt;
        $out['LINK_ID']=$link_rec['ID'];&lt;br /&gt;
        $out['COMMENT']=$link_rec['COMMENT'];&lt;br /&gt;
        // Десериализуем настройки связи&lt;br /&gt;
        $settings=unserialize($link_rec['LINK_SETTINGS']);&lt;br /&gt;
        // Проверяем, если параметры связи существуют&lt;br /&gt;
        if (is_array($link_details['PARAMS'])) {&lt;br /&gt;
        foreach($link_details['PARAMS'] as &amp;amp;$p) {&lt;br /&gt;
            // Проверяем, если параметр установлен в настройках&lt;br /&gt;
            if (isset($settings[$p['PARAM_NAME']])) {&lt;br /&gt;
                $p['VALUE']=$settings[$p['PARAM_NAME']];&lt;br /&gt;
                // Если тип параметра 'duration', преобразуем его в формат времени&lt;br /&gt;
                if ($p['PARAM_TYPE']=='duration') {&lt;br /&gt;
                    $p['VALUE'] = gmdate(&amp;quot;H:i:s&amp;quot;, $p['VALUE']);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Проверяем, если текущий режим 'update'&lt;br /&gt;
    if ($this-&amp;gt;mode=='update') {&lt;br /&gt;
        $ok=1;&lt;br /&gt;
        // Обновляем данные связи&lt;br /&gt;
        $link_rec['DEVICE1_ID']=$rec['ID'];&lt;br /&gt;
        $link_rec['LINK_TYPE']=$link_name;&lt;br /&gt;
        global $device2_id;&lt;br /&gt;
        $link_rec['DEVICE2_ID']=(int)$device2_id;&lt;br /&gt;
        // Проверяем, если ID второго устройства установлен&lt;br /&gt;
        if (!$link_rec['DEVICE2_ID']) {&lt;br /&gt;
            $ok=0;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        global $comment;&lt;br /&gt;
        $link_rec['COMMENT']=$comment;&lt;br /&gt;
&lt;br /&gt;
        $params=$link_details['PARAMS'];&lt;br /&gt;
&lt;br /&gt;
        $config=array();&lt;br /&gt;
        $total = count($params);&lt;br /&gt;
        // Проходим по всем параметрам связи&lt;br /&gt;
        for ($i = 0; $i &amp;lt; $total; $i++) {&lt;br /&gt;
            // Получаем значение параметра из глобальной переменной&lt;br /&gt;
            $config[$params[$i]['PARAM_NAME']] = gr($params[$i]['PARAM_NAME'].'_value');&lt;br /&gt;
            // Если тип параметра 'duration', преобразуем его в секунды&lt;br /&gt;
            if ($params[$i]['PARAM_TYPE']=='duration' &amp;amp;&amp;amp; preg_match('/(\d+):(\d+):(\d+)/',$config[$params[$i]['PARAM_NAME']],$m)) {&lt;br /&gt;
                $config[$params[$i]['PARAM_NAME']] = $m[1]*60*60+$m[2]*60+$m[3];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        // Сериализуем обновленные настройки связи&lt;br /&gt;
        $link_rec['LINK_SETTINGS']=serialize($config);&lt;br /&gt;
        // Если все в порядке, обновляем запись связи&lt;br /&gt;
        if ($ok) {&lt;br /&gt;
            if ($link_rec['ID']) {&lt;br /&gt;
                SQLUpdate('devices_linked',$link_rec);&lt;br /&gt;
            } else {&lt;br /&gt;
                $link_rec['ID']=SQLInsert('devices_linked',$link_rec);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        // Перенаправляем пользователя на страницу с обновленными данными&lt;br /&gt;
        $this-&amp;gt;redirect(&amp;quot;?id=&amp;quot;.$rec['ID'].&amp;quot;&amp;amp;tab=&amp;quot;.$this-&amp;gt;tab.&amp;quot;&amp;amp;view_mode=&amp;quot;.$this-&amp;gt;view_mode);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Заполняем массив $out деталями связи&lt;br /&gt;
    foreach($link_details as $k=&amp;gt;$v) {&lt;br /&gt;
        $out['LINK_DETAILS_'.$k]=$v;&lt;br /&gt;
    }&lt;br /&gt;
    // Разбиваем классы целей на массив&lt;br /&gt;
    $target_classes=explode(',',$link_details['TARGET_CLASS']);&lt;br /&gt;
    $target_classes=array_map('trim',$target_classes);&lt;br /&gt;
    $second_devices=array();&lt;br /&gt;
&lt;br /&gt;
    // Выполняем SQL-запрос для получения других устройств&lt;br /&gt;
    $other_devices=SQLSelect(&amp;quot;SELECT * FROM devices WHERE ID!=&amp;quot;.(int)$rec['ID'].&amp;quot; ORDER BY TITLE&amp;quot;);&lt;br /&gt;
    $total = count($other_devices);&lt;br /&gt;
    // Проходим по всем другим устройствам&lt;br /&gt;
    for ($i = 0; $i &amp;lt; $total; $i++) {&lt;br /&gt;
        // Получаем детали типа устройства&lt;br /&gt;
        $type_details=$this-&amp;gt;getTypeDetails($other_devices[$i]['TYPE']);&lt;br /&gt;
        // Проверяем, если класс или родительский класс устройства совпадает с целевыми классами&lt;br /&gt;
        if (in_array($type_details['CLASS'],$target_classes) || in_array($type_details['PARENT_CLASS'],$target_classes)) {&lt;br /&gt;
            $second_devices[]=$other_devices[$i];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    // Заполняем массив $out вторыми устройствами&lt;br /&gt;
    $out['SECOND_DEVICES']=$second_devices;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Выполняем SQL-запрос для получения связей устройств&lt;br /&gt;
$links=SQLSelect(&amp;quot;SELECT devices_linked.*, devices.TITLE FROM devices_linked LEFT JOIN devices ON devices.ID=DEVICE2_ID WHERE (DEVICE1_ID=&amp;quot;.(int)$rec['ID'].&amp;quot; OR DEVICE2_ID=&amp;quot;.(int)$rec['ID'].&amp;quot;) ORDER BY ID&amp;quot;);&lt;br /&gt;
// Проверяем, если связи существуют&lt;br /&gt;
if ($links[0]['ID']) {&lt;br /&gt;
    $total = count($links);&lt;br /&gt;
    // Проходим по всем связям&lt;br /&gt;
    for ($i = 0; $i &amp;lt; $total; $i++) {&lt;br /&gt;
        // Получаем запись первого устройства&lt;br /&gt;
        $device1=SQLSelectOne(&amp;quot;SELECT ID, TITLE FROM devices WHERE ID=&amp;quot;.(int)$links[$i]['DEVICE1_ID']);&lt;br /&gt;
        $links[$i]['DEVICE1_TITLE']=$device1['TITLE'];&lt;br /&gt;
        // Проверяем, если настройки связи не пусты&lt;br /&gt;
        if ($links[$i]['LINK_SETTINGS']!='') {&lt;br /&gt;
            // Десериализуем настройки связи&lt;br /&gt;
            $settings=unserialize($links[$i]['LINK_SETTINGS']);&lt;br /&gt;
            $new_settings='';&lt;br /&gt;
            // Проходим по всем настройкам связи&lt;br /&gt;
            foreach($settings as $k=&amp;gt;$v) {&lt;br /&gt;
                // Проверяем, если значение настройки не пустое&lt;br /&gt;
                if ($v=='' || $v=='0') continue;&lt;br /&gt;
                $new_settings.=$k.': &amp;lt;i&amp;gt;'.$v.'&amp;lt;/i&amp;gt;; ';&lt;br /&gt;
            }&lt;br /&gt;
            // Обновляем настройки связи&lt;br /&gt;
            $links[$i]['LINK_SETTINGS']=$new_settings;&lt;br /&gt;
        }&lt;br /&gt;
        // Проверяем, если для связи существует правило безопасности&lt;br /&gt;
        $rule=SQLSelectOne(&amp;quot;SELECT ID FROM security_rules WHERE OBJECT_TYPE='sdevice' AND OBJECT_ID=&amp;quot;. $links[$i]['ID']);&lt;br /&gt;
        if ($rule['ID']) {&lt;br /&gt;
            $links[$i]['HAS_RULE']=1;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    // Заполняем массив $out связями устройств&lt;br /&gt;
    $out['LINKS']=$links;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Получаем доступные связи для типа устройства&lt;br /&gt;
$avail_links=$this-&amp;gt;getTypeLinks($rec['TYPE']);&lt;br /&gt;
// Проверяем, если доступные связи существуют&lt;br /&gt;
if (isset($avail_links[0])) {&lt;br /&gt;
    // Заполняем массив $out доступными связями&lt;br /&gt;
    $out['AVAIL_LINKS']=$avail_links;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elmax</name></author>
	</entry>
</feed>