• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/update/update1870/updatesession.php
  • Класс: BitrixImopenlinesUpdateUpdate1870UpdateSession
  • Вызов: UpdateSession::execute
public function execute(array &$result)
{
	$return = false;

	if (Loader::includeModule(self::$moduleId) && Loader::includeModule('im'))
	{
		$params = Option::get(self::$moduleId, self::OPTION_NAME, "");
		$params = ($params !== "" ? @unserialize($params, ['allowed_classes' => false]) : []);
		$params = (is_array($params) ? $params : array());
		if (empty($params))
		{
			$params = [
				"lastId" => 0,
				"number" => 0,
				"count" => SessionCheckTable::getCount([
					'=DATE_NO_ANSWER' => null,
					'!=SESSION.CLOSED' => 'Y',
					'=SESSION.CHAT.AUTHOR_ID' => '0',
					'=SESSION.SEND_NO_ANSWER_TEXT' => 'N',
				]),
			];
		}

		if ($params["count"] > 0)
		{
			$result["title"] = Loc::getMessage("IMOL_SESSION_CONFIG_NO_ANSWER");
			$result["progress"] = 1;
			$result["steps"] = "";
			$result["count"] = $params["count"];

			$cursor = SessionCheckTable::getList([
				'order' => ['ID' => 'ASC'],
				'filter' => [
					'>ID' => $params["lastId"],

					'=DATE_NO_ANSWER' => null,
					'!=SESSION.CLOSED' => 'Y',
					'=SESSION.CHAT.AUTHOR_ID' => '0',
					'=SESSION.SEND_NO_ANSWER_TEXT' => 'N',
				],
				'select' => [
					'ID' => 'SESSION_ID',
					'NO_ANSWER_TIME' => 'SESSION.CONFIG.NO_ANSWER_TIME',
					'DATE_CREATE' => 'SESSION.DATE_CREATE',
				],
				'offset' => 0,
				'limit' => 100
			]);

			$found = false;
			while ($row = $cursor->fetch())
			{
				if(!empty($row['NO_ANSWER_TIME']))
				{
					if(!empty($row['DATE_CREATE']) && $row['DATE_CREATE'] instanceof DateTime)
					{
						$noAnswerTime = $row['DATE_CREATE'];
					}
					else
					{
						$noAnswerTime = new DateTime();
					}

					$noAnswerTime->add($row['NO_ANSWER_TIME'] . ' SECONDS');

					SessionCheckTable::update($row['ID'], ['DATE_NO_ANSWER' => $noAnswerTime]);
				}

				$params["lastId"] = $row['ID'];
				$params["number"]++;
				$found = true;
			}

			if ($found)
			{
				Option::set(self::$moduleId, self::OPTION_NAME, serialize($params));
				$return = true;
			}

			$result["progress"] = intval($params["number"] * 100/ $params["count"]);
			$result["steps"] = $params["number"];

			if ($found === false)
			{
				Option::delete(self::$moduleId, array("name" => self::OPTION_NAME));
			}
		}
	}

	return $return;
}