Skip to content

Commit f328d00

Browse files
Merge remote-tracking branch 'remotes/github/MAGETWO-93061' into EPAM-PR-59
2 parents 564aa6b + 336a537 commit f328d00

File tree

7 files changed

+191
-20
lines changed

7 files changed

+191
-20
lines changed

app/code/Magento/Cms/Test/Mftf/ActionGroup/CreateNewPageWithAllValuesActionGroup.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,10 @@
2828
<click selector="{{CmsNewPageHierarchySection.header}}" stepKey="clickHierarchy"/>
2929
<click selector="{{CmsNewPageHierarchySection.selectHierarchy(selectHierarchyOpt)}}" stepKey="clickPageCheckBoxes"/>
3030
</actionGroup>
31+
<actionGroup name="CreateNewPageWithAllValuesAndContent" extends="CreateNewPageWithAllValues">
32+
<arguments>
33+
<argument name="pageContent" type="string"/>
34+
</arguments>
35+
<fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="{{pageContent}}" stepKey="fillContentField" after="fillFieldContentHeading"/>
36+
</actionGroup>
3137
</actionGroups>

app/code/Magento/Cms/Test/Mftf/Data/CmsPageData.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@
2020
<data key="content">Sample page content. Yada yada yada.</data>
2121
<data key="identifier" unique="suffix">test-page-</data>
2222
</entity>
23+
<entity name="customCmsPage" extends="_defaultCmsPage" type="cms_page">
24+
<data key="content">Test content data1</data>
25+
<data key="identifier">url_key</data>
26+
</entity>
27+
<entity name="customCmsPage2" extends="_defaultCmsPage" type="cms_page">
28+
<data key="title">Test Second CMS Page</data>
29+
<data key="content">Test content data2</data>
30+
<data key="identifier">url_key</data>
31+
</entity>
2332
<entity name="_duplicatedCMSPage" type="cms_page">
2433
<data key="title">testpage</data>
2534
<data key="content_heading">Test Content Heading</data>

app/code/Magento/Cms/Ui/Component/Listing/Column/PageActions.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ class PageActions extends Column
2727
*/
2828
protected $actionUrlBuilder;
2929

30+
/**
31+
* @var \Magento\Cms\ViewModel\Page\Grid\UrlBuilder
32+
*/
33+
private $scopeUrlBuilder;
34+
3035
/**
3136
* @var \Magento\Framework\UrlInterface
3237
*/
@@ -50,6 +55,7 @@ class PageActions extends Column
5055
* @param array $components
5156
* @param array $data
5257
* @param string $editUrl
58+
* @param \Magento\Cms\ViewModel\Page\Grid\UrlBuilder|null $scopeUrlBuilder
5359
*/
5460
public function __construct(
5561
ContextInterface $context,
@@ -58,12 +64,15 @@ public function __construct(
5864
UrlInterface $urlBuilder,
5965
array $components = [],
6066
array $data = [],
61-
$editUrl = self::CMS_URL_PATH_EDIT
67+
$editUrl = self::CMS_URL_PATH_EDIT,
68+
\Magento\Cms\ViewModel\Page\Grid\UrlBuilder $scopeUrlBuilder = null
6269
) {
6370
$this->urlBuilder = $urlBuilder;
6471
$this->actionUrlBuilder = $actionUrlBuilder;
6572
$this->editUrl = $editUrl;
6673
parent::__construct($context, $uiComponentFactory, $components, $data);
74+
$this->scopeUrlBuilder = $scopeUrlBuilder ?: ObjectManager::getInstance()
75+
->get(\Magento\Cms\ViewModel\Page\Grid\UrlBuilder::class);
6776
}
6877

6978
/**
@@ -92,7 +101,7 @@ public function prepareDataSource(array $dataSource)
92101
}
93102
if (isset($item['identifier'])) {
94103
$item[$name]['preview'] = [
95-
'href' => $this->actionUrlBuilder->getUrl(
104+
'href' => $this->scopeUrlBuilder->getUrl(
96105
$item['identifier'],
97106
isset($item['_first_store_id']) ? $item['_first_store_id'] : null,
98107
isset($item['store_code']) ? $item['store_code'] : null
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Cms\ViewModel\Page\Grid;
9+
10+
use Magento\Framework\Url\EncoderInterface;
11+
use Magento\Framework\App\ActionInterface;
12+
use Magento\Store\Model\StoreManagerInterface;
13+
14+
/**
15+
* Url builder class used to compose dynamic urls.
16+
*/
17+
class UrlBuilder
18+
{
19+
/**
20+
* @var \Magento\Framework\UrlInterface
21+
*/
22+
protected $frontendUrlBuilder;
23+
24+
/**
25+
* @var EncoderInterface
26+
*/
27+
private $urlEncoder;
28+
29+
/**
30+
* @var StoreManagerInterface
31+
*/
32+
private $storeManager;
33+
34+
/**
35+
* @param \Magento\Framework\UrlInterface $frontendUrlBuilder
36+
* @param EncoderInterface $urlEncoder
37+
* @param StoreManagerInterface $storeManager
38+
*/
39+
public function __construct(
40+
\Magento\Framework\UrlInterface $frontendUrlBuilder,
41+
EncoderInterface $urlEncoder,
42+
StoreManagerInterface $storeManager
43+
) {
44+
$this->frontendUrlBuilder = $frontendUrlBuilder;
45+
$this->urlEncoder = $urlEncoder;
46+
$this->storeManager = $storeManager;
47+
}
48+
49+
/**
50+
* Get action url
51+
*
52+
* @param string $routePath
53+
* @param string $scope
54+
* @param string $store
55+
* @return string
56+
*/
57+
public function getUrl($routePath, $scope, $store)
58+
{
59+
if ($scope) {
60+
$this->frontendUrlBuilder->setScope($scope);
61+
$targetUrl = $this->frontendUrlBuilder->getUrl(
62+
$routePath,
63+
[
64+
'_current' => false,
65+
'_nosid' => true,
66+
'_query' => [
67+
StoreManagerInterface::PARAM_NAME => $store
68+
]
69+
]
70+
);
71+
$href = $this->frontendUrlBuilder->getUrl(
72+
'stores/store/switch',
73+
[
74+
'_current' => false,
75+
'_nosid' => true,
76+
'_query' => $this->prepareRequestQuery($store, $targetUrl)
77+
]
78+
);
79+
} else {
80+
$href = $this->frontendUrlBuilder->getUrl(
81+
$routePath,
82+
[
83+
'_current' => false,
84+
'_nosid' => true
85+
]
86+
);
87+
}
88+
89+
return $href;
90+
}
91+
92+
/**
93+
* Prepare request query
94+
*
95+
* @param string $store
96+
* @param string $href
97+
* @return array
98+
*/
99+
private function prepareRequestQuery(string $store, string $href) : array
100+
{
101+
$storeView = $this->storeManager->getDefaultStoreView();
102+
$query = [
103+
StoreManagerInterface::PARAM_NAME => $store,
104+
ActionInterface::PARAM_NAME_URL_ENCODED => $this->urlEncoder->encode($href)
105+
];
106+
if ($storeView->getCode() !== $store) {
107+
$query['___from_store'] = $storeView->getCode();
108+
}
109+
110+
return $query;
111+
}
112+
}

app/code/Magento/Cms/etc/adminhtml/di.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212
<argument name="frontendUrlBuilder" xsi:type="object">Magento\Framework\Url</argument>
1313
</arguments>
1414
</type>
15+
<type name="Magento\Cms\ViewModel\Page\Grid\UrlBuilder">
16+
<arguments>
17+
<argument name="frontendUrlBuilder" xsi:type="object">Magento\Framework\Url</argument>
18+
</arguments>
19+
</type>
1520
<type name="Magento\Cms\Model\Wysiwyg\CompositeConfigProvider">
1621
<arguments>
1722
<argument name="variablePluginConfigProvider" xsi:type="array">

app/code/Magento/Store/Controller/Store/SwitchAction.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Copyright © Magento, Inc. All rights reserved.
55
* See COPYING.txt for license details.
66
*/
7+
declare(strict_types=1);
78

89
namespace Magento\Store\Controller\Store;
910

@@ -18,13 +19,15 @@
1819
use Magento\Store\Model\StoreManagerInterface;
1920
use Magento\Store\Model\StoreSwitcher;
2021
use Magento\Store\Model\StoreSwitcherInterface;
22+
use Magento\Framework\App\Action\HttpPostActionInterface;
23+
use Magento\Framework\App\Action\HttpGetActionInterface;
2124

2225
/**
2326
* Handles store switching url and makes redirect.
2427
*
2528
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2629
*/
27-
class SwitchAction extends Action
30+
class SwitchAction extends Action implements HttpGetActionInterface, HttpPostActionInterface
2831
{
2932
/**
3033
* @var StoreCookieManagerInterface
@@ -89,10 +92,12 @@ public function __construct(
8992
public function execute()
9093
{
9194
$targetStoreCode = $this->_request->getParam(
92-
\Magento\Store\Model\StoreManagerInterface::PARAM_NAME,
95+
\Magento\Store\Model\StoreManagerInterface::PARAM_NAME
96+
);
97+
$fromStoreCode = $this->_request->getParam(
98+
'___from_store',
9399
$this->storeCookieManager->getStoreCodeFromCookie()
94100
);
95-
$fromStoreCode = $this->_request->getParam('___from_store');
96101

97102
$requestedUrlToRedirect = $this->_redirect->getRedirectUrl();
98103
$redirectUrl = $requestedUrlToRedirect;

app/code/Magento/UrlRewrite/Model/StoreSwitcher/RewriteUrl.php

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -63,28 +63,27 @@ public function switch(StoreInterface $fromStore, StoreInterface $targetStore, s
6363
}
6464

6565
$oldStoreId = $fromStore->getId();
66-
$oldRewrite = $this->urlFinder->findOneByData([
67-
UrlRewrite::REQUEST_PATH => $urlPath,
68-
UrlRewrite::STORE_ID => $oldStoreId,
69-
]);
66+
$oldRewrite = $this->urlFinder->findOneByData(
67+
[
68+
UrlRewrite::REQUEST_PATH => $urlPath,
69+
UrlRewrite::STORE_ID => $oldStoreId,
70+
]
71+
);
7072
if ($oldRewrite) {
7173
$targetUrl = $targetStore->getBaseUrl();
7274
// look for url rewrite match on the target store
73-
$currentRewrite = $this->urlFinder->findOneByData([
74-
UrlRewrite::TARGET_PATH => $oldRewrite->getTargetPath(),
75-
UrlRewrite::STORE_ID => $targetStore->getId(),
76-
]);
75+
$currentRewrite = $this->findCurrentRewrite($oldRewrite, $targetStore);
7776
if ($currentRewrite) {
7877
$targetUrl .= $currentRewrite->getRequestPath();
7978
}
8079
} else {
81-
$existingRewrite = $this->urlFinder->findOneByData([
82-
UrlRewrite::REQUEST_PATH => $urlPath
83-
]);
84-
$currentRewrite = $this->urlFinder->findOneByData([
85-
UrlRewrite::REQUEST_PATH => $urlPath,
86-
UrlRewrite::STORE_ID => $targetStore->getId(),
87-
]);
80+
$existingRewrite = $this->urlFinder->findOneByData([UrlRewrite::REQUEST_PATH => $urlPath]);
81+
$currentRewrite = $this->urlFinder->findOneByData(
82+
[
83+
UrlRewrite::REQUEST_PATH => $urlPath,
84+
UrlRewrite::STORE_ID => $targetStore->getId(),
85+
]
86+
);
8887

8988
if ($existingRewrite && !$currentRewrite) {
9089
/** @var \Magento\Framework\App\Response\Http $response */
@@ -93,4 +92,30 @@ public function switch(StoreInterface $fromStore, StoreInterface $targetStore, s
9392
}
9493
return $targetUrl;
9594
}
95+
96+
/**
97+
* Look for url rewrite match on the target store
98+
*
99+
* @param UrlRewrite $oldRewrite
100+
* @param StoreInterface $targetStore
101+
* @return UrlRewrite|null
102+
*/
103+
private function findCurrentRewrite(UrlRewrite $oldRewrite, StoreInterface $targetStore)
104+
{
105+
$currentRewrite = $this->urlFinder->findOneByData(
106+
[
107+
UrlRewrite::TARGET_PATH => $oldRewrite->getTargetPath(),
108+
UrlRewrite::STORE_ID => $targetStore->getId(),
109+
]
110+
);
111+
if (!$currentRewrite) {
112+
$currentRewrite = $this->urlFinder->findOneByData(
113+
[
114+
UrlRewrite::REQUEST_PATH => $oldRewrite->getTargetPath(),
115+
UrlRewrite::STORE_ID => $targetStore->getId(),
116+
]
117+
);
118+
}
119+
return $currentRewrite;
120+
}
96121
}

0 commit comments

Comments
 (0)