AnonSec Shell
Server IP : 85.193.89.191  /  Your IP : 3.135.203.3
Web Server : Apache
System : Linux 956367-cx40159.tmweb.ru 3.10.0-1160.105.1.el7.x86_64 #1 SMP Thu Dec 7 15:39:45 UTC 2023 x86_64
User : bitrix ( 600)
PHP Version : 8.1.27
Disable Function : NONE
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/bitrix/www/bitrix/modules/sender/lib/connector/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/bitrix/www/bitrix/modules/sender/lib/connector/basefilter.php
<?php
/**
 * Bitrix Framework
 * @package bitrix
 * @subpackage sender
 * @copyright 2001-2012 Bitrix
 */
namespace Bitrix\Sender\Connector;

use Bitrix\Main\Localization\Loc;
use Bitrix\Main\UI\Filter\Options as FilterOptions;

Loc::loadMessages(__FILE__);

/**
 * Class BaseFilter
 * @package Bitrix\Sender\Connector
 */
abstract class BaseFilter extends Base
{
	public const FIELD_FOR_PRESET_ALL = 'SENDER_SELECT_ALL';
	public const FIELD_PRESET_ID = 'BX_PRESET_ID';

	/** @var string	$filterSettingsUri Filter settings uri. */
	protected $filterSettingsUri = '';

	/**
	 * Get form html.
	 *
	 * @return string
	 */
	final public function getForm()
	{
		$presets = $this->getUiFilterPresets();
		$currentPresetId = $this->getCurrentPresetId();
		if ($currentPresetId && isset($presets[$currentPresetId]))
		{
			$preset[$currentPresetId]['default'] = true;
		}

		$filterId = $this->getUiFilterId();
		$this->clearFilterState($filterId);
		$filter = static::getFilterFields(checkAccessRights: $this->isCheckAccessRights());
		return $this->buildUi($filterId, $currentPresetId, $presets, $filter);
	}

	/**
	 * Get form html.
	 *
	 * @param array $params
	 *
	 * @return string
	 */
	final public function getCustomForm(array $params)
	{
		$presets = $params['presets']??$this->getUiFilterPresets();
		$currentPresetId = $params['current_preset_id']??$this->getCurrentPresetId();
		if ($currentPresetId && isset($presets[$currentPresetId]))
		{
			$preset[$currentPresetId]['default'] = true;
		}

		$filterId = $params['filter_id']??$this->getUiFilterId();
		$this->clearFilterState($filterId);
		$filter = static::getFilterFields($params['filter'], $this->isCheckAccessRights());

		return $this->buildUi($filterId, $currentPresetId, $presets, $filter);
	}

	private function buildUi($filterId, $currentPresetId, $presets, $filter)
	{
		ob_start();
		$GLOBALS['APPLICATION']->includeComponent(
			"bitrix:main.ui.filter",
			"",
			array(
				"FILTER_ID" => $filterId,
				"CURRENT_PRESET" => $currentPresetId,
				"FILTER" => array_filter(
					$filter,
					function ($field)
					{
						return empty($field['sender_internal']);
					}
				),
				"FILTER_PRESETS" => $presets,
				"DISABLE_SEARCH" => true,
				"ENABLE_LABEL" => true,
			)
		);

		foreach ($this->getUiFilterFields() as $field)
		{
			if (!isset($field['sender_segment_callback']))
			{
				continue;
			}

			if (!is_callable($field['sender_segment_callback']))
			{
				continue;
			}

			echo $field['sender_segment_callback']($field);
		}

		return ob_get_clean();
	}

	/**
	 * Get date-from field value.
	 *
	 * @param string $name Field name.
	 * @param string|null $defaultValue Default value.
	 * @return null|string
	 */
	protected function getFieldDateFrom($name, $defaultValue = null)
	{
		$field = static::getUiFilterField($name);
		if (!$field)
		{
			return null;
		}
		$field['value'] = $this->getFieldValue($name, $defaultValue);

		return Filter\DateField::create($field)->getFrom();
	}

	/**
	 * Get date-to field value.
	 *
	 * @param string $name Field name.
	 * @param string|null $defaultValue Default value.
	 * @return null|string
	 */
	protected function getFieldDateTo($name, $defaultValue = null)
	{
		$field = static::getUiFilterField($name);
		if (!$field)
		{
			return null;
		}
		$field['value'] = $this->getFieldValue($name, $defaultValue);

		return Filter\DateField::create($field)->getTo();
	}

	public function getUiFilterId()
	{
		return $this->getId()  . '_%CONNECTOR_NUM%';
	}

	public function getCurrentPresetId()
	{
		return $this->getFieldValue(self::FIELD_PRESET_ID, null);
	}

	public function setFieldValues(array $fieldValues = null)
	{
		if (is_array($fieldValues) && count($fieldValues) > 0)
		{
			$values = array();
			$fields = $this->getFilterFields(checkAccessRights: $this->isCheckAccessRights());

			$systemFields = array(self::FIELD_PRESET_ID, self::FIELD_FOR_PRESET_ALL);
			foreach ($systemFields as $fieldId)
			{
				if (!isset($fieldValues[$fieldId]) || !$fieldValues[$fieldId])
				{
					continue;
				}

				$values[$fieldId] = $fieldValues[$fieldId];
			}

			foreach ($fields as $field)
			{
				if (!isset($fieldValues[$field['id']]) && !in_array($field['id'], $systemFields))
				{
					continue;
				}
				if ($field['type'] === 'dest_selector')
				{
					if (is_array($fieldValues) && array_key_exists($field['id'].'_label', $fieldValues))
					{
						$values[$field['id'].'_label']  = $fieldValues[$field['id'].'_label'];
					}
					elseif (is_array($fieldValues[$field['id']]) && array_key_exists('_label', $fieldValues[$field['id']]))
					{
						$values[$field['id'].'_label']  = $fieldValues[$field['id']]['_label'];
						$fieldValues[$field['id']] = $fieldValues[$field['id']]['_value'];
					}
				}

				$values[$field['id']] = $fieldValues[$field['id']] ?? '';
			}

			$fieldValues = $values;
		}

		parent::setFieldValues($fieldValues);
	}

	/**
	 * Get filters.
	 * Return array of field filters \Bitrix\Main\UI\Filter\Field
	 *
	 * @return \Bitrix\Main\UI\Filter\Field[]
	 */
	public static function getUiFilterFields()
	{
		return array();
	}

	/**
	 * Get UI filter fields.
	 *
	 * @param string $id ID.
	 * @return array|null
	 */
	public static function getUiFilterField($id)
	{
		foreach (static::getFilterFields() as $field)
		{
			if ($field['id'] === $id)
			{
				return $field;
			}
		}

		return null;
	}

	/**
	 * Get Ui filter data.
	 *
	 * @param string $filterId Filter ID.
	 * @return array
	 */
	public static function getUiFilterData($filterId)
	{
		$filterFields = static::getFilterFields();
		$filterOptions = new FilterOptions($filterId, static::getUiFilterPresets());
		$filterRequest = $filterOptions->getFilter($filterFields);

		$filterData = array();
		foreach ($filterFields as $field)
		{
			$fieldId = $field['id'];
			if ($field['type'] === 'dest_selector')
			{
				$destSelectorData = Filter\DestSelectorField::create($field)->fetchFieldValue($filterRequest);
				if ($destSelectorData)
				{
					$filterData[$fieldId] = $destSelectorData;
				}
			}
			elseif (isset($filterRequest[$fieldId]))
			{
				$filterData[$fieldId] = $filterRequest[$fieldId];
			}
			elseif ($field['type'] === 'date')
			{
				$dateData = Filter\DateField::create($field)->fetchFieldValue($filterRequest);
				if (is_array($dateData) && count($dateData))
				{
					$filterData[$fieldId] = $dateData;
				}
			}
			elseif ($field['type'] === 'number')
			{
				$numberData = FilterOptions::fetchNumberFieldValue(
					$fieldId . '_numsel',
					$filterRequest
				);
				if (is_array($numberData) && count($numberData))
				{
					if (count($numberData) > 1 || $numberData[$fieldId . '_numsel'] !== null)
					{
						$filterData[$fieldId] = $numberData;
					}
				}
			}
		}

		if (isset($filterRequest['PRESET_ID']) && array_key_exists($filterRequest['PRESET_ID'], static::getUiFilterPresets()))
		{
			$filterData[self::FIELD_PRESET_ID] = $filterRequest['PRESET_ID'];
		}

		return $filterData;
	}

	/**
	 * Get Ui filter presets.
	 *
	 * @return array
	 */
	protected static function getUiFilterPresets()
	{
		return array();
	}

	/**
	 * Get Ui filter presets.
	 *
	 * @param null $filter
	 * @param bool $checkAccessRights
	 *
	 * @return array
	 */
	private static function getFilterFields($filter = null, bool $checkAccessRights = true): array
	{
		$fields = $filter ?? static::getUiFilterFields($checkAccessRights);
		$fields = is_array($fields) ? $fields : array();
		$fields[] = array(
			"id" => self::FIELD_FOR_PRESET_ALL,
			"name" => Loc::getMessage('SENDER_CONNECTOR_BASE_FILTER'),
			'type' => 'checkbox',
			"default" => false,
			"sender_segment_filter" => false,
		);

		return $fields;
	}

	protected function clearFilterState($filterId)
	{
		$filterOptions = new FilterOptions($filterId, static::getUiFilterPresets());
		$settings = $filterOptions->getOptions();
		$cleared = false;
		if ($settings && ($settings['filter'] ?? false))
		{
			$filterPresetIds = ['tmp_filter', $settings['filter']];
			foreach ($filterPresetIds as $filterPresetId)
			{
				$presetSettings = $filterOptions->getFilterSettings($filterPresetId);
				if ($presetSettings && ($presetSettings['fields'] ?? false))
				{
					$filterOptions->setFilterSettings($filterPresetId, ['clear_filter' => 'Y']); // clear saved filter state
					$cleared = true;
				}
			}
		}
		if ($cleared)
		{
			$filterOptions->save();
		}
	}
}

Anon7 - 2022
AnonSec Team