• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/contactcenter.php
  • Класс: BitrixIntranetContactCenter
  • Вызов: ContactCenter::imopenlinesGetItems
public function imopenlinesGetItems($filter = []): Result
{
	$result = new Result();
	$module = 'imopenlines';
	$itemsList = array();

	if (!Loader::includeModule($module))
	{
		$result->addError(new Error(Loc::getMessage('CONTACT_CENTER_ERROR_MODULE_NOT_LOADED', ['#MODULE_ID' => $module]), self::CC_MODULE_NOT_LOADED));
	}
	elseif (!Loader::includeModule('imconnector'))
	{
		$result->addError(new Error(Loc::getMessage('CONTACT_CENTER_ERROR_MODULE_NOT_LOADED', ['#MODULE_ID' => 'imconnector']), self::CC_MODULE_NOT_LOADED));
	}
	else
	{
		//For whole list of botframework instances use getListConnector()
		$connectors = ImConnectorConnector::getListConnectorMenu(true);
		$statusList = ImConnectorStatus::getInstanceAll();
		$linkTemplate = Common::getContactCenterPublicFolder() . "connector/";
		$codeMap = ImConnectorConnector::getIconClassMap();
		//TODO: Delete after exiting 92ee8cf838a0
		$cisOnlyConnectors = ['vkgroup', 'vkgrouporder', 'yandex'];
		$cisCheck = $this->cisCheck() && $filter["CHECK_REGION"] !== "N";
		//TODO: End
		$configList = $this->getImopenlinesConfigList();

		foreach ($connectors as $code => $connector)
		{
			//TODO: Delete after exiting 92ee8cf838a0
			if ($cisCheck && in_array($code, $cisOnlyConnectors))
			{
				continue;
			}
			//TODO: End

			$selected = false;
			$selectedOrder = false;
			$connectionInfoHelperLimit = false;

			if (!empty($statusList[$code]))
			{
				foreach ($statusList[$code] as $lineId => $status)
				{
					if (($status instanceof ImConnectorStatus))
					{
						if ($status->isStatus())
						{
							$selected = true;
							$connector['link'] = CUtil::JSEscape( $linkTemplate . '?ID=' . $code . '&LINE=' . $lineId);

							if ($code !== 'vkgroup')
							{
								break;
							}
						}

						if (
							$code === 'vkgroup'
							&& !empty($status->getData())
						)
						{
							$data = $status->getData();
							if ($data["get_order_messages"] === 'Y')
							{
								$selectedOrder = true;
							}
						}
					}
				}
			}

			if(
				$selected === false
				&& ImConnectorLimit::canUseConnector($code) !== true)
			{
				$connectionInfoHelperLimit = ImConnectorLimit::getIdInfoHelperConnector($code);
			}

			$isAddItemToList = $this->isAddItemToList($filter["ACTIVE"] ?? null, $selected);

			if ($isAddItemToList)
			{
				$itemsList[$code] = [
					"NAME" => $connector["name"],
					"SELECTED" => $selected,
					"CONNECTION_INFO_HELPER_LIMIT" => $connectionInfoHelperLimit,
					"LOGO_CLASS" => "ui-icon ui-icon-service-" . $codeMap[$code]
				];

				$link = CUtil::JSEscape( $linkTemplate . "?ID=" . $code);
				if (empty($connector["link"]))
				{
					$itemsList[$code]["LINK"] = $link;
				}
				else
				{
					$itemsList[$code]["LIST"] =  $this->getConnectorListItem($code, $configList, $statusList);
					if (empty($itemsList[$code]["LIST"]))
					{
						$itemsList[$code]["LINK"] = $link;
					}
				}

				if ($code === "vkgroup")
				{
					$isAddItemToList = $this->isAddItemToList($filter["ACTIVE"] ?? null, $selectedOrder);

					//Hack for vkgroup order
					if ($isAddItemToList)
					{
						$uri = new Uri($link);
						$uri->addParams(array("group_orders" => "Y"));
						$itemsList["vkgrouporder"] = array(
							"NAME" => Loc::getMessage("CONTACT_CENTER_IMOPENLINES_VK_ORDER"),
							"LINK" => CUtil::JSEscape($uri->getUri()),
							"SELECTED" => $selectedOrder,
							"CONNECTION_INFO_HELPER_LIMIT" => false,
							"LOGO_CLASS" => "ui-icon ui-icon-service-" . $codeMap["vkgrouporder"]
						);
					}
				}
				if ($code === BitrixImConnectorLibrary::ID_NOTIFICATIONS_CONNECTOR
					&& Loader::includeModule('notifications')
					&& class_exists(Settings::class)
				)
				{
					$crmPaymentStatus = Settings::getScenarioAvailability(Settings::SCENARIO_CRM_PAYMENT);
					if ($crmPaymentStatus === FeatureStatus::UNAVAILABLE)
					{
						unset($itemsList[$code]);
					}
					else
					{
						if (!empty($itemsList[$code]["LIST"]))
						{
							$uri = new Uri($link);
							$uri->addParams(["LINE" => BitrixNotificationsIntegrationImConnector::getLineId()]);
							$link = $uri->getUri();

							unset($itemsList[$code]["LIST"]);
							$itemsList[$code]["LINK"] = CUtil::JSEscape($link);
						}
						$itemsList[$code]["SELECTED"] = Settings::isScenarioEnabled(Settings::SCENARIO_CRM_PAYMENT);
					}

					$virtualWhatsAppStatus = Settings::getScenarioAvailability(Settings::SCENARIO_VIRTUAL_WHATSAPP);
					if ($virtualWhatsAppStatus !== FeatureStatus::UNAVAILABLE)
					{
						$infoHelperCode = $virtualWhatsAppStatus === FeatureStatus::LIMITED
							? Limit::getInfoHelperCodeForScenario(Settings::SCENARIO_VIRTUAL_WHATSAPP)
							: false
						;
						$uri = new Uri($link);
						$uri->addParams(["scenario" => Settings::SCENARIO_VIRTUAL_WHATSAPP]);
						$itemsList["virtual_whatsapp"] = [
							"NAME" => Loc::getMessage("CONTACT_CENTER_IMOPENLINES_NOTIFICATION_VIRTUAL_WA"),
							"LINK" => CUtil::JSEscape($uri->getUri()),
							"SELECTED" => Settings::isScenarioEnabled(Settings::SCENARIO_VIRTUAL_WHATSAPP),
							"CONNECTION_INFO_HELPER_LIMIT" => $infoHelperCode,
							"LOGO_CLASS" => "ui-icon ui-icon-service-" . $codeMap["notifications_virtual_wa"]
						];
					}

					if (Settings::getScenarioAvailability(Settings::SCENARIO_REVERSE_WHATSAPP) !== FeatureStatus::UNAVAILABLE)
					{
						$uri = new Uri($link);
						$uri->addParams(["scenario" => Settings::SCENARIO_REVERSE_WHATSAPP]);
						$itemsList["reverse_whatsapp"] = [
							"NAME" => Loc::getMessage("CONTACT_CENTER_IMOPENLINES_NOTIFICATION_REVERSE_WA"),
							"LINK" => CUtil::JSEscape($uri->getUri()),
							"SELECTED" => Settings::isScenarioEnabled(Settings::SCENARIO_REVERSE_WHATSAPP),
							"CONNECTION_INFO_HELPER_LIMIT" => false,
							"LOGO_CLASS" => "ui-icon ui-icon-service-" . $codeMap["notifications_reverse_wa"]
						];
					}
				}
			}
		}
	}
	$this->getKufarItem($itemsList);

	$result->setData($itemsList);

	return $result;
}