%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;
}
}