![]() 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/magento/module-search/Controller/Adminhtml/Synonyms/ |
<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Search\Controller\Adminhtml\Synonyms; use Magento\Search\Model\Synonym\MergeConflictException; /** * @SuppressWarnings(PHPMD.AllPurposeAction) */ class Save extends \Magento\Backend\App\Action { /** * Authorization level of a basic admin session * * @see _isAllowed() */ public const ADMIN_RESOURCE = 'Magento_Search::synonyms'; /** * @var \Magento\Search\Api\SynonymGroupRepositoryInterface $synGroupRepository */ private $synGroupRepository; /** * MassDelete constructor. * * @param \Magento\Backend\App\Action\Context $context * @param \Magento\Search\Api\SynonymGroupRepositoryInterface $synGroupRepository */ public function __construct( \Magento\Backend\App\Action\Context $context, \Magento\Search\Api\SynonymGroupRepositoryInterface $synGroupRepository ) { $this->synGroupRepository = $synGroupRepository; parent::__construct($context); } /** * Save action * * @return \Magento\Framework\Controller\ResultInterface */ public function execute() { /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); // check if data sent $data = $this->getRequest()->getPostValue(); if ($data) { $synGroupId = $this->getRequest()->getParam('group_id'); if (empty($data['group_id'])) { $data['group_id'] = null; } // Create model and load any existing data $synGroup = $this->synGroupRepository->get($synGroupId); if (!$synGroup->getGroupId() && $synGroupId) { $this->messageManager->addErrorMessage(__('This synonym group no longer exists.')); return $resultRedirect->setPath('*/*/'); } // Pre-process data and save it to model // Extract website_id and store_id out of scope_id // scope_id = website_id:store_id $tokens = explode(':', $data['scope_id'] ?? ''); $data['website_id'] = $tokens[0]; $data['store_id'] = $tokens[1]; // Remove unnecessary white spaces and convert synonyms to lower case $words = explode(',', $data['synonyms'] ?? ''); $words = array_map('trim', $words); $data['synonyms'] = strtolower(implode(',', $words)); $synGroup->setGroupId($data['group_id']); $synGroup->setStoreId($data['store_id']); $synGroup->setWebsiteId($data['website_id']); $synGroup->setSynonymGroup($data['synonyms']); // save the data if (isset($data['mergeOnConflict']) && $data['mergeOnConflict'] === 'true') { $this->synGroupRepository->save($synGroup); $this->getMessageManager()->addSuccessMessage(__('You saved the synonym group.')); } else { try { $this->synGroupRepository->save($synGroup, true); $this->getMessageManager()->addSuccessMessage(__('You saved the synonym group.')); } catch (MergeConflictException $exception) { $this->getMessageManager()->addErrorMessage($this->getErrorMessage($exception)); $this->_getSession()->setFormData($data); return $resultRedirect->setPath('*/*/edit', ['group_id' => $synGroup->getGroupId()]); } } // check if 'Save and Continue' if ($this->getRequest()->getParam('back')) { return $resultRedirect->setPath('*/*/edit', ['group_id' => $synGroup->getGroupId()]); } } return $resultRedirect->setPath('*/*/'); } /** * Constructs the error message from the Merge conflict exception * * @param MergeConflictException $exception * @return \Magento\Framework\Phrase */ private function getErrorMessage(MergeConflictException $exception) { $data = $this->getRequest()->getPostValue(); $conflictingSynonyms = $exception->getConflictingSynonyms(); foreach ($conflictingSynonyms as $key => $conflictingSynonym) { $conflictingSynonyms[$key] = '(' . implode(',', $conflictingSynonym) . ')'; } if (count($conflictingSynonyms) == 1) { $conflictingSynonymsMessage = __( 'The terms you entered, (%1), ' . 'belong to 1 existing synonym group, %2. ' . 'Select the "Merge existing synonyms" checkbox so the terms can be merged.', $data['synonyms'], $conflictingSynonyms[0] ); } else { $lastConflict = array_pop($conflictingSynonyms); $conflictingInfo = implode(', ', $conflictingSynonyms); $conflictingSynonymsMessage = __( 'The terms you entered, (%1), ' . 'belong to %2 existing synonym groups, %3 and %4. ' . 'Select the "Merge existing synonyms" checkbox so the terms can be merged.', $data['synonyms'], count($conflictingSynonyms) + 1, $conflictingInfo, $lastConflict ); } return $conflictingSynonymsMessage; } }