403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/zverushki.seofilter/lib/cpu/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/zverushki.seofilter/lib/cpu/paramurl.php
<?
namespace Zverushki\Seofilter\Cpu;

use Bitrix\Main\Loader,
	Zverushki\Seofilter\Internals,
	Zverushki\Seofilter\configuration;

Loader::includeModule('iblock');

/**
* class ParamUrl
*
*
* @package Zverushki\Seofilter
*/
class ParamUrl extends Base
{
	private static $Entity = [];

	public static function getEntity ($siteId, $langId = false) {
		$langId = $langId ? $langId : LANGUAGE_ID;
		$k = strtolower($siteId.$langId);

		return array_key_exists($k, static::$Entity)
			? static::$Entity[$k]
			: (static::$Entity[$k] = new self($siteId, $langId));
	}

	public function searchUrl($urlDir){

		$params = $this->maskLandingSearch($urlDir);

		if(configuration::getOption('not_accelerated_search', '-') == 'Y') {
			if ( !$params )
				$params = $this->quickSearch( $urlDir );

			if ( !$params )
				$params = $this->maskIndexSearch( $urlDir );

			if ( !$params )
				$params = $this->maskSearch( $urlDir );
		}
		if($params['PARAMS'] == 'Y')
			return false;

		return $params;
	}
	/**
	 * Поиск по чистой ссылке
	 * @param  string $urlDir искомая ссылка
	 * @return array|bool $params массиыв параметров по ссылке
	 */
	private function quickSearch($urlDir){
		$dbRes = Internals\SettingsTable::getList(array(
			'order' => array("SORT" => "ASC", "ID" => "DESC"),
			'filter' => array("URL_CPU" => $urlDir, "ACTIVE" => "Y", 'SITE_ID.SITE_ID' => $this->siteId),
			'select' => array('ID', 'IBLOCK_ID', 'SECTION_ID', 'TIMESTAMP_X', 'ACTIVE', 'DESCRIPTION', 'URL_CPU', 'PARAMS')
		));
		if ($params = $dbRes->fetch())
			return $params;

		return;
	}
	/**
	 * Поиск по ссылкам лендингам
	 * @param  string $urlDir искомая ссылка
	 * @return array|bool $params массиыв параметров по ссылке
	 */
	private function maskLandingSearch($urlDir){
		$arParams = $this->getFilterId($this->siteId);

		$sIds = [];
		foreach ($arParams as $item){
			$sIds[] = $item['ID'];
		}
		if(empty($sIds))
			return;

		$dbRes = Internals\LandingTable::getList(array(
			'order' => array("TYPE" => "DESC", "SORT" => "ASC", 'DATE_ELEMENT' => 'DESC', 'SETTING_ID' => 'ASC'),
			'filter' => array("SETTING_ID" => $sIds, "URL_CPU" => $urlDir, 'TYPE' => ["A", "H"], 'ACTIVE' => 'Y', 'ENABLE' => 'N'),
			'select' => array('ID', 'IBLOCK_ID', 'SECTION_ID', 'SETTING_ID', 'TYPE', 'SORT', 'URL_CPU', 'PARAMS'),
			'limit' => 1
		));
		if ($param = $dbRes->fetch()){
			$dbRes = Internals\LandingVarTable::getList(array(
				'order' => array("ID" => "ASC"),
				'filter' => array("LANDING_ID" => $param['ID']),
				'select' => array('TYPE', 'CODE', 'VALUE'),
			));
			while ($p = $dbRes->fetch()){
				if($p['TYPE'] == 'V')
					$param['VAR'][$p['CODE']] = $p['VALUE'];
				elseif($p['TYPE'] == 'P')
					$param['VARIABLE'][$p['CODE']][] = $p['VALUE'];
			}

			$param['ID'] = $param['SETTING_ID'];
			unset($param['SETTING_ID']);
			return $param;
		}

		return;
	}
	/**
	 * Поиск по чистой ссылке
	 * @param  string $urlDir искомая ссылка
	 * @return array|bool $params массиыв параметров по ссылке
	 */
	private function maskIndexSearch($urlDir){
		$arParams = $this->getFilterMask($this->siteId);

		$sIds = [];
		$nParams = [];
		foreach ($arParams as $item){
			$sIds[] = $item['ID'];
			$nParams[$item['ID']] = $item;
		}
		unset($arParams);

		$dbRes = Internals\FindexTable::getList(array(
			'order' => array("TYPE" => "DESC", "SORT" => "ASC", 'DATE_ELEMENT' => 'DESC', 'SETTING_ID' => 'ASC'),
			'filter' => array("SETTING_ID" => $sIds, "URL_CPU" => $urlDir, 'TYPE' => ["A", "H"]),
			'select' => array('ID', 'SETTING_ID', 'TYPE', 'SORT'),
			'limit' => 1
		));
		if ($param = $dbRes->fetch()){
			$arParams = [$nParams[$param['SETTING_ID']]];

			$this->wildcardSelection($urlDir, $arParams);
			$this->propsSelection($arParams);
			$arItem = $arParams[key($arParams)];
			$arFIlter = $lurl = Url::getEntity()->shuffle($arItem);
			foreach ($arFIlter as $item) {
				if($item['url'] == $urlDir){
					$arItem['URL_CPU'] = $item['url'];
					$arItem['PARAMS'] = $item['params'];
					$arItem['VARIABLE'] = $item['variable'];

					return $arItem;
				}
			}
			return $arr;
		}

		return;
	}
	/**
	 * Поиск ссылки по маске
	 * @param  string $urlDir искомая ссылка
	 * @return array|bool $arr массиыв параметров по ссылке
	 */
	private function maskSearch($urlDir){
		$arr = false;
		$arParams = $this->getGenUrl($urlDir, $this->siteId);
		foreach ($arParams as $key => $arrp)
			if($arr = $this->searchMaskInUrl($urlDir, $arrp))
				break;

		$arFIlter = Url::getEntity()->shuffle($arr);

		foreach ($arFIlter as $item) {
			if($item['url'] == $urlDir){
				$arr['URL_CPU'] = $item['url'];
				$arr['PARAMS'] = $item['params'];
				$arr['VARIABLE'] = $item['variable'];
				break;
			}
		}
		return $arr;
	}
	private function getGenUrl($urlDir, $siteId){
		$arParams = $this->getFilterMask($siteId);

		if($arParams){
			$dbRes = Internals\LandingTable::getList(array(
				'order' => array("SETTING_ID" => "DESC"),
				'filter' => array("SETTING_ID" => array_keys($arParams)),
				'select' => array('SETTING_ID'),
				'group' => array('SETTING_ID')
			));
			while ($param = $dbRes->fetch())
				unset($arParams[$param['SETTING_ID']]);

		}

		$this->wildcardSelection($urlDir, $arParams);
		$this->propsSelection($arParams);

		usort($arParams, function($a, $b){
		    return (strlen($a['URL_CPU']) == strlen($b['URL_CPU'])) ? 0 : ((strlen($a['URL_CPU']) > strlen($b['URL_CPU'])) ? -1 : 1);
		});

		return $arParams;
	}



	/**
	 * Поиск подходящей url  в маске
	 * @param  string $sUrl
	 * @param  array &$arr
	 * @return bool $arr
	 */
	private function searchMaskInUrl($sUrl, &$arr){
		preg_match('/(.+?)\#PROP_/', $arr['URL_CPU'], $mthUrl);
		if(empty($mthUrl[1]))
			return false;
		$mthUrltmp = str_replace($mthUrl[1], '', $sUrl);
		if($arr['FRES'])
			foreach ($arr['FRES'] as $code => $item) {
				usort($item, function($a, $b){
				    return (strlen($a['TVALUE']) == strlen($b['TVALUE'])) ? 0 : ((strlen($a['TVALUE']) > strlen($b['TVALUE'])) ? -1 : 1);
				});
				foreach ($item as $vId => $par) {
					if(empty($par['TVALUE']))
						continue;
					$mthUrltmp = preg_replace("/(?!\#PROP_){$par['TVALUE']}(?!.*\#)/i", "#PROP_{$code}#", $mthUrltmp, 3, $count);
					// $mthUrltmp = preg_replace("/{$par['TVALUE']}/i", "#PROP_{$code}#", $mthUrltmp, 3, $count);
					if($count > 0){
						$arr['PARAMS'][$par['CONTROL_ID']] = $par['HTML_VALUE'];
						$arr['VARIABLE']['PROP_'.$code][] = $par['VALUE'];
					}
					/*if($mthUrl[1].$mthUrltmp == $arr['URL_CPU'])
                    	break;*/

				}
			}

		// unset($arr['FRES']);
		if($mthUrl[1].$mthUrltmp == $arr['URL_CPU'])
			return $arr;

		return false;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit