• Модуль: rest
  • Путь к файлу: ~/bitrix/modules/rest/lib/engine/access.php
  • Класс: BitrixRestEngineAccess
  • Вызов: Access::getHelperCode
static function getHelperCode($action = '', $entityType = '', $entityData = []) : string
{
	if ($action === static::ACTION_BUY)
	{
		return 'limit_subscription_market_trial_access';
	}

	if ($entityType === static::ENTITY_TYPE_APP && !is_array($entityData))
	{
		$entityData = AppTable::getByClientId($entityData);
	}

	$code = '';
	$dateFinish = Client::getSubscriptionFinalDate();
	$entity = static::getActiveEntity();
	$maxCount = static::getAvailableCount();
	$isB24 = ModuleManager::isModuleInstalled('bitrix24') && Loader::includeModule('bitrix24');
	$isSubscriptionFinished = $dateFinish && $dateFinish < (new Date());
	$isSubscriptionAccess = Client::isSubscriptionAccess();
	$isSubscriptionDemoAvailable = Client::isSubscriptionDemoAvailable() && !$dateFinish;
	$isSubscriptionAvailable = Client::isSubscriptionAvailable();
	$canBuySubscription = Client::canBuySubscription();
	$isDemoSubscription = Client::isSubscriptionDemo();
	$isCanInstallInDemo = true;
	if (
		!empty($entityData['HOLD_INSTALL_BY_TRIAL'])
		&& $entityData['HOLD_INSTALL_BY_TRIAL'] === 'Y'
	)
	{
		$isCanInstallInDemo = false;
	}

	$license = $isB24 ? CBitrix24::getLicenseFamily() : '';
	$isDemo = $license === 'demo';
	$isMinLicense = $isB24 && mb_strpos($license, 'project') === 0;
	$isMaxLicense = $isB24 && ($license === 'ent' || $license === 'pro' || mb_strpos($license, 'company') === 0);

	$isMaxApplication = false;
	if ($maxCount >= 0 && $entity[static::ENTITY_COUNT] >= $maxCount)
	{
		$isMaxApplication = true;
	}

	$isMaxApplicationDemo = false;
	if ($entity[static::ENTITY_COUNT] >= static::DEFAULT_AVAILABLE_COUNT_DEMO)
	{
		$isMaxApplicationDemo = true;
	}

	$hasPaidApplication = false;
	if (
		$entity[static::ENTITY_TYPE_APP_STATUS][AppTable::STATUS_PAID] > 0
		|| $entity[static::ENTITY_TYPE_APP_STATUS][AppTable::STATUS_SUBSCRIPTION] > 0
	)
	{
		$hasPaidApplication = true;
	}

	$isFreeEntity = false;
	if ($entityType === static::ENTITY_TYPE_INTEGRATION || $entityType === static::ENTITY_TYPE_AP_CONNECT)
	{
		$isFreeEntity = true;
	}
	elseif (!empty($entityData))
	{
		if (
			$entityData['ID'] > 0
			&& (isset($entityData['ACTIVE']) && $entityData['ACTIVE'])
			&& (
				$entityData['STATUS'] === AppTable::STATUS_FREE
				|| $entityData['STATUS'] === AppTable::STATUS_LOCAL
			)
		)
		{
			$isFreeEntity = true;
		}
		elseif (
			(
			!isset($entityData['ACTIVE'])
			|| !$entityData['ACTIVE']
			)
			&& !(
				$entityData['BY_SUBSCRIPTION'] === 'Y'
				|| ($entityData['FREE'] === 'N' && !empty($entityData['PRICE']))
			)
		)
		{
			$isFreeEntity = true;
		}
	}

	$isUsedDemoLicense = false;
	if ($isB24 && (int) Option::get('bitrix24', 'DEMO_START', 0) > 0)
	{
		$isUsedDemoLicense = true;
	}

	if (!static::isActiveRules())
	{
		if (
			!empty($entityData)
			&& (
				$entityData['BY_SUBSCRIPTION'] === 'Y'
				|| ($entityData['ID'] > 0 && $entityData['STATUS'] === AppTable::STATUS_SUBSCRIPTION)
			)
		)
		{
			if ($isSubscriptionDemoAvailable)
			{
				// activate demo subscription
				$code = 'limit_subscription_market_access';
			}
			elseif ($isB24 && $isDemo)
			{
				// choose license with subscription
				$code = 'limit_subscription_market_tarifwithmarket';
			}
			else
			{
				// choose subscription
				$code = 'limit_subscription_market_marketpaid';
			}
		}
	}
	elseif (!$isSubscriptionAccess)
	{
		if ($isMinLicense)
		{
			if ($isUsedDemoLicense)
			{
				$code = 'limit_free_rest_hold_no_demo';
			}
			elseif ($entityType === static::ENTITY_TYPE_AP_CONNECT)
			{
				$code = 'limit_market_bus';
			}
			else
			{
				$code = 'limit_free_rest_hold';
			}
		}
	}
	elseif (!static::isAvailable())
	{
		if ($hasPaidApplication || !$isFreeEntity)
		{
			if ($isSubscriptionDemoAvailable)
			{
				// activate demo subscription
				$code = 'limit_subscription_market_access';
			}
			elseif (!$isB24)
			{
				// choose subscription
				$code = 'plus_need_trial';
			}
			else
			{
				// choose license with subscription
				$code = 'limit_subscription_market_tarifwithmarket';
				if ($action === static::ACTION_OPEN)
				{
					$code = 'installed_plus_buy_license_with_plus';
				}
			}
		}
		elseif ($isB24 && !$isUsedDemoLicense)
		{
			// activate demo license
			if ($entityType === static::ENTITY_TYPE_AP_CONNECT)
			{
				$code = 'limit_market_bus';
			}
			else
			{
				$code = 'limit_free_rest_hold';
			}
		}
		elseif ($isB24 && !$isMaxApplicationDemo)
		{
			// choose license
			$code = 'limit_free_rest_hold_no_demo';
		}
		elseif ($isSubscriptionDemoAvailable)
		{
			// activate demo subscription
			$code = 'limit_subscription_market_marketpaid';
		}
		elseif ($isB24 && $isSubscriptionAccess)
		{
			// choose license with subscription
			$code = 'limit_subscription_market_tarifwithmarket';
			if ($action === static::ACTION_OPEN)
			{
				$code = 'limit_free_apps_buy_license_with_plus';
			}
		}
		elseif (!$isB24 && $isSubscriptionAccess)
		{
			// choose subscription
			$code = 'plus_need_trial';
		}
	}
	elseif ($isB24 && !$isDemo && $isMaxApplication && $isFreeEntity && !$isMaxLicense)
	{
		if (!$isUsedDemoLicense)
		{
			// activate demo license
			if ($entityType === static::ENTITY_TYPE_AP_CONNECT)
			{
				$code = 'limit_market_bus';
			}
			else
			{
				$code = 'limit_free_apps_need_demo';
			}
		}
		else
		{
			// choose license
			$code = 'limit_free_apps_buy_license';
		}
	}
	elseif (
		$isSubscriptionDemoAvailable
		&& $isCanInstallInDemo
		&& ($hasPaidApplication || $isMaxApplication || !$isFreeEntity)
	)
	{
		if (!$isFreeEntity)
		{
			// activate demo subscription
			$code = 'limit_subscription_market_access_buy_marketplus';
		}
		elseif ($isB24 && $isDemo)
		{
			// activate demo subscription
			$code = 'limit_subscription_market_marketpaid';
		}
		else
		{
			// activate demo subscription
			$code = 'limit_subscription_market_access';
		}
	}
	elseif ($isDemoSubscription && !$isCanInstallInDemo)
	{
		// only paid subscription app
		$code = 'subscription_market_paid_access';
	}
	elseif ($canBuySubscription)
	{
		if ($isSubscriptionFinished)
		{
			// choose subscription
			$code = 'limit_subscription_market_access_buy_marketplus';
		}
		else
		{
			// choose new subscription
			$code = 'plus_need_trial';
		}
	}
	elseif ($isB24 && $isDemo)
	{
		if (!$isSubscriptionDemoAvailable)
		{
			// choose license with subscription
			$code = 'limit_subscription_market_tarifwithmarket';
		}
		else
		{
			// activate demo subscription
			$code = 'limit_subscription_market_access';
		}
	}
	elseif (!$isSubscriptionAvailable)
	{
		$code = 'limit_free_rest_hold_no_demo';
	}

	return $code;
}