- Модуль: 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;
}