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