-
Notifications
You must be signed in to change notification settings - Fork 15
/
RewriteUrl.php
executable file
·130 lines (110 loc) · 4.5 KB
/
RewriteUrl.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php
/*************************************************************************************/
/* This file is part of the RewriteUrl module for Thelia. */
/* */
/* Copyright (c) OpenStudio */
/* email : [email protected] */
/* web : http://www.thelia.net */
/* */
/* For the full copyright and license information, please view the LICENSE.txt */
/* file that was distributed with this source code. */
/*************************************************************************************/
namespace RewriteUrl;
use Propel\Runtime\Connection\ConnectionInterface;
use RewriteUrl\Model\RewriteurlRuleQuery;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\DependencyInjection\Loader\Configurator\ServicesConfigurator;
use Symfony\Component\Finder\Finder;
use Thelia\Model\ConfigQuery;
use Thelia\Model\Map\RewritingUrlTableMap;
use Thelia\Model\RewritingUrl;
use Thelia\Model\RewritingUrlQuery;
use Thelia\Module\BaseModule;
use Thelia\Install\Database;
/**
* Class RewriteUrl
* @package RewriteUrl
* @author Vincent Lopes <[email protected]>
* @author Gilles Bourgeat <[email protected]>
*/
class RewriteUrl extends BaseModule
{
/** @var string */
const MODULE_DOMAIN = "rewriteurl";
/** @var string */
const MODULE_NAME = "rewriteurl";
/* @var string */
const UPDATE_PATH = __DIR__ . DS . 'Config' . DS . 'update';
/** @static null|array */
static protected $unknownSources;
public function preActivation(ConnectionInterface $con = null)
{
if (!$this->getConfigValue('is_initialized', false)) {
$database = new Database($con);
$database->insertSql(null, array(__DIR__ . '/Config/thelia.sql'));
$this->setConfigValue('is_initialized', true);
}
return true;
}
/**
* @param string $currentVersion
* @param string $newVersion
* @param ConnectionInterface $con
* @throws \Exception
* @throws \Propel\Runtime\Exception\PropelException
* @since 1.2.3
*/
public function update($currentVersion, $newVersion, ConnectionInterface $con = null): void
{
$finder = (new Finder())->files()->name('#.*?\.sql#')->sortByName()->in(self::UPDATE_PATH);
if ($finder->count() === 0) {
return;
}
$database = new Database($con);
/** @var \Symfony\Component\Finder\SplFileInfo $updateSQLFile */
foreach ($finder as $updateSQLFile) {
if (version_compare($currentVersion, str_replace('.sql', '', $updateSQLFile->getFilename()), '<')) {
$database->insertSql(null, [$updateSQLFile->getPathname()]);
}
}
/*
* Fix for urls that redirect on itself
*/
$urls = RewritingUrlQuery::create()
->where(RewritingUrlTableMap::ID . " = " . RewritingUrlTableMap::REDIRECTED)
->find();
/** @var RewritingUrl $url */
foreach ($urls as $url) {
$parent = RewritingUrlQuery::create()
->filterByView($url->getView())
->filterByViewId($url->getViewId())
->filterByViewLocale($url->getViewLocale())
->filterByRedirected(null)
->findOne();
$url->setRedirected(($parent === null) ? null : $parent->getId())->save();
}
}
/**
* @return array|null
*/
public static function getUnknownSources()
{
if (static::$unknownSources === null) {
static::$unknownSources = [];
if (null !== $config = ConfigQuery::read('obsolete_rewriten_url_view', null)) {
static::$unknownSources[] = $config;
}
}
return static::$unknownSources;
}
/**
* Defines how services are loaded in your modules.
*/
public static function configureServices(ServicesConfigurator $servicesConfigurator): void
{
$servicesConfigurator->load(self::getModuleCode() . '\\', __DIR__)
->exclude([THELIA_MODULE_DIR . ucfirst(self::getModuleCode()) . '/I18n/*'])
->autowire(true)
->autoconfigure(true);
}
}