%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/main/lib/numerator/model/
Upload File :
Create Path :
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/main/lib/numerator/model/numeratorsequence.php

<?php
namespace Bitrix\Main\Numerator\Model;

use Bitrix\Main\DB\SqlQueryException;
use Bitrix\Main\Entity\DataManager;
use Bitrix\Main\Entity\IntegerField;
use Bitrix\Main\Entity\StringField;
use Bitrix\Main\Application;

/**
 * Class NumeratorSequenceTable
 * @package Bitrix\Main\Numerator\Model
 */
class NumeratorSequenceTable extends DataManager
{
	/**
	 * @return string
	 */
	public static function getTableName()
	{
		return 'b_numerator_sequence';
	}

	/**
	 * @return array
	 * @throws \Bitrix\Main\SystemException
	 */
	public static function getMap()
	{
		return [
			(new IntegerField('NUMERATOR_ID'))
				->configureRequired(true)
				->configurePrimary(true)
			,
			(new StringField('KEY'))
				->configureRequired(true)
				->configurePrimary(true)
			,
			(new StringField('TEXT_KEY'))
				->configureRequired(true)
			,
			(new IntegerField('NEXT_NUMBER')),
			(new IntegerField('LAST_INVOCATION_TIME'))
				->configureRequired(true)
			,
		];
	}

	/**
	 * @param $numeratorId
	 * @param $numberHash
	 * @param $fields
	 * @param null $whereNextNumber
	 * @return bool|int
	 * @throws SqlQueryException
	 */
	public static function updateSettings($numeratorId, $numberHash, $fields, $whereNextNumber = null)
	{
		if ($whereNextNumber)
		{
			$conn = Application::getConnection();
			$helper = $conn->getSqlHelper();
			$update = $helper->prepareUpdate(static::getTableName(), $fields);
			$query = 'UPDATE ' . $helper->quote(static::getTableName())
					 . ' SET ' . $update[0]
					 . ' WHERE NUMERATOR_ID = ' . intval($numeratorId)
					 . " AND `KEY` = " . $helper->convertToDbString(md5($numberHash))
					 . " AND NEXT_NUMBER = " . intval($whereNextNumber) . ";";
			$conn->query($query);

			return $conn->getAffectedRowsCount();
		}
		$res = static::update([
			'NUMERATOR_ID' => intval($numeratorId),
			'KEY'          => md5($numberHash),
		], $fields);
		if ($res->isSuccess())
		{
			return $res->getAffectedRowsCount();
		}

		return 0;
	}

	/**
	 * @param $id
	 * @return \Bitrix\Main\Entity\DeleteResult
	 * @throws \Exception
	 */
	public static function deleteByNumeratorId($id)
	{
		return static::delete(['NUMERATOR_ID' => intval($id)]);
	}

	/**
	 * @param $numeratorId
	 * @param $numberHash
	 * @return array
	 * @throws \Bitrix\Main\ArgumentException
	 * @throws \Bitrix\Main\ObjectPropertyException
	 * @throws \Bitrix\Main\SystemException
	 */
	public static function getSettings($numeratorId, $numberHash)
	{
		$sequenceSettings = static::getList([
			'select' => ['NEXT_NUMBER', 'LAST_INVOCATION_TIME'],
			'filter' => ['=NUMERATOR_ID' => $numeratorId, '=KEY' => md5($numberHash),],
		])->fetch();
		return $sequenceSettings;
	}

	/**
	 * @param $numeratorId
	 * @param $numberHash
	 * @param $defaultNumber
	 * @param $lastInvocationTime
	 * @return array
	 * @throws SqlQueryException
	 */
	public static function setSettings($numeratorId, $numberHash, $defaultNumber, $lastInvocationTime)
	{
		try
		{
			$result = static::add([
				'NUMERATOR_ID'         => $numeratorId,
				'KEY'                  => md5($numberHash),
				'TEXT_KEY'             => substr($numberHash, 0, 50),
				'LAST_INVOCATION_TIME' => $lastInvocationTime,
				'NEXT_NUMBER'          => $defaultNumber,
			]);
			if ($result->isSuccess())
			{
				return $result->getData();
			}
			return [];
		}
		catch (SqlQueryException $exc)
		{
			if (stripos($exc->getMessage(), "Duplicate entry") !== false)
			{
				return [];
			}
			throw $exc;
		}
	}
}

Zerion Mini Shell 1.0