А как бы эту функцию запихать, например, в сценарий systemMaintenance. Поможет избываться от пустых линков в дальнейшем? Как думаете?А ещё можно пользоваться штатной функцией removeLinkedProperty($object, $property, $module)
Как подчистить базу от линков (linked to) в свойствах объекта
Модератор: immortal
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Как подчистить базу от линков (linked to) в свойствах объекта
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Как подчистить базу от линков (linked to) в свойствах объекта
Или прямо в startup_maintenance.php вставить:
Код: Выделить всё
// CHECKING DATA
$tables = array('commands' => 'commands', 'owproperties' => 'onewire', 'snmpproperties' => 'snmpdevices', 'zwave_properties' => 'zwave', 'mqtt' => 'mqtt', 'modbusdevices' => 'modbus');
$value_ids = array();
foreach ($tables as $k => $v) {
$sqlQuery = "SELECT *\n FROM {$k}\n WHERE LINKED_OBJECT != ''\n AND LINKED_PROPERTY != ''";
$data = SQLSelect($sqlQuery);
$total = count($data);
for ($i = 0; $i < $total; $i++) {
$module = $v;
$property = $data[$i]['LINKED_OBJECT'] . '.' . $data[$i]['LINKED_PROPERTY'];
if (!$value_ids[$property]) {
$value_ids[$property] = getValueIdByName($data[$i]['LINKED_OBJECT'], $data[$i]['LINKED_PROPERTY']);
}
if ($value_ids[$property]) {
$sqlQuery = "SELECT *\n FROM pvalues\n WHERE ID = " . (int) $value_ids[$property];
$value = SQLSelectOne($sqlQuery);
if (!$value['LINKED_MODULES']) {
$tmp = array();
} else {
$tmp = explode(',', $value['LINKED_MODULES']);
}
if (!in_array($v, $tmp)) {
echo "{$property} adding linked" . PHP_EOL;
$tmp[] = $v;
$value['LINKED_MODULES'] = implode(',', $tmp);
SQLUpdate('pvalues', $value);
}
}
}
}
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Как подчистить базу от линков (linked to) в свойствах объекта
c:\_majordomo\htdocs\lib\objects.class.php
Код: Выделить всё
/**
* Summary of removeLinkedProperty
* @param mixed $object Object
* @param mixed $property Property
* @param mixed $module Module
* @return int
*/
function removeLinkedProperty($object, $property, $module)
{
$sqlQuery = "SELECT *
FROM pvalues
WHERE ID = '" . getValueIdByName($object, $property) . "'";
$value = SQLSelectOne($sqlQuery);
if ($value['ID'])
{
if (!$value['LINKED_MODULES'])
{
$tmp = array();
}
else
{
$tmp = explode(',', $value['LINKED_MODULES']);
}
if (in_array($module, $tmp))
{
$total = count($tmp);
$res = array();
for ($i = 0; $i < $total; $i++)
{
if ($tmp[$i] != $module)
{
$res[] = $tmp[$i];
}
}
$tmp = $res;
$value['LINKED_MODULES'] = implode(',', $tmp);
SQLUpdate('pvalues', $value);
}
}
else
{
return 0;
}
}
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Как подчистить базу от линков (linked to) в свойствах объекта
Баг. Но не системы, а конкретных модулей. Модуль обязан следить за привязкой/отвязкой свойств и проставлять/удалять этот флаг линка.
Мои модули таким не страдают. По остальным нужно отписывать авторам.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Как подчистить базу от линков (linked to) в свойствах объекта
Хотите сказать модуль MQTT от Сергея обладает таким багом?
- tarasfrompir
- Сообщения: 3216
- Зарегистрирован: Ср мар 02, 2016 8:18 pm
- Откуда: Украина Пирятин
- Благодарил (а): 223 раза
- Поблагодарили: 815 раз
Re: Как подчистить базу от линков (linked to) в свойствах объекта
Ты поройся и будеш удивлен....
Спасибо нам ПОМОЖЕТ..!
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Как подчистить базу от линков (linked to) в свойствах объекта
Не буду, верю. Подскажи лучше, как вывести эти линки. Xor писал про removeLinkedProperty, как её использовать? Или прямо в startup_maintenance.php вставить то, что выше писал
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Как подчистить базу от линков (linked to) в свойствах объекта
Все идет именно к этому. )
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Как подчистить базу от линков (linked to) в свойствах объекта
Вызывается с параметрами - Имя объекта, Имя свойства, Системное имя модуля, от которого нужно отвязать.
Код: Выделить всё
removeLinkedProperty('Имя_объекта', 'Имя_свойства', 'Системное_имя_модуля');
- Рейтинг: 2.33%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram