• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/intranet/bindingmenu.php
  • Класс: Bitrix\Crm\Integration\Intranet\BindingMenu
  • Вызов: BindingMenu::getScriptItems
static function getScriptItems(): array
{
	$items = [];
	if (!Loader::includeModule('bizproc'))
	{
		return $items;
	}

	$marketUrl = null;
	$manifestCode = 'crm_smart_robots';
	if (Loader::includeModule('rest'))
	{
		$marketUrl = \Bitrix\Rest\Marketplace\Url::getConfigurationPlacementUrl($manifestCode);
	}

	$entityList = ['lead', 'deal', 'contact', 'company', 'order', 'smart_invoice'];
	$typesMap = Container::getInstance()->getDynamicTypesMap();
	$typesMap->load([
		'isLoadStages' => false,
		'isLoadCategories' => false,
	]);

	foreach ($typesMap->getTypes() as $type)
	{
		if ($type->getIsAutomationEnabled())
		{
			$entityList[] = strtolower(\CCrmOwnerType::ResolveName($type->getEntityTypeId()));
		}
	}

	foreach ([BindingMenu\SectionCode::SWITCHER, BindingMenu\SectionCode::DETAIL] as $placement)
	{
		foreach ($entityList as $entity)
		{
			if (!Automation\Factory::isScriptAvailable(\CCrmOwnerType::ResolveID($entity)))
			{
				continue;
			}

			$docType = \CCrmBizProcHelper::ResolveDocumentType(\CCrmOwnerType::ResolveID($entity));
			$docTypeParam = '\''.\CUtil::JSEscape(\CBPDocument::signDocumentType($docType)).'\'';
			$placementParam = '\''.\CUtil::JSEscape($placement).'\'';

			$scriptItems = \Bitrix\Bizproc\Script\Manager::getListByDocument($docType);
			$scriptItems = array_slice($scriptItems, 0, 10);
			$sort = 0;
			$scriptItems = array_map(
				function ($item) use (&$sort, $placement, $entity)
				{
					$placementParam = '\''.\CUtil::JSEscape($placement).':'.\CUtil::JSEscape($entity).'\'';
					return [
						'id' => 'script_'.$item['ID'],
						'text' => htmlspecialcharsbx($item['NAME']),
						'onclick' => 'BX.Bizproc.Script.Manager.Instance.startScript('.$item['ID'].", {$placementParam})",
						'sort' => ++$sort,
					];
				},
				$scriptItems
			);

			if ($scriptItems)
			{
				$scriptItems[] = ['delimiter' => true];
			}

			$scriptItems[] = [
				'id' => 'script_list',
				'text' => Loc::getMessage('CRM_INTEGRATION_INTRANET_MENU_SMART_SCRIPT_LIST'),
				'onclick' => "BX.Bizproc.Script.Manager.Instance.showScriptList({$docTypeParam}, '{$manifestCode}')",
				'sort' => 100
			];
			$scriptItems[] = ['delimiter' => true];

			$scriptItems[] = [
				'id' => 'script_create',
				'text' => Loc::getMessage('CRM_INTEGRATION_INTRANET_MENU_SMART_SCRIPT_CREATE'),
				'onclick' => "BX.Bizproc.Script.Manager.Instance.createScript({$docTypeParam}, {$placementParam})",
				'sort' => 101
			];

			if ($marketUrl)
			{
				$scriptItems[] = [
					'id' => 'script_marketplace',
					'text' => Loc::getMessage('CRM_INTEGRATION_INTRANET_MENU_SMART_SCRIPT_MARKETPLACE'),
					'href' => $marketUrl,
					'sort' => 102
				];
			}

			$items[] = [
				'bindings' =>
					[
						$placement => ['include' => [$entity]]
					],
				'items' => [
					[
						'id' => 'script_root',
						'system' => true,
						'text' => Loc::getMessage("CRM_INTEGRATION_INTRANET_MENU_SMART_SCRIPT"),
						'items' => $scriptItems
					],
				]
			];
		}
	}

	return $items;
}