This repository has been archived by the owner on Mar 7, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 29
/
welcome.php
231 lines (204 loc) · 6.68 KB
/
welcome.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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
<?php
/**
* 2007-2020 PrestaShop and Contributors
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License 3.0 (AFL-3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2020 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if (!defined('_PS_VERSION_')) {
exit;
}
$autoloadPath = __DIR__ . '/vendor/autoload.php';
if (file_exists($autoloadPath)) {
require_once $autoloadPath;
}
use OnBoarding\OnBoarding;
use PrestaShop\PrestaShop\Adapter\SymfonyContainer;
/**
* OnBoarding module entry class.
*/
class Welcome extends Module
{
const CLASS_NAME = 'AdminWelcome';
/**
* @var string Name of the module running on PS 1.6.x. Used for data migration.
*/
const PS_16_EQUIVALENT_MODULE = 'onboarding';
/**
* @var OnBoarding
*/
private $onBoarding;
/**
* @var bool
*/
private $displayHeader = true;
/**
* Module's constructor.
*/
public function __construct()
{
$this->name = 'welcome';
$this->version = '6.0.9';
$this->author = 'PrestaShop';
parent::__construct();
$this->displayName = $this->trans('Welcome', [], 'Modules.Welcome.Admin');
$this->description = $this->trans('Sell your first product quicker than you would have expected with our nice onboarding process.', [], 'Modules.Welcome.Admin');
$this->ps_versions_compliancy = [
'min' => '1.7.6.0',
'max' => _PS_VERSION_,
];
// If the symfony container is not available or if we are not in the admin directory
// this constructor will fail.
// This can happen during the upgrade process
if (null == SymfonyContainer::getInstance() || !defined('_PS_ADMIN_DIR_')) {
return;
}
if (Module::isInstalled($this->name)) {
$smartyDisplayHeader = $this->smarty->getTemplateVars('display_header');
$this->displayHeader = (null !== $smartyDisplayHeader && is_bool($smartyDisplayHeader)) ?
$smartyDisplayHeader :
true;
$this->onBoarding = new OnBoarding(
$this->getTranslator(),
$this->smarty,
$this,
SymfonyContainer::getInstance()->get('router')
);
if (Tools::getIsset('resetonboarding')) {
$this->onBoarding->setShutDown(false);
$this->onBoarding->setCurrentStep(0);
}
}
}
/**
* Module installation.
*
* @return bool Success of the installation
*/
public function install()
{
$this->uninstallPrestaShop16Module();
return parent::install()
&& $this->installTab()
&& $this->registerHook('displayAdminNavBarBeforeEnd')
&& $this->registerHook('displayAdminAfterHeader')
&& $this->registerHook('displayBackOfficeHeader');
}
public function installTab()
{
$tab = new Tab();
$tab->active = true;
$tab->class_name = static::CLASS_NAME;
$tab->name = [];
foreach (Language::getLanguages(true) as $lang) {
$tab->name[$lang['id_lang']] = 'Welcome';
}
$tab->module = $this->name;
return $tab->add();
}
public function uninstallTab()
{
$id_tab = (int) Tab::getIdFromClassName(static::CLASS_NAME);
if ($id_tab) {
$tab = new Tab($id_tab);
return $tab->delete();
} else {
return false;
}
}
/**
* Uninstall the module.
*
* @return bool Success of the uninstallation
*/
public function uninstall()
{
$this->onBoarding->setCurrentStep(0);
$this->onBoarding->setShutDown(false);
$this->uninstallTab();
return parent::uninstall();
}
/**
* Migrate data from 1.6 equivalent module (if applicable), then uninstall
*/
public function uninstallPrestaShop16Module()
{
if (!Module::isInstalled(self::PS_16_EQUIVALENT_MODULE)) {
return false;
}
$oldModule = Module::getInstanceByName(self::PS_16_EQUIVALENT_MODULE);
if ($oldModule) {
// This closure calls the parent class to prevent data to be erased
// It allows the new module to be configured without migration
$parentUninstallClosure = function () {
return parent::uninstall();
};
$parentUninstallClosure = $parentUninstallClosure->bindTo($oldModule, get_class($oldModule));
$parentUninstallClosure();
}
return true;
}
/**
* Hook called when the backoffice header is displayed.
*/
public function hookDisplayBackOfficeHeader()
{
if (!$this->onBoarding->isFinished()) {
$this->context->controller->addCSS($this->_path . 'public/module.css', 'all');
$this->context->controller->addJS($this->_path . 'public/module.js');
}
}
/**
* Hook called after the header of the backoffice.
*/
public function hookDisplayAdminAfterHeader()
{
if (!$this->onBoarding->isFinished()) {
$this->onBoarding->showModuleContent();
}
}
/**
* Hook called before the end of the nav bar.
*/
public function hookDisplayAdminNavBarBeforeEnd()
{
if (!$this->onBoarding->isFinished()) {
$this->onBoarding->showModuleContentForNavBar();
}
}
/**
* Execute an API like action for the OnBoarding.
*
* @param string $action Action to perform
* @param mixed $value Value to assign to the action
*
* @throws Exception
*/
public function apiCall($action, $value)
{
switch ($action) {
case 'setCurrentStep':
if (!$this->onBoarding->setCurrentStep($value)) {
throw new Exception('The current step cannot be saved.');
}
break;
case 'setShutDown':
if (!$this->onBoarding->setShutDown($value)) {
throw new Exception('The shut down status cannot be saved.');
}
break;
}
}
}