diff --git a/vendor/magento/module-admin-gws/Model/Models.php b/vendor/magento/module-admin-gws/Model/Models.php index d39e459a0a4..64db5103ff7 100644 --- a/vendor/magento/module-admin-gws/Model/Models.php +++ b/vendor/magento/module-admin-gws/Model/Models.php @@ -1,21 +1,56 @@ _adminGwsData = $adminGwsData; @@ -86,8 +121,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Limit CMS page save * - * @param \Magento\Cms\Model\Page $model + * @param Page $model * @return void + * @throws LocalizedException */ public function cmsPageSaveBefore($model) { @@ -99,8 +135,8 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement } $model->setStoreId( - $this->_forceAssignToStore( - $this->_updateSavingStoreIds($model->getStoreId(), $originalStoreIds) + (int)$this->_forceAssignToStore( + $this->_updateSavingStoreIds((array)$model->getStoreId(), $originalStoreIds) ) ); } @@ -108,8 +144,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Limit CMS block save * - * @param \Magento\Cms\Model\Block $model + * @param Block $model * @return void + * @throws LocalizedException */ public function cmsBlockSaveBefore($model) { @@ -121,8 +158,8 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement } $model->setStoreId( - $this->_forceAssignToStore( - $this->_updateSavingStoreIds($model->getStoreId(), $originalStoreIds) + (int)$this->_forceAssignToStore( + $this->_updateSavingStoreIds((array)$model->getStoreId(), $originalStoreIds) ) ); } @@ -155,8 +192,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Limit Reward Exchange Rate entity saving * - * @param \Magento\Reward\Model\ResourceModel\Reward\Rate $model + * @param Rate $model * @return void + * @throws LocalizedException */ public function rewardRateSaveBefore($model) { @@ -179,8 +217,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Limit Reward Exchange Rate entity delete * - * @param \Magento\Reward\Model\ResourceModel\Reward\Rate $model + * @param Rate $model * @return void + * @throws LocalizedException */ public function rewardRateDeleteBefore($model) { @@ -199,6 +238,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * * @param \Magento\Rule\Model\AbstractModel $model * @return void + * @throws LocalizedException */ public function ruleDeleteBefore($model) { @@ -235,7 +275,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Limit newsletter queue save * - * @param \Magento\Newsletter\Model\Queue $model + * @param Queue $model * @return void * @throws LocalizedException */ @@ -244,7 +284,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement // force to assign to SV $storeIds = $model->getStores(); if (!$storeIds || !$this->_role->hasStoreAccess($storeIds)) { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __('This entity needs to be assigned to a store view. Verify the entity assignment and try again.') ); } @@ -257,8 +297,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Prevent loading disallowed queue * - * @param \Magento\Newsletter\Model\Queue $model + * @param Queue $model * @return void + * @throws LocalizedException */ public function newsletterQueueLoadAfter($model) { @@ -270,10 +311,11 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Catalog product initialize after loading * - * @param \Magento\Catalog\Model\Product $model + * @param Product $model * @return void * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) + * @throws LocalizedException */ public function catalogProductLoadAfter($model) { @@ -348,7 +390,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Catalog product validate before saving * - * @param \Magento\Catalog\Model\Product $model + * @param Product $model * @return void * @throws LocalizedException * @SuppressWarnings(PHPMD.CyclomaticComplexity) @@ -395,16 +437,17 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Catalog product validate after * - * @param \Magento\Framework\Event\Observer $observer + * @param Observer $observer * @return void + * @throws LocalizedException */ - public function catalogProductValidateAfter(\Magento\Framework\Event\Observer $observer) + public function catalogProductValidateAfter(Observer $observer) { if ($this->_role->getIsAll()) { return; } - /* @var $product \Magento\Catalog\Model\Product */ + /* @var $product Product */ $product = $observer->getEvent()->getProduct(); $this->_forceAssignToWebsite($product->getWebsiteIds()); } @@ -412,8 +455,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Catalog product validate before delete * - * @param \Magento\Catalog\Model\Product $model + * @param Product $model * @return void + * @throws LocalizedException */ public function catalogProductDeleteBefore($model) { @@ -426,8 +470,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Catalog Product Review before save * - * @param \Magento\Review\Model\Review $model + * @param Review $model * @return void + * @throws LocalizedException */ public function catalogProductReviewSaveBefore($model) { @@ -444,8 +489,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Catalog Product Review before delete * - * @param \Magento\Review\Model\Review $model + * @param Review $model * @return void + * @throws LocalizedException */ public function catalogProductReviewDeleteBefore($model) { @@ -462,8 +508,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Catalog category validate before delete * - * @param \Magento\Catalog\Model\Product $model + * @param Product $model * @return void + * @throws LocalizedException */ public function catalogCategoryDeleteBefore($model) { @@ -481,8 +528,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate customer before delete * - * @param \Magento\Customer\Model\Customer $model + * @param Customer $model * @return void + * @throws LocalizedException */ public function customerDeleteBefore($model) { @@ -494,7 +542,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Save correct website list in giftwrapping * - * @param \Magento\GiftWrapping\Model\Wrapping $model + * @param Wrapping $model * @return $this */ public function giftWrappingSaveBefore($model) @@ -516,7 +564,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Save correct store list in rating (while Managing Ratings) * - * @param \Magento\Review\Model\Rating $model + * @param Rating $model * @return void */ public function ratingSaveBefore($model) @@ -537,8 +585,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate cms page before delete * - * @param \Magento\Cms\Model\Page $model + * @param Page $model * @return void + * @throws LocalizedException */ public function cmsPageDeleteBefore($model) { @@ -551,8 +600,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate cms page before delete * - * @param \Magento\Cms\Model\Page $model + * @param Page $model * @return void + * @throws LocalizedException */ public function cmsBlockDeleteBefore($model) { @@ -565,8 +615,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Customer validate after load * - * @param \Magento\Customer\Model\Customer $model + * @param Customer $model * @return void + * @throws LocalizedException */ public function customerLoadAfter($model) { @@ -578,8 +629,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Customer validate before save * - * @param \Magento\Customer\Model\Customer $model + * @param Customer $model * @return void + * @throws LocalizedException + * @throws NoSuchEntityException */ public function customerSaveBefore($model) { @@ -603,6 +656,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * * @param \Magento\Customer\Model\Attribute $model * @return void + * @throws LocalizedException */ public function customerAttributeSaveBefore($model) { @@ -624,6 +678,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * @param \Magento\Customer\Model\Attribute $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function customerAttributeDeleteBefore($model) { @@ -633,38 +688,38 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Order validate after load * - * @param \Magento\Sales\Model\Order $model + * @param Order $model * @return void */ public function salesOrderLoadAfter($model) { if (!in_array($model->getStore()->getWebsiteId(), $this->_role->getWebsiteIds())) { $model->setActionFlag( - \Magento\Sales\Model\Order::ACTION_FLAG_CANCEL, + Order::ACTION_FLAG_CANCEL, false )->setActionFlag( - \Magento\Sales\Model\Order::ACTION_FLAG_CREDITMEMO, + Order::ACTION_FLAG_CREDITMEMO, false )->setActionFlag( - \Magento\Sales\Model\Order::ACTION_FLAG_EDIT, + Order::ACTION_FLAG_EDIT, false )->setActionFlag( - \Magento\Sales\Model\Order::ACTION_FLAG_HOLD, + Order::ACTION_FLAG_HOLD, false )->setActionFlag( - \Magento\Sales\Model\Order::ACTION_FLAG_INVOICE, + Order::ACTION_FLAG_INVOICE, false )->setActionFlag( - \Magento\Sales\Model\Order::ACTION_FLAG_REORDER, + Order::ACTION_FLAG_REORDER, false )->setActionFlag( - \Magento\Sales\Model\Order::ACTION_FLAG_SHIP, + Order::ACTION_FLAG_SHIP, false )->setActionFlag( - \Magento\Sales\Model\Order::ACTION_FLAG_UNHOLD, + Order::ACTION_FLAG_UNHOLD, false )->setActionFlag( - \Magento\Sales\Model\Order::ACTION_FLAG_COMMENT, + Order::ACTION_FLAG_COMMENT, false ); } @@ -673,9 +728,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Order validate before save * - * @param \Magento\Sales\Model\Order $model + * @param Order $model * @return void - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ public function salesOrderBeforeSave($model) { @@ -689,7 +744,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Catalog category initialize after loading * - * @param \Magento\Catalog\Model\Category $model + * @param Category $model * @return void */ public function catalogCategoryLoadAfter($model) @@ -722,8 +777,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate catalog category save * - * @param \Magento\Catalog\Model\Category $model + * @param Category $model * @return void + * @throws LocalizedException */ public function catalogCategorySaveBefore($model) { @@ -763,9 +819,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate catalog event save * - * @param \Magento\CatalogEvent\Model\Event $model + * @param Event $model * @return void * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @throws LocalizedException */ public function catalogEventSaveBefore($model) { @@ -804,8 +861,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate catalog event delete * - * @param \Magento\CatalogEvent\Model\Event $model + * @param Event $model * @return void + * @throws LocalizedException */ public function catalogEventDeleteBefore($model) { @@ -824,8 +882,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate catalog event load * - * @param \Magento\CatalogEvent\Model\Event $model + * @param Event $model * @return void + * @throws NoSuchEntityException */ public function catalogEventLoadAfter($model) { @@ -843,7 +902,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Make websites read-only * - * @param \Magento\Store\Model\Website $model + * @param Website $model * @return void */ public function coreWebsiteLoadAfter($model) @@ -854,9 +913,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow saving websites * - * @param \Magento\Store\Model\Website $model + * @param Website $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function coreWebsiteSaveBefore($model) { @@ -866,9 +926,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow deleting websites * - * @param \Magento\Store\Model\Website $model + * @param Website $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function coreWebsiteDeleteBefore($model) { @@ -878,7 +939,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Set store group or store read-only * - * @param \Magento\Store\Model\Store|\Magento\Store\Model\Group $model + * @param Store|Group $model * @return void */ public function coreStoreGroupLoadAfter($model) @@ -892,8 +953,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow saving store group or store * - * @param \Magento\Store\Model\Store|\Magento\Store\Model\Group $model + * @param Store|Group $model * @return void + * @throws LocalizedException */ public function coreStoreGroupSaveBefore($model) { @@ -906,7 +968,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Update role store group ids in helper and role * - * @param \Magento\Framework\Event\Observer $observer + * @param Observer $observer * @return void */ public function coreStoreGroupSaveAfter($observer) @@ -925,8 +987,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow deleting store group or store * - * @param \Magento\Store\Model\Store|\Magento\Store\Model\Group $model + * @param Store|Group $model * @return void + * @throws LocalizedException */ public function coreStoreGroupDeleteBefore($model) { @@ -939,8 +1002,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Prevent loading disallowed urlrewrites * - * @param \Magento\UrlRewrite\Model\UrlRewrite $model + * @param UrlRewrite $model * @return void + * @throws LocalizedException */ public function urlRewriteLoadAfter($model) { @@ -955,8 +1019,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Check whether order may be saved * - * @param \Magento\Sales\Model\AbstractModel $model + * @param AbstractModel $model * @return void + * @throws LocalizedException + * @throws NoSuchEntityException */ public function salesOrderSaveBefore($model) { @@ -968,8 +1034,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * * Invoice, shipment, creditmemo (address & item?) * - * @param \Magento\Sales\Model\AbstractModel $model + * @param AbstractModel $model * @return void + * @throws LocalizedException + * @throws NoSuchEntityException */ public function salesOrderEntitySaveBefore($model) { @@ -983,6 +1051,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * * @param \Magento\Sales\Model\Order\Payment\Transaction $model * @return void + * @throws LocalizedException */ public function salesOrderTransactionSaveBefore($model) { @@ -997,6 +1066,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * * @param \Magento\Sales\Model\Order\Payment\Transaction $model * @return void + * @throws LocalizedException */ public function salesOrderTransactionLoadAfter($model) { @@ -1008,9 +1078,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow attribute save method when role scope is not 'all' * - * @param \Magento\Sales\Model\AbstractModel $model + * @param AbstractModel $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function catalogEntityAttributeSaveBefore($model) { @@ -1020,9 +1091,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow attribute delete method when role scope is not 'all' * - * @param \Magento\Sales\Model\AbstractModel $model + * @param AbstractModel $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function catalogEntityAttributeDeleteBefore($model) { @@ -1032,9 +1104,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow attribute set save method when role scope is not 'all' * - * @param \Magento\Sales\Model\AbstractModel $model + * @param AbstractModel $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function eavEntityAttributeSetSaveBefore($model) { @@ -1044,9 +1117,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow attribute set delete method when role scope is not 'all' * - * @param \Magento\Sales\Model\AbstractModel $model + * @param AbstractModel $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function eavEntityAttributeSetDeleteBefore($model) { @@ -1056,9 +1130,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow attribute option delete method when role scope is not 'all' * - * @param \Magento\Sales\Model\AbstractModel $model + * @param AbstractModel $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function eavEntityAttributeOptionDeleteBefore($model) { @@ -1068,9 +1143,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow attribute group delete method when role scope is not 'all' * - * @param \Magento\Sales\Model\AbstractModel $model + * @param AbstractModel $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function eavEntityAttributeGroupDeleteBefore($model) { @@ -1080,9 +1156,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow attribute group save method when role scope is not 'all' * - * @param \Magento\Sales\Model\AbstractModel $model + * @param AbstractModel $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function eavEntityAttributeGroupSaveBefore($model) { @@ -1092,9 +1169,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Disallow attribute option save method when role scope is not 'all' * - * @param \Magento\Sales\Model\AbstractModel $model + * @param AbstractModel $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function eavEntityAttributeOptionSaveBefore($model) { @@ -1106,6 +1184,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * * @param int $websiteId * @return void + * @throws LocalizedException */ protected function _salesEntitySaveBefore($websiteId) { @@ -1157,14 +1236,14 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * * @param array $websiteIds * @return array - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ protected function _forceAssignToWebsite($websiteIds) { if (count(array_intersect($websiteIds, $this->_role->getWebsiteIds())) === 0 && count($this->_role->getWebsiteIds()) ) { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __('This item needs to be assigned to a store view. Assign item and try again.') ); } @@ -1176,7 +1255,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * * @param array $storeIds * @return array - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ protected function _forceAssignToStore($storeIds) { @@ -1193,7 +1272,7 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * Throws save exception. * * @return void - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ protected function _throwSave() { @@ -1204,11 +1283,11 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * Throws delete exception. * * @return void - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ protected function _throwDelete() { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __('More permissions are needed to delete this item.') ); } @@ -1217,18 +1296,19 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement * Throws load exception. * * @return void - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ private function _throwLoad() { - throw new \Magento\Framework\Exception\LocalizedException(__('More permissions are needed to view this item.')); + throw new LocalizedException(__('More permissions are needed to view this item.')); } /** * Validate widget instance availability after load * - * @param \Magento\Widget\Model\Widget\Instance $model + * @param Instance $model * @return void + * @throws LocalizedException */ public function widgetInstanceLoadAfter($model) { @@ -1243,8 +1323,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate widget instance before save * - * @param \Magento\Widget\Model\Widget\Instance $model + * @param Instance $model * @return void + * @throws LocalizedException */ public function widgetInstanceSaveBefore($model) { @@ -1264,8 +1345,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate widget instance before delete * - * @param \Magento\Widget\Model\Widget\Instance $model + * @param Instance $model * @return void + * @throws LocalizedException */ public function widgetInstanceDeleteBefore($model) { @@ -1278,12 +1360,38 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate banner before save * - * @param \Magento\Banner\Model\Banner $model + * @param Banner $model * @return void + * @throws LocalizedException */ public function bannerSaveBefore($model) { - if (!$this->_role->hasExclusiveStoreAccess((array)$model->getStoreIds())) { + // Only trust original store_ids for existing banner + $storeIds = $model->getId() + ? array_keys( + $model->getOrigData('store_contents') ?? $model->getResource()->getStoreContents($model->getId()) + ) + : $model->getStoreIds(); + if (!$this->_role->hasExclusiveStoreAccess($storeIds)) { + if ($model->getId() && (!$model->hasStoreId() || $this->_role->hasStoreAccess($model->getStoreId()))) { + // If banner is assigned to All Store Views, allow 'store_contents' update + if (in_array(Store::DEFAULT_STORE_ID, $storeIds)) { + $changedStores = array_keys( + array_diff_assoc( + (array)$model->getStoreContents(), + (array)$model->getOrigData('store_contents') + ) + ); + + if (array_intersect($changedStores, $this->_role->getStoreIds()) === $changedStores) { + // Overwrite model data with original data plus store_contents changes + $data = $model->getOrigData(); + $data['store_contents'] = $model->getStoreContents(); + $model->setData($data); + return; + } + } + } $this->_throwSave(); } } @@ -1291,17 +1399,20 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate banner before edit * - * @param \Magento\Banner\Model\Banner $model + * @param Banner $model * @return void + * @throws LocalizedException */ public function bannerLoadAfter($model) { + $model->setCanSaveAllStoreViewsContent((bool)$this->_role->getIsAll()); if ($model->getId()) { $bannerStoreIds = (array)$model->getStoreIds(); - $model->setCanSaveAllStoreViewsContent(false); if (!$this->_role->hasExclusiveStoreAccess((array)$model->getStoreIds())) { //Set flag readonly for using in blocks to disable form elements $model->setIsReadonly(true); + // Can edit content if banner assigned to All Store Views + $model->setIsContentReadonly(!in_array(Store::DEFAULT_STORE_ID, $bannerStoreIds)); } if (in_array(0, $bannerStoreIds)) { return; @@ -1315,8 +1426,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate banner before delete * - * @param \Magento\Banner\Model\Banner $model + * @param Banner $model * @return void + * @throws LocalizedException */ public function bannerDeleteBefore($model) { @@ -1328,8 +1440,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate Gift Card Account before save * - * @param \Magento\Banner\Model\Banner $model + * @param Banner $model * @return void + * @throws LocalizedException */ public function giftCardAccountSaveBefore($model) { @@ -1341,8 +1454,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate Gift Card Account before delete * - * @param \Magento\Banner\Model\Banner $model + * @param Banner $model * @return void + * @throws LocalizedException */ public function giftCardAccountDeleteBefore($model) { @@ -1354,8 +1468,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate Gift Card Account after load * - * @param \Magento\Banner\Model\Banner $model + * @param Banner $model * @return void + * @throws LocalizedException */ public function giftCardAccountLoadAfter($model) { @@ -1367,8 +1482,9 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate Gift Registry Type before save * - * @param \Magento\GiftRegistry\Model\Type $model + * @param Type $model * @return void + * @throws LocalizedException */ public function giftRegistryTypeSaveBefore($model) { @@ -1383,9 +1499,10 @@ class Models extends \Magento\AdminGws\Model\Observer\AbstractObserver implement /** * Validate Gift Registry Type before delete * - * @param \Magento\GiftRegistry\Model\Type $model + * @param Type $model * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @throws LocalizedException */ public function giftRegistryTypeDeleteBefore($model) { diff --git a/vendor/magento/module-admin-gws/Observer/AddPermissionsDataToBannerModel.php b/vendor/magento/module-admin-gws/Observer/AddPermissionsDataToBannerModel.php new file mode 100644 index 00000000000..ee5187f4e96 --- /dev/null +++ b/vendor/magento/module-admin-gws/Observer/AddPermissionsDataToBannerModel.php @@ -0,0 +1,47 @@ +models->bannerLoadAfter($observer->getEvent()->getModel()); + } +} diff --git a/vendor/magento/module-admin-gws/Observer/DisableAllStoreViewsContentField.php b/vendor/magento/module-admin-gws/Observer/DisableAllStoreViewsContentField.php deleted file mode 100644 index 595eda03ddf..00000000000 --- a/vendor/magento/module-admin-gws/Observer/DisableAllStoreViewsContentField.php +++ /dev/null @@ -1,36 +0,0 @@ -blocks = $blocks; - } - - /** - * Update role store group ids in helper and role - * - * @param \Magento\Framework\Event\Observer $observer - * @return void - */ - public function execute(\Magento\Framework\Event\Observer $observer) - { - $this->blocks->disableAllStoreViewsContentFeild($observer); - } -} diff --git a/vendor/magento/module-admin-gws/etc/adminhtml/events.xml b/vendor/magento/module-admin-gws/etc/adminhtml/events.xml index afebf113e7c..f2d3e59ff76 100644 --- a/vendor/magento/module-admin-gws/etc/adminhtml/events.xml +++ b/vendor/magento/module-admin-gws/etc/adminhtml/events.xml @@ -1,8 +1,19 @@ @@ -92,7 +103,7 @@ - + diff --git a/vendor/magento/module-banner/Model/Banner/Processor.php b/vendor/magento/module-banner/Model/Banner/Processor.php index 98cc1817455..d00bc0a96fe 100644 --- a/vendor/magento/module-banner/Model/Banner/Processor.php +++ b/vendor/magento/module-banner/Model/Banner/Processor.php @@ -1,10 +1,27 @@ salesRuleCollectionFactory = $salesRuleCollectionFactory->create(); @@ -50,7 +67,7 @@ class Processor /** * Modify data for the banner page * - * @param \Magento\Banner\Model\Banner $banner + * @param Banner $banner * @param integer $storeId * @return array */ @@ -107,16 +124,16 @@ class Processor /** * Modify data for related rules in related promotion section * - * @param \Magento\Banner\Model\Banner $banner - * @param $rulesCollection + * @param Banner $banner + * @param SalesRuleCollection|CatalogRuleCollection $rulesCollection * @param string $dataProviderName * @param string $listingName - * @return \Magento\Banner\Model\Banner + * @return Banner */ private function processRuleData($banner, $rulesCollection, $dataProviderName, $listingName) { $rulesData = []; - /** @var \Magento\CatalogRule\Model\Rule $rule */ + /** @var Rule $rule */ foreach ($rulesCollection->getItems() as $rule) { $rulesData[] = $this->getRuleDataArray($rule); } @@ -129,7 +146,7 @@ class Processor /** * Returns data to fill dynamic row grid * - * @param \Magento\CatalogRule\Model\Rule $rule + * @param Rule $rule * @return array */ private function getRuleDataArray($rule) @@ -146,11 +163,11 @@ class Processor /** * Modify data in the content section * - * @param \Magento\Banner\Model\Banner $banner + * @param Banner $banner * @param integer $storeId - * @return \Magento\Banner\Model\Banner + * @return Banner */ - private function modifyContentDataByStore(\Magento\Banner\Model\Banner $banner, $storeId) + private function modifyContentDataByStore(Banner $banner, $storeId) { $readonly = (bool)$banner->getIsReadonly(); $saveAllContent = $banner->getCanSaveAllStoreViewsContent(); @@ -164,14 +181,14 @@ class Processor $storeContents = isset($storeContentsData[$storeId]) ? $storeContentsData[$storeId] : $defaultContents; $showUseDefaultValue = true; - $contentReadonly = $readonly; + $contentReadonly = $banner->hasIsContentReadonly() ? $banner->getIsContentReadonly() : $readonly; if ($storeId == Store::DEFAULT_STORE_ID) { $showUseDefaultValue = false; $contentReadonly = $readonly || $saveAllContent === false; } $banner->setData('content_readonly', $contentReadonly); - $banner->setData('readonly', $contentReadonly); + $banner->setData('readonly', $readonly); $banner->setData('store_contents', $storeContents); $banner->setData('default_contents', $defaultContents); $banner->setData('use_default_value', $useDefaultValue); diff --git a/vendor/magento/module-banner/view/adminhtml/ui_component/banner_form.xml b/vendor/magento/module-banner/view/adminhtml/ui_component/banner_form.xml index bae6e1f1640..2b0979ce380 100644 --- a/vendor/magento/module-banner/view/adminhtml/ui_component/banner_form.xml +++ b/vendor/magento/module-banner/view/adminhtml/ui_component/banner_form.xml @@ -1,8 +1,19 @@
@@ -208,6 +219,9 @@ Add Cart Price Rules + + !${ $.provider }:data.readonly + @@ -349,6 +363,9 @@ text actionDelete + + !${ $.provider }:data.readonly + @@ -386,6 +403,9 @@ Add Catalog Price Rules + + !${ $.provider }:data.readonly + @@ -530,6 +550,9 @@ text actionDelete + + !${ $.provider }:data.readonly +