![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/extmag/shiplab/Controller/Adminhtml/DimensionBox/ |
<?php /** * Copyright © Extmag. All rights reserved. */ namespace Extmag\Shiplab\Controller\Adminhtml\DimensionBox; use Extmag\Shiplab\Api\Data\DimensionBoxInterface; use Extmag\Shiplab\Api\DimensionBoxRepositoryInterface as DimensionBoxRepository; use Extmag\Shiplab\Model\DimensionBox; use Exception; use Magento\Backend\App\Action; use Magento\Backend\App\Action\Context; use Magento\Framework\Controller\Result\JsonFactory; use Magento\Framework\Controller\ResultInterface; use Magento\Framework\Exception\LocalizedException; use RuntimeException; /** * Cms page grid inline edit controller * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class InlineEdit extends Action { /** * Authorization level of a basic admin session */ public const ADMIN_RESOURCE = 'Extmag_Shiplab::shiplab_dimensionbox_save'; /** * @var PostDataProcessor */ protected $dataProcessor; /** * @var DimensionBoxRepository */ protected $dimensionBoxRepository; /** * @var JsonFactory */ protected $jsonFactory; /** * @param Context $context * @param PostDataProcessor $dataProcessor * @param DimensionBoxRepository $dimensionBoxRepository * @param JsonFactory $jsonFactory */ public function __construct( Context $context, PostDataProcessor $dataProcessor, DimensionBoxRepository $dimensionBoxRepository, JsonFactory $jsonFactory ) { parent::__construct($context); $this->dataProcessor = $dataProcessor; $this->dimensionBoxRepository = $dimensionBoxRepository; $this->jsonFactory = $jsonFactory; } /** * @return ResultInterface * @throws LocalizedException */ public function execute() { $resultJson = $this->jsonFactory->create(); $error = false; $messages = []; $postItems = $this->getRequest()->getParam('items', []); if (!($this->getRequest()->getParam('isAjax') && count($postItems))) { return $resultJson->setData( [ 'messages' => [__('Please correct the data sent.')], 'error' => true, ] ); } foreach (array_keys($postItems) as $pageId) { /** @var DimensionBox $address */ $address = $this->dimensionBoxRepository->getById($pageId); try { $itemData = $postItems[$pageId]; $itemData = $this->dataProcessor->filter($itemData); $this->validatePost($itemData, $address, $error, $messages); $extendedData = $address->getData(); $this->setEntityData($address, $extendedData, $itemData); $this->dimensionBoxRepository->save($address); } catch (LocalizedException $e) { $messages[] = $this->getErrorWithItemId($address, $e->getMessage()); $error = true; } catch (RuntimeException $e) { $messages[] = $this->getErrorWithItemId($address, $e->getMessage()); $error = true; } catch (Exception $e) { $messages[] = $this->getErrorWithItemId( $address, __('Something went wrong while saving the box.') ); $error = true; } } return $resultJson->setData( [ 'messages' => $messages, 'error' => $error, ] ); } /** * @param array $pageData * @param DimensionBox $model * @param bool $error * @param array $messages * @return void */ protected function validatePost(array $pageData, DimensionBox $model, &$error, array &$messages) { if (!$this->dataProcessor->validateRequireEntry($pageData)) { $error = true; foreach ($this->messageManager->getMessages(true)->getItems() as $errorMessage) { $messages[] = $this->getErrorWithItemId($model, $errorMessage->getText()); } } } /** * @param DimensionBox $address * @param array $extendedData * @param array $data * @return $this */ public function setEntityData(DimensionBox $address, array $extendedData, array $data) { $address->setData(array_merge($address->getData(), $extendedData, $data)); return $this; } /** * Add item title to error message * * @param DimensionBoxInterface $address * @param string $errorText * @return string */ protected function getErrorWithItemId(DimensionBoxInterface $address, $errorText) { return '[Box ID: ' . $address->getId() . '] ' . $errorText; } }