diff --git a/app/code/core/Mage/Cms/Helper/Page.php b/app/code/core/Mage/Cms/Helper/Page.php index 3de4d300260..8bc9656ea53 100644 --- a/app/code/core/Mage/Cms/Helper/Page.php +++ b/app/code/core/Mage/Cms/Helper/Page.php @@ -7,6 +7,8 @@ * @package Mage_Cms */ +use Mage_Adminhtml_Block_System_Config_Form as Form; + /** * CMS Page Helper * @@ -29,6 +31,7 @@ class Mage_Cms_Helper_Page extends Mage_Core_Helper_Abstract * * @param string $pageId * @return bool + * @throws Mage_Core_Exception */ public function renderPage(Mage_Core_Controller_Front_Action $action, $pageId = null) { @@ -41,8 +44,9 @@ public function renderPage(Mage_Core_Controller_Front_Action $action, $pageId = * @param string $pageId * @param bool $renderLayout * @return bool + * @throws Mage_Core_Exception */ - protected function _renderPage(Mage_Core_Controller_Varien_Action $action, $pageId = null, $renderLayout = true) + protected function _renderPage(Mage_Core_Controller_Varien_Action $action, $pageId = null, $renderLayout = true) { $page = Mage::getSingleton('cms/page'); if (!is_null($pageId) && $pageId !== $page->getId()) { @@ -129,6 +133,7 @@ protected function _renderPage(Mage_Core_Controller_Varien_Action $action, $pag * @param string $pageId * @param bool $renderLayout * @return bool + * @throws Mage_Core_Exception */ public function renderPageExtended(Mage_Core_Controller_Varien_Action $action, $pageId = null, $renderLayout = true) { @@ -140,6 +145,7 @@ public function renderPageExtended(Mage_Core_Controller_Varien_Action $action, $ * * @param string $pageId * @return string|null + * @throws Mage_Core_Model_Store_Exception */ public function getPageUrl($pageId = null) { @@ -176,4 +182,68 @@ public static function getUsedInStoreConfigPaths(?array $paths = []): array return $searchPaths; } + + /** + * @param self::XML_PATH_* $path + */ + public static function getConfigLabelFromConfigPath(string $path): string + { + return match ($path) { + self::XML_PATH_NO_ROUTE_PAGE => Mage::helper('cms')->__('No Route Page'), + self::XML_PATH_NO_COOKIES_PAGE => Mage::helper('cms')->__('No Cookies Page'), + self::XML_PATH_HOME_PAGE => Mage::helper('cms')->__('Home Page'), + default => $path, + }; + } + + /** + * @param Form::SCOPE_* $scope + * @throws Mage_Core_Exception + */ + public static function getScopeInfoFromConfigScope(string $scope, string $scopeId): string + { + return match ($scope) { + Form::SCOPE_ENV => Mage::helper('cms')->__('Environment Config'), + Form::SCOPE_DEFAULT => Mage::helper('cms')->__('Default Config'), + Form::SCOPE_WEBSITES => Mage::app()->getWebsite($scopeId)->getName(), + Form::SCOPE_STORES => sprintf( + '%s - %s', + Mage::app()->getStore($scopeId)->getGroup()->getName(), + Mage::app()->getStore($scopeId)->getName(), + ), + }; + } + + /** + * @throws Mage_Core_Exception + */ + public static function getValidateConfigErrorMessage(Mage_Core_Model_Resource_Db_Collection_Abstract $isUsedInConfig): string + { + $messages = []; + + $data = $isUsedInConfig->getData(); + foreach ($data as $key => $item) { + $path = $item['path']; + unset($item['config_id'], $item['path'], $item['updated_at'], $item['value']); + $data[$path][] = $item; + unset($data[$key], $key, $path); + } + + foreach ($data as $path => $items) { + $scopes = []; + foreach ($items as $item) { + $scopes[] = self::getScopeInfoFromConfigScope($item['scope'], $item['scope_id']); + } + + $messages[] = sprintf( + '%s (%s)', + self::getConfigLabelFromConfigPath($path), + implode(', ', $scopes), + ); + } + + unset($data, $path, $items, $item, $scopes); + + return implode(', ', $messages); + } } diff --git a/app/code/core/Mage/Cms/Model/Resource/Page.php b/app/code/core/Mage/Cms/Model/Resource/Page.php index f03ece47c59..3012dad35b0 100644 --- a/app/code/core/Mage/Cms/Model/Resource/Page.php +++ b/app/code/core/Mage/Cms/Model/Resource/Page.php @@ -39,8 +39,9 @@ protected function _beforeDelete(Mage_Core_Model_Abstract $object) $object->setId(null); Mage::throwException( Mage::helper('cms')->__( - 'Cannot delete page, it is used in "%s".', - implode(', ', $isUsedInConfig->getColumnValues('path')), + 'You cannot delete this page as it is used to configure %s.', + Mage::helper('adminhtml')::getUrl('adminhtml/system_config/edit', ['section' => 'web']), + Mage_Cms_Helper_Page::getValidateConfigErrorMessage($isUsedInConfig), ), ); } @@ -79,8 +80,9 @@ protected function _beforeSave(Mage_Core_Model_Abstract $object) $object->setIsActive(true); Mage::getSingleton('adminhtml/session')->addWarning( Mage::helper('cms')->__( - 'Cannot disable page, it is used in configuration "%s".', - implode(', ', $isUsedInConfig->getColumnValues('path')), + 'You cannot disable this page as it is used to configure %s.', + Mage::helper('adminhtml')::getUrl('adminhtml/system_config/edit', ['section' => 'web']), + Mage_Cms_Helper_Page::getValidateConfigErrorMessage($isUsedInConfig), ), ); } @@ -111,6 +113,7 @@ protected function _beforeSave(Mage_Core_Model_Abstract $object) /** * @param Mage_Cms_Model_Page $object * @inheritDoc + * @throws Zend_Db_Exception */ protected function _afterSave(Mage_Core_Model_Abstract $object) { @@ -185,6 +188,7 @@ protected function _afterLoad(Mage_Core_Model_Abstract $object) * @param mixed $value * @param Mage_Cms_Model_Page $object * @return Zend_Db_Select + * @throws Exception */ protected function _getLoadSelect($field, $value, $object) { @@ -236,6 +240,7 @@ protected function _getLoadByIdentifierSelect($identifier, $store, $isActive = n /** * Check for unique of identifier of page to selected store(s). * + * @param Mage_Cms_Model_Page $object * @return bool */ public function getIsUniquePageToStores(Mage_Core_Model_Abstract $object) @@ -282,7 +287,9 @@ protected function isValidPageIdentifier(Mage_Core_Model_Abstract $object) public function getUsedInStoreConfigCollection(Mage_Cms_Model_Page $page, ?array $paths = []): Mage_Core_Model_Resource_Db_Collection_Abstract { - $storeIds = (array) $page->getStoreId(); + $storeId = (array) $page->getStoreId(); # null on save + $stores = (array) $page->getStores(); # null on delete + $storeIds = array_merge($storeId, $stores); $storeIds[] = Mage_Core_Model_App::ADMIN_STORE_ID; $config = Mage::getResourceModel('core/config_data_collection') ->addFieldToFilter('value', $page->getIdentifier()) @@ -326,6 +333,7 @@ public function checkIdentifier($identifier, $storeId) * * @param string|int $identifier * @return string + * @throws Mage_Core_Model_Store_Exception */ public function getCmsPageTitleByIdentifier($identifier) { @@ -418,6 +426,7 @@ public function setStore($store) * Retrieve store model * * @return Mage_Core_Model_Store + * @throws Mage_Core_Model_Store_Exception */ public function getStore() { diff --git a/app/locale/en_US/Mage_Cms.csv b/app/locale/en_US/Mage_Cms.csv index 52f813fe13d..b21ead836f2 100644 --- a/app/locale/en_US/Mage_Cms.csv +++ b/app/locale/en_US/Mage_Cms.csv @@ -27,10 +27,8 @@ "CMS Static Block","CMS Static Block" "CMS Static Block Default Template","CMS Static Block Default Template" "Cannot create new directory.","Cannot create new directory." -"Cannot delete page, it is used in ""%s"".","Cannot delete page, it is used in ""%s""." "Cannot delete directory %s.","Cannot delete directory %s." "Cannot delete root directory %s.","Cannot delete root directory %s." -"Cannot disable page, it is used in configuration ""%s"".","Cannot disable page, it is used in configuration ""%s""." "Cannot upload file.","Cannot upload file." "Collapse All","Collapse All" "Content","Content" @@ -124,4 +122,6 @@ "Unable to find a block to delete.","Unable to find a block to delete." "Unable to find a page to delete.","Unable to find a page to delete." "WYSIWYG Options","WYSIWYG Options" +"You cannot delete this page as it is used to configure %s.","You cannot delete this page as it is used to configure %s." +"You cannot disable this page as it is used to configure %s.","You cannot disable this page as it is used to configure %s." "px.","px." diff --git a/cypress/e2e/openmage/backend/cms/page.cy.js b/cypress/e2e/openmage/backend/cms/page.cy.js index 125cfbf166e..ae3f88ba544 100644 --- a/cypress/e2e/openmage/backend/cms/page.cy.js +++ b/cypress/e2e/openmage/backend/cms/page.cy.js @@ -61,7 +61,7 @@ describe(`Checks admin system "${test.index.title}"`, () => { test.edit.__buttons.saveAndContinue.click(); const success = 'The page has been saved.'; - const warning = 'Cannot disable page, it is used in configuration'; + const warning = 'You cannot disable this page as it is used to configure'; validation.hasWarningMessage(warning); validation.hasSuccessMessage(success); utils.screenshot(cy.openmage.validation._messagesContainer, 'message.cms.page.disableActivePage'); @@ -71,7 +71,7 @@ describe(`Checks admin system "${test.index.title}"`, () => { test.index.clickGridRow('no-route'); test.edit.__buttons.delete.click(); - const message = 'Cannot delete page'; + const message = 'You cannot delete this page as it is used to configure'; const screenshot = 'message.cms.page.deleteActivePage'; validation.hasErrorMessage(message, { screenshot: true, filename: screenshot }); }); diff --git a/skin/adminhtml/default/openmage/override.css b/skin/adminhtml/default/openmage/override.css index b5984e00277..5dcb9816c22 100644 --- a/skin/adminhtml/default/openmage/override.css +++ b/skin/adminhtml/default/openmage/override.css @@ -748,6 +748,10 @@ div.autocomplete ul li.selected { border: 1px solid #dfc97a !important; color: #2f2f2f !important; } +.notice-msg a { + color: #2f2f2f !important; + text-decoration: underline; +} .error-msg { background-image: url(images/icon-error.png) !important; @@ -758,6 +762,10 @@ div.autocomplete ul li.selected { border: 1px solid #963535 !important; color: #963535 !important; } +.error-msg a { + color: #963535 !important; + text-decoration: underline; +} .success-msg { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='width:24px;height:24px' viewBox='0 0 24 24'%3E%3Cpath fill='%23185b00' d='M9,20.42L2.79,14.21L5.62,11.38L9,14.77L18.88,4.88L21.71,7.71L9,20.42Z' /%3E%3C/svg%3E") !important; @@ -768,6 +776,10 @@ div.autocomplete ul li.selected { border: 1px solid #ceceb6 !important; color: #185b00 !important; } +.success-msg a { + color: #185b00 !important; + text-decoration: underline; +} .warning-msg { background-image: url(images/information-variant.svg) !important; @@ -778,6 +790,10 @@ div.autocomplete ul li.selected { border: 1px solid #d87e34 !important; color: #2f2f2f !important; } +.warning-msg a { + color: #2f2f2f !important; + text-decoration: underline; +} .links-feed { margin-top: 10px; diff --git a/skin/adminhtml/default/openmage/override.css.map b/skin/adminhtml/default/openmage/override.css.map index 0ee560c3411..906d257c18b 100644 --- a/skin/adminhtml/default/openmage/override.css.map +++ b/skin/adminhtml/default/openmage/override.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["scss/override.scss","scss/_variables.scss","scss/_base.scss","scss/_fonts.scss"],"names":[],"mappings":"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","file":"override.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["scss/override.scss","scss/_variables.scss","scss/_base.scss","scss/_fonts.scss"],"names":[],"mappings":"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","file":"override.css"} \ No newline at end of file diff --git a/skin/adminhtml/default/openmage/scss/override.scss b/skin/adminhtml/default/openmage/scss/override.scss index f74e0b92e75..c7bd0ae9018 100644 --- a/skin/adminhtml/default/openmage/scss/override.scss +++ b/skin/adminhtml/default/openmage/scss/override.scss @@ -796,6 +796,10 @@ div { background-position: 8px center !important; border: 1px solid $color_chenin_approx !important; color: $color_dark_grey !important; + a { + color: $color_dark_grey !important; + text-decoration: underline; + } } .error-msg { @@ -807,6 +811,10 @@ div { background-position: 8px center !important; border: 1px solid $color_sanguine_brown_approx !important; color: $color_sanguine_brown_approx !important; + a { + color: $color_sanguine_brown_approx !important; + text-decoration: underline; + } } .success-msg { @@ -818,6 +826,10 @@ div { background-position: 8px center !important; border: 1px solid $color_foggy_gray_approx !important; color: $color_san_felix_approx !important; + a { + color: $color_san_felix_approx !important; + text-decoration: underline; + } } .warning-msg { @@ -829,6 +841,10 @@ div { background-position: 8px center !important; border: 1px solid $color_brandy_punch_approx !important; color: $color_dark_grey !important; + a { + color: $color_dark_grey !important; + text-decoration: underline; + } } .links-feed { diff --git a/tests/unit/Mage/Cms/Helper/PageTest.php b/tests/unit/Mage/Cms/Helper/PageTest.php index 284e0dea6ed..f54b712a50a 100644 --- a/tests/unit/Mage/Cms/Helper/PageTest.php +++ b/tests/unit/Mage/Cms/Helper/PageTest.php @@ -20,6 +20,7 @@ final class PageTest extends OpenMageTest use CmsTrait; /** + * @covers Mage_Cms_Helper_Page::getUsedInStoreConfigPaths() * @dataProvider provideGetUsedInStoreConfigPaths * @group Helper */ @@ -27,4 +28,24 @@ public function testGetUsedInStoreConfigPaths(array $expectedResult, ?array $pat { self::assertSame($expectedResult, Subject::getUsedInStoreConfigPaths($path)); } + + /** + * @covers Mage_Cms_Helper_Page::getConfigLabelFromConfigPath() + * @dataProvider provideGetConfigLabelFromConfigPath + * @group Helper + */ + public function testGetConfigLabelFromConfigPath(string $expectedResult, string $paths): void + { + self::assertSame($expectedResult, Subject::getConfigLabelFromConfigPath($paths)); + } + + /** + * @covers Mage_Cms_Helper_Page::getScopeInfoFromConfigScope() + * @dataProvider provideGetScopeInfoFromConfigScope + * @group Helper + */ + public function testGetScopeInfoFromConfigScope(string $expectedResult, string $scope, string $scopeId): void + { + self::assertStringStartsWith($expectedResult, Subject::getScopeInfoFromConfigScope($scope, $scopeId)); + } } diff --git a/tests/unit/Traits/DataProvider/Mage/Cms/CmsTrait.php b/tests/unit/Traits/DataProvider/Mage/Cms/CmsTrait.php index 9b02b997d0e..d6df9624f30 100644 --- a/tests/unit/Traits/DataProvider/Mage/Cms/CmsTrait.php +++ b/tests/unit/Traits/DataProvider/Mage/Cms/CmsTrait.php @@ -11,6 +11,7 @@ namespace OpenMage\Tests\Unit\Traits\DataProvider\Mage\Cms; use Generator; +use Mage_Adminhtml_Block_System_Config_Form; use Mage_Cms_Helper_Page; trait CmsTrait @@ -45,6 +46,45 @@ public function provideGetUsedInStoreConfigPaths(): Generator ]; } + public function provideGetConfigLabelFromConfigPath(): Generator + { + yield 'home page' => [ + 'Home Page', + Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE, + ]; + + yield 'no cookie page' => [ + 'No Cookies Page', + Mage_Cms_Helper_Page::XML_PATH_NO_COOKIES_PAGE, + ]; + + yield 'no route page' => [ + 'No Route Page', + Mage_Cms_Helper_Page::XML_PATH_NO_ROUTE_PAGE, + ]; + } + + public function provideGetScopeInfoFromConfigScope(): Generator + { + yield 'default' => [ + 'Default Config', + Mage_Adminhtml_Block_System_Config_Form::SCOPE_DEFAULT, + '1', + ]; + + yield 'websites' => [ + 'Main Website', + Mage_Adminhtml_Block_System_Config_Form::SCOPE_WEBSITES, + '1', + ]; + + yield 'stores' => [ + 'Main Website', + Mage_Adminhtml_Block_System_Config_Form::SCOPE_STORES, + '1', + ]; + } + public function provideGetShortFilename(): Generator { yield 'full length' => [