-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathCustomerFamily.php
executable file
·140 lines (121 loc) · 4.89 KB
/
CustomerFamily.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
131
132
133
134
135
136
137
138
139
140
<?php
/*************************************************************************************/
/* This file is part of the module CustomerFamily */
/* */
/* Copyright (c) OpenStudio */
/* email : dev@thelia.net */
/* 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 CustomerFamily;
use CustomerFamily\Model\CustomerFamilyQuery;
use Propel\Runtime\Connection\ConnectionInterface;
use Symfony\Component\DependencyInjection\Loader\Configurator\ServicesConfigurator;
use Symfony\Component\Finder\Finder;
use Thelia\Install\Database;
use Thelia\Module\BaseModule;
use CustomerFamily\Model\CustomerFamily as CustomerFamilyModel;
/**
* Class CustomerFamily
* @package CustomerFamily
* @contributor Etienne Perriere <eperriere@openstudio.fr>
*/
class CustomerFamily extends BaseModule
{
/** @cont string */
const MODULE_DOMAIN = 'customerfamily';
/** @cont string */
const MESSAGE_DOMAIN = 'customerfamily';
/** @cont string */
const CUSTOMER_FAMILY_PARTICULAR = "particular";
/** @cont string */
const CUSTOMER_FAMILY_PROFESSIONAL = "professional";
/**
* @param ConnectionInterface $con
*/
public function postActivation(ConnectionInterface $con = null): void
{
try {
CustomerFamilyQuery::create()->findOne();
} catch (\Exception $e) {
$database = new Database($con);
$database->insertSql(null, [__DIR__ . "/Config/thelia.sql"]);
}
//Generate the 2 defaults customer_family
//Customer
self::getCustomerFamilyByCode(self::CUSTOMER_FAMILY_PARTICULAR, "Particulier", "fr_FR");
self::getCustomerFamilyByCode(self::CUSTOMER_FAMILY_PARTICULAR, "Private individual", "en_US");
//Professional
self::getCustomerFamilyByCode(self::CUSTOMER_FAMILY_PROFESSIONAL, "Professionnel", "fr_FR");
self::getCustomerFamilyByCode(self::CUSTOMER_FAMILY_PROFESSIONAL, "Professional", "en_US");
}
public function update($currentVersion, $newVersion, ConnectionInterface $con = null): void
{
$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()]);
}
}
}
/**
* @param $code
* @param null $title
* @param string $locale
*
* @return Model\CustomerFamily
*/
public static function getCustomerFamilyByCode($code, $title = null, $locale = "fr_FR")
{
if ($title == null) {
$title = $code;
}
// Set 'particular' as default family
if ($code == self::CUSTOMER_FAMILY_PARTICULAR) {
$isDefault = 1;
} else {
$isDefault = 0;
}
/** @var CustomerFamilyModel $customerFamily */
if (null == $customerFamily = CustomerFamilyQuery::create()
->useCustomerFamilyI18nQuery()
->filterByLocale($locale)
->endUse()
->filterByCode($code)
->findOne()
) {
//Be sure that you don't create it twice
/** @var CustomerFamilyModel $customerF */
if (null != $customerF = CustomerFamilyQuery::create()->findOneByCode($code)) {
$customerF
->setLocale($locale)
->setTitle($title)
->save();
} else {
$customerFamily = new CustomerFamilyModel();
$customerFamily
->setCode($code)
->setIsDefault($isDefault)
->setLocale($locale)
->setTitle($title)
->save();
}
}
return $customerFamily;
}
public static function configureServices(ServicesConfigurator $servicesConfigurator): void
{
$servicesConfigurator->load(self::getModuleCode().'\\', __DIR__)
->exclude([THELIA_MODULE_DIR . ucfirst(self::getModuleCode()). "/I18n/*"])
->autowire(true)
->autoconfigure(true);
}
}