• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/queue/queue.php
  • Класс: BitrixImOpenLinesQueueQueue
  • Вызов: Queue::sendEventOnBeforeSessionTransfer
static function sendEventOnBeforeSessionTransfer($parameters): array
{
	$result = $parameters['newOperatorQueue'];

	//Event
	$event = new Event('imopenlines', 'OnBeforeSessionTransfer', $parameters);
	$event->send();

	foreach($event->getResults() as $eventResult)
	{
		$errorEvent = false;
		$errorsMessageEvent = [];

		if ((int)$eventResult->getType() === EventResult::SUCCESS)
		{
			$newValues = $eventResult->getParameters();
			if (!empty($newValues['newOperatorQueue']))
			{
				if (!isset($newValues['newOperatorQueue']['RESULT']))
				{
					$errorEvent = true;
					$errorsMessageEvent[] = 'The event handler must pass the value [newOperatorQueue][RESULT]';
				}
				elseif (!is_bool($newValues['newOperatorQueue']['RESULT']))
				{
					$errorEvent = true;
					$errorsMessageEvent[] = '[newOperatorQueue][RESULT] only the bool type is allowed';
				}
				if (!isset($newValues['newOperatorQueue']['OPERATOR_ID']))
				{
					$errorEvent = true;
					$errorsMessageEvent[] = 'The event handler must pass the value [newOperatorQueue][OPERATOR_ID]';
				}
				elseif (
					!is_numeric($newValues['newOperatorQueue']['OPERATOR_ID']) &&
					(
						mb_strpos($newValues['newOperatorQueue']['OPERATOR_ID'], 'queue') !== 0 ||
						!is_numeric(mb_substr($newValues['newOperatorQueue']['OPERATOR_ID'], 5))
					)
				)
				{
					$errorEvent = true;
					$errorsMessageEvent[] = '[newOperatorQueue][OPERATOR_ID] only a number is allowed, including 0 or a number with the "queue" prefix';
				}
				if (!isset($newValues['newOperatorQueue']['OPERATOR_LIST']))
				{
					$errorEvent = true;
					$errorsMessageEvent[] = 'The event handler must pass the value [newOperatorQueue][OPERATOR_LIST]';
				}
				elseif (!is_array($newValues['newOperatorQueue']['OPERATOR_LIST']))
				{
					$errorEvent = true;
					$errorsMessageEvent[] = '[newOperatorQueue][OPERATOR_LIST] only an array is allowed, including an empty array []';
				}
				else
				{
					foreach ($newValues['newOperatorQueue']['OPERATOR_LIST'] as $operator)
					{
						if (empty($operator))
						{
							$errorEvent = true;
							$errorsMessageEvent[] = '[newOperatorQueue][OPERATOR_LIST] each value must not be empty';
						}
						elseif (!is_numeric($operator))
						{
							$errorEvent = true;
							$errorsMessageEvent[] = '[newOperatorQueue][OPERATOR_LIST] each value must be a digit';
						}
					}
				}
				if (!isset($newValues['newOperatorQueue']['DATE_QUEUE']))
				{
					$errorEvent = true;
					$errorsMessageEvent[] = 'The event handler must pass the value [newOperatorQueue][DATE_QUEUE]';
				}
				elseif (
					!($newValues['newOperatorQueue']['DATE_QUEUE'] instanceof DateTime) &&
					!empty($newValues['newOperatorQueue']['DATE_QUEUE'])
				)
				{
					$errorEvent = true;
					$errorsMessageEvent[] = '[newOperatorQueue][DATE_QUEUE] a valid value is only an object of the "BitrixMainTypeDateTime" class or "false"';
				}
				elseif (
					empty($newValues['newOperatorQueue']['DATE_QUEUE'])
					&& empty($newValues['newOperatorQueue']['OPERATOR_ID'])
					&& empty($newValues['newOperatorQueue']['OPERATOR_LIST'])
				)
				{
					$errorEvent = true;
					$errorsMessageEvent[] = '[newOperatorQueue][DATE_QUEUE] if an "empty" value is passed, including "false", then [newOperatorQueue][OPERATOR_ID] or [newOperatorQueue][OPERATOR_LIST] must have non-empty values';
				}
				if (!isset($newValues['newOperatorQueue']['QUEUE_HISTORY']))
				{
					$errorEvent = true;
					$errorsMessageEvent[] = 'The event handler must pass the value [newOperatorQueue][QUEUE_HISTORY]';
				}
				elseif (!is_array($newValues['newOperatorQueue']['QUEUE_HISTORY']))
				{
					$errorEvent = true;
					$errorsMessageEvent[] = '[newOperatorQueue][QUEUE_HISTORY] only an array is allowed, including an empty array []';
				}

				if ($errorEvent === false)
				{
					$result = $newValues['newOperatorQueue'];
				}
			}
			else
			{
				$errorEvent = true;
				$errorsMessageEvent[] = 'The event handler returned an empty "newOperatorQueue" value';
			}
		}
		else
		{
			$errorEvent = true;
			$errorsMessageEvent[] = 'The result of the processing of the event returned with an error';
		}

		if ($errorEvent === true)
		{
			$eventError = new Event('imopenlines', 'OnErrorEventBeforeSessionTransfer',
				[
					'errors' => $errorsMessageEvent,
					'eventResult' => $eventResult
				]);
			$eventError->send();
		}
	}

	return $result;
}