%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.135.200.4
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/components/bitrix/catalog.section.list/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/components/bitrix/catalog.section.list//component.php
<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
/** @var CBitrixComponent $this */
/** @var array $arParams */
/** @var array $arResult */
/** @var string $componentPath */
/** @var string $componentName */
/** @var string $componentTemplate */
/** @global CDatabase $DB */
/** @global CUser $USER */
/** @global CMain $APPLICATION */

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Iblock;

/*************************************************************************
	Processing of received parameters
*************************************************************************/
if (!isset($arParams["CACHE_TIME"]))
{
	$arParams["CACHE_TIME"] = 36000000;
}

$arParams["IBLOCK_TYPE"] = trim($arParams["IBLOCK_TYPE"] ?? '');
$arParams["IBLOCK_ID"] = (int)($arParams["IBLOCK_ID"] ?? 0);
$arParams["SECTION_ID"] = (int)($arParams["SECTION_ID"] ?? 0);
$arParams["SECTION_CODE"] = trim($arParams["SECTION_CODE"] ?? '');

$arParams["SECTION_URL"] = trim($arParams["SECTION_URL"] ?? '');

$arParams["TOP_DEPTH"] = (int)($arParams["TOP_DEPTH"] ?? 0);
if($arParams["TOP_DEPTH"] <= 0)
{
	$arParams["TOP_DEPTH"] = 2;
}
$arParams["COUNT_ELEMENTS"] = !(isset($arParams["COUNT_ELEMENTS"]) && $arParams["COUNT_ELEMENTS"] === "N");
if (!isset($arParams["COUNT_ELEMENTS_FILTER"]))
{
	$arParams["COUNT_ELEMENTS_FILTER"] = "CNT_ACTIVE";
}
if (
	$arParams["COUNT_ELEMENTS_FILTER"] !== "CNT_ALL"
	&& $arParams["COUNT_ELEMENTS_FILTER"] !== "CNT_ACTIVE"
	&& $arParams["COUNT_ELEMENTS_FILTER"] !== "CNT_AVAILABLE"
)
{
	$arParams["COUNT_ELEMENTS_FILTER"] = "CNT_ALL";
}
$arParams["ADD_SECTIONS_CHAIN"] = !(isset($arParams["ADD_SECTIONS_CHAIN"]) && $arParams["ADD_SECTIONS_CHAIN"] === "N"); //Turn on by default

if (
	empty($arParams["FILTER_NAME"])
	|| !preg_match("/^[A-Za-z_][A-Za-z01-9_]*$/", $arParams["FILTER_NAME"])
)
{
	$arrFilter = array();
}
else
{
	global ${$arParams["FILTER_NAME"]};
	$arrFilter = ${$arParams["FILTER_NAME"]};
	if(!is_array($arrFilter))
	{
		$arrFilter = [];
	}
}

$arParams["CACHE_FILTER"] = isset($arParams["CACHE_FILTER"]) && $arParams["CACHE_FILTER"] == "Y";
if(!$arParams["CACHE_FILTER"] && !empty($arrFilter))
{
	$arParams["CACHE_TIME"] = 0;
}

$arParams['SHOW_TITLE'] = ($arParams['SHOW_TITLE'] ?? 'N') === 'Y';

$arResult["SECTIONS"] = array();

/*************************************************************************
			Work with cache
*************************************************************************/
if ($this->startResultCache(
	false,
	array($arrFilter, ($arParams["CACHE_GROUPS"]==="N"? false: $USER->GetGroups()))
))
{
	if (!Loader::includeModule("iblock"))
	{
		$this->abortResultCache();
		ShowError(Loc::getMessage("IBLOCK_MODULE_NOT_INSTALLED"));
		return;
	}

	$existIblock = Iblock\IblockSiteTable::getList(array(
		'select' => array('IBLOCK_ID'),
		'filter' => array(
			'=IBLOCK_ID' => $arParams['IBLOCK_ID'],
			'=SITE_ID' => SITE_ID,
			'=IBLOCK.ACTIVE' => 'Y',
		),
	))->fetch();
	if (empty($existIblock))
	{
		$this->abortResultCache();
		return;
	}

	$countTitleSuffix = '_ELEMENT';
	if (Loader::includeModule('catalog'))
	{
		$catalog = CCatalogSku::GetInfoByIBlock($arParams['IBLOCK_ID']);
		if (!empty($catalog))
		{
			$countTitleSuffix = '_PRODUCT';
		}
	}

	$arFilter = array(
		"ACTIVE" => "Y",
		"GLOBAL_ACTIVE" => "Y",
		"IBLOCK_ID" => $arParams["IBLOCK_ID"],
	);

	$arSelect = array();

	if (!empty($arParams["SECTION_FIELDS"]) && is_array($arParams["SECTION_FIELDS"]))
	{
		foreach($arParams["SECTION_FIELDS"] as &$field)
		{
			if (!empty($field) && is_string($field))
			{
				$arSelect[] = $field;
			}
		}
		unset($field);
	}
	if (!empty($arSelect))
	{
		$arSelect = array_merge(
			$arSelect,
			array(
				"ID",
				"NAME",
				"LEFT_MARGIN",
				"RIGHT_MARGIN",
				"DEPTH_LEVEL",
				"IBLOCK_ID",
				"IBLOCK_SECTION_ID",
				"LIST_PAGE_URL",
				"SECTION_PAGE_URL"
			)
		);
	}
	$boolPicture = empty($arSelect) || in_array('PICTURE', $arSelect);

	if (!empty($arParams["SECTION_USER_FIELDS"]) && is_array($arParams["SECTION_USER_FIELDS"]))
	{
		foreach($arParams["SECTION_USER_FIELDS"] as &$field)
		{
			if(is_string($field) && preg_match("/^UF_/", $field))
			{
				$arSelect[] = $field;
			}
		}
		unset($field);
	}
	$arSelect = array_unique($arSelect);

	$arResult["SECTION"] = false;
	$intSectionDepth = 0;
	if($arParams["SECTION_ID"]>0)
	{
		$arFilter["ID"] = $arParams["SECTION_ID"];
		$rsSections = CIBlockSection::GetList(array(), $arFilter, false, $arSelect);
		$rsSections->SetUrlTemplates("", $arParams["SECTION_URL"]);
		$arResult["SECTION"] = $rsSections->GetNext();
	}
	elseif ($arParams["SECTION_CODE"] !== '')
	{
		$arFilter["=CODE"] = $arParams["SECTION_CODE"];
		$rsSections = CIBlockSection::GetList(array(), $arFilter, false, $arSelect);
		$rsSections->SetUrlTemplates("", $arParams["SECTION_URL"]);
		$arResult["SECTION"] = $rsSections->GetNext();
	}

	if (is_array($arResult["SECTION"]))
	{
		$arResult["SECTION"]["~ELEMENT_CNT"] = null;
		$arResult["SECTION"]["ELEMENT_CNT"] = null;
		unset($arFilter["ID"]);
		unset($arFilter["=CODE"]);
		$arFilter["LEFT_MARGIN"] = $arResult["SECTION"]["LEFT_MARGIN"] + 1;
		$arFilter["RIGHT_MARGIN"] = $arResult["SECTION"]["RIGHT_MARGIN"];
		$arFilter["<="."DEPTH_LEVEL"] = $arResult["SECTION"]["DEPTH_LEVEL"] + $arParams["TOP_DEPTH"];

		$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arResult["SECTION"]["IBLOCK_ID"], $arResult["SECTION"]["ID"]);
		$arResult["SECTION"]["IPROPERTY_VALUES"] = $ipropValues->getValues();

		$arResult["SECTION"]["PATH"] = array();
		$rsPath = CIBlockSection::GetNavChain(
			$arResult["SECTION"]["IBLOCK_ID"],
			$arResult["SECTION"]["ID"],
			array(
				"ID", "CODE", "XML_ID", "EXTERNAL_ID", "IBLOCK_ID",
				"IBLOCK_SECTION_ID", "SORT", "NAME", "ACTIVE",
				"DEPTH_LEVEL", "SECTION_PAGE_URL"
			)
		);
		$rsPath->SetUrlTemplates("", $arParams["SECTION_URL"]);
		while($arPath = $rsPath->GetNext())
		{
			if ($arParams["ADD_SECTIONS_CHAIN"])
			{
				$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arParams["IBLOCK_ID"], $arPath["ID"]);
				$arPath["IPROPERTY_VALUES"] = $ipropValues->getValues();
			}
			$arResult["SECTION"]["PATH"][]=$arPath;
		}
	}
	else
	{
		$arResult["SECTION"] = array(
			"ID" => 0,
			"DEPTH_LEVEL" => 0,
		);
		$arFilter["<="."DEPTH_LEVEL"] = $arParams["TOP_DEPTH"];
	}
	$intSectionDepth = $arResult["SECTION"]['DEPTH_LEVEL'];

	$sectionFilter = array_merge($arrFilter, $arFilter);

	$elementCountFilter = array(
		"IBLOCK_ID" => $arParams["IBLOCK_ID"],
		"CHECK_PERMISSIONS" => "Y",
		"MIN_PERMISSION" => "R",
		"INCLUDE_SUBSECTIONS" => (isset($sectionFilter["ELEMENT_SUBSECTIONS"]) && $sectionFilter["ELEMENT_SUBSECTIONS"] == "N" ? "N" : "Y")
	);
	if (!empty($sectionFilter['PROPERTY']) && is_array($sectionFilter['PROPERTY']))
	{
		foreach (array_keys($sectionFilter['PROPERTY']) as $propertyId)
		{
			$field = CIBlock::MkOperationFilter($propertyId);
			$elementCountFilter[$field['PREFIX'].'PROPERTY_'.$field['FIELD']] = $sectionFilter['PROPERTY'][$propertyId];
		}
		unset($field, $propertyId, $value);
	}

	switch ($arParams["COUNT_ELEMENTS_FILTER"])
	{
		case "CNT_ALL":
			break;
		case "CNT_ACTIVE":
			$elementCountFilter["ACTIVE"] = "Y";
			$elementCountFilter["ACTIVE_DATE"] = "Y";
			break;
		case "CNT_AVAILABLE":
			$elementCountFilter["ACTIVE"] = "Y";
			$elementCountFilter["ACTIVE_DATE"] = "Y";
			$elementCountFilter["AVAILABLE"] = "Y";
			break;
	}

	if ($arParams["COUNT_ELEMENTS"] && $arResult['SECTION']['ID'] > 0)
	{
		$elementFilter = $elementCountFilter;
		$elementFilter['SECTION_ID'] = $arResult['SECTION']['ID'];
		if ($arResult['SECTION']['RIGHT_MARGIN'] == ($arResult['SECTION']['LEFT_MARGIN'] + 1))
		{
			$elementFilter['INCLUDE_SUBSECTIONS'] = 'N';
		}
		$arResult["SECTION"]["~ELEMENT_CNT"] = CIBlockElement::GetList(array(), $elementFilter, array());
		$arResult["SECTION"]["ELEMENT_CNT"] = $arResult["SECTION"]["~ELEMENT_CNT"];

		if (!empty($arResult["SECTION"]["ELEMENT_CNT"]))
		{
			$count = (int)$arResult["SECTION"]["ELEMENT_CNT"];
			$val = ($count < 100 ? $count : $count % 100);
			$dec = $val % 10;

			if ($val == 0)
			{
				$messageId = 'CP_BCSL_MESS_COUNT_ZERO';
			}
			elseif ($val == 1)
			{
				$messageId = 'CP_BCSL_MESS_COUNT_ONE';
			}
			elseif ($val >= 10 && $val <= 20)
			{
				$messageId = 'CP_BCSL_MESS_COUNT_TEN';
			}
			elseif ($dec == 1)
			{
				$messageId = 'CP_BCSL_MESS_COUNT_MOD_ONE';
			}
			elseif (2 <= $dec && $dec <= 4)
			{
				$messageId = 'CP_BCSL_MESS_COUNT_MOD_TWO';
			}
			else
			{
				$messageId = 'CP_BCSL_MESS_COUNT_OTHER';
			}
			$messageId .= $countTitleSuffix;

			$arResult["SECTION"]['ELEMENT_CNT_TITLE'] = Loc::getMessage($messageId, ['#VALUE#' => $count]);
		}
	}

	//ORDER BY

	$arSort = array();
	if (!empty($this->arParams['CUSTOM_SECTION_SORT']) && is_array($this->arParams['CUSTOM_SECTION_SORT']))
	{
		foreach ($this->arParams['CUSTOM_SECTION_SORT'] as $field => $value)
		{
			if (!is_string($value))
			{
				continue;
			}
			$field = strtoupper($field);
			if (isset($arSort[$field]))
			{
				continue;
			}
			if (!preg_match('/^(asc|desc|nulls)(,asc|,desc|,nulls)?$/i', $value))
			{
				continue;
			}
			$arSort[$field] = $value;
		}
		unset($field, $value);
	}

	if (empty($arSort))
	{
		$arSort = array(
			"LEFT_MARGIN" => "ASC",
		);
	}

	//EXECUTE
	$rsSections = CIBlockSection::GetList($arSort, $sectionFilter, false, $arSelect);
	$rsSections->SetUrlTemplates("", $arParams["SECTION_URL"]);
	while($arSection = $rsSections->GetNext())
	{
		\Bitrix\Iblock\InheritedProperty\SectionValues::queue($arSection["IBLOCK_ID"], $arSection["ID"]);

		$arSection['RELATIVE_DEPTH_LEVEL'] = $arSection['DEPTH_LEVEL'] - $intSectionDepth;

		$arButtons = CIBlock::GetPanelButtons(
			$arSection["IBLOCK_ID"],
			0,
			$arSection["ID"],
			array("SESSID"=>false, "CATALOG"=>true)
		);
		$arSection["EDIT_LINK"] = $arButtons["edit"]["edit_section"]["ACTION_URL"];
		$arSection["DELETE_LINK"] = $arButtons["edit"]["delete_section"]["ACTION_URL"];

		$arSection["~ELEMENT_CNT"] = null;
		$arSection["ELEMENT_CNT"] = null;
		$arSection['ELEMENT_CNT_TITLE'] = '';

		$arResult["SECTIONS"][]=$arSection;
	}

	foreach ($arResult["SECTIONS"] as &$arSection)
	{
		$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arSection["IBLOCK_ID"], $arSection["ID"]);
		$arSection["IPROPERTY_VALUES"] = $ipropValues->getValues();

		if ($boolPicture)
		{
			\Bitrix\Iblock\Component\Tools::getFieldImageData(
				$arSection,
				array('PICTURE'),
				\Bitrix\Iblock\Component\Tools::IPROPERTY_ENTITY_SECTION,
				'IPROPERTY_VALUES'
			);
		}

		if ($arParams["COUNT_ELEMENTS"])
		{
			$elementFilter = $elementCountFilter;
			$elementFilter["SECTION_ID"] = $arSection["ID"];
			if ($arSection['RIGHT_MARGIN'] == ($arSection['LEFT_MARGIN'] + 1))
			{
				$elementFilter['INCLUDE_SUBSECTIONS'] = 'N';
			}
			$arSection["~ELEMENT_CNT"] = CIBlockElement::GetList(array(), $elementFilter, array());
			$arSection["ELEMENT_CNT"] = $arSection["~ELEMENT_CNT"];
			if (!empty($arSection["ELEMENT_CNT"]))
			{
				$count = (int)$arSection["ELEMENT_CNT"];
				$val = ($count < 100 ? $count : $count % 100);
				$dec = $val % 10;

				if ($val == 0)
				{
					$messageId = 'CP_BCSL_MESS_COUNT_ZERO';
				}
				elseif ($val == 1)
				{
					$messageId = 'CP_BCSL_MESS_COUNT_ONE';
				}
				elseif ($val >= 10 && $val <= 20)
				{
					$messageId = 'CP_BCSL_MESS_COUNT_TEN';
				}
				elseif ($dec == 1)
				{
					$messageId = 'CP_BCSL_MESS_COUNT_MOD_ONE';
				}
				elseif (2 <= $dec && $dec <= 4)
				{
					$messageId = 'CP_BCSL_MESS_COUNT_MOD_TWO';
				}
				else
				{
					$messageId = 'CP_BCSL_MESS_COUNT_OTHER';
				}
				$messageId .= $countTitleSuffix;

				$arSection['ELEMENT_CNT_TITLE'] = Loc::getMessage($messageId, ['#VALUE#' => $count]);
			}
		}
	}
	unset($arSection);

	$arResult["SECTIONS_COUNT"] = count($arResult["SECTIONS"]);

	$this->setResultCacheKeys(array(
		"SECTIONS_COUNT",
		"SECTION",
	));

	$this->includeComponentTemplate();
}

if ($arResult["SECTIONS_COUNT"] > 0 || isset($arResult["SECTION"]))
{
	if(
		$USER->IsAuthorized()
		&& $APPLICATION->GetShowIncludeAreas()
		&& Loader::includeModule("iblock")
	)
	{
		$UrlDeleteSectionButton = "";
		if (isset($arResult["SECTION"]) && $arResult["SECTION"]['IBLOCK_SECTION_ID'] > 0)
		{
			$rsSection = CIBlockSection::GetList(
				array(),
				array("=ID" => $arResult["SECTION"]['IBLOCK_SECTION_ID']),
				false,
				array("SECTION_PAGE_URL")
			);
			$rsSection->SetUrlTemplates("", $arParams["SECTION_URL"]);
			$arSection = $rsSection->GetNext();
			$UrlDeleteSectionButton = $arSection["SECTION_PAGE_URL"];
		}

		if (empty($UrlDeleteSectionButton))
		{
			$url_template = CIBlock::GetArrayByID($arParams["IBLOCK_ID"], "LIST_PAGE_URL");
			$arIBlock = CIBlock::GetArrayByID($arParams["IBLOCK_ID"]);
			$arIBlock["IBLOCK_CODE"] = $arIBlock["CODE"];
			$UrlDeleteSectionButton = CIBlock::ReplaceDetailUrl($url_template, $arIBlock, true, false);
		}

		$arReturnUrl = array(
			"add_section" => (
				'' != $arParams["SECTION_URL"]?
				$arParams["SECTION_URL"]:
				CIBlock::GetArrayByID($arParams["IBLOCK_ID"], "SECTION_PAGE_URL")
			),
			"add_element" => (
				'' != $arParams["SECTION_URL"]?
				$arParams["SECTION_URL"]:
				CIBlock::GetArrayByID($arParams["IBLOCK_ID"], "SECTION_PAGE_URL")
			),
			"delete_section" => $UrlDeleteSectionButton,
		);
		$arButtons = CIBlock::GetPanelButtons(
			$arParams["IBLOCK_ID"],
			0,
			$arResult["SECTION"]["ID"],
			array("RETURN_URL" =>  $arReturnUrl, "CATALOG"=>true)
		);

		$this->addIncludeAreaIcons(CIBlock::GetComponentMenu($APPLICATION->GetPublicShowMode(), $arButtons));
	}

	if($arParams["ADD_SECTIONS_CHAIN"] && isset($arResult["SECTION"]) && is_array($arResult["SECTION"]["PATH"]))
	{
		foreach($arResult["SECTION"]["PATH"] as $arPath)
		{
			if (
				isset($arPath["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"])
				&& $arPath["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"] !== ""
			)
			{
				$APPLICATION->AddChainItem(
					$arPath["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"],
					$arPath["~SECTION_PAGE_URL"]
				);
			}
			else
			{
				$APPLICATION->AddChainItem(
					$arPath["NAME"],
					$arPath["~SECTION_PAGE_URL"]
				);
			}
		}
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit