Skip to content

Commit 7b1bec8

Browse files
[2.3-develop] Forwardport of #12649
1 parent 15d1a96 commit 7b1bec8

File tree

8 files changed

+423
-13
lines changed

8 files changed

+423
-13
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Cms\Api;
7+
8+
/**
9+
* Utility Cms Pages
10+
*
11+
* @api
12+
*/
13+
interface GetUtilityPageIdentifiersInterface
14+
{
15+
/**
16+
* Get List Page Identifiers
17+
* @return array
18+
*/
19+
public function execute();
20+
}
+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Cms\Model;
7+
8+
use Magento\Cms\Api\GetUtilityPageIdentifiersInterface;
9+
use Magento\Framework\App\Config\ScopeConfigInterface;
10+
use Magento\Store\Model\ScopeInterface;
11+
12+
/**
13+
* Utility Cms Pages.
14+
*/
15+
class GetUtilityPageIdentifiers implements GetUtilityPageIdentifiersInterface
16+
{
17+
/**
18+
* @var ScopeConfigInterface
19+
*/
20+
private $scopeConfig;
21+
22+
/**
23+
* UtilityCmsPage constructor.
24+
* @param ScopeConfigInterface $scopeConfig
25+
*/
26+
public function __construct(
27+
ScopeConfigInterface $scopeConfig
28+
) {
29+
$this->scopeConfig = $scopeConfig;
30+
}
31+
32+
/**
33+
* Get List Page Identifiers.
34+
*
35+
* @return array
36+
*/
37+
public function execute()
38+
{
39+
$homePageIdentifier = $this->scopeConfig->getValue(
40+
'web/default/cms_home_page',
41+
ScopeInterface::SCOPE_STORE
42+
);
43+
$noRouteIdentifier = $this->scopeConfig->getValue(
44+
'web/default/cms_no_route',
45+
ScopeInterface::SCOPE_STORE
46+
);
47+
48+
$noCookieIdentifier = $this->scopeConfig->getValue(
49+
'web/default/cms_no_cookies',
50+
ScopeInterface::SCOPE_STORE
51+
);
52+
53+
return [$homePageIdentifier, $noRouteIdentifier, $noCookieIdentifier];
54+
}
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Cms\Test\Unit\Model;
8+
9+
use Magento\Cms\Model\GetUtilityPageIdentifiers;
10+
use Magento\Framework\App\Config\ScopeConfigInterface;
11+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
12+
use Magento\Store\Model\ScopeInterface;
13+
use PHPUnit\Framework\TestCase;
14+
15+
/**
16+
* Provide tests for GetUtilityPageIdentifiers model.
17+
*/
18+
class GetUtilityPageIdentifiersTest extends TestCase
19+
{
20+
/**
21+
* Test subject.
22+
*
23+
* @var GetUtilityPageIdentifiers
24+
*/
25+
private $model;
26+
27+
/**
28+
* @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
29+
*/
30+
private $scopeConfig;
31+
32+
/**
33+
* @inheritdoc
34+
*/
35+
protected function setUp()
36+
{
37+
$objectManager = new ObjectManager($this);
38+
$this->scopeConfig = $this->getMockBuilder(ScopeConfigInterface::class)
39+
->setMethods(['getValue'])
40+
->disableOriginalConstructor()
41+
->getMockForAbstractClass();
42+
$this->model = $objectManager->getObject(
43+
GetUtilityPageIdentifiers::class,
44+
[
45+
'scopeConfig' => $this->scopeConfig,
46+
]
47+
);
48+
}
49+
50+
/**
51+
* Test GetUtilityPageIdentifiers::execute() will read config for getting correct routes.
52+
*
53+
* @return void
54+
*/
55+
public function testExecute()
56+
{
57+
$cmsHomePage = 'testCmsHomePage';
58+
$cmsNoRoute = 'testCmsNoRoute';
59+
$cmsNoCookies = 'testCmsNoCookies';
60+
$this->scopeConfig->expects($this->exactly(3))
61+
->method('getValue')
62+
->withConsecutive(
63+
[$this->identicalTo('web/default/cms_home_page'), $this->identicalTo(ScopeInterface::SCOPE_STORE)],
64+
[$this->identicalTo('web/default/cms_no_route'), $this->identicalTo(ScopeInterface::SCOPE_STORE)],
65+
[$this->identicalTo('web/default/cms_no_cookies'), $this->identicalTo(ScopeInterface::SCOPE_STORE)]
66+
)->willReturnOnConsecutiveCalls(
67+
$cmsHomePage,
68+
$cmsNoRoute,
69+
$cmsNoCookies
70+
);
71+
$this->assertSame([$cmsHomePage, $cmsNoRoute, $cmsNoCookies], $this->model->execute());
72+
}
73+
}

Diff for: app/code/Magento/Cms/etc/di.xml

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<preference for="Magento\Cms\Api\BlockRepositoryInterface" type="Magento\Cms\Model\BlockRepository" />
1818
<preference for="Magento\Cms\Api\PageRepositoryInterface" type="Magento\Cms\Model\PageRepository" />
1919
<preference for="Magento\Ui\Component\Wysiwyg\ConfigInterface" type="Magento\Cms\Model\Wysiwyg\Config"/>
20+
<preference for="Magento\Cms\Api\GetUtilityPageIdentifiersInterface" type="Magento\Cms\Model\GetUtilityPageIdentifiers" />
2021
<type name="Magento\Cms\Model\Wysiwyg\Config">
2122
<arguments>
2223
<argument name="windowSize" xsi:type="array">

Diff for: app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php

+26-13
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,23 @@
66
namespace Magento\Sitemap\Model\ResourceModel\Cms;
77

88
use Magento\Cms\Api\Data\PageInterface;
9-
use Magento\Framework\EntityManager\MetadataPool;
10-
use Magento\Framework\Model\ResourceModel\Db\Context;
11-
use Magento\Framework\Model\AbstractModel;
9+
use Magento\Cms\Api\GetUtilityPageIdentifiersInterface;
1210
use Magento\Cms\Model\Page as CmsPage;
11+
use Magento\Framework\App\ObjectManager;
1312
use Magento\Framework\DB\Select;
1413
use Magento\Framework\EntityManager\EntityManager;
14+
use Magento\Framework\EntityManager\MetadataPool;
15+
use Magento\Framework\Model\AbstractModel;
16+
use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
17+
use Magento\Framework\Model\ResourceModel\Db\Context;
1518

1619
/**
1720
* Sitemap cms page collection model
1821
*
1922
* @api
2023
* @since 100.0.2
2124
*/
22-
class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
25+
class Page extends AbstractDb
2326
{
2427
/**
2528
* @var MetadataPool
@@ -34,19 +37,29 @@ class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
3437
protected $entityManager;
3538

3639
/**
37-
* @param Context $context
38-
* @param MetadataPool $metadataPool
39-
* @param EntityManager $entityManager
40-
* @param string $connectionName
40+
* @var GetUtilityPageIdentifiersInterface
41+
* @since 100.2.0
42+
*/
43+
private $getUtilityPageIdentifiers;
44+
45+
/**
46+
* @param Context $context
47+
* @param MetadataPool $metadataPool
48+
* @param EntityManager $entityManager
49+
* @param string $connectionName
50+
* @param GetUtilityPageIdentifiersInterface $getUtilityPageIdentifiers
4151
*/
4252
public function __construct(
4353
Context $context,
4454
MetadataPool $metadataPool,
4555
EntityManager $entityManager,
46-
$connectionName = null
56+
$connectionName = null,
57+
GetUtilityPageIdentifiersInterface $getUtilityPageIdentifiers = null
4758
) {
48-
$this->metadataPool = $metadataPool;
49-
$this->entityManager = $entityManager;
59+
$this->metadataPool = $metadataPool;
60+
$this->entityManager = $entityManager;
61+
$this->getUtilityPageIdentifiers = $getUtilityPageIdentifiers ?:
62+
ObjectManager::getInstance()->get(GetUtilityPageIdentifiersInterface::class);
5063
parent::__construct($context, $connectionName);
5164
}
5265

@@ -90,8 +103,8 @@ public function getCollection($storeId)
90103
)->where(
91104
'main_table.is_active = 1'
92105
)->where(
93-
'main_table.identifier != ?',
94-
\Magento\Cms\Model\Page::NOROUTE_PAGE_ID
106+
'main_table.identifier NOT IN (?)',
107+
$this->getUtilityPageIdentifiers->execute()
95108
)->where(
96109
'store_table.store_id IN(?)',
97110
[0, $storeId]

0 commit comments

Comments
 (0)