Your IP : 18.222.20.252


Current Path : /proc/20913/cwd/ext_www/home-comfort.in.ua/bitrix/components/bitrix/landing.start/
Upload File :
Current File : //proc/20913/cwd/ext_www/home-comfort.in.ua/bitrix/components/bitrix/landing.start/component.php

<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)
{
	die();
}

use \Bitrix\Crm\WebForm\Preset;
use \Bitrix\Landing\Manager;
use \Bitrix\Main\Localization\Loc;
use \Bitrix\Main\Application;
use \Bitrix\Main\Web\Uri;
use \Bitrix\Main\Loader;
use \Bitrix\Main\SiteTemplateTable;
use \Bitrix\Main\UserConsent\Agreement;
use \Bitrix\Main\UserConsent\Internals\AgreementTable;
use \Bitrix\Main\UserConsent\Internals\ConsentTable;

Loc::loadMessages(__FILE__);

if (!Loader::includeModule('landing'))
{
	Showerror(Loc::getMessage('LANDING_CMP_MODULE_NOT_INSTALLED'));
	return;
}

// something about crm
if (Loader::includeModule('crm'))
{
	// set webform presets
	if (Preset::checkVersion())
	{
		$preset = new Preset();
		$preset->install();
	}
	// install demo data for crm
	if (!CAllCrmInvoice::installExternalEntities())
	{
		Showerror(Loc::getMessage('LANDING_CMP_MODULE_NOT_INSTALLED_CRM'));
		return;
	}
}

// refresh block repo
\Bitrix\Landing\Block::getRepository();

// check rights
if (Loader::includeModule('bitrix24'))
{
	if (
		Manager::getOption('temp_permission_admin_only')
		&& !\CBitrix24::isPortalAdmin(Manager::getUserId())
	)
	{
		Manager::setPageTitle(
			Loc::getMessage('LANDING_CMP_TITLE')
		);
		Manager::getApplication()->showAuthForm(
			Loc::getMessage('LANDING_CMP_ACCESS_DENIED2')
		);
		return;
	}
}
else
{
	if (Manager::getApplication()->getGroupRight('landing') < 'W')
	{
		Manager::setPageTitle(
			Loc::getMessage('LANDING_CMP_TITLE')
		);
		Manager::getApplication()->showAuthForm(
			Loc::getMessage('LANDING_CMP_ACCESS_DENIED2')
		);
		return;
	}
}

$defaultUrlTemplates404 = array(
	'sites' => '',
	'site_show' => 'site/#site_show#/',
	'site_edit' => 'site/edit/#site_edit#/',
	'landing_edit' => 'site/#site_show#/edit/#landing_edit#/',
	'landing_view' => 'site/#site_show#/view/#landing_edit#/',
	'domains' => 'domains/',
	'domain_edit' => 'domain/edit/#domain_edit#/'
);
$defaultVariableAliases = array(
	'site_show' => 'site_show',
	'site_edit' => 'site_edit',
	'landing_edit' => 'landing_edit',
	'landing_view' => 'landing_view',
	'domain_edit' => 'domain_edit',
	'domains' => 'domains'
);
$varToTpl = array(
	'domains' => 'domains',
	'landing_edit' => 'landing_edit',
	'landing_view' => 'landing_view',
	'site_show' => 'site_show',
	'site_edit' => 'site_edit',
	'domain_edit' => 'domain_edit'
);
$utlTpls = array(
	'sites' => array(),
	'site_show' => array('site_show'),
	'site_edit' => array('site_edit'),
	'landing_edit' => array('landing_edit', 'site_show'),
	'landing_view' => array('landing_edit', 'site_show'),
	'domains' => array(),
	'domain_edit' => array('domain_edit')
);


$variables = array();
$componentPage = '';
$curPage = '';
$request = Application::getInstance()->getContext()->getRequest();
$uriString = $request->getRequestUri();
$landingTypes = \Bitrix\Landing\Site::getTypes();

$arResult['AGREEMENT'] = array();
$arParams['ACTION_FOLDER'] = isset($arParams['ACTION_FOLDER']) ? $arParams['ACTION_FOLDER'] : 'folderId';
$arParams['SEF_MODE'] = isset($arParams['SEF_MODE']) ? $arParams['SEF_MODE'] : 'Y';
$arParams['SEF_FOLDER'] = isset($arParams['SEF_FOLDER']) ? $arParams['SEF_FOLDER'] : '/';
$arParams['SEF_URL_TEMPLATES'] = isset($arParams['SEF_URL_TEMPLATES']) ? $arParams['SEF_URL_TEMPLATES'] : array();
$arParams['VARIABLE_ALIASES'] = isset($arParams['VARIABLE_ALIASES']) ? $arParams['VARIABLE_ALIASES'] : array();

foreach ($defaultUrlTemplates404 as $pageCode => $pagePath)
{
	if (!isset($arParams['SEF_URL_TEMPLATES'][$pageCode]))
	{
		$arParams['SEF_URL_TEMPLATES'][$pageCode] = $pagePath;
	}
}

// site types
if (
	!isset($arParams['TYPE']) ||
	!isset($landingTypes[$arParams['TYPE']])
)
{
	$arParams['TYPE'] = \Bitrix\Landing\Site::getDefaultType();
}

// sef / not sef modes
if ($arParams['SEF_MODE'] == 'Y')
{
	$defaultVariableAliases404 = array();
	$componentVariables = array();

	$urlTemplates = \CComponentEngine::MakeComponentUrlTemplates(
		$defaultUrlTemplates404,
		$arParams['SEF_URL_TEMPLATES']
	);
	$variableAliases = \CComponentEngine::MakeComponentVariableAliases(
		$defaultVariableAliases404,
		$arParams['VARIABLE_ALIASES']
	);
	$componentPage = \CComponentEngine::ParseComponentPath(
		$arParams['SEF_FOLDER'],
		$urlTemplates,
		$variables
	);

	\CComponentEngine::InitComponentVariables(
		$componentPage,
		$componentVariables,
		$variableAliases,
		$variables
	);

	// build urls by rules
	foreach ($utlTpls as $code => $var)
	{
		$arParams['PAGE_URL_' . strtoupper($code)] = $arParams['SEF_FOLDER'] . $urlTemplates[$code];
	}
}
else
{
	$componentVariables = array();
	foreach ($defaultVariableAliases as $var)
	{
		$componentVariables[] = isset($arParams['VARIABLE_ALIASES'][$var])
								? $arParams['VARIABLE_ALIASES'][$var]
								: $var;
	}

	$variableAliases = \CComponentEngine::MakeComponentVariableAliases(
		$defaultVariableAliases,
		$arParams['VARIABLE_ALIASES']
	);

	\CComponentEngine::InitComponentVariables(
		false,
		$componentVariables,
		$variableAliases,
		$variables
	);

	foreach ($varToTpl as $var => $tpl)
	{
		if (isset($variables[$var]))
		{
			$componentPage = $tpl;
			break;
		}
	}

	// vars for clear from url
	$deleteUrl = array();
	foreach ($utlTpls as $code => $var)
	{
		if (empty($var))
		{
			$deleteUrl[] = isset($arParams['VARIABLE_ALIASES'][$code])
							? $arParams['VARIABLE_ALIASES'][$code]
							: $code;
		}
		else
		{
			foreach ($var as $v)
			{
				$deleteUrl[] = isset($arParams['VARIABLE_ALIASES'][$v])
								? $arParams['VARIABLE_ALIASES'][$v]
								: $v;
			}
		}
	}
	// build urls by rules
	foreach ($utlTpls as $code => $var)
	{
		$paramCode = 'PAGE_URL_' . strtoupper($code);
		$uri = new Uri($uriString);
		$uri->deleteParams($deleteUrl);
		if (empty($var))
		{
			if (isset($arParams['VARIABLE_ALIASES'][$code]))
			{
				$code = $arParams['VARIABLE_ALIASES'][$code];
			}
			$uri->addParams(array(
				$code => 'Y'
			));
		}
		else
		{
			foreach ($var as $v)
			{
				if (isset($arParams['VARIABLE_ALIASES'][$v]))
				{
					$v = $arParams['VARIABLE_ALIASES'][$v];
				}
				$uri->addParams(array(
					$v => '#' . $v . '#'
				));
			}
		}
		$arParams[$paramCode] = urldecode($uri->getUri());
	}
}

$arResult['VARS'] = $variables;

// check rules for templates
if (
	$arParams['SEF_MODE'] == 'Y' &&
	isset($arParams['PAGE_URL_LANDING_VIEW'])
)
{
	$condition = $arParams['PAGE_URL_LANDING_VIEW'];
	$condition = str_replace(
		array('#site_show#', '#landing_edit#'),
		'[\\d]+',
		$condition
	);
	$condition = 'preg_match(\'#' . $condition . '#\', ' .
				 '$GLOBALS[\'APPLICATION\']->GetCurPage(0))';
	$res = SiteTemplateTable::getList(array(
		'select' => array(
			'ID'
		),
		'filter' => array(
			'SITE_ID' => SITE_ID,
			'=CONDITION' => $condition
		)
	));
	if (!$res->fetch())
	{
		SiteTemplateTable::add(array(
			'TEMPLATE' => Manager::getOption('site_template_id'),
			'SITE_ID' => SITE_ID,
			'SORT' => 500,
			'CONDITION' => $condition
		));
		Manager::getCacheManager()->clean('b_site_template');
		\localRedirect(Manager::getApplication()->getCurPage());
	}
}

// disable domain's pages in the cloud
if (
	($componentPage == 'domains' || $componentPage == 'domain_edit') &&
	\Bitrix\Main\ModuleManager::isModuleInstalled('bitrix24')
)
{
	$componentPage = '';
}

// only AGREEMENTS below

if (
	$request->get('landing_mode') ||
	!\Bitrix\Landing\Manager::isB24()
)
{
	$this->IncludeComponentTemplate($componentPage);
	return;
}

$currentLang = LANGUAGE_ID;
$agreementCode = 'landing_agreement';
$agreementsId = array();
$agreements = array(
	'ru' => array(),
	'es' => array(),
	'en' => array(),
	$currentLang => array()
);
$virtualLangs = array(
	'ua' => 'ru',
	'by' => 'ru',
	'kz' => 'ru',
	'la' => 'es'
);

// actual from lang-file
foreach ($agreements as $lng => $item)
{
	if (file_exists(__DIR__ . '/lang/' . $lng . '/component.php'))
	{
		include __DIR__ . '/lang/' . $lng . '/component.php';
		$agreements[$lng] = array(
			'ID' => 0,
			'NAME' => isset($MESS['LANDING_CMP_AGREEMENT_NAME'])
						? $MESS['LANDING_CMP_AGREEMENT_NAME']
						: '',
			'TEXT' => isset($MESS['LANDING_CMP_AGREEMENT_TEXT'])
						? $MESS['LANDING_CMP_AGREEMENT_TEXT']
						: '',
			'LANGUAGE_ID' => $lng,
		);
	}
}

// current from database (actualize in db)
$res = AgreementTable::getList(array(
	'select' => array(
		'ID',
		'NAME',
		'TEXT' => 'AGREEMENT_TEXT',
		'LANGUAGE_ID'
	),
	'filter' => array(
		'=ACTIVE' => 'Y',
		'=CODE' => $agreementCode,
		'=LANGUAGE_ID' => array_keys($agreements)
	)
));
while ($row = $res->fetch())
{
	$agreementsId[] = $row['ID'];
	$actual = $agreements[$row['LANGUAGE_ID']];
	if (
		$row['NAME'] != $actual['NAME'] ||
		$row['TEXT'] != $actual['TEXT']
	)
	{
		AgreementTable::update($row['ID'], array(
			'NAME' => $actual['NAME'],
			'AGREEMENT_TEXT' => $actual['TEXT']
		));
	}
	$agreements[$row['LANGUAGE_ID']]['ID'] = $row['ID'];
}

// add new to db
foreach ($agreements as $lng => $agreement)
{
	if (!$agreement['ID'])
	{
		$res = AgreementTable::add(array(
			'CODE' => $agreementCode,
			'LANGUAGE_ID' => $lng,
			'TYPE' => Agreement::TYPE_CUSTOM,
			'NAME' => $agreement['NAME'],
			'AGREEMENT_TEXT' => $agreement['TEXT']
		));
		if ($res->isSuccess())
		{
			$agreements[$lng]['ID'] = $res->getId();
		}
	}
}

if (
	!empty($agreements[$currentLang]) &&
	$agreements[$currentLang]['ID']
)
{
	$arResult['AGREEMENT'] = $agreements[$currentLang];
}
elseif (
	isset($virtualLangs[$currentLang]) &&
	!empty($agreements[$virtualLangs[$currentLang]]) &&
	$agreements[$virtualLangs[$currentLang]]['ID']
)
{
	$arResult['AGREEMENT'] = $agreements[$virtualLangs[$currentLang]];
}
elseif (
	!empty($agreements['en']) &&
	$agreements['en']['ID']
)
{
	$arResult['AGREEMENT'] = $agreements['en'];
}
else
{
	$redirectIfUnAcept = true;
}

// check accepted
$res = ConsentTable::getList(array(
	'filter' => array(
		'USER_ID' => Manager::getUserId(),
		'AGREEMENT_ID' => $agreementsId
	)
));
if ($res->fetch())
{
	$redirectIfUnAcept = false;
	$arResult['AGREEMENT'] = array();
}

// accept
if (
	$request->get('action') == 'accept_agreement' &&
	!empty($arResult['AGREEMENT']) &&
	check_bitrix_sessid()
)
{
	\Bitrix\Main\UserConsent\Consent::addByContext(
		$arResult['AGREEMENT']['ID']
	);
	LocalRedirect($uriString);
}

// if not accept and don't exist agreement
if (
	isset($redirectIfUnAcept) &&
	$redirectIfUnAcept === true
)
{
	LocalRedirect(SITE_DIR, true);
}

$this->IncludeComponentTemplate($componentPage);