-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathTheliaLibrary.php
More file actions
executable file
·146 lines (123 loc) · 4.9 KB
/
Copy pathTheliaLibrary.php
File metadata and controls
executable file
·146 lines (123 loc) · 4.9 KB
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?php
/*
* This file is part of the Thelia package.
* http://www.thelia.net
*
* (c) OpenStudio <info@thelia.net>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace TheliaLibrary;
use Propel\Runtime\Connection\ConnectionInterface;
use Propel\Runtime\Propel;
use Symfony\Component\DependencyInjection\Loader\Configurator\ServicesConfigurator;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Finder\Finder;
use Thelia\Core\Install\Database;
use Thelia\Module\BaseModule;
class TheliaLibrary extends BaseModule
{
/** @var string */
public const DOMAIN_NAME = 'thelialibrary';
public const DEFAULT_IMAGE_DIRECTORY = THELIA_LOCAL_DIR.'library/images/';
public const IMAGINE_CONFIG_FILE = THELIA_ROOT.'config/packages/liip_imagine_thelia.yaml';
public function preActivation(?ConnectionInterface $con = null): bool
{
if (!$this->getConfigValue('is_initialized', false)) {
$database = new Database($con);
$database->insertSql(null, [__DIR__.'/Config/TheliaMain.sql']);
$this->setConfigValue('is_initialized', true);
}
$fs = new Filesystem();
if (!$fs->exists(THELIA_ROOT.'local/media/images')){
$fs->mkdir(THELIA_ROOT.'local/media/images', 0755);
}
if (!$fs->exists(self::IMAGINE_CONFIG_FILE)) {
$fs->copy(THELIA_MODULE_DIR.'TheliaLibrary/Config/liip_imagine_thelia.yaml.example', self::IMAGINE_CONFIG_FILE);
}
return true;
}
/**
* Execute sql files in Config/update/ folder named with module version (ex: 1.0.1.sql).
*
* @param $currentVersion
* @param $newVersion
*/
public function update($currentVersion, $newVersion, ?ConnectionInterface $con = null): void
{
if (file_exists(__DIR__.DS.'Config'.DS.'update')) {
$finder = Finder::create()
->name('*.sql')
->depth(0)
->sortByName()
->in(__DIR__.DS.'Config'.DS.'update');
$database = new Database($con);
/** @var \SplFileInfo $file */
foreach ($finder as $file) {
if (version_compare($currentVersion, $file->getBasename('.sql'), '<')) {
$database->insertSql(null, [$file->getPathname()]);
}
}
}
$this->moveFileNamesOutOfTranslations($con);
$fs = new Filesystem();
if (!$fs->exists(self::IMAGINE_CONFIG_FILE)) {
$fs->copy(THELIA_MODULE_DIR.'TheliaLibrary/Config/liip_imagine_thelia.yaml.example', self::IMAGINE_CONFIG_FILE);
}
}
/**
* Carries stored file names over to library_image.file_name (1.4.0).
*
* Written here rather than in the update SQL because the statement reads a
* column that a fresh install no longer creates: as an SQL file it could
* only be replayed by chance, while here the column is looked up first.
* The legacy column is left untouched, so the migration can be checked
* after the fact and re-run if it was interrupted.
*/
private function moveFileNamesOutOfTranslations(?ConnectionInterface $con = null): void
{
$con = $con ?? Propel::getConnection('TheliaMain');
$legacyColumn = $con->prepare(
'SELECT COUNT(*) FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = :table AND column_name = :column'
);
$legacyColumn->execute(['table' => 'library_image_i18n', 'column' => 'file_name']);
if (1 > (int) $legacyColumn->fetchColumn()) {
return;
}
$con->exec(
'UPDATE `library_image` `image`
SET `file_name` = (
SELECT `translation`.`file_name`
FROM `library_image_i18n` `translation`
WHERE `translation`.`id` = `image`.`id`
AND `translation`.`file_name` IS NOT NULL
AND `translation`.`file_name` <> \'\'
ORDER BY `translation`.`locale`
LIMIT 1
)
WHERE `image`.`file_name` IS NULL'
);
}
public static function getImageDirectory(): string
{
return self::getConfigValue('image_directory', self::DEFAULT_IMAGE_DIRECTORY);
}
/*
* You may now override BaseModuleInterface methods, such as:
* install, destroy, preActivation, postActivation, preDeactivation, postDeactivation
*
* Have fun !
*/
/**
* Defines how services are loaded in your modules.
*/
public static function configureServices(ServicesConfigurator $servicesConfigurator): void
{
$servicesConfigurator->load(self::getModuleCode().'\\', __DIR__)
->exclude([__DIR__.'/I18n/*'])
->autowire(true)
->autoconfigure(true);
}
}