- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/config.php
- Класс: BitrixImOpenLinesConfig
- Вызов: Config::updateAllAutomaticMessage
public function updateAllAutomaticMessage($configId, $configs): Result
{
$result = new Result();
$resultData = [
'add' => [],
'update' => [],
'delete' => []
];
$currentIdConfigTasks = [];
$addConfigTasks = [];
$updateConfigTasks = [];
$deleteIdConfigTasks = [];
$configTasks = ConfigAutomaticMessagesTable::getList([
'select' => ['ID'],
'filter' => ['=CONFIG_ID' => $configId],
'order' => ['ID'],
]);
while ($configTask = $configTasks->fetch())
{
$deleteIdConfigTasks[$configTask['ID']] = $currentIdConfigTasks[$configTask['ID']] = $configTask['ID'];
}
foreach ($configs as $config)
{
if(empty($config['ID']))
{
$addConfigTasks[] = [
'ACTIVE' => $config['ACTIVE'],
'CONFIG_ID' => $configId,
'TIME_TASK' => $config['TIME_TASK'],
'MESSAGE' => $config['MESSAGE'],
'TEXT_BUTTON_CLOSE' => $config['TEXT_BUTTON_CLOSE'],
'LONG_TEXT_BUTTON_CLOSE' => $config['LONG_TEXT_BUTTON_CLOSE'],
'AUTOMATIC_TEXT_CLOSE' => $config['AUTOMATIC_TEXT_CLOSE'],
'TEXT_BUTTON_CONTINUE' => $config['TEXT_BUTTON_CONTINUE'],
'LONG_TEXT_BUTTON_CONTINUE' => $config['LONG_TEXT_BUTTON_CONTINUE'],
'AUTOMATIC_TEXT_CONTINUE' => $config['AUTOMATIC_TEXT_CONTINUE'],
'TEXT_BUTTON_NEW' => $config['TEXT_BUTTON_NEW'],
'LONG_TEXT_BUTTON_NEW' => $config['LONG_TEXT_BUTTON_NEW'],
'AUTOMATIC_TEXT_NEW' => $config['AUTOMATIC_TEXT_NEW'],
];
}
elseif(isset($currentIdConfigTasks[$config['ID']]))
{
if(empty($updateConfigTasks[$config['ID']]))
{
$updateConfigTasks[$config['ID']] = [
'ID' => $config['ID'],
'ACTIVE' => $config['ACTIVE'],
'TIME_TASK' => $config['TIME_TASK'],
'MESSAGE' => $config['MESSAGE'],
'TEXT_BUTTON_CLOSE' => $config['TEXT_BUTTON_CLOSE'],
'LONG_TEXT_BUTTON_CLOSE' => $config['LONG_TEXT_BUTTON_CLOSE'],
'AUTOMATIC_TEXT_CLOSE' => $config['AUTOMATIC_TEXT_CLOSE'],
'TEXT_BUTTON_CONTINUE' => $config['TEXT_BUTTON_CONTINUE'],
'LONG_TEXT_BUTTON_CONTINUE' => $config['LONG_TEXT_BUTTON_CONTINUE'],
'AUTOMATIC_TEXT_CONTINUE' => $config['AUTOMATIC_TEXT_CONTINUE'],
'TEXT_BUTTON_NEW' => $config['TEXT_BUTTON_NEW'],
'LONG_TEXT_BUTTON_NEW' => $config['LONG_TEXT_BUTTON_NEW'],
'AUTOMATIC_TEXT_NEW' => $config['AUTOMATIC_TEXT_NEW'],
];
unset($deleteIdConfigTasks[$config['ID']]);
}
else
{
$result->addError(new Error('The input parameters contain tasks with the same ID twice', 'IMOL_CONFIG_ERROR_IDS_MATCH', __METHOD__, ['idConfig' => $configId, 'config' => $config]));
}
}
}
foreach ($addConfigTasks as $configTask)
{
$resultAdd = ConfigAutomaticMessagesTable::add($configTask);
if($resultAdd->isSuccess())
{
$resultData['add'][] = $resultAdd->getId();
}
else
{
$result->addErrors($resultAdd->getErrors());
}
}
foreach ($updateConfigTasks as $configTask)
{
$idTask = $configTask['ID'];
unset($configTask['ID']);
$resultUpdate = ConfigAutomaticMessagesTable::update($idTask, $configTask);
if($resultUpdate->isSuccess())
{
$resultData['update'][] = $idTask;
}
else
{
$result->addErrors($resultUpdate->getErrors());
}
}
foreach ($deleteIdConfigTasks as $idTask)
{
if($this->deleteAutomaticMessage($configId, $idTask))
{
$resultData['delete'][] = $idTask;
}
else
{
$result->addError(new Error('Couldn't delete task', 'IMOL_CONFIG_ERROR_DELETE_TASK', __METHOD__, ['idConfig' => $configId, 'idTask' => $idTask]));
}
}
$result->setData($resultData);
return $result;
}