Skip to content

Commit e3a2b49

Browse files
committed
Merge branch 'import' into master
2 parents 651cfba + 7654c75 commit e3a2b49

File tree

10 files changed

+280
-2
lines changed

10 files changed

+280
-2
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"pds/skeleton": "^1.0",
4040
"phpro/grumphp": "^v0.21.0",
4141
"phpstan/phpstan": "^0.12.0",
42-
"squizlabs/php_codesniffer": "^3.5"
42+
"squizlabs/php_codesniffer": "^3.5",
43+
"magento/magento-coding-standard": "@dev"
4344
}
4445
}

src/Cron/GenerateRewriteMaps.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace IntegerNet\RewriteMap\Cron;
5+
6+
use IntegerNet\RewriteMap\Model\RewriteMapsSavingService as RewriteMapsSavingService;
7+
use Magento\Framework\App\Config\ScopeConfigInterface;
8+
use Magento\Framework\Exception\FileSystemException as FileSystemException;
9+
use Magento\Framework\Exception\InputException;
10+
use Psr\Log\LoggerInterface as LoggerInterface;
11+
12+
class GenerateRewriteMaps
13+
{
14+
/**
15+
* @var RewriteMapsSavingService
16+
*/
17+
private $rewriteMapsSavingService;
18+
/**
19+
* @var LoggerInterface
20+
*/
21+
private $logger;
22+
/**
23+
* @var ScopeConfigInterface
24+
*/
25+
private $scopeConfig;
26+
27+
public function __construct(
28+
RewriteMapsSavingService $rewriteMapsSavingService,
29+
LoggerInterface $logger,
30+
ScopeConfigInterface $scopeConfig)
31+
{
32+
$this->rewriteMapsSavingService = $rewriteMapsSavingService;
33+
$this->logger = $logger;
34+
$this->scopeConfig = $scopeConfig;
35+
}
36+
37+
public function execute()
38+
{
39+
if (!$this->scopeConfig->getValue('catalog/seo/rewrite_maps_generation_enabled')) {
40+
return;
41+
}
42+
43+
try {
44+
$this->rewriteMapsSavingService->saveRewriteMapsForAllStores();
45+
} catch (InputException | FileSystemException $exception) {
46+
$this->logger->error('There was an error while generating the rewrite maps', ['exception' => $exception]);
47+
}
48+
}
49+
}

src/Model/RewriteMap.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
/**
3+
* integer_net GmbH Magento Module
4+
*
5+
* @copyright Copyright (c) 2020 integer_net GmbH (http://www.integer-net.de/)
6+
* @author Bernard Delhez <bd@integer-net.de>
7+
*/
8+
9+
namespace IntegerNet\RewriteMap\Model;
10+
11+
class RewriteMap
12+
{
13+
/** @var string */
14+
private $rewriteMapFileContent;
15+
/**
16+
* @var int
17+
*/
18+
private $storeId;
19+
/**
20+
* @var int
21+
*/
22+
private $redirectType;
23+
24+
public function __construct(int $storeId, int $redirectType)
25+
{
26+
$this->rewriteMapFileContent = '';
27+
$this->storeId = $storeId;
28+
$this->redirectType = $redirectType;
29+
}
30+
31+
public function addRewrite(string $request, string $target)
32+
{
33+
$this->rewriteMapFileContent .= sprintf("/%s /%s\n", $request, $target);
34+
}
35+
36+
public function getFilename(): string
37+
{
38+
return sprintf('rewrite-map-%s-store-%s.txt', $this->redirectType, $this->storeId);
39+
}
40+
41+
public function getContent(): string
42+
{
43+
return $this->rewriteMapFileContent;
44+
}
45+
}

src/Model/RewriteMapRepository.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
/**
3+
* integer_net GmbH Magento Module
4+
*
5+
* @copyright Copyright (c) 2020 integer_net GmbH (http://www.integer-net.de/)
6+
* @author Bernard Delhez <bd@integer-net.de>
7+
*/
8+
9+
namespace IntegerNet\RewriteMap\Model;
10+
11+
use IntegerNet\RewriteMap\Model\RewriteMap as RewriteMap;
12+
use Magento\Framework\Exception\InputException as InputException;
13+
use Magento\UrlRewrite\Model\OptionProvider as UrlRewriteOptionProvider;
14+
use Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection as UrlRewriteCollection;
15+
use Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollectionFactory as UrlRewriteCollectionFactory;
16+
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite as UrlRewrite;
17+
18+
class RewriteMapRepository
19+
{
20+
private const ALLOWED_REDIRECT_TYPES = [UrlRewriteOptionProvider::PERMANENT, UrlRewriteOptionProvider::TEMPORARY];
21+
/**
22+
* @var UrlRewriteCollectionFactory
23+
*/
24+
private $rewriteCollectionFactory;
25+
26+
public function __construct(UrlRewriteCollectionFactory $rewriteCollectionFactory)
27+
{
28+
$this->rewriteCollectionFactory = $rewriteCollectionFactory;
29+
}
30+
31+
/**
32+
* @param int $storeId
33+
* @param int $redirectType
34+
* @return RewriteMap
35+
* @throws InputException
36+
*/
37+
public function getByStoreAndType(int $storeId, int $redirectType): RewriteMap
38+
{
39+
if (!in_array($redirectType, self::ALLOWED_REDIRECT_TYPES)) {
40+
throw new InputException(
41+
__(
42+
'The given redirect type "%1" is not a allowed type: %2',
43+
$redirectType,
44+
print_r(self::ALLOWED_REDIRECT_TYPES, true)
45+
)
46+
);
47+
}
48+
49+
/** @var UrlRewriteCollection $rewriteCollection */
50+
$rewriteCollection = $this->rewriteCollectionFactory->create();
51+
$rewriteCollection->addStoreFilter($storeId);
52+
$rewriteCollection->addFieldToFilter(UrlRewrite::REDIRECT_TYPE, $redirectType);
53+
54+
$rewriteMap = new RewriteMap($storeId, $redirectType);
55+
56+
foreach ($rewriteCollection as $urlRewrite) {
57+
/** @var \Magento\UrlRewrite\Model\UrlRewrite $urlRewrite */
58+
$rewriteMap->addRewrite($urlRewrite->getRequestPath(), $urlRewrite->getTargetPath());
59+
}
60+
61+
return $rewriteMap;
62+
}
63+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
/**
3+
* integer_net GmbH Magento Module
4+
*
5+
* @copyright Copyright (c) 2020 integer_net GmbH (http://www.integer-net.de/)
6+
* @author Bernard Delhez <bd@integer-net.de>
7+
*/
8+
9+
namespace IntegerNet\RewriteMap\Model;
10+
11+
use Magento\Framework\Filesystem;
12+
use Magento\Framework\App\Filesystem\DirectoryList;
13+
use Magento\Store\Model\StoreManagerInterface as StoreManagerInterface;
14+
use Magento\UrlRewrite\Model\OptionProvider as UrlRewriteOptionProvider;
15+
16+
class RewriteMapsSavingService
17+
{
18+
/**
19+
* @var Filesystem
20+
*/
21+
private $filesystem;
22+
/**
23+
* @var StoreManagerInterface
24+
*/
25+
private $storeManager;
26+
/**
27+
* @var RewriteMapRepository
28+
*/
29+
private $urlRewriteRepository;
30+
31+
public function __construct(
32+
Filesystem $filesystem,
33+
StoreManagerInterface $storeManager,
34+
RewriteMapRepository $urlRewriteRepository)
35+
{
36+
$this->filesystem = $filesystem;
37+
$this->storeManager = $storeManager;
38+
$this->urlRewriteRepository = $urlRewriteRepository;
39+
}
40+
41+
/**
42+
* @throws \Magento\Framework\Exception\FileSystemException
43+
* @throws \Magento\Framework\Exception\InputException
44+
*/
45+
public function saveRewriteMapsForAllStores(): void
46+
{
47+
foreach ($this->storeManager->getStores() as $store) {
48+
$storeId = (int)$store->getId();
49+
$this->saveRewriteMap(
50+
$this->urlRewriteRepository->getByStoreAndType($storeId, UrlRewriteOptionProvider::PERMANENT)
51+
);
52+
$this->saveRewriteMap(
53+
$this->urlRewriteRepository->getByStoreAndType($storeId, UrlRewriteOptionProvider::TEMPORARY)
54+
);
55+
}
56+
}
57+
58+
/**
59+
* @param RewriteMap $rewriteMap
60+
* @throws \Magento\Framework\Exception\FileSystemException
61+
* @throws \Magento\Framework\Exception\InputException
62+
*/
63+
public function saveRewriteMap(RewriteMap $rewriteMap): void
64+
{
65+
$varDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
66+
$varDirectory->writeFile(
67+
'rewrite_map' . DIRECTORY_SEPARATOR . $rewriteMap->getFilename(),
68+
$rewriteMap->getContent(),
69+
'w'
70+
);
71+
}
72+
}

src/etc/adminhtml/system.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" ?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
3+
<system>
4+
<section id="catalog">
5+
<group id="seo">
6+
<field id="rewrite_maps_generation_enabled" showInDefault="1" showInStore="1" showInWebsite="1"
7+
sortOrder="500" translate="label" type="select">
8+
<label>Enable Rewrite Maps Generation</label>
9+
<comment>
10+
<![CDATA[Enables the generation of rewrite maps files from the Magento UrlRewrites.
11+
The files are saved under
12+
path_to_magento/var/rewrite_map/map/rewrite-map-[REDIRECT_TYPE]-store-[STORE_ID].txt]]>
13+
</comment>
14+
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
15+
</field>
16+
<field id="rewrite_maps_generation_cron_schedule" showInDefault="1" showInStore="1" showInWebsite="1"
17+
sortOrder="510" translate="label" type="text">
18+
<label>Rewrite Maps Generation Cron Schedule</label>
19+
</field>
20+
</group>
21+
</section>
22+
</system>
23+
</config>

src/etc/config.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" ?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
3+
<default>
4+
<catalog>
5+
<seo>
6+
<rewrite_maps_generation_enabled>0</rewrite_maps_generation_enabled>
7+
<rewrite_maps_generation_cron_schedule>0 * * * *</rewrite_maps_generation_cron_schedule>
8+
</seo>
9+
</catalog>
10+
</default>
11+
</config>

src/etc/crontab.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" ?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
3+
<group id="default">
4+
<job instance="IntegerNet\RewriteMap\Cron\GenerateRewriteMaps" method="execute"
5+
name="integernet_rewritemap_generaterewritemaps">
6+
<config_path>catalog/seo/rewrite_maps_generation_cron_schedule</config_path>
7+
</job>
8+
</group>
9+
</config>

src/etc/module.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
<sequence>
66
</sequence>
77
</module>
8-
</config>
8+
</config>

src/registration.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
use Magento\Framework\Component\ComponentRegistrar;
4+
5+
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'IntegerNet_RewriteMap', __DIR__);

0 commit comments

Comments
 (0)