- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/config.php
- Класс: BitrixImOpenLinesConfig
- Вызов: Config::update
public function update($configId, array $params = []): Result
{
$result = new Result();
$fields = $this->prepareFields($params, self::MODE_UPDATE);
$orm = ModelConfigTable::getById($configId);
if ($config = $orm->fetch())
{
if (isset($params['QUEUE']))
{
if(QueueManager::validateQueueFields($params['QUEUE']) === false)
{
$result->addError(new Error(
Loc::getMessage('IMOL_ERROR_UPDATE_NO_VALID_QUEUE'),
'IMOL_ERROR_UPDATE_NO_VALID_QUEUE',
__METHOD__,
['queue' => $params['QUEUE']]
));
}
elseif(
empty($params['QUEUE'])
|| !is_array($params['QUEUE'])
)
{
$result->addError(new Error(
Loc::getMessage('IMOL_ERROR_UPDATE_EMPTY_QUEUE'),
'IMOL_ERROR_UPDATE_EMPTY_QUEUE',
__METHOD__
));
}
elseif(QueueManager::isEmptyQueueFields($params['QUEUE']) === true)
{
$result->addError(new Error(
Loc::getMessage('IMOL_ERROR_UPDATE_EMPTY_DEPARTMENT_QUEUE'),
'IMOL_ERROR_UPDATE_EMPTY_DEPARTMENT_QUEUE',
__METHOD__,
['queue' => $params['QUEUE']]
));
}
}
if($result->isSuccess())
{
if (!isset($params['SKIP_MODIFY_MARK']))
{
$fields['DATE_MODIFY'] = new DateTime();
if ($this->userId)
{
$fields['MODIFY_USER_ID'] = $this->userId;
}
}
$resultConfigTableUpdate = ModelConfigTable::update($configId, $fields);
if($resultConfigTableUpdate->isSuccess())
{
if (
isset($fields['ACTIVE'])
&& $fields['ACTIVE'] !== $config['ACTIVE']
)
{
$eventData = [
'line' => $configId,
'active' => $fields['ACTIVE']
];
$event = new MainEvent('imopenlines', self::EVENT_AFTER_IMOPENLINE_ACTIVE_CHANGE, $eventData);
$event->send();
}
if (
isset($fields['QUEUE_TYPE'])
&& $fields['QUEUE_TYPE'] !== $config['QUEUE_TYPE']
)
{
$eventData = [
'line' => $configId,
'typeBefore' => $config['QUEUE_TYPE'],
'typeAfter' => $fields['QUEUE_TYPE']
];
$event = new MainEvent('imopenlines', self::EVENT_IMOPENLINE_CHANGE_QUEUE_TYPE, $eventData);
$event->send();
}
if(
isset($params['DEFAULT_OPERATOR_DATA'])
&& !empty($config['DEFAULT_OPERATOR_DATA']['AVATAR_ID'])
&& (
empty($params['DEFAULT_OPERATOR_DATA']['AVATAR_ID'])
|| $config['DEFAULT_OPERATOR_DATA']['AVATAR_ID'] != $params['DEFAULT_OPERATOR_DATA']['AVATAR_ID']
)
)
{
CFile::Delete($config['DEFAULT_OPERATOR_DATA']['AVATAR_ID']);
}
if (
isset($params['QUEUE'])
&& is_array($params['QUEUE'])
)
{
if(!isset($params['QUEUE_USERS_FIELDS']))
{
$params['QUEUE_USERS_FIELDS'] = false;
}
$queueManager = new QueueManager($configId);
$queueManager->compatibleUpdate($params['QUEUE'], $params['QUEUE_USERS_FIELDS']);
}
if (isset($fields['QUICK_ANSWERS_IBLOCK_ID']))
{
if(
$config['QUICK_ANSWERS_IBLOCK_ID'] != $fields['QUICK_ANSWERS_IBLOCK_ID']
&& $config['QUICK_ANSWERS_IBLOCK_ID'] > 0
)
{
ListsDataManager::updateIblockRights($config['QUICK_ANSWERS_IBLOCK_ID']);
}
if($fields['QUICK_ANSWERS_IBLOCK_ID'] > 0)
{
ListsDataManager::updateIblockRights($fields['QUICK_ANSWERS_IBLOCK_ID']);
}
}
$sendUpdate = false;
$sendDelete = false;
$lineName = $config['LINE_NAME'];
$queueType = $config['QUEUE_TYPE'];
if (
isset($fields['ACTIVE'])
&& $config['ACTIVE'] !== $fields['ACTIVE']
)
{
if ($fields['ACTIVE'] === 'Y')
{
$sendUpdate = true;
}
else
{
$sendDelete = true;
}
}
else
{
if (
isset($fields['LINE_NAME'])
&& $config['LINE_NAME'] !== $fields['LINE_NAME']
)
{
$lineName = $fields['LINE_NAME'];
$sendUpdate = true;
}
if (
isset($fields['QUEUE_TYPE'])
&& $config['QUEUE_TYPE'] !== $fields['QUEUE_TYPE']
)
{
$sendUpdate = true;
$queueType = $fields['QUEUE_TYPE'];
}
}
if ($sendUpdate)
{
self::sendUpdateForQueueList([
'ID' => $configId,
'NAME' => $lineName,
'SESSION_PRIORITY' => $fields['SESSION_PRIORITY'] ?? $config['SESSION_PRIORITY'],
'QUEUE_TYPE' => $queueType
]);
}
elseif ($sendDelete)
{
self::sendUpdateForQueueList([
'ID' => $configId,
'ACTION' => 'DELETE',
'SESSION_PRIORITY' => 0
]);
}
}
else
{
$result->addError(new Error(
Loc::getMessage('IMOL_UPDATE_ERROR'),
'IMOL_ERROR_UPDATE_ERROR',
__METHOD__,
['id' => $configId, 'fields' => $fields]
));
}
}
}
else
{
$result->addError(new Error(
Loc::getMessage('IMOL_ERROR_UPDATE_NO_LOAD_LINE'),
'IMOL_ERROR_UPDATE_NO_LOAD_LINE',
__METHOD__,
['idLine' => $configId]
));
}
return $result;
}