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/facet/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/zverushki.seofilter/lib/facet/indexpart.php
<?
namespace Zverushki\Seofilter\Facet;

use Bitrix\Main,
	Bitrix\Main\Loader,
	Zverushki\Seofilter\configuration,
	Zverushki\Seofilter\Internals,
	Zverushki\Seofilter\Cpu\Url,
	Zverushki\Seofilter\Agent,
	Zverushki\Seofilter\emoji,
	Zverushki\Seofilter\Filter\result,
	Zverushki\Seofilter\Sections\Section;

/**
 *
 */
class IndexPart
{
	private $arSettings = array();
	private $arElements = array();
	private $arSections = array();
	private $settingId = false;
	private $lastId = 0;
	private $lastCId = 0;
	private $Landing = null;
	private $arConfig = array(
		'limit' => 1,
		'limitStep' => 1000,
		'timeLimit' => 40,
		'notActive' => "N"
	);
	public function __construct($settingId){
		$this->settingId = $settingId;
		$this->Landing = new Landing($this->settingId);
		$limitStep = configuration::getOption('limit_step', '-');
		$this->arConfig['notActive'] = configuration::getOption('not_active', '-');
		if(empty($this->arConfig['notActive']))
			$this->arConfig['notActive'] = "N";
		if(intval($limitStep) > 0)
			$this->arConfig['limitStep'] = $limitStep;


	}
	public function getPullFilter(){
		if(!$this->settingId)
			return;

		$arF = Internals\FTmpTable::getList(array(
			'filter' => array('SETTING_ID' => $this->settingId),
			'select' => array('ID', 'LID', 'SETTING'),
			'order' => array('LID' => 'ASC'),
			'limit' => $this->arConfig['limitStep']
		));
		while($aField = $arF->fetch())
			$this->arSettings[$aField['LID']] = $aField['SETTING'];


		if(empty($this->arSettings)){
			$__objSettings = Internals\SettingsTable::getList(
				[
					'filter' => [ 'ACTIVE' => 'Y', '=ID' => $this->settingId ],
					'select' => [ 'ID', 'SORT', 'IBLOCK_ID', 'SECTION_ID', 'GROUP_ID', 'URL_FILTER', 'URL_CPU', 'TAG_NAME', 'TAG_SECTION_NAME', 'PARAMS', 'SETTING.PAGE_TITLE' ],
					'order' => [ 'ID' => 'ASC', 'SORT' => 'ASC' ],
					'limit' => $this->arConfig['limit']
				]
			);
			while( $setting = $__objSettings->fetch() ){
				$setting['TYPE'] = 'H';

				Section::replace( $setting );
				if( preg_match( '/\#PROP_(.+?)\#/i', $setting['URL_CPU'] ) ){
					$setting['TYPE'] = 'A';
					$arFIlter = [ $setting ];
					$arFIlter = Url::getEntity()
					               ->getPropsSelection( $arFIlter );

					if( $arFIlter ){
						foreach( $arFIlter as $k => $v ){
							$lurl = Url::getEntity()
							           ->shuffle( $v );
							if( $lurl ){
								foreach( $lurl as $n => $url ){
									$r = $v;

									$r['URL_FILTER'] = $url['url'];
									$r['PARAMS'] = $url['params'];
									$r['VARIABLE'] = $url['variable'];
									foreach( $url['variable'] as $code => $val ){
										$r["TAG_NAME"] = preg_replace( '/\#' . $code . '\#/i', implode( ', ', $val ), emoji::decode( htmlspecialcharsback( $r["TAG_NAME"] ) ) );
										$r["TAG_SECTION_NAME"] = preg_replace( '/\#' . $code . '\#/i', implode( ', ', $val ), emoji::decode( htmlspecialcharsback( $r["TAG_SECTION_NAME"] ) ) );
										$r["ZVERUSHKI_SEOFILTER_INTERNALS_SETTINGS_SETTING_PAGE_TITLE"] = preg_replace( '/\#' . $code . '\#/i', implode( ', ', $val ), emoji::decode( htmlspecialcharsback( $r["ZVERUSHKI_SEOFILTER_INTERNALS_SETTINGS_SETTING_PAGE_TITLE"] ) ) );
									}
									unset($r['FRES']);
									$this->arSettings[] = $r;
								}
							}

						}
					}
				}else{
					$this->arSettings[] = $setting;
				}

				foreach($this->arSettings as $lid => $item){
					$f = [
						'LID' => $lid,
						'SETTING_ID' => $this->settingId,
						'SETTING' => $item
					];

					Internals\FTmpTable::add($f);
				}

				$this->lastId = $setting['ID'];
			}
		}

		return !empty( $this->arSettings);
	}

	public function getIdList($lastCId = 0){
		Loader::includeModule('catalog');
		Loader::includeModule('iblock');

		if($this->arSettings) {
			$settings = $this->arSettings;
			$this->lastCId = 0;
			for ($i = $lastCId; $i < $lastCId+count($settings); $i++) {
				$setting = $settings[$i];
				if(empty($setting['IBLOCK_ID']))
					continue;
				$variable = new result();
				$variable->setIblockId($setting['IBLOCK_ID']);
				$variable->setSectionId($setting['SECTION_ID']);
				$variable->setSettingId($setting['ID']);

				$arFilter = $variable->makeFilter($setting['PARAMS']);

				$offerElement = [];
				if($arFilter['OFFER_QUERY'])
					foreach ($arFilter['OFFER_QUERY'] as $propID => $filter){
						$res = \CIBlockElement::GetList(array("ID" => "ASC"), $filter, false, false, array("ID", 'PROPERTY_'.$propID));
						while($arFieds = $res->Fetch())
							$offerElement[$arFieds['PROPERTY_'.$propID.'_VALUE']][] = $arFieds['ID'];
					}

				if($arFilter['OFFERS']){
					$arFilter['OFFERS']['IBLOCK_ID'] = $variable->SKU_IBLOCK_ID;
					$res = \CIBlockElement::GetList(array("ID" => "ASC"), $arFilter['OFFERS'], false, false, array("ID", "PROPERTY_".$variable->SKU_PROPERTY_ID));
					while($arFieds = $res->Fetch()){
						$arFilter['=ID'][] = $arFieds['PROPERTY_'.$variable->SKU_PROPERTY_ID.'_VALUE'];
						$offerElement[$arFieds['PROPERTY_'.$variable->SKU_PROPERTY_ID.'_VALUE']][] = $arFieds['ID'];
					}
				}
				unset($arFieds, $arFilter['OFFER_QUERY'], $arFilter['OFFERS']);

				$newElemDate = 0;
				$cntElem = 0;
				$arItem = [];
				$res = \CIBlockElement::GetList(array("ID" => "ASC"), $arFilter, false, false, array("ID", "IBLOCK_ID", "TIMESTAMP_X"));
				while($arFieds = $res->Fetch()){
					$item = array(
						'ELEMENT_ID' => $arFieds['ID'],
						'OFFER_ID' => '',
						'IBLOCK_ID' => $arFieds["IBLOCK_ID"],
						'SECTION_ID' => $setting["SECTION_ID"],
						'SETTING_ID' => $setting["ID"],
						'TYPE' => $setting["TYPE"],
						'SORT' => $setting["SORT"],
						'DATE_ELEMENT' => new Main\Type\DateTime($arFieds["TIMESTAMP_X"]),
						'DESCRIPTION' => '',//$setting["DESCRIPTION"],
						'URL_CPU' => $setting["URL_FILTER"] != 'NULL' ? $setting["URL_FILTER"] : $setting["URL_CPU"],
						'PAGE_TITLE' => trim($setting["TAG_NAME"] ? $setting["TAG_NAME"] : $setting["ZVERUSHKI_SEOFILTER_INTERNALS_SETTINGS_SETTING_PAGE_TITLE"]),
						'PAGE_SECTION_TITLE' => $setting["TAG_SECTION_NAME"] ? trim($setting["TAG_SECTION_NAME"]) : ''
					);
					if($newElemDate < $item['DATE_ELEMENT']->getTimestamp())
						$newElemDate = $item['DATE_ELEMENT']->getTimestamp();

					if($offerElement[$arFieds['ID']]){
						foreach($offerElement[$arFieds['ID']] as $offerId){
							$item['OFFER_ID'] = $offerId;
							unset($item['ID']);
							if($id = $this->findExists($item))
								$item['ID'] = $id;

							$this->arElements[$arFieds['ID']][] = $item;
						}
					}else{
						if($id = $this->findExists($item))
							$item['ID'] = $id;

						$arItem[$arFieds['ID']] = $item;
					}
					$cntElem++;
				}
				if($cntElem && $setting){
					$section = [
						'IBLOCK_ID' => $setting["IBLOCK_ID"],
						'SECTION_ID' => $setting["SECTION_ID"],
						'GROUP_ID' => $setting["GROUP_ID"],
						'SETTING_ID' => $setting["ID"],
						'TYPE' => $setting["TYPE"],
						'SORT' => $setting["SORT"] ? $setting["SORT"] : 100,
						'COUNT' => $cntElem,
						'PAGE_TITLE' => trim($setting["TAG_NAME"] ? $setting["TAG_NAME"] : $setting["ZVERUSHKI_SEOFILTER_INTERNALS_SETTINGS_SETTING_PAGE_TITLE"]),
						'PAGE_SECTION_TITLE' => $setting["TAG_SECTION_NAME"] ? trim($setting["TAG_SECTION_NAME"]) : '',
						'URL_CPU' => $setting["URL_FILTER"] != 'NULL' ? $setting["URL_FILTER"] : $setting["URL_CPU"],
						'PARAMS' => $setting["PARAMS"],
						'PROPS' => $setting["VARIABLE"]
					];
					if($newElemDate)
						$section['DATE_ELEMENT'] = Main\Type\DateTime::createFromTimestamp($newElemDate);
					$gFilter = $variable->getLastGFilter();
					if($gFilter){
						$section['VAR'] = [];
						foreach($gFilter as $f){
							if($f['PRICE']){
								$section['VAR']['MIN_'.$f['CODE']] = (
									(
										$f['VALUES']['MIN']['HTML_VALUE'] && floatval($f['VALUES']['MIN']['HTML_VALUE']) > floatval($f['VALUES']['MIN']['FILTERED_VALUE'])
									) ? $f['VALUES']['MIN']['HTML_VALUE'] : ($f['VALUES']['MIN']['FILTERED_VALUE'] ? $f['VALUES']['MIN']['FILTERED_VALUE'] : 0)
								);
								$section['VAR']['MAX_'.$f['CODE']] = (
								(
									$f['VALUES']['MAX']['HTML_VALUE'] && floatval($f['VALUES']['MAX']['HTML_VALUE']) < floatval($f['VALUES']['MAX']['FILTERED_VALUE'])
								) ? $f['VALUES']['MAX']['HTML_VALUE'] : ($f['VALUES']['MAX']['FILTERED_VALUE'] ? $f['VALUES']['MAX']['FILTERED_VALUE'] : 0)
								);
							}

						}
					}

					$r = $this->Landing->setLanding($section, true);
					if($r->isSuccess()){
						foreach($arItem as $elId => $item){
							$item['LANDING_ID'] = $r->getId();
							$this->arElements[$elId][] = $item;
						}
					}
				}
				unset($arFilter, $variable, $this->arSettings[$i]);

				if(Agent::$time < time()){
					$this->lastCId = $i+1;
					$this->lastId = $setting['ID'] - 1;
					break;
				}
			}

			$lastCId = 0;
		}

		return !empty($this->arElements);
	}

	public static function endAction(){
		$cacheManager = Main\Application::getInstance()
		                                ->getTaggedCache();
		$cacheManager->ClearByTag("zverushki_seofilter_cpu_all");
	}

	private function setTmp(){
		global $DB;
		if($this->arSettings){
			$DB->Query("DELETE FROM `".Internals\FTmpTable::getTableName()."` WHERE `SETTING_ID` = ".$this->settingId.' and `LID` < '
				.$this->lastCId);
		}else{
			$DB->Query("DELETE FROM `".Internals\FTmpTable::getTableName()."` WHERE `SETTING_ID` = ".$this->settingId);
		}
	}

	public function setIndex($fields){
		$Res = Internals\FindexTable::add($fields);

		return $Res->isSuccess();
	}

	public function getIndexElement($elementId, $limit = 30){
		if(empty($elementId))
			return false;
		$__objSettings = Internals\FindexTable::getList(array(
			'filter' => array('ELEMENT_ID' => $elementId),
			'select' => array('*'),
			'order' => array('ID' => 'ASC'),
			'limit' => $limit
		));
		while($findex = $__objSettings->fetch()){
			$arFindex[$findex['ID']] = $findex;
		}

		return $arFindex;
	}
	public function clearIndexTmp(){
		global $DB;
		$sqlQuery = "TRUNCATE TABLE `".Internals\FindexTmpTable::getTableName()."`";

		return $DB->Query($sqlQuery, false, $err_mess.__LINE__);
	}
	public function clearIndex(){
		global $DB;
		$sqlQuery = "TRUNCATE TABLE `".Internals\FindexTable::getTableName()."`";

		return $DB->Query($sqlQuery, false, $err_mess.__LINE__);
	}
	public function copyIndex(){
		$this->clearIndex();
		global $DB;

		$sqlQuery = "INSERT INTO `".Internals\FindexTable::getTableName()."` SELECT * FROM `".Internals\FindexTmpTable::getTableName()."`";

		return $DB->Query($sqlQuery, false, $err_mess.__LINE__);
	}
	public function deleteIndex($elementId){
		global $DB;
		$sqlQuery = "DELETE FROM `".Internals\FindexTable::getTableName()."` WHERE `ELEMENT_ID` = ".$elementId;

		return $DB->Query($sqlQuery, false, $err_mess.__LINE__);
	}

	/*-------------------------------------------*/

	public function getSettingId () {
		return $this->settingId;
	}

	public function getLastId () {
		return $this->lastId;
	}

	public function getLastCId () {
		return $this->lastCId;
	}

	public function checkOld(){
		if(!$this->settingId)
			return;

		return $this->Landing->landingSetFlag('D', "ACTIVE != 'N' and MARK = 'R'");
	}

	public function partPreparationIndex () {
		if(!$this->settingId)
			return;
		$this->setTmp();
		if($this->partClearIndex('tmp')){
			$this->partCopyIndex('prodToTmp');
			$this->partSetFlag('D');
			$this->Landing->landingSetFlag('R');
		}
	}

	public function partPreparationCopy () {
		if(!$this->settingId)
			return;

		if($this->partDeleteFlag('D') && $this->partClearIndex('prod') && $this->partCopyIndex('tmpToProd')){
			return $this->partClearIndex('tmp');
		}
	}

	public function partClearIndex ($type = 'tmp') {
		if(!$this->settingId)
			return;
		global $DB;
		if($type == 'tmp')
			$sqlQuery = "DELETE FROM `".Internals\FindexTmpTable::getTableName()."` WHERE `SETTING_ID` = ".$this->settingId;
		elseif($type == 'prod')
			$sqlQuery = "DELETE FROM `".Internals\FindexTable::getTableName()."` WHERE `SETTING_ID` = ".$this->settingId;

		if($sqlQuery)
			return $DB->Query($sqlQuery, false, $err_mess.__LINE__);
	}

	private function partDeleteFlag ($flag = 'D') {
		if(!$this->settingId)
			return;
		global $DB;
		$sqlQuery = "DELETE FROM `".Internals\FindexTmpTable::getTableName()."` WHERE `TYPE` = '".$flag."' AND `SETTING_ID` = ".$this->settingId;

		return $DB->Query($sqlQuery, false, $err_mess.__LINE__);
	}

	private function partSetFlag($flag = 'D'){
		if(!$this->settingId)
			return;
		global $DB;
		$sqlQuery = "UPDATE `".Internals\FindexTmpTable::getTableName()."` SET TYPE = '".$flag."' WHERE `SETTING_ID` = ".$this->settingId;

		return $DB->Query($sqlQuery, false, $err_mess.__LINE__);
	}

	public function partCopyIndex ($in = 'tmpToProd'){
		if(!$this->settingId)
			return;
		global $DB;
		if($in == 'tmpToProd')
			$sqlQuery = "INSERT INTO `".Internals\FindexTable::getTableName()."` SELECT null, `ELEMENT_ID`, `OFFER_ID`, `IBLOCK_ID`, `SECTION_ID`, `SETTING_ID`, `LANDING_ID`,`TYPE`, `SORT`, `TIMESTAMP_X`, `DATE_ELEMENT`, `DESCRIPTION`, `PAGE_TITLE`,	`PAGE_SECTION_TITLE`, `URL_CPU` FROM `".Internals\FindexTmpTable::getTableName()."` WHERE `SETTING_ID` = ".$this->settingId;
		elseif($in == 'prodToTmp')
			$sqlQuery = "INSERT INTO `".Internals\FindexTmpTable::getTableName()."` SELECT null, `ELEMENT_ID`, `OFFER_ID`, `IBLOCK_ID`, `SECTION_ID`, `SETTING_ID`, `LANDING_ID`, `TYPE`, `SORT`, `TIMESTAMP_X`, `DATE_ELEMENT`, `DESCRIPTION`, `PAGE_TITLE`,	`PAGE_SECTION_TITLE`, `URL_CPU` FROM `".Internals\FindexTable::getTableName()."` WHERE `SETTING_ID` = ".$this->settingId;

		return $DB->Query($sqlQuery, false, $err_mess.__LINE__);
	}

	private function findExists ($field) {
		if(empty($field))
			return false;

		$filter = array(
			'ELEMENT_ID' => $field['ELEMENT_ID'],
			'OFFER_ID' => $field['OFFER_ID'],
			'IBLOCK_ID' => $field["IBLOCK_ID"],
			'SECTION_ID' => $field["SECTION_ID"],
			'SETTING_ID' => $field["SETTING_ID"],
			'URL_CPU' => $field["URL_CPU"]
		);

		$__objSettings = Internals\FindexTmpTable::getList(array(
			'filter' => $filter,
			'select' => array('*'),
			'order' => array('ID' => 'ASC'),
			'limit' => 1
		));
		if($findex = $__objSettings->fetch()){
			return $findex['ID'];

			return false;
		}
	}

	public function updateBufferIndex(){
		if($this->arElements)
			foreach ($this->arElements as $id => $arrIndex) {
				$this->updateIndex($id, $arrIndex);
			}
		$this->setTmp();
	}

	public function updateIndex($elementId, $arrIndex){
		// $this->deleteIndex($elementId);
		if($arrIndex)
			foreach ($arrIndex as $key => $fields) {
				$this->setIndexTmp($fields);
			}
	}

	public function setIndexTmp($fields){
		if(intval($fields['ID']) > 0){
			$ID = $fields['ID'];
			unset($fields['ID']);

			$Res = Internals\FindexTmpTable::update($ID, $fields);
		}else
			$Res = Internals\FindexTmpTable::add($fields);

		return $Res->isSuccess();
	}

}
?>

Youez - 2016 - github.com/yon3zu
LinuXploit