• Модуль: market
  • Путь к файлу: ~/bitrix/modules/market/lib/ListTemplates/Installed.php
  • Класс: BitrixMarketListTemplatesInstalled
  • Вызов: Installed::setResult
public function setResult(bool $isAjax = false)
{
	$title = Loc::getMessage('MARKETPLACE_INSTALLED');

	$this->result['TITLE'] = $title;

	global $APPLICATION;
	$APPLICATION->SetTitle($title);

	if(!Loader::includeModule('rest')) {
		die;
	}

	$this->result['ADMIN'] = CRestUtil::isAdmin();

	if(!$this->result['ADMIN']) {
		ShowError(Loc::getMessage('RMI_ACCESS_DENIED'));
		die;
	} else if (!OAuthService::getEngine()->isRegistered()) {
		try {
			OAuthService::register();
			OAuthService::getEngine()->getClient()->getApplicationList();
		} catch(SystemException $e) {
			ShowError($e->getMessage());
			die;
		}

		if (!OAuthService::getEngine()->isRegistered()) {
			ShowError(Loc::getMessage('RMI_ACCESS_DENIED_OAUTH_SERVICE_IS_NOT_REGISTERED'));
			die;
		}
	}

	$this->result['SUBSCRIPTION_BUY_URL'] = Url::getSubscriptionBuyUrl();

	if (!ModuleManager::isModuleInstalled('bitrix24')) {
		$this->result['POPUP_BUY_SUBSCRIPTION_PRIORITY'] = true;
	}

	AppTable::updateAppStatusInfo();
	Client::getNumUpdates();

	$this->result['FILTER_TAGS'] = $this->getFilterTags();

	$request = Context::getCurrent()->getRequest();
	$isFilterUpdates = $request->get('updates') == 'Y' || (isset($this->requestParams['updates']) && $this->requestParams['updates'] == 'Y');
	if ($isFilterUpdates) {
		$this->result['SELECTED_TAG'] = Installed::FILTER_UPDATES;
	}

	$filter = [
		'!=STATUS' => AppTable::STATUS_LOCAL,
		'=ACTIVE' => AppTable::ACTIVE,
	];
	if ((isset($this->filter['tag']) && $this->filter['tag'] == Installed::FILTER_UPDATES) || $isFilterUpdates) {
		$filter['=CODE'] = array_keys(Client::getAvailableUpdate());
	}

	$this->result['CURRENT_APPS_CNT'] = $this->getCountApps($filter);

	$navigation = new PageNavigation('market_installed_nav');
	$navigation->allowAllRecords(false)
		->setPageSize(20)
		->setCurrentPage($this->page)
		->setRecordCount($this->result['CURRENT_APPS_CNT']);

	$this->result['CUR_PAGE'] = $navigation->getCurrentPage();
	$this->result['PAGES'] = $navigation->getPageCount();

	$appCodes = [];
	$this->result['APPS'] = [];
	$dbApps = AppTable::getList([
		'filter' => $filter,
		'select' => [
			'*',
			'MENU_NAME' => 'LANG.MENU_NAME',
		],
		'offset' => $navigation->getOffset(),
		'limit' => $navigation->getLimit(),
	]);
	while ($app = $dbApps->Fetch()) {
		$appCodes[] = $app['CODE'];
		$app['APP_STATUS'] = AppTable::getAppStatusInfo($app, '');
		if(isset($app['APP_STATUS']['MESSAGE_REPLACE']['#DAYS#'])) {
			$app['APP_STATUS']['MESSAGE_REPLACE']['#DAYS#']++;
			$app['APP_STATUS']['MESSAGE_REPLACE']['#DAYS#'] = FormatDate('ddiff', time(), time() + 24 * 60 * 60 * $app['APP_STATUS']['MESSAGE_REPLACE']['#DAYS#']);
		}

		$this->result['APPS'][$app['CODE']] = $app;
	}

	$publishedApps = [];
	if (!empty($appCodes)) {
		$appsBuy = Client::getBuy($appCodes);
		$this->result['TOTAL_APPS'] = NumberApps::get($appsBuy);
		if (isset($appsBuy['ITEMS']) && is_array($appsBuy['ITEMS'])) {
			foreach ($appsBuy['ITEMS'] as $key => $app) {
				$publishedApps[] = $this->result['APPS'][$key]['CODE'];

				$this->result['APPS'][$key]['CODE'] = $app['CODE'] ?? null;
				$this->result['APPS'][$key]['VER'] = $app['VER'] ?? null;
				$this->result['APPS'][$key]['VER_TO_INSTALL'] = $app['VER'] ?? null;
				$this->result['APPS'][$key]['VERSIONS_FORMAT'] = Versions::getTextChanges((array)$app['VERSIONS']);
				$this->result['APPS'][$key]['NAME'] = $app['NAME'] ?? null;
				$this->result['APPS'][$key]['ICON'] = $app['ICON'] ?? null;
				$this->result['APPS'][$key]['DESC'] = $app['DESC'] ?? null;
				$this->result['APPS'][$key]['PUBLIC'] = $app['PUBLIC'] ?? null;
				$this->result['APPS'][$key]['DEMO'] = $app['DEMO'] ?? null;
				$this->result['APPS'][$key]['PARTNER_NAME'] = $app['PARTNER_NAME'] ?? null;
				$this->result['APPS'][$key]['PARTNER_URL'] = $app['PARTNER_URL'] ?? null;
				$this->result['APPS'][$key]['OTHER_REGION'] = $app['OTHER_REGION'] ?? null;
				$this->result['APPS'][$key]['VENDOR_SHOP_LINK'] = $app['VENDOR_SHOP_LINK'] ?? null;
				$this->result['APPS'][$key]['TYPE'] = $app['TYPE'];
				$this->result['APPS'][$key]['CAN_INSTALL'] = CRestUtil::canInstallApplication($app);
				$this->result['APPS'][$key]['LANDING_TYPE'] = $app['LANDING_TYPE'] ?? null;
				$this->result['APPS'][$key]['SITE_PREVIEW'] = $app['SITE_PREVIEW'] ?? null;
				$this->result['APPS'][$key]['IS_SITE_TEMPLATE'] = $app['IS_SITE_TEMPLATE'] ?? null;
				$this->result['APPS'][$key]['RATING'] = $app['RATING'] ?? null;
				$this->result['APPS'][$key]['REVIEWS_NUMBER'] = $app['REVIEWS_NUMBER'] ?? null;
				$this->result['APPS'][$key]['NUM_INSTALLS'] = $app['NUM_INSTALLS'] ?? null;
				$this->result['APPS'][$key]['HOLD_INSTALL_BY_TRIAL'] = (isset($app['HOLD_INSTALL_BY_TRIAL']) && $app['HOLD_INSTALL_BY_TRIAL'] === 'Y') ? 'Y' : 'N';
			}
		}
	}

	if (empty($appCodes)) {
		$response = Transport::instance()->call(Transport::METHOD_TOTAL_APPS);
		$this->result['TOTAL_APPS'] = NumberApps::get($response);
	}

	$unpublishedApps = array_diff($appCodes, $publishedApps);

	foreach ($this->result['APPS'] as &$appItem) {
		$appItem['UNPUBLISHED'] = (in_array($appItem['CODE'], $unpublishedApps)) ? 'Y' : 'N';

		$appItem['REST_ACCESS'] = Access::isAvailable($appItem['CODE']) && Access::isAvailableCount(Access::ENTITY_TYPE_APP, $appItem['CODE']);
		if (!$appItem['REST_ACCESS']) {
			$appItem['REST_ACCESS_HELPER_CODE'] = Access::getHelperCode(Access::ACTION_INSTALL, Access::ENTITY_TYPE_APP, $appItem);
		}

		$appItem['BUTTONS'] = Action::list($appItem);

		if (isset($appItem['BUTTONS'][Action::UPDATE])) {
			$appItem['INSTALL_INFO'] = Action::getJsAppData($appItem);
			$appItem['LICENSE'] = License::getInfo($appItem);
		}

		if (isset($appItem['BUTTONS'][Action::RIGHTS_SETTING]) || isset($appItem['BUTTONS'][Action::DELETE])) {
			$appItem['SHOW_CONTEXT_MENU'] = 'Y';
		}

		if (in_array($appItem['STATUS'], [AppTable::STATUS_FREE, AppTable::STATUS_SUBSCRIPTION])) {
			$appItem['FREE'] = $appItem['STATUS'] == AppTable::STATUS_FREE ? 'Y' : 'N';
			$appItem['BY_SUBSCRIPTION'] = $appItem['STATUS'] == AppTable::STATUS_SUBSCRIPTION ? 'Y' : 'N';
		}
	}
	unset($appItem);

	$this->result['APPS'] = array_values($this->result['APPS']);
}