%PDF- %PDF-
Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/main/lib/numerator/model/ |
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/main/lib/numerator/model/numerator.php |
<?php namespace Bitrix\Main\Numerator\Model; use Bitrix\Main\Entity\DataManager; use Bitrix\Main\Entity\DatetimeField; use Bitrix\Main\Entity\IntegerField; use Bitrix\Main\Entity\StringField; use Bitrix\Main\Entity\UpdateResult; use Bitrix\Main\Error; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Numerator\Generator\Contract\Sequenceable; use Bitrix\Main\Numerator\Numerator; use Bitrix\Main\Numerator\NumberGeneratorFactory; use Bitrix\Main\SystemException; use Bitrix\Main\Type\DateTime; use Bitrix\Main\Web\Json; /** * Class NumeratorTable * @package Bitrix\Main\Numerator\Model */ class NumeratorTable extends DataManager { /** * @return string */ public static function getTableName() { return 'b_numerator'; } /** * @return array * @throws SystemException */ public static function getMap() { return [ (new IntegerField('ID')) ->configurePrimary(true) ->configureAutocomplete(true) , (new StringField('NAME')) ->configureRequired(true) , (new StringField('TEMPLATE')) ->configureRequired(true) , (new StringField('SETTINGS')) ->configureRequired(true) , (new StringField('TYPE')) ->configureDefaultValue('DEFAULT') , new DatetimeField('CREATED_AT'), new IntegerField('CREATED_BY'), new DatetimeField('UPDATED_AT'), new IntegerField('UPDATED_BY'), ]; } /** * @return int|null */ private static function getCurrentUserId() { global $USER; $userId = 0; if ($USER && is_object($USER) && $USER->isAuthorized()) { $userId = $USER->getID(); } return $userId; } /** * @param $type * @param $sort * @return array * @throws SystemException * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\ObjectPropertyException */ public static function getNumeratorList($type, $sort) { $filter = ['=TYPE' => $type]; if ($type == 'ALL') { $filter = []; } $params = [ 'select' => ['*'], 'filter' => $filter, ]; if ($sort) { $params['order'] = $sort; } $results = NumeratorTable::getList($params)->fetchAll(); foreach ($results as &$numerator) { $numerator['id'] = $numerator['ID']; $numerator['name'] = $numerator['NAME']; $numerator['template'] = $numerator['TEMPLATE']; $numerator['type'] = $numerator['TYPE']; } return $results; } /** * @param $numeratorId * @param $numeratorFields * @return \Bitrix\Main\Entity\AddResult|\Bitrix\Main\Entity\UpdateResult * @throws SystemException * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\ObjectException * @throws \Bitrix\Main\ObjectPropertyException */ public static function saveNumerator($numeratorId, $numeratorFields) { $fields = [ 'NAME' => $numeratorFields['NAME'], 'TEMPLATE' => $numeratorFields['TEMPLATE'], 'TYPE' => $numeratorFields['TYPE'], 'SETTINGS' => Json::encode($numeratorFields['SETTINGS']), 'UPDATED_AT' => new DateTime(), 'UPDATED_BY' => static::getCurrentUserId(), ]; if ($numeratorId) { if (!(Numerator::load($numeratorId))) { $result = new UpdateResult(); $result->addError(new Error(Loc::getMessage('MAIN_NUMERATOR_EDIT_NUMERATOR_NOT_FOUND_ERROR'))); return $result; } $updateRes = NumeratorTable::update($numeratorId, $fields); if ($updateRes->isSuccess()) { $numerator = Numerator::load($numeratorId); $isNewNumSequential = $numerator->hasSequentialNumber(); if (!$isNewNumSequential) { NumeratorSequenceTable::deleteByNumeratorId($numeratorId); } } return $updateRes; } $fields['CREATED_AT'] = new DateTime(); $fields['CREATED_BY'] = static::getCurrentUserId(); return NumeratorTable::add($fields); } /** * @param $numeratorId * @return array|false * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\ObjectPropertyException * @throws SystemException */ public static function loadSettings($numeratorId) { $numerator = static::getList([ 'select' => ['*',], 'filter' => ['=ID' => $numeratorId], ])->fetch(); if ($numerator) { $result = []; $result[Numerator::getType()] = [ 'idFromDb' => $numerator['ID'], 'name' => $numerator['NAME'], 'template' => $numerator['TEMPLATE'], 'type' => $numerator['TYPE'], ]; $numeratorGenerators = Json::decode($numerator['SETTINGS']); $numberGeneratorFactory = new NumberGeneratorFactory(); foreach ($numeratorGenerators as $generatorType => $numeratorGenerator) { $class = $numberGeneratorFactory->getClassByType($generatorType); if (in_array(Sequenceable::class, class_implements($class))) { $numeratorGenerators[$generatorType]['numeratorId'] = $numeratorId; } } return array_merge($result, $numeratorGenerators); } return $numerator; } }