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/ilovecveti.ru/bitrix/modules/iblock/lib/property/type/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/iblock/lib/property/type/propertytypesettings.php
<?php

namespace Bitrix\Iblock\Property\Type;

use Bitrix\Iblock\PropertyTable;
use CIBlockProperty;

final class PropertyTypeSettings
{
	private string $propertyType;
	private ?string $userType;
	private array $setValues = [];
	private array $showedFields = [];
	private array $hiddenFields = [];
	private ?string $settingsHtml = null;
	private ?string $defaultValueHtml = null;

	/**
	 * @param string $propertyType
	 * @param string|null $userType
	 */
	public function __construct(string $propertyType, ?string $userType = null)
	{
		$this->propertyType = $propertyType;
		$this->userType = $userType;

		$this->initHiddenFields();
	}

	/**
	 * Property type (is simple).
	 *
	 * If property with user type (as `S:HTML`), this method returns `S`.
	 *
	 * @return string
	 */
	public function getPropertyType(): string
	{
		return $this->propertyType;
	}

	/**
	 * Property user type.
	 *
	 * @return string|null
	 */
	public function getUserType(): ?string
	{
		return $this->userType;
	}

	/**
	 * Initialization of fields that should not be displayed in the editor.
	 *
	 * @return void
	 */
	private function initHiddenFields(): void
	{
		if ($this->propertyType === PropertyTable::TYPE_ELEMENT)
		{
			$this->hiddenFields[] = 'SEARCHABLE';
			$this->hiddenFields[] = 'WITH_DESCRIPTION';
			$this->hiddenFields[] = 'COL_COUNT';
			$this->hiddenFields[] = 'DEFAULT_VALUE';
		}
		elseif ($this->propertyType === PropertyTable::TYPE_SECTION)
		{
			$this->hiddenFields[] = 'SEARCHABLE';
			$this->hiddenFields[] = 'WITH_DESCRIPTION';
			$this->hiddenFields[] = 'COL_COUNT';
			$this->hiddenFields[] = 'DEFAULT_VALUE';
		}
		elseif ($this->propertyType === PropertyTable::TYPE_LIST)
		{
			$this->hiddenFields[] = 'WITH_DESCRIPTION';
			$this->hiddenFields[] = 'MULTIPLE_CNT';
			$this->hiddenFields[] = 'COL_COUNT';
			$this->hiddenFields[] = 'DEFAULT_VALUE';
		}
		elseif ($this->propertyType === PropertyTable::TYPE_FILE)
		{
			$this->hiddenFields[] = 'FILTERABLE';
			$this->hiddenFields[] = 'MULTIPLE_CNT';
			$this->hiddenFields[] = 'SMART_FILTER';
			$this->hiddenFields[] = 'DISPLAY_TYPE';
			$this->hiddenFields[] = 'DISPLAY_EXPANDED';
			$this->hiddenFields[] = 'FILTER_HINT';
			$this->hiddenFields[] = 'DEFAULT_VALUE';
			$this->hiddenFields[] = 'ROW_COUNT';
		}
		elseif ($this->userType === PropertyTable::USER_TYPE_HTML)
		{
			$this->hiddenFields[] = 'MULTIPLE';
		}

		// hidden for NOT need type

		if ($this->propertyType !== PropertyTable::TYPE_LIST)
		{
			$this->hiddenFields[] = 'LIST_TYPE';
		}

		if ($this->propertyType !== PropertyTable::TYPE_FILE)
		{
			$this->hiddenFields[] = 'FILE_TYPE';
		}

		if (
			!in_array($this->propertyType, [PropertyTable::TYPE_SECTION, PropertyTable::TYPE_ELEMENT], true)
			&& $this->userType !== PropertyTable::USER_TYPE_SKU
		)
		{
			$this->hiddenFields[] = 'LINK_IBLOCK_ID';
		}
	}

	public function appendShowedFields(array $fields): void
	{
		array_push($this->showedFields, ...$fields);
	}

	public function appendHiddenFields(array $fields): void
	{
		foreach ($fields as $name)
		{
			$this->hiddenFields[] = $name;

			if ($name === 'SMART_FILTER')
			{
				$this->hiddenFields[] = 'DISPLAY_TYPE';
				$this->hiddenFields[] = 'DISPLAY_EXPANDED';
				$this->hiddenFields[] = 'FILTER_HINT';
			}
		}
	}

	/**
	 * Factory method for creating and filling an instance with html settings or editor fields.
	 *
	 * @param string $propertyType
	 * @param string $userType
	 * @param array $propertyFields
	 * @param string|null $htmlName
	 *
	 * @return self
	 */
	public static function createByUserType(string $propertyType, string $userType, array $propertyFields, ?string $htmlName = 'USER_TYPE_SETTINGS'): self
	{
		$self = new self($propertyType, $userType);
		$userTypeFields = CIBlockProperty::GetUserType($userType);

		$excludeSettingsHtmlUserTypes = [
			PropertyTable::USER_TYPE_DIRECTORY,
		];

		if (
			isset($userTypeFields["GetSettingsHTML"])
			&& !in_array($userType, $excludeSettingsHtmlUserTypes, true)
			&& is_callable($userTypeFields["GetSettingsHTML"])
		)
		{
			$config = [];
			$htmlCode = call_user_func_array(
				$userTypeFields["GetSettingsHTML"],
				[
					$propertyFields,
					[
						'NAME' => $htmlName,
					],
					&$config,
				]
			);

			if (!empty($htmlCode) && is_string($htmlCode))
			{
				$self->settingsHtml = $htmlCode;
			}

			if (isset($config['SHOW']) && is_array($config['SHOW']))
			{
				$self->appendShowedFields($config['SHOW']);
			}

			if (isset($config['HIDE']) && is_array($config['HIDE']))
			{
				$self->appendHiddenFields($config['HIDE']);
			}

			if (isset($config['SET']) && is_array($config['SET']))
			{
				$self->setValues = $config['SET'];
			}
		}

		if (isset($userTypeFields["GetPropertyFieldHtml"]) && is_callable($userTypeFields["GetPropertyFieldHtml"]))
		{
			$htmlCode = call_user_func_array(
				$userTypeFields["GetPropertyFieldHtml"],
				[
					$propertyFields,
					[
						'VALUE' => $propertyFields['DEFAULT_VALUE'] ?? null,
						'DESCRIPTION' => '',
					],
					[
						'VALUE' => 'DEFAULT_VALUE',
						'DESCRIPTION' => '',
						'MODE' => 'EDIT_FORM',
						'FORM_NAME' => '',
					],
				]
			);

			if (!empty($htmlCode) && is_string($htmlCode))
			{
				$self->defaultValueHtml = $htmlCode;
			}
		}

		return $self;
	}

	/**
	 * Checking whether the field is displayed.
	 *
	 * @param string $fieldName
	 *
	 * @return bool
	 */
	public function isShownField(string $fieldName): bool
	{
		$hide = false;

		if (!empty($this->hiddenFields))
		{
			$hide =
				in_array($fieldName, $this->hiddenFields, true)
				&& !in_array($fieldName, $this->showedFields, true)
			;
		}

		return !$hide;
	}

	public function getSettingsHtml(): ?string
	{
		return $this->settingsHtml;
	}

	public function getDefaultValueHtml(): ?string
	{
		return $this->defaultValueHtml;
	}

	public function getSetValues(): array
	{
		return $this->setValues;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit