Your IP : 3.139.70.69


Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/aspro.allcorp3/
Upload File :
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/aspro.allcorp3/functions.php

<?
CModule::IncludeModule("main");
CModule::IncludeModule("iblock");

set_time_limit(0);

if (!function_exists("ClearAllSitesCacheComponents")) {
	function ClearAllSitesCacheComponents($arComponentsNames)
	{
		if ($arComponentsNames && is_array($arComponentsNames)) {
			global $CACHE_MANAGER;
			$arSites = array();
			$rsSites = CSite::GetList($by = "sort", $order = "desc", array("ACTIVE" => "Y"));
			while ($arSite = $rsSites->Fetch()) {
				$arSites[] = $arSite;
			}
			foreach ($arComponentsNames as $componentName) {
				foreach ($arSites as $arSite) {
					CBitrixComponent::clearComponentCache($componentName, $arSite["ID"]);
				}
			}
		}
	}
}

if (!function_exists("ClearAllSitesCacheDirs")) {
	function ClearAllSitesCacheDirs($arDirs)
	{
		if ($arDirs && is_array($arDirs)) {
			foreach ($arDirs as $dir) {
				$obCache = new CPHPCache();
				$obCache->CleanDir("", $dir);
			}
		}
	}
}

if (!function_exists("GetIBlocks")) {
	function GetIBlocks()
	{
		$arRes = array();
		$dbRes = CIBlock::GetList(array(), array("ACTIVE" => "Y"));
		while ($item = $dbRes->Fetch()) {
			$dbIBlockSites = CIBlock::GetSite($item['ID']);
			while($arIBlockSite = $dbIBlockSites->Fetch()){
				$arRes[$arIBlockSite["SITE_ID"]][$item["IBLOCK_TYPE_ID"]][$item["CODE"]][] = $item["ID"];
			}
		}

		return $arRes;
	}
}

if (!function_exists("GetSites")) {
	function GetSites()
	{
		$arRes = array();
		$dbRes = CSite::GetList($by = "sort", $order = "desc", array("ACTIVE" => "Y"));
		while ($item = $dbRes->Fetch()) {
			$arRes[$item["LID"]] = $item;
		}
		return $arRes;
	}
}

if (!function_exists("GetCurVersion")) {
	function GetCurVersion($versionFile)
	{
		$ver = false;
		if (file_exists($versionFile)) {
			$arModuleVersion = array();
			include($versionFile);
			$ver = trim($arModuleVersion["VERSION"]);
		}
		return $ver;
	}
}

if (!function_exists("CreateBakFile")) {
	function CreateBakFile($file, $curVersion = CURRENT_VERSION)
	{
		$file = trim($file);
		if (file_exists($file)) {
			$arPath = pathinfo($file);
			$backFile = $arPath['dirname'] . '/_' . $arPath['basename'] . '.back' . $curVersion;
			if (!file_exists($backFile)) {
				@copy($file, $backFile);
			}
		}
	}
}

if (!function_exists("RemoveFileFromModuleWizard")) {
	function RemoveFileFromModuleWizard($file)
	{
		@unlink($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . MODULE_NAME . '/install/wizards/' . PARTNER_NAME . '/' . MODULE_NAME_SHORT . $file);
		@unlink($_SERVER['DOCUMENT_ROOT'] . '/bitrix/wizards/' . PARTNER_NAME . '/' . MODULE_NAME_SHORT . $file);
	}
}

if (!function_exists("RemoveFileFromTemplate")) {
	function RemoveFileFromTemplate($file, $bModule = true)
	{
		@unlink($_SERVER['DOCUMENT_ROOT'] . TEMPLATE_PATH . $file);
		if ($bModule) {
			RemoveFileFromModuleWizard('/site/templates/' . TEMPLATE_NAME . $file);
		}
	}
}

if (!function_exists('SearchFilesInPublicRecursive')) {
	function SearchFilesInPublicRecursive($dir, $pattern, $flags = 0)
	{
		$arDirExclude = array('bitrix', 'upload');
		$pattern = str_replace('//', '/', str_replace('//', '/', $dir . '/') . $pattern);
		$files = glob($pattern, $flags);
		foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
			if (!in_array(basename($dir), $arDirExclude)) {
				$files = array_merge($files, SearchFilesInPublicRecursive($dir, basename($pattern), $flags));
			}
		}
		return $files;
	}
}

if(!function_exists('RemoveOldBakFiles')){
	function RemoveOldBakFiles(){
		$arDirs = $arFiles = array();

		foreach(
			$arExclude = array(
				'bitrix',
				'local',
				'upload',
				'webp-copy',
				'cgi',
				'cgi-bin',
			) as $dir){
			$arDirExclude[] = $_SERVER['DOCUMENT_ROOT'].'/'.$dir;
		}

		// public
		if($arSites = GetSites()){
			foreach($arSites as $siteID => $arSite){
				$arSite['DIR'] = str_replace('//', '/', '/'.$arSite['DIR']);
				if(!strlen($arSite['DOC_ROOT'])){
					$arSite['DOC_ROOT'] = $_SERVER['DOCUMENT_ROOT'];
				}
				$arSite['DOC_ROOT'] = str_replace('//', '/', $arSite['DOC_ROOT'].'/');
				$siteDir = str_replace('//', '/', $arSite['DOC_ROOT'].$arSite['DIR']);

				if($arPublicDirs = glob($siteDir.'*', GLOB_ONLYDIR|GLOB_NOSORT)){
					foreach($arPublicDirs as $dir){
						foreach($arExclude as $exclude){
							if(strpos($dir, '/'.$exclude) !== false){
								continue 2;
							}
						}

						$arDirs[] = str_replace('//', '/', $dir.'/');
					}
				}
			}

			$i = 0;
			while($arDirs && ++$i < 10000){
				$dir = array_pop($arDirs);
				$arFiles = array_merge($arFiles, (array)glob($dir.'_*.back*', GLOB_NOSORT));
				foreach((array)glob($dir.'*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir){
					if(
						strlen($dir)
					){
						foreach($arExclude as $exclude){
							if(strpos($dir, '/'.$exclude) !== false){
								continue 2;
							}
						}

						$arDirs[] = str_replace('//', '/', $dir.'/');
					}
				}
			}
		}

		$arDirs = array();

		// aspro components
		if(file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/components/')){
			if($arComponents = glob($_SERVER['DOCUMENT_ROOT'].'/bitrix/components/'.PARTNER_NAME.'*', 0)){
				foreach($arComponents as $componentPath){
					$arDirs[] = str_replace('//', '/', $componentPath.'/');
				}
			}
		}
		if(file_exists($_SERVER['DOCUMENT_ROOT'].'/local/components/')){
			if($arComponents = glob($_SERVER['DOCUMENT_ROOT'].'/local/components/'.PARTNER_NAME.'*', 0)){
				foreach($arComponents as $componentPath){
					$arDirs[] = str_replace('//', '/', $componentPath.'/');
				}
			}
		}

		// aspro and other templates
		if(file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/templates/')){
			if($arTemplates = glob($_SERVER['DOCUMENT_ROOT'].'/bitrix/templates/*', 0)){
				foreach($arTemplates as $templatePath){
					$arDirs[] = str_replace('//', '/', $templatePath.'/');
				}
			}
		}
		if(file_exists($_SERVER['DOCUMENT_ROOT'].'/local/templates/')){
			if($arTemplates = glob($_SERVER['DOCUMENT_ROOT'].'/local/templates/*', 0)){
				foreach($arTemplates as $templatePath){
					$arDirs[] = str_replace('//', '/', $templatePath.'/');
				}
			}
		}

		// aspro modules
		if(file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/')){
			if($arModules = glob($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/'.PARTNER_NAME.'*', 0)){
				foreach($arModules as $modulePath){
					$arDirs[] = str_replace('//', '/', $modulePath.'/');
				}
			}
		}
		if(file_exists($_SERVER['DOCUMENT_ROOT'].'/local/modules/')){
			if($arModules = glob($_SERVER['DOCUMENT_ROOT'].'/local/modules/'.PARTNER_NAME.'*', 0)){
				foreach($arModules as $modulePath){
					$arDirs[] = str_replace('//', '/', $modulePath.'/');
				}
			}
		}

		// aspro js
		if(file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/js/')){
			if($arJs = glob($_SERVER['DOCUMENT_ROOT'].'/bitrix/js/'.MODULE_NAME.'*', 0)){
				foreach($arJs as $jsPath){
					$arDirs[] = str_replace('//', '/', $jsPath.'/');
				}
			}
		}

		// aspro css
		if(file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/css/')){
			if($arCss = glob($_SERVER['DOCUMENT_ROOT'].'/bitrix/css/'.MODULE_NAME.'*', 0)){
				foreach($arCss as $cssPath){
					$arDirs[] = str_replace('//', '/', $cssPath.'/');
				}
			}
		}

		// aspro wizards
		if(file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/wizards/')){
			if($arWizards = glob($_SERVER['DOCUMENT_ROOT'].'/bitrix/wizards/'.PARTNER_NAME.'*', 0)){
				foreach($arWizards as $wizardPath){
					$arDirs[] = str_replace('//', '/', $wizardPath.'/');
				}
			}
		}
		if(file_exists($_SERVER['DOCUMENT_ROOT'].'/local/wizards/')){
			if($arWizards = glob($_SERVER['DOCUMENT_ROOT'].'/local/wizards/'.PARTNER_NAME.'*', 0)){
				foreach($arWizards as $wizardPath){
					$arDirs[] = str_replace('//', '/', $wizardPath.'/');
				}
			}
		}

		$i = 0;
		while($arDirs && ++$i < 10000){
			$popdir = array_pop($arDirs);
			$arFiles = array_merge($arFiles, (array)glob($popdir.'_*.back*', GLOB_NOSORT));
			foreach((array)glob($popdir.'{,.}*', GLOB_ONLYDIR|GLOB_NOSORT|GLOB_BRACE) as $dir){
				if(
					strlen($dir) &&
					!in_array($dir, array($popdir.'.', $popdir.'..')) &&
					!in_array($dir, $arDirExclude) &&
					(
						strpos($dir, PARTNER_NAME) !== false ||
						strpos($dir, '/templates/') !== false
					)
				){
					$arDirs[] = str_replace('//', '/', $dir.'/');
				}
			}
		}

		if($arFiles){
			foreach($arFiles as $file){
				if(file_exists($file) && !is_dir($file)){
					if(time() - filemtime($file) >= 1209600){ // 14 days
						@unlink($file);
					}
				}
			}
		}
	}
}

if (!function_exists("GetDBcharset")) {
	function GetDBcharset()
	{
		$sql = 'SHOW VARIABLES LIKE "character_set_database";';
		if (method_exists('\Bitrix\Main\Application', 'getConnection')) {
			$db = \Bitrix\Main\Application::getConnection();
			$arResult = $db->query($sql)->fetch();
			return $arResult['Value'];
		} elseif (defined("BX_USE_MYSQLI") && BX_USE_MYSQLI == true) {
			if ($result = @mysqli_query($sql)) {
				$arResult = mysql_fetch_row($result);
				return $arResult[1];
			}
		} elseif ($result = @mysql_query($sql)) {
			$arResult = mysql_fetch_row($result);
			return $arResult[1];
		}
		return false;
	}
}

if (!function_exists("GetMes")) {
	function GetMes($str)
	{
		static $isUTF8;
		if ($isUTF8 === NULL) {
			$isUTF8 = GetDBcharset() == 'utf8';
		}
		return ($isUTF8 ? iconv('CP1251', 'UTF-8', $str) : $str);
	}
}

if (!function_exists("UpdaterLog")) {
	function UpdaterLog($str)
	{
		static $fLOG;
		if ($bFirst = !$fLOG) {
			$fLOG = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . MODULE_NAME . '/updaterlog.txt';
		}
		if (is_array($str)) {
			$str = print_r($str, 1);
		}
		@file_put_contents($fLOG, ($bFirst ? PHP_EOL : '') . date("d.m.Y H:i:s", time()) . ' ' . $str . PHP_EOL, FILE_APPEND);
	}
}

if (!function_exists("InitComposite")) {
	function InitComposite($arSites)
	{
		if (class_exists("CHTMLPagesCache")) {
			if (method_exists("CHTMLPagesCache", "GetOptions")) {
				if ($arHTMLCacheOptions = CHTMLPagesCache::GetOptions()) {
					if ($arHTMLCacheOptions["COMPOSITE"] !== "Y") {
						$arDomains = array();
						if ($arSites) {
							foreach ($arSites as $arSite) {
								if (strlen($serverName = trim($arSite["SERVER_NAME"], " \t\n\r"))) {
									$arDomains[$serverName] = $serverName;
								}
								if (strlen($arSite["DOMAINS"])) {
									foreach (explode("\n", $arSite["DOMAINS"]) as $domain) {
										if (strlen($domain = trim($domain, " \t\n\r"))) {
											$arDomains[$domain] = $domain;
										}
									}
								}
							}
						}

						if (!$arDomains) {
							$arDomains[$_SERVER["SERVER_NAME"]] = $_SERVER["SERVER_NAME"];
						}

						if (!$arHTMLCacheOptions["GROUPS"]) {
							$arHTMLCacheOptions["GROUPS"] = array();
						}
						$rsGroups = CGroup::GetList(($by = "id"), ($order = "asc"), array());
						while ($arGroup = $rsGroups->Fetch()) {
							if ($arGroup["ID"] > 2) {
								if (in_array($arGroup["STRING_ID"], array("RATING_VOTE_AUTHORITY", "RATING_VOTE")) && !in_array($arGroup["ID"], $arHTMLCacheOptions["GROUPS"])) {
									$arHTMLCacheOptions["GROUPS"][] = $arGroup["ID"];
								}
							}
						}

						$arHTMLCacheOptions["COMPOSITE"] = "Y";
						$arHTMLCacheOptions["DOMAINS"] = array_merge((array)$arHTMLCacheOptions["DOMAINS"], (array)$arDomains);
						CHTMLPagesCache::SetEnabled(true);
						CHTMLPagesCache::SetOptions($arHTMLCacheOptions);
						bx_accelerator_reset();
					}
				}
			}
		}
	}
}

if (!function_exists('GetCompositeOptions')) {
	function GetCompositeOptions()
	{
		if (class_exists('CHTMLPagesCache')) {
			if (method_exists('CHTMLPagesCache', 'GetOptions')) {
				return CHTMLPagesCache::GetOptions();
			}
		}

		return array();
	}
}

if (!function_exists('IsCompositeEnabled')) {
	function IsCompositeEnabled()
	{
		if (class_exists('CHTMLPagesCache')) {
			if ($arHTMLCacheOptions = GetCompositeOptions()) {
				if (method_exists('CHTMLPagesCache', 'isOn')) {
					if (CHTMLPagesCache::isOn()) {
						if (isset($arHTMLCacheOptions['AUTO_COMPOSITE']) && $arHTMLCacheOptions['AUTO_COMPOSITE'] === 'Y') {
							return 'AUTO_COMPOSITE';
						} else {
							return 'COMPOSITE';
						}
					}
				} else {
					if ($arHTMLCacheOptions['COMPOSITE'] === 'Y') {
						return 'COMPOSITE';
					}
				}
			}
		}

		return false;
	}
}

if (!function_exists('EnableComposite')) {
	function EnableComposite($auto = false, $arHTMLCacheOptions = array())
	{
		if (class_exists('CHTMLPagesCache')) {
			if (method_exists('CHTMLPagesCache', 'GetOptions')) {
				$arHTMLCacheOptions = is_array($arHTMLCacheOptions) ? $arHTMLCacheOptions : array();
				$arHTMLCacheOptions = array_merge(CHTMLPagesCache::GetOptions(), $arHTMLCacheOptions);

				$arHTMLCacheOptions['COMPOSITE'] = $arHTMLCacheOptions['COMPOSITE'] ?? 'Y';
				$arHTMLCacheOptions['AUTO_UPDATE'] = $arHTMLCacheOptions['AUTO_UPDATE'] ?? 'Y'; // standart mode
				$arHTMLCacheOptions['AUTO_UPDATE_TTL'] = $arHTMLCacheOptions['AUTO_UPDATE_TTL'] ?? '0'; // no ttl delay
				$arHTMLCacheOptions['AUTO_COMPOSITE'] = ($auto ? 'Y' : 'N'); // auto composite mode

				CHTMLPagesCache::SetEnabled(true);
				CHTMLPagesCache::SetOptions($arHTMLCacheOptions);
				bx_accelerator_reset();
			}
		}
	}
}

if (!function_exists('AddNewProps')) {
	function AddNewProps($arPropertiesIBlocks = [], $lang = 'ru')
	{
		if (!count($arPropertiesIBlocks)) return;

		foreach ($arPropertiesIBlocks as $IBlockID => $arProperties) {
			$arUserOptionsForm = CUserOptions::GetOption("form", "form_element_" . $IBlockID, []);
			$strOptionTab = '';

			foreach ($arProperties as $key => $property) {
				if ($property['PROPS_DELIMETER']) {
					$strOptionTab .= ',--editAspro_csection_'.$property['ID'].'--#--'.$property['LANG'][$lang].'--';
				} else {
					$dbProperty = CIBlockProperty::GetList([], ["IBLOCK_ID" => $IBlockID, "CODE" => $property["CODE"]]);
					
					if (!$dbProperty->SelectedRowsCount()) {
						$arFields = [
							"NAME" => $property["LANG"][$lang],
							"ACTIVE" => $property["ACTIVE"],
							"SORT" => $property["SORT"],
							"CODE" => $property["CODE"],
							"PROPERTY_TYPE" => $property["PROPERTY_TYPE"],
							"LIST_TYPE" => $property["LIST_TYPE"],
							"MULTIPLE" => $property["MULTIPLE"],
							"IBLOCK_ID" => $IBlockID,
						];
						
						if ($property['PROPERTY_TYPE'] === 'E' && $property['LINK_IBLOCK_ID'])
							$arFields['LINK_IBLOCK_ID'] = $property['LINK_IBLOCK_ID'];
	
						$ibp = new CIBlockProperty;
						$propID = $ibp->Add($arFields);
	
						if ($propID) {
							$strOptionTab .= ',--PROPERTY_' . $propID . '--#--' . $property["LANG"][$lang] . '--';
						}
					} else {
						$propID = $dbProperty->Fetch()['ID'];
					}
	
					if (
						$propID &&
						$property["ENUMS"]
					) {
						$arEnumValue = [];
						$ibpenum = new CIBlockPropertyEnum;
						$propertyEnums = CIBlockPropertyEnum::GetList([], ["IBLOCK_ID" => $IBlockID, "CODE" => $property["CODE"]]);
						if ($propertyEnums->SelectedRowsCount()) {
							while ($enumFields = $propertyEnums->GetNext()) {
								$arEnumValue[] = $enumFields["VALUE"];
							}
							
							foreach ($property["ENUMS"][$lang] as $enumsValue) {
								if (!in_array($enumsValue, $arEnumValue)) {
									$ibpenum->Add([
										"PROPERTY_ID" => $propID, 
										"VALUE" => $enumsValue,
									]);
								}
							}
						} else {
							foreach ($property["ENUMS"][$lang] as $enumsValue) {
								$ibpenum->Add([
									"PROPERTY_ID" => $propID, 
									"VALUE" => $enumsValue
								]);
							}
						}
					}
				}
			}

			if ($strOptionTab && isset($arUserOptionsForm['tabs'])) {
				$matches = [];
				$subject = "/(--Aspro--.*?);/s";
				preg_match($subject, $arUserOptionsForm["tabs"], $matches);

				if ($matches[0]) {
					$patternNewProperty = $matches[1] . $strOptionTab;
					$arUserOptionsForm["tabs"] = str_replace($matches[1], $patternNewProperty, $arUserOptionsForm["tabs"]);
				} else {
					$matches = [];
					preg_match_all('/\bedit(\d)\b/', $arUserOptionsForm["tabs"], $matches, false);
					sort($matches[1]);
					$editNumber = array_pop($matches[1]);

					$addPropForm = 'edit' . ($editNumber + 1) . '--#--Aspro--' . $strOptionTab . ';--';
					$arUserOptionsForm["tabs"] .= $addPropForm;
				}

				$arUserOptionsForm = CUserOptions::SetOption("form", "form_element_" . $IBlockID, $arUserOptionsForm);
			}
		}
	}
}