• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/controller/session/groupactions.php
  • Класс: BitrixImOpenLinesControllerSessionGroupActions
  • Вызов: GroupActions::transferAction
public function transferAction(array $fields): array
{
	$result = [];

	$this->startTimer();

	// from previous step
	if (isset($fields['totalItems']))
	{
		$this->declareTotalItems((int)$fields['totalItems']);
	}
	if (isset($fields['processedItems']))
	{
		$this->declareProcessedItems((int)$fields['processedItems']);
	}

	$transferId = $this->getValidIdTransfer($fields['transferId']);

	if (!empty($transferId))
	{
		$sessions = $this->getAccessSession($fields);

		// from previous step
		if (isset($fields['totalItems']))
		{
			$this->declareTotalItems((int)$fields['totalItems']);
		}
		else
		{
			$this->declareTotalItems(count($sessions));
		}

		if (!empty($sessions))
		{
			$currentUserId = SecurityHelper::getCurrentUserId();

			foreach ($sessions as $session)
			{
				$chat = new Chat($session['CHAT_ID']);

				$resultTransfer = $chat->transfer([
					'FROM' => $currentUserId,
					'TO' => $transferId
				]);

				if ($resultTransfer === true)
				{
					if (mb_substr($transferId, 0, 5) == 'queue')
					{
						CUserCounter::Increment($currentUserId, 'imopenlines_transfer_count_' . mb_substr($transferId, 5));
					}

					$result[] = $session['ID'];
				}

				if ($this->hasTimeLimitReached())
				{
					break;
				}
			}
		}
	}

	$this->incrementProcessedItems(count($result));

	if (!$this->hasTimeLimitReached() || empty($sessions))
	{
		$this->declareProcessDone();
	}

	return $this->preformProcessAnswer([
		'sessions' => $result,
	]);
}