Save.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. /**
  3. *
  4. * Copyright © Magento, Inc. All rights reserved.
  5. * See COPYING.txt for license details.
  6. */
  7. namespace Magento\Backend\Controller\Adminhtml\System\Store;
  8. use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
  9. /**
  10. * Class Save
  11. *
  12. * Save controller for system entities such as: Store, StoreGroup, Website
  13. */
  14. class Save extends \Magento\Backend\Controller\Adminhtml\System\Store implements HttpPostActionInterface
  15. {
  16. /**
  17. * Process Website model save
  18. *
  19. * @param array $postData
  20. * @return array
  21. */
  22. private function processWebsiteSave($postData)
  23. {
  24. $postData['website']['name'] = $this->filterManager->removeTags($postData['website']['name']);
  25. $websiteModel = $this->_objectManager->create(\Magento\Store\Model\Website::class);
  26. if ($postData['website']['website_id']) {
  27. $websiteModel->load($postData['website']['website_id']);
  28. }
  29. $websiteModel->setData($postData['website']);
  30. if ($postData['website']['website_id'] == '') {
  31. $websiteModel->setId(null);
  32. }
  33. $websiteModel->save();
  34. $this->messageManager->addSuccessMessage(__('You saved the website.'));
  35. return $postData;
  36. }
  37. /**
  38. * Process Store model save
  39. *
  40. * @param array $postData
  41. * @throws \Magento\Framework\Exception\LocalizedException
  42. * @return array
  43. */
  44. private function processStoreSave($postData)
  45. {
  46. /** @var \Magento\Store\Model\Store $storeModel */
  47. $storeModel = $this->_objectManager->create(\Magento\Store\Model\Store::class);
  48. $postData['store']['name'] = $this->filterManager->removeTags($postData['store']['name']);
  49. if ($postData['store']['store_id']) {
  50. $storeModel->load($postData['store']['store_id']);
  51. }
  52. $storeModel->setData($postData['store']);
  53. if ($postData['store']['store_id'] == '') {
  54. $storeModel->setId(null);
  55. }
  56. $groupModel = $this->_objectManager->create(
  57. \Magento\Store\Model\Group::class
  58. )->load(
  59. $storeModel->getGroupId()
  60. );
  61. $storeModel->setWebsiteId($groupModel->getWebsiteId());
  62. if (!$storeModel->isActive() && $storeModel->isDefault()) {
  63. throw new \Magento\Framework\Exception\LocalizedException(
  64. __('The default store cannot be disabled')
  65. );
  66. }
  67. $storeModel->save();
  68. $this->messageManager->addSuccessMessage(__('You saved the store view.'));
  69. return $postData;
  70. }
  71. /**
  72. * Process StoreGroup model save
  73. *
  74. * @param array $postData
  75. * @throws \Magento\Framework\Exception\LocalizedException
  76. * @return array
  77. */
  78. private function processGroupSave($postData)
  79. {
  80. $postData['group']['name'] = $this->filterManager->removeTags($postData['group']['name']);
  81. /** @var \Magento\Store\Model\Group $groupModel */
  82. $groupModel = $this->_objectManager->create(\Magento\Store\Model\Group::class);
  83. if ($postData['group']['group_id']) {
  84. $groupModel->load($postData['group']['group_id']);
  85. }
  86. $groupModel->setData($postData['group']);
  87. if ($postData['group']['group_id'] == '') {
  88. $groupModel->setId(null);
  89. }
  90. if (!$this->isSelectedDefaultStoreActive($postData, $groupModel)) {
  91. throw new \Magento\Framework\Exception\LocalizedException(
  92. __('An inactive store view cannot be saved as default store view')
  93. );
  94. }
  95. $groupModel->save();
  96. $this->messageManager->addSuccessMessage(__('You saved the store.'));
  97. return $postData;
  98. }
  99. /**
  100. * @return \Magento\Backend\Model\View\Result\Redirect
  101. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  102. */
  103. public function execute()
  104. {
  105. /** @var \Magento\Backend\Model\View\Result\Redirect $redirectResult */
  106. $redirectResult = $this->resultRedirectFactory->create();
  107. if ($this->getRequest()->isPost() && ($postData = $this->getRequest()->getPostValue())) {
  108. if (empty($postData['store_type']) || empty($postData['store_action'])) {
  109. $redirectResult->setPath('adminhtml/*/');
  110. return $redirectResult;
  111. }
  112. try {
  113. switch ($postData['store_type']) {
  114. case 'website':
  115. $postData = $this->processWebsiteSave($postData);
  116. break;
  117. case 'group':
  118. $postData = $this->processGroupSave($postData);
  119. break;
  120. case 'store':
  121. $postData = $this->processStoreSave($postData);
  122. break;
  123. default:
  124. $redirectResult->setPath('adminhtml/*/');
  125. return $redirectResult;
  126. }
  127. $redirectResult->setPath('adminhtml/*/');
  128. return $redirectResult;
  129. } catch (\Magento\Framework\Exception\LocalizedException $e) {
  130. $this->messageManager->addErrorMessage($e->getMessage());
  131. $this->_getSession()->setPostData($postData);
  132. } catch (\Exception $e) {
  133. $this->messageManager->addExceptionMessage(
  134. $e,
  135. __('Something went wrong while saving. Please review the error log.')
  136. );
  137. $this->_getSession()->setPostData($postData);
  138. }
  139. $redirectResult->setUrl($this->_redirect->getRedirectUrl($this->getUrl('*')));
  140. return $redirectResult;
  141. }
  142. $redirectResult->setPath('adminhtml/*/');
  143. return $redirectResult;
  144. }
  145. /**
  146. * Verify if selected default store is active
  147. *
  148. * @param array $postData
  149. * @param \Magento\Store\Model\Group $groupModel
  150. * @return bool
  151. */
  152. private function isSelectedDefaultStoreActive(array $postData, \Magento\Store\Model\Group $groupModel)
  153. {
  154. if (!empty($postData['group']['default_store_id'])) {
  155. $defaultStoreId = $postData['group']['default_store_id'];
  156. if (!empty($groupModel->getStores()[$defaultStoreId]) &&
  157. !$groupModel->getStores()[$defaultStoreId]->isActive()
  158. ) {
  159. return false;
  160. }
  161. }
  162. return true;
  163. }
  164. }