• Модуль: 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;
}