-
Notifications
You must be signed in to change notification settings - Fork 15
/
ps_distributionapiclient.php
100 lines (87 loc) · 3.08 KB
/
ps_distributionapiclient.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
<?php
/**
* Copyright since 2007 PrestaShop SA and Contributors
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License version 3.0
* that is bundled with this package in the file LICENSE.md.
* 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 [email protected] so we can send you a copy immediately.
*
* @author PrestaShop SA and Contributors <[email protected]>
* @copyright Since 2007 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0
*/
declare(strict_types=1);
use PrestaShop\Module\DistributionApiClient\DistributionApi;
if (!defined('_PS_VERSION_')) {
exit;
}
if (file_exists(__DIR__ . '/vendor/autoload.php')) {
require_once __DIR__ . '/vendor/autoload.php';
}
class Ps_Distributionapiclient extends Module
{
public function __construct()
{
$this->name = 'ps_distributionapiclient';
$this->displayName = $this->trans('Distribution API Client', [], 'Modules.Distributionapiclient.Admin');
$this->description = $this->trans('Download and upgrade PrestaShop\'s native modules.', [], 'Modules.Distributionapiclient.Admin');
$this->author = 'PrestaShop';
$this->version = '2.0.0';
$this->ps_versions_compliancy = ['min' => '9.0.0', 'max' => _PS_VERSION_];
$this->tab = 'market_place';
parent::__construct();
}
public function install(): bool
{
return parent::install()
&& $this->registerHook('actionListModules')
&& $this->registerHook('actionBeforeInstallModule')
&& $this->registerHook('actionBeforeUpgradeModule')
;
}
/**
* @return array<array<string, string>>
*/
public function hookActionListModules(): array
{
return $this->getDistributionApi()->getModuleList();
}
/**
* @param string[] $params
*
* @return void
*/
public function hookActionBeforeInstallModule(array $params): void
{
$distributionApi = $this->getDistributionApi();
if (!isset($params['moduleName']) || $distributionApi->isModuleOnDisk($params['moduleName'])) {
return;
}
$distributionApi->downloadModule($params['moduleName']);
}
/**
* @param string[] $params
*
* @return void
*/
public function hookActionBeforeUpgradeModule(array $params): void
{
if (!isset($params['moduleName']) || !empty($params['source'])) {
return;
}
$this->getDistributionApi()->downloadModule($params['moduleName']);
}
private function getDistributionApi(): DistributionApi
{
/** @var DistributionApi $distributionApi */
$distributionApi = $this->get('distributionapiclient.distribution_api');
return $distributionApi;
}
}