-
Notifications
You must be signed in to change notification settings - Fork 5
/
crud.php
149 lines (125 loc) · 4.01 KB
/
crud.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
<?php
//avoid direct access to file
if (!defined('_PS_VERSION_'))
{
exit;
}
class crud extends Module
{
/*
* The models should extends CrudCustomObjectModel.
* When installing, the module will create the relative to each model
* in the database. If the table already exists, any missing coluns
* in it will be added.
*/
public $models = ['CrudModel'];
//tabs to be created in the backoffice menu
protected $tabs = [
[
'name' => 'CRUD Completo',
'className' => 'AdminCrudModels',
'active' => 1,
//submenus
'childs' => [
[
'active' => 1,
'name' => 'CRUD Model',
'className' => 'AdminCrudModels',
],
[
'active' => 1,
'name' => 'Custom Operation',
'className' => 'AdminCrudCustomOperationController',
],
],
],
];
public function __construct()
{
$this->name = 'crud';
$this->version = '1.0';
//module category
$this->tab = 'shipping_logistic';
$this->author = 'amauri';
$this->author_uri = 'http://www.amauri.eng.br/en/';
$this->ps_versions_compliancy = ['min' => '1.6', 'max' => '1.6.99'];
$this->displayName = 'CRUD';
$this->description = 'Implement a full CRUD using the PrestaShop default structure.';
parent::__construct();
}
//add a tab in the backoffice menu
public function addTab(
$tabs,
$id_parent = 0
)
{
foreach ($tabs as $tab)
{
$tabModel = new Tab();
$tabModel->module = $this->name;
$tabModel->active = $tab['active'];
$tabModel->class_name = $tab['className'];
$tabModel->id_parent = $id_parent;
//tab text in each language
foreach (Language::getLanguages(true) as $lang)
{
$tabModel->name[$lang['id_lang']] = $tab['name'];
}
$tabModel->add();
//submenus of the tab
if (isset($tab['childs']) && is_array($tab['childs']))
{
$this->addTab($tab['childs'], Tab::getIdFromClassName($tab['className']));
}
}
return true;
}
//remove a tab and its childrens from the backoffice menu
public function removeTab($tabs)
{
foreach ($tabs as $tab)
{
$id_tab = (int) Tab::getIdFromClassName($tab["className"]);
if ($id_tab)
{
$tabModel = new Tab($id_tab);
$tabModel->delete();
}
if (isset($tab["childs"]) && is_array($tab["childs"]))
{
$this->removeTab($tab["childs"]);
}
}
return true;
}
public function install()
{
foreach ($this->models as $model)
{
require_once 'classes/' . $model . '.php';
//instantiate the module
$modelInstance = new $model();
//create the table relative to this model in the database
//if the table does not exists yet
$modelInstance->createDatabase();
//if the table already exists, add to it any column that may be missing.
//this is useful in the case of new updates that require new columns
//to exist in the table.
$modelInstance->createMissingColumns();
}
//module installation
$success = parent::install();
//if the installation fails, return error
if (!$success)
{
return false;
}
//create the tabs in the backoffice menu
$this->addTab($this->tabs);
return true;
}
public function uninstall(){
$this->removeTab($this->tabs);
return parent::uninstall();
}
}