%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.21.158.177
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/modules/catalog/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/catalog/lib//rounding.php
<?php
namespace Bitrix\Catalog;

use Bitrix\Main,
	Bitrix\Main\Localization\Loc;

Loc::loadMessages(__FILE__);

/**
 * Class RoundingTable
 *
 * Fields:
 * <ul>
 * <li> ID int mandatory
 * <li> CATALOG_GROUP_ID int mandatory
 * <li> PRICE double mandatory
 * <li> ROUND_TYPE int mandatory
 * <li> ROUND_PRECISION double mandatory
 * <li> CREATED_BY int optional
 * <li> DATE_CREATE datetime optional
 * <li> MODIFIED_BY int optional
 * <li> TIMESTAMP_X datetime optional
 * <li> CREATED_BY_USER reference to {@link \Bitrix\Main\UserTable}
 * <li> MODIFIED_BY_USER reference to {@link \Bitrix\Main\UserTable}
 * </ul>
 *
 * @package Bitrix\Catalog
 *
 * DO NOT WRITE ANYTHING BELOW THIS
 *
 * <<< ORMENTITYANNOTATION
 * @method static EO_Rounding_Query query()
 * @method static EO_Rounding_Result getByPrimary($primary, array $parameters = array())
 * @method static EO_Rounding_Result getById($id)
 * @method static EO_Rounding_Result getList(array $parameters = array())
 * @method static EO_Rounding_Entity getEntity()
 * @method static \Bitrix\Catalog\EO_Rounding createObject($setDefaultValues = true)
 * @method static \Bitrix\Catalog\EO_Rounding_Collection createCollection()
 * @method static \Bitrix\Catalog\EO_Rounding wakeUpObject($row)
 * @method static \Bitrix\Catalog\EO_Rounding_Collection wakeUpCollection($rows)
 */

class RoundingTable extends Main\Entity\DataManager
{
	const ROUND_MATH = 0x0001;
	const ROUND_UP = 0x0002;
	const ROUND_DOWN = 0x0004;

	/** @var int clear rounding cache flag */
	protected static $clearCache = 0;
	/** @var array price type list for clear */
	protected static $priceTypeIds = array();

	/**
	 * Returns DB table name for entity.
	 *
	 * @return string
	 */
	public static function getTableName()
	{
		return 'b_catalog_rounding';
	}

	/**
	 * Returns entity map definition.
	 *
	 * @return array
	 */
	public static function getMap()
	{
		return array(
			'ID' => new Main\Entity\IntegerField('ID', array(
				'primary' => true,
				'autocomplete' => true,
				'title' => Loc::getMessage('ROUNDING_ENTITY_ID_FIELD')
			)),
			'CATALOG_GROUP_ID' => new Main\Entity\IntegerField('CATALOG_GROUP_ID', array(
				'required' => true,
				'title' => Loc::getMessage('ROUNDING_ENTITY_CATALOG_GROUP_ID_FIELD')
			)),
			'PRICE' => new Main\Entity\FloatField('PRICE', array(
				'required' => true,
				'title' => Loc::getMessage('ROUNDING_ENTITY_PRICE_FIELD')
			)),
			'ROUND_TYPE' => new Main\Entity\EnumField('ROUND_TYPE', array(
				'required' => true,
				'values' => array(self::ROUND_MATH, self::ROUND_UP, self::ROUND_DOWN),
				'title' => Loc::getMessage('ROUNDING_ENTITY_ROUND_TYPE_FIELD')
			)),
			'ROUND_PRECISION' => new Main\Entity\FloatField('ROUND_PRECISION', array(
				'required' => true,
				'title' => Loc::getMessage('ROUNDING_ENTITY_ROUND_PRECISION_FIELD')
			)),
			'CREATED_BY' => new Main\Entity\IntegerField('CREATED_BY', array(
				'title' => Loc::getMessage('ROUNDING_ENTITY_CREATED_BY_FIELD')
			)),
			'DATE_CREATE' => new Main\Entity\DatetimeField('DATE_CREATE', array(
				'title' => Loc::getMessage('ROUNDING_ENTITY_DATE_CREATE_FIELD')
			)),
			'MODIFIED_BY' => new Main\Entity\IntegerField('MODIFIED_BY', array(
				'title' => Loc::getMessage('ROUNDING_ENTITY_MODIFIED_BY_FIELD')
			)),
			'DATE_MODIFY' => new Main\Entity\DatetimeField('DATE_MODIFY', array(
				'title' => Loc::getMessage('ROUNDING_ENTITY_TIMESTAMP_X_FIELD')
			)),
			'CREATED_BY_USER' => new Main\Entity\ReferenceField(
				'CREATED_BY_USER',
				'\Bitrix\Main\User',
				array('=this.CREATED_BY' => 'ref.ID'),
				array('join_type' => 'LEFT')
			),
			'MODIFIED_BY_USER' => new Main\Entity\ReferenceField(
				'MODIFIED_BY_USER',
				'\Bitrix\Main\User',
				array('=this.MODIFIED_BY' => 'ref.ID'),
				array('join_type' => 'LEFT')
			)
		);
	}

	/**
	 * Default onBeforeAdd handler. Absolutely necessary.
	 *
	 * @param Main\Entity\Event $event		Current data for add.
	 * @return Main\Entity\EventResult
	 */
	public static function onBeforeAdd(Main\Entity\Event $event)
	{
		$result = new Main\Entity\EventResult;
		$data = $event->getParameter('fields');

		$modifyFieldList = array();
		static::setUserId($modifyFieldList, $data, array('CREATED_BY', 'MODIFIED_BY'));
		static::setTimestamp($modifyFieldList, $data, array('DATE_CREATE', 'DATE_MODIFY'));

		if (!empty($modifyFieldList))
			$result->modifyFields($modifyFieldList);
		unset($modifyFieldList);

		return $result;
	}

	/**
	 * Default onAfterAdd handler. Absolutely necessary.
	 *
	 * @param Main\Entity\Event $event		Current data for add.
	 * @return void
	 */
	public static function onAfterAdd(Main\Entity\Event $event)
	{
		if (!static::isAllowedClearCache())
			return;
		$data = $event->getParameter('fields');
		self::$priceTypeIds[$data['CATALOG_GROUP_ID']] = $data['CATALOG_GROUP_ID'];
		unset($data);
		static::clearCache();
	}

	/**
	 * Default onBeforeUpdate handler. Absolutely necessary.
	 *
	 * @param Main\Entity\Event $event		Current data for update.
	 * @return Main\Entity\EventResult
	 */
	public static function onBeforeUpdate(Main\Entity\Event $event)
	{
		$result = new Main\Entity\EventResult;
		$data = $event->getParameter('fields');

		$modifyFieldList = array();
		static::setUserId($modifyFieldList, $data, array('MODIFIED_BY'));
		static::setTimestamp($modifyFieldList, $data, array('DATE_MODIFY'));

		if (!empty($modifyFieldList))
			$result->modifyFields($modifyFieldList);
		unset($modifyFieldList);

		return $result;
	}

	/**
	 * Default onUpdate handler. Absolutely necessary.
	 *
	 * @param Main\Entity\Event $event		Current data for update.
	 * @return void
	 */
	public static function onUpdate(Main\Entity\Event $event)
	{
		if (!static::isAllowedClearCache())
			return;
		$data = $event->getParameter('fields');
		$rule = static::getList(array(
			'select' => array('ID', 'CATALOG_GROUP_ID'),
			'filter' => array('=ID' => $event->getParameter('id'))
		))->fetch();
		if (!empty($rule))
		{
			self::$priceTypeIds[$rule['CATALOG_GROUP_ID']] = $rule['CATALOG_GROUP_ID'];
			if (isset($data['CATALOG_GROUP_ID']))
				self::$priceTypeIds[$data['CATALOG_GROUP_ID']] = $data['CATALOG_GROUP_ID'];
		}
		unset($rule, $data);
	}

	/**
	 * Default onAfterUpdate handler. Absolutely necessary.
	 *
	 * @param Main\Entity\Event $event		Current data for update.
	 * @return void
	 */
	public static function onAfterUpdate(Main\Entity\Event $event)
	{
		static::clearCache();
	}

	/**
	 * Default onDelete handler. Absolutely necessary.
	 *
	 * @param Main\Entity\Event $event		Current data for delete.
	 * @return void
	 */
	public static function onDelete(Main\Entity\Event $event)
	{
		if (!static::isAllowedClearCache())
			return;
		$rule = static::getList(array(
			'select' => array('ID', 'CATALOG_GROUP_ID'),
			'filter' => array('=ID' => $event->getParameter('id'))
		))->fetch();
		if (!empty($rule))
			self::$priceTypeIds[$rule['CATALOG_GROUP_ID']] = $rule['CATALOG_GROUP_ID'];
		unset($rule);
	}

	/**
	 * Default onAfterDelete handler. Absolutely necessary.
	 *
	 * @param Main\Entity\Event $event		Current data for delete.
	 * @return void
	 */
	public static function onAfterDelete(Main\Entity\Event $event)
	{
		static::clearCache();
	}

	/**
	 * Returns current allow mode for cache clearing.
	 *
	 * @return bool
	 */
	public static function isAllowedClearCache()
	{
		return (self::$clearCache >= 0);
	}

	/**
	 * Allow clear cache after multiuse add/update/delete.
	 *
	 * @return void
	 */
	public static function allowClearCache()
	{
		self::$clearCache++;
	}

	/**
	 * Disallow clear cache before multiuse add/update/delete.
	 *
	 * @return void
	 */
	public static function disallowClearCache()
	{
		self::$clearCache--;
	}

	/**
	 * Clear price type ids.
	 *
	 * @return void
	 */
	public static function clearPriceTypeIds()
	{
		self::$priceTypeIds = array();
	}

	/**
	 * Set price type list for cache clearing.
	 *
	 * @param string|int|array $priceTypes		Price types for cache clearing.
	 * @return void
	 */
	public static function setPriceTypeIds($priceTypes)
	{
		if (!is_array($priceTypes))
			$priceTypes = array($priceTypes => $priceTypes);

		if (!empty($priceTypes) && is_array($priceTypes))
			self::$priceTypeIds = (empty(self::$priceTypeIds) ? $priceTypes : array_merge(self::$priceTypeIds, $priceTypes));
	}

	/**
	 * Clear managed cache.
	 *
	 * @return void
	 */
	public static function clearCache()
	{
		if (!static::isAllowedClearCache() || empty(self::$priceTypeIds))
			return;
		foreach (self::$priceTypeIds as $priceType)
			Product\Price::clearRoundRulesCache($priceType);
		unset($priceType);
		static::clearPriceTypeIds();
	}

	/**
	 * Delete rules by price type.
	 *
	 * @param string|int $priceType		Price type id.
	 * @return void
	 */
	public static function deleteByPriceType($priceType)
	{
		$priceType = (int)$priceType;
		if ($priceType <= 0)
			return;
		$conn = Main\Application::getConnection();
		$helper = $conn->getSqlHelper();
		$conn->queryExecute(
			'delete from '.$helper->quote(self::getTableName()).' where '.$helper->quote('CATALOG_GROUP_ID').' = '.$priceType
		);
		unset($helper, $conn);
		Product\Price::clearRoundRulesCache($priceType);
	}

	/**
	 * Return round types.
	 *
	 * @param bool $full		Get types with description.
	 * @return array
	 */
	public static function getRoundTypes($full = false)
	{
		$full = ($full === true);
		if ($full)
		{
			return array(
				self::ROUND_MATH => Loc::getMessage('ROUNDING_TYPE_ROUND_MATH'),
				self::ROUND_UP => Loc::getMessage('ROUNDING_TYPE_ROUND_UP'),
				self::ROUND_DOWN => Loc::getMessage('ROUNDING_TYPE_ROUND_DOWN')
			);
		}
		return array(
			self::ROUND_MATH,
			self::ROUND_UP,
			self::ROUND_DOWN
		);
	}

	/**
	 * Fill user id fields.
	 *
	 * @param array &$result			Modified data for add/update discount.
	 * @param array $data				Current data for add/update discount.
	 * @param array $keys				List with checked keys (userId info).
	 * @return void
	 */
	protected static function setUserId(array &$result, array $data, array $keys)
	{
		static $currentUserID = false;
		if ($currentUserID === false)
		{
			global $USER;
			/** @noinspection PhpMethodOrClassCallIsNotCaseSensitiveInspection */
			$currentUserID = (isset($USER) && $USER instanceof \CUser ? (int)$USER->getID() : null);
		}
		foreach ($keys as $index)
		{
			$setField = true;
			if (array_key_exists($index, $data))
				$setField = ($data[$index] !== null && (int)$data[$index] <= 0);

			if ($setField)
				$result[$index] = $currentUserID;
		}
		unset($index);
	}

	/**
	 * Fill datetime fields.
	 *
	 * @param array &$result			Modified data for add/update discount.
	 * @param array $data				Current data for add/update discount.
	 * @param array $keys				List with checked keys (datetime info).
	 * @return void
	 */
	protected static function setTimestamp(array &$result, array $data, array $keys)
	{
		foreach ($keys as $index)
		{
			$setField = true;
			if (array_key_exists($index, $data))
				$setField = ($data[$index] !== null && !is_object($data[$index]));

			if ($setField)
				$result[$index] = new Main\Type\DateTime();
		}
		unset($index);
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit