%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/main.numerator.edit.sequence/ |
Current File : /home/bitrix/www/bitrix/components/bitrix/main.numerator.edit.sequence/class.php |
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die(); } use Bitrix\Main\Localization\Loc; use Bitrix\Main\Numerator\Numerator; Loc::loadMessages(__FILE__); /** */ class MainNumeratorEditSequence extends CBitrixComponent implements \Bitrix\Main\Engine\Contract\Controllerable { protected $gridId = 'NUMERATOR_EDIT_SEQUENCE_GRID'; /** * @var Numerator */ private $numerator; const DELIMITER = '__NUMK__'; /** @inheritdoc */ public function executeComponent() { if ($this->arParams['IS_SLIDER'] || $this->request->get('IFRAME')) { $this->arResult['IS_SLIDER'] = true; } $numeratorSequences = []; $this->processGridActions(); if ((isset($this->arParams['NUMERATOR_ID']) && is_numeric($this->arParams['NUMERATOR_ID']))) { $this->numerator = Numerator::load($this->arParams['NUMERATOR_ID']); } if (!$this->numerator) { $this->addError(Loc::getMessage('MAIN_NUMERATOR_EDIT_SEQUENCE_ERROR_NUMERATOR_NOT_FOUND')); } else { $numeratorSequences = $this->getNumbers(); } $this->arResult['GRID_ID'] = $this->gridId; $this->arResult['FORM_ID'] = isset($this->arParams['FORM_ID']) ? $this->arParams['FORM_ID'] : ''; $this->arResult['TAB_ID'] = isset($this->arParams['TAB_ID']) ? $this->arParams['TAB_ID'] : ''; $this->arResult['HEADERS'] = [ [ 'id' => 'TEXT_KEY', 'name' => Loc::getMessage('NUMERATOR_EDIT_SEQUENCE_COLUMN_HEADER_TEXT_KEY'), 'default' => true, ], [ 'id' => 'NEXT_NUMBER', 'name' => Loc::getMessage('NUMERATOR_EDIT_SEQUENCE_COLUMN_HEADER_NEXT_NUMBER'), 'default' => true, 'editable' => [ 'TYPE' => \Bitrix\Main\Grid\Editor\Types::TEXT, ], ], ]; $gridOptions = new CGridOptions($this->arResult['GRID_ID']); $gridSorting = $gridOptions->GetSorting([]); $this->arResult['SORT'] = $gridSorting['sort']; $this->arResult['SORT_VARS'] = $gridSorting['vars']; $items = []; $count = 0; foreach ($numeratorSequences as $index => $numerator) { $fields['~TEXT_KEY'] = $numerator['TEXT_KEY']; $fields['TEXT_KEY'] = htmlspecialcharsbx($numerator['TEXT_KEY']); $fields['~NEXT_NUMBER'] = $numerator['NEXT_NUMBER']; $fields['NEXT_NUMBER'] = htmlspecialcharsbx($numerator['NEXT_NUMBER']); $fields['~ID'] = $numerator['TEXT_KEY'] . self::DELIMITER . $numerator['NUMERATOR_ID'] . self::DELIMITER . $numerator['NEXT_NUMBER']; $fields['ID'] = htmlspecialcharsbx($numerator['TEXT_KEY'] . self::DELIMITER . $numerator['NUMERATOR_ID'] . self::DELIMITER . $numerator['NEXT_NUMBER']); $items[] = $fields; $count++; } $this->arResult['ROWS_COUNT'] = $count; $this->arResult['ITEMS'] = &$items; $this->includeComponentTemplate(); } /** * @return array * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\ObjectPropertyException * @throws \Bitrix\Main\SystemException */ private function getNumbers() { $config = $this->numerator->getConfig(); $numResults = \Bitrix\Main\Numerator\Model\NumeratorSequenceTable::getList([ 'filter' => ['=NUMERATOR_ID' => $config[Numerator::getType()]['id']], 'select' => ['NUMERATOR_ID', 'TEXT_KEY', 'NEXT_NUMBER', 'KEY'], ]) ->fetchAll(); return $numResults; } /** * @param $errorMessage */ private function addError($errorMessage) { $this->arResult['MESSAGES'][] = [ 'TYPE' => \Bitrix\Main\Grid\MessageType::ERROR, 'TITLE' => Loc::getMessage('MAIN_NUMERATOR_EDIT_SEQUENCE_ERROR_TITLE'), 'TEXT' => $errorMessage, ]; } private function processEdit() { if (empty($this->request->getPost('FIELDS'))) { return; } foreach ($this->request->getPost('FIELDS') as $compoundKeyString => $sourceFields) { if (!(isset($sourceFields['NEXT_NUMBER']) && $sourceFields['NEXT_NUMBER'] !== '' && is_numeric($sourceFields['NEXT_NUMBER'])) ) { $this->addError(Loc::getMessage('MAIN_NUMERATOR_EDIT_SEQUENCE_ERROR_NUMBER_NOT_NUMERIC')); continue; } if (stristr($compoundKeyString, self::DELIMITER) === false) { continue; } $compoundKey = explode(self::DELIMITER, $compoundKeyString); if (count($compoundKey) < 3) { continue; } $hash = $compoundKey[0]; $numId = $compoundKey[1]; if (!($numId && is_numeric($numId))) { continue; } $numerator = Numerator::load($numId); if (!$numerator) { continue; } $dbNextNumber = $compoundKey[2]; if ($dbNextNumber && is_numeric($dbNextNumber)) { if ((int)$sourceFields['NEXT_NUMBER'] <= (int)$dbNextNumber) { $this->addError(Loc::getMessage('MAIN_NUMERATOR_EDIT_SEQUENCE_ERROR_NUMBER_LESS')); } else { $res = $numerator->setNextSequentialNumber($sourceFields['NEXT_NUMBER'], $dbNextNumber, $hash); if (!$res->isSuccess()) { $errors = $res->getErrors(); $error = $errors[0]; $this->addError($error->getMessage()); } } } } } /** */ private function processGridActions() { $postAction = 'action_button_' . $this->gridId; if ($this->request->getPost($postAction) !== null && check_bitrix_sessid()) { if ($this->request->getPost($postAction) == 'edit') { $this->processEdit(); } } } /** * @return array */ public function configureActions() { return []; } }