Your IP : 3.147.104.221


Current Path : /var/www/axolotl/data/www/krym.axolotls.ru/bitrix/modules/lists/lib/entity/
Upload File :
Current File : /var/www/axolotl/data/www/krym.axolotls.ru/bitrix/modules/lists/lib/entity/section.php

<?
namespace Bitrix\Lists\Entity;

use Bitrix\Lists\Service\Param;
use Bitrix\Main\Error;
use Bitrix\Main\Errorable;
use Bitrix\Main\ErrorCollection;
use Bitrix\Main\ErrorableImplementation;

class Section implements Controllable, Errorable
{
	use ErrorableImplementation;

	const ERROR_ADD_SECTION = "ERROR_ADD_SECTION";
	const ERROR_UPDATE_SECTION = "ERROR_UPDATE_SECTION";
	const ERROR_DELETE_SECTION = "ERROR_DELETE_SECTION";
	const ERROR_SECTION_NOT_FOUND = "ERROR_SECTION_NOT_FOUND";

	private $param;
	private $params = [];
	private $fieldList = [];
	private $filterList = [];
	private $selectList = [];

	private $iblockId;
	private $sectionId;

	public function __construct(Param $param)
	{
		$this->param = $param;
		$this->params = $param->getParams();

		$this->fieldList = ["ID", "CODE", "EXTERNAL_ID", "XML_ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "TIMESTAMP_X",
			"SORT", "NAME", "ACTIVE", "SORT", "PICTURE", "DESCRIPTION", "DESCRIPTION_TYPE", "MODIFIED_BY",
			"DATE_CREATE", "CREATED_BY", "DETAIL_PICTURE", "SECTION_PROPERTY"];

		$this->filterList = ["ACTIVE", "GLOBAL_ACTIVE", "NAME", "CODE", "XML_ID", "EXTERNAL_ID", "SECTION_ID",
			"DEPTH_LEVEL", "LEFT_BORDER", "RIGHT_BORDER", "LEFT_MARGIN", "RIGHT_MARGIN", "IBLOCK_ID", "ID",
			"IBLOCK_ACTIVE", "IBLOCK_NAME", "IBLOCK_TYPE", "IBLOCK_CODE", "IBLOCK_XML_ID", "IBLOCK_EXTERNAL_ID",
			"TIMESTAMP_X", "DATE_CREATE", "MODIFIED_BY", "CREATED_BY", "SOCNET_GROUP_ID", "MIN_PERMISSION",
			"CHECK_PERMISSIONS", "PERMISSIONS_BY", "PROPERTY"];

		$this->selectList = ["ID", "CODE", "EXTERNAL_ID", "XML_ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "TIMESTAMP_X",
			"SORT", "NAME", "ACTIVE", "GLOBAL_ACTIVE", "PICTURE", "DESCRIPTION", "DESCRIPTION_TYPE", "LEFT_MARGIN",
			"RIGHT_MARGIN", "DEPTH_LEVEL", "SEARCHABLE_CONTENT", "SECTION_PAGE_URL", "MODIFIED_BY", "DATE_CREATE",
			 "CREATED_BY", "DETAIL_PICTURE"];

		$this->iblockId = Utils::getIblockId($this->params);
		$this->sectionId = Utils::getSectionId($this->params);

		$this->errorCollection = new ErrorCollection;
	}

	/**
	 * Checks whether an section exists.
	 *
	 * @return bool
	 */
	public function isExist()
	{
		$this->param->checkRequiredInputParams(["IBLOCK_CODE", "IBLOCK_ID", "SECTION_ID", "SECTION_CODE"]);
		if ($this->param->hasErrors())
		{
			$this->errorCollection->add($this->param->getErrors());
			return false;
		}

		$filter = [
			"ID" => $this->sectionId,
			"IBLOCK_ID" => $this->iblockId,
			"CHECK_PERMISSIONS" => "N",
		];
		$queryObject = \CIBlockSection::getList([], $filter, false, ["ID"]);

		return (bool) $queryObject->fetch();
	}

	/**
	 * Adds an section.
	 *
	 * @return int|bool
	 */
	public function add()
	{
		$this->param->checkRequiredInputParams(["IBLOCK_CODE", "IBLOCK_ID", "SECTION_CODE", ["FIELDS" => ["NAME"]]]);
		if ($this->param->hasErrors())
		{
			$this->errorCollection->add($this->param->getErrors());
			return false;
		}

		$sectionObject = new \CIBlockSection;
		$result = $sectionObject->add($this->getFields());

		if ($result)
		{
			return (int)$result;
		}
		else
		{
			if ($sectionObject->LAST_ERROR)
			{
				$this->errorCollection->setError(new Error($sectionObject->LAST_ERROR, self::ERROR_ADD_SECTION));
			}
			else
			{
				$this->errorCollection->setError(new Error("Unknown error", self::ERROR_ADD_SECTION));
			}

			return false;
		}
	}

	/**
	 * Returns a list of section data.
	 *
	 * @param array $navData Navigation data.
	 *
	 * @return array
	 */
	public function get(array $navData = [])
	{
		$this->param->checkRequiredInputParams(["IBLOCK_TYPE_ID", "IBLOCK_CODE", "IBLOCK_ID"]);
		if ($this->param->hasErrors())
		{
			$this->errorCollection->add($this->param->getErrors());
			return [];
		}

		$sections = [];

		$filter = $this->getFilter($this->iblockId);

		$select = $this->getSelectList($this->params["SELECT"]);

		$queryObject = \CIBlockSection::getList([], $filter, false, $select, $navData);
		while ($section = $queryObject->fetch())
		{
			$sections[] = $section;
		}

		return [$sections, $queryObject];
	}

	/**
	 * Updates an section.
	 *
	 * @return bool
	 */
	public function update()
	{
		$this->param->checkRequiredInputParams(["IBLOCK_CODE", "IBLOCK_ID",
			"SECTION_ID", "SECTION_CODE", ["FIELDS" => ["NAME"]]]);
		if ($this->param->hasErrors())
		{
			$this->errorCollection->add($this->param->getErrors());
			return false;
		}

		$sectionObject = new \CIBlockSection;
		if ($sectionObject->update($this->sectionId, $this->getFields()))
		{
			return true;
		}
		else
		{
			if ($sectionObject->LAST_ERROR)
			{
				$this->errorCollection->setError(new Error($sectionObject->LAST_ERROR, self::ERROR_UPDATE_SECTION));
			}
			else
			{
				$this->errorCollection->setError(new Error("Unknown error", self::ERROR_UPDATE_SECTION));
			}

			return false;
		}
	}

	/**
	 * Deletes an section.
	 *
	 * @return bool
	 */
	public function delete()
	{
		$this->param->checkRequiredInputParams(["SECTION_ID", "SECTION_CODE"]);
		if ($this->param->hasErrors())
		{
			$this->errorCollection->add($this->param->getErrors());
			return false;
		}

		$sectionObject = new \CIBlockSection;
		if ($sectionObject->delete($this->sectionId, false))
		{
			return true;
		}
		else
		{
			if ($sectionObject->LAST_ERROR)
			{
				$this->errorCollection->setError(new Error($sectionObject->LAST_ERROR, self::ERROR_DELETE_SECTION));
			}
			else
			{
				$this->errorCollection->setError(new Error("Unknown error", self::ERROR_DELETE_SECTION));
			}

			return false;
		}
	}

	private function getFields()
	{
		$fields = [
			"IBLOCK_ID" => $this->iblockId,
			"CODE" => $this->params["SECTION_CODE"],
			"IBLOCK_SECTION_ID" => $this->params["IBLOCK_SECTION_ID"] ? (int)$this->params["IBLOCK_SECTION_ID"] : 0,
			"CHECK_PERMISSIONS" => "N"
		];

		foreach ($this->params["FIELDS"] as $fieldId => $fieldValue)
		{
			if (!in_array($fieldId, $this->fieldList))
			{
				continue;
			}

			if ($fieldId == "PICTURE")
			{
				$fieldValue = \CRestUtil::saveFile($fieldValue);
			}

			$fields[$fieldId] = $fieldValue;
		}

		return $fields;
	}

	private function getFilter($iblockId)
	{
		$filter = [
			"IBLOCK_ID" => $iblockId,
			"CHECK_PERMISSIONS" => "N",
		];

		if (!is_array($this->params["FILTER"]))
		{
			$this->params["FILTER"] = [];
		}

		foreach ($this->params["FILTER"] as $fieldId => $fieldValue)
		{
			if (in_array($fieldId, $this->filterList))
			{
				$filter[$fieldId] = $fieldValue;
			}
		}

		return $filter;
	}

	private function getSelectList($inputSelectList)
	{
		$selectList = [];

		if (!is_array($inputSelectList))
		{
			$inputSelectList = [];
		}

		foreach ($inputSelectList as $fieldId)
		{
			if (in_array($fieldId, $this->selectList))
			{
				$selectList[] = $fieldId;
			}
		}

		return $selectList;
	}
}