Skip to content

Commit aa870bd

Browse files
committed
!410 - Add bundles to Modules. Add update menu on component update.
1 parent ed8cdf5 commit aa870bd

File tree

11 files changed

+713
-55
lines changed

11 files changed

+713
-55
lines changed

apps/Core/Components/Devtools/Modules/ModulesComponent.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ public function viewAction()
2222
{
2323
if (isset($this->getData()['bundles'])) {
2424
$this->view->bundles = true;
25+
26+
if (isset($this->getData()['bundlesjson'])) {
27+
$this->view->bundlesjson = true;
28+
}
2529
}
2630

2731
if (isset($this->getData()['includecoremodules'])) {
@@ -246,7 +250,10 @@ public function viewAction()
246250
) {
247251
$this->view->type = 'bundles';
248252
unset($apis[0]);//Remove local
253+
unset($apis[1]);//Remove core
249254
$this->view->apis = $apis;
255+
unset($appTypes['core']);//Remove core
256+
$this->view->appTypes = $appTypes;
250257
$this->view->bundleModules = $this->modulesPackage->getDefaultDependencies();
251258

252259
if ($this->getData()['id'] != 0) {

apps/Core/Packages/Devtools/Modules/DevtoolsModules.php

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ public function updateModule($data)
122122
if ($this->modules->{$data['type']}->update($module) &&
123123
$this->updateModuleJson($data)
124124
) {
125+
if ($data['type'] === 'components') {
126+
$this->addUpdateComponentMenu($data);
127+
}
128+
125129
$this->addResponse('Module updated');
126130

127131
return;
@@ -414,19 +418,7 @@ protected function getNewFilesLocation($data, $public = false)
414418

415419
protected function generateNewComponentsFiles($moduleFilesLocation, $data)
416420
{
417-
if ($data['menu'] != 'false' && $data['menu'] != '') {
418-
$data['menu'] = Json::decode($data['menu'], true);
419-
420-
$menu = $this->basepackages->menus->addMenu($data['app_type'], $data['menu']);
421-
422-
if ($menu) {
423-
$module = $this->modules->{$data['type']}->packagesData->last;
424-
425-
$module['menu_id'] = $menu['id'];
426-
}
427-
428-
$this->modules->{$data['type']}->update($module);
429-
}
421+
$this->addUpdateComponentMenu($data);
430422

431423
$componentName = ucfirst(Arr::last(explode('/', $data['route']))) . 'Component';
432424

@@ -497,6 +489,48 @@ protected function generateNewViewsFiles($moduleFilesLocation, $data)
497489
return true;
498490
}
499491

492+
protected function addUpdateComponentMenu($data)
493+
{
494+
if ($data['menu_id'] != '' || $data['menu_id'] != '0') {
495+
$menu = $this->basepackages->menus->getById($data['menu_id']);
496+
497+
if ($menu) {
498+
if ($data['menu'] == 'false') {
499+
$this->basepackages->menus->remove($data['menu_id']);
500+
501+
$module = $this->modules->{$data['type']}->getById($data['id']);
502+
503+
$module['menu_id'] = null;
504+
$module['menu'] = null;
505+
506+
$this->modules->{$data['type']}->update($module);
507+
508+
return;
509+
}
510+
}
511+
}
512+
513+
if ($data['menu'] != 'false' && $data['menu'] != '') {
514+
$data['menu'] = Json::decode($data['menu'], true);
515+
516+
if ($menu) {
517+
$this->basepackages->menus->updateMenu($data['menu_id'], $data['app_type'], $data['menu']);
518+
519+
return;
520+
} else {
521+
$menu = $this->basepackages->menus->addMenu($data['app_type'], $data['menu']);
522+
523+
if ($menu) {
524+
$module = $this->modules->{$data['type']}->packagesData->last;
525+
526+
$module['menu_id'] = $menu['id'];
527+
}
528+
529+
$this->modules->{$data['type']}->update($module);
530+
}
531+
}
532+
}
533+
500534
public function syncLabels($data)
501535
{
502536
if (!isset($data['api_id']) || !isset($data['name'])) {
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
{% set bundleId = bundle['id'] %}
2+
{% set bundleName = bundle['name'] %}
3+
{% set bundleDescription = bundle['description'] %}
4+
{% set bundleApp_type = bundle['app_type'] %}
5+
{% set bundleModule_type = 'bundles' %}
6+
{% set bundleApiId = bundle['api_id'] %}
7+
{% set bundleRepo = bundle['repo'] %}
8+
{% set moduleTypeDisabled = true %}
9+
<div class="row" hidden>
10+
<div class="col">
11+
{{adminltetags.useTag('fields',
12+
[
13+
'component' : component,
14+
'componentName' : componentName,
15+
'componentId' : componentId,
16+
'sectionId' : sectionId,
17+
'fieldId' : 'id',
18+
'fieldLabel' : 'Bundle ID',
19+
'fieldType' : 'input',
20+
'fieldHelp' : true,
21+
'fieldHelpTooltipContent' : 'Bundle ID',
22+
'fieldRequired' : true,
23+
'fieldBazScan' : true,
24+
'fieldBazPostOnCreate' : false,
25+
'fieldBazPostOnUpdate' : true,
26+
'fieldHidden' : true,
27+
'fieldDisabled' : true,
28+
'fieldValue' : bundleId
29+
]
30+
)}}
31+
{{adminltetags.useTag('fields',
32+
[
33+
'component' : component,
34+
'componentName' : componentName,
35+
'componentId' : componentId,
36+
'sectionId' : sectionId,
37+
'fieldId' : 'type',
38+
'fieldLabel' : 'Bundle Type',
39+
'fieldType' : 'input',
40+
'fieldHelp' : true,
41+
'fieldHelpTooltipContent' : 'Bundle Type',
42+
'fieldRequired' : true,
43+
'fieldBazScan' : true,
44+
'fieldBazPostOnCreate' : true,
45+
'fieldBazPostOnUpdate' : true,
46+
'fieldHidden' : true,
47+
'fieldDisabled' : true,
48+
'fieldValue' : type
49+
]
50+
)}}
51+
</div>
52+
</div>
53+
<div class="row" hidden>
54+
<div class="col">
55+
{{adminltetags.useTag('fields',
56+
[
57+
'component' : component,
58+
'componentName' : componentName,
59+
'componentId' : componentId,
60+
'sectionId' : sectionId,
61+
'fieldId' : 'app_type',
62+
'fieldLabel' : 'App Type',
63+
'fieldType' : 'select2',
64+
'fieldHelp' : true,
65+
'fieldHelpTooltipContent' : 'Select app type or enter a new one to create a new type.',
66+
'fieldRequired' : true,
67+
'fieldBazPostOnCreate' : true,
68+
'fieldBazPostOnUpdate' : true,
69+
'fieldBazScan' : true,
70+
'fieldDataSelect2Create' : true,
71+
'fieldDataSelect2OptionsArray' : true,
72+
'fieldDataSelect2Options' : appTypes,
73+
'fieldDataSelect2OptionsKey' : 'id',
74+
'fieldDataSelect2OptionsValue' : 'name',
75+
'fieldDataSelect2OptionsSelected' : bundleApp_type
76+
]
77+
)}}
78+
</div>
79+
<div class="col">
80+
{{adminltetags.useTag('fields',
81+
[
82+
'component' : component,
83+
'componentName' : componentName,
84+
'componentId' : componentId,
85+
'sectionId' : sectionId,
86+
'fieldId' : 'module_type',
87+
'fieldLabel' : 'Module Type',
88+
'fieldType' : 'input',
89+
'fieldHelp' : true,
90+
'fieldHelpTooltipContent' : 'Module Type',
91+
'fieldRequired' : true,
92+
'fieldDisabled' : true,
93+
'fieldBazPostOnCreate' : true,
94+
'fieldBazPostOnUpdate' : true,
95+
'fieldBazScan' : true,
96+
'fieldValue' : bundleModule_type
97+
]
98+
)}}
99+
</div>
100+
</div>
101+
<div class="row" hidden>
102+
<div class="col">
103+
{{adminltetags.useTag('fields',
104+
[
105+
'component' : component,
106+
'componentName' : componentName,
107+
'componentId' : componentId,
108+
'sectionId' : sectionId,
109+
'fieldId' : 'name',
110+
'fieldLabel' : 'Bundle Name',
111+
'fieldType' : 'input',
112+
'fieldHelp' : true,
113+
'fieldHelpTooltipContent' : 'Bundle Name Example: Dashboard Base.',
114+
'fieldRequired' : true,
115+
'fieldBazScan' : true,
116+
'fieldBazPostOnCreate' : true,
117+
'fieldBazPostOnUpdate' : true,
118+
'fieldBazPostOnUpdate' : true,
119+
'fieldDataInputMinLength' : 1,
120+
'fieldDataInputMaxLength' : 50,
121+
'fieldValue' : bundleName
122+
]
123+
)}}
124+
</div>
125+
</div>
126+
<div class="row" hidden>
127+
<div class="col-md-3">
128+
{{adminltetags.useTag('fields',
129+
[
130+
'component' : component,
131+
'componentName' : componentName,
132+
'componentId' : componentId,
133+
'sectionId' : sectionId,
134+
'fieldId' : 'api_id',
135+
'fieldLabel' : 'Remote Repo?',
136+
'fieldType' : 'select2',
137+
'fieldHelp' : true,
138+
'fieldHelpTooltipContent' : 'Select repo if the bundle will be available on a repo. Note: Bundles are only available via Repo.',
139+
'fieldRequired' : true,
140+
'fieldBazScan' : true,
141+
'fieldBazPostOnCreate' : true,
142+
'fieldBazPostOnUpdate' : true,
143+
'fieldDataSelect2OptionsArray' : true,
144+
'fieldDataSelect2Options' : apis,
145+
'fieldDataSelect2OptionsKey' : 'id',
146+
'fieldDataSelect2OptionsValue' : 'name',
147+
'fieldDataSelect2OptionsSelected' : bundleApiId
148+
]
149+
)}}
150+
</div>
151+
<div class="col">
152+
{{adminltetags.useTag('fields',
153+
[
154+
'component' : component,
155+
'componentName' : componentName,
156+
'componentId' : componentId,
157+
'sectionId' : sectionId,
158+
'fieldId' : 'repo',
159+
'fieldLabel' : 'Bundle repo',
160+
'fieldType' : 'input',
161+
'fieldHelp' : true,
162+
'fieldHelpTooltipContent' : 'Bundle repo.',
163+
'fieldRequired' : true,
164+
'fieldInputToggleEdit' : true,
165+
'fieldDisabled' : true,
166+
'fieldBazScan' : true,
167+
'fieldBazPostOnCreate' : true,
168+
'fieldBazPostOnUpdate' : true,
169+
'fieldDataInputMinLength' : 1,
170+
'fieldDataInputMaxLength' : 1024,
171+
'fieldValue' : bundleRepo
172+
]
173+
)}}
174+
</div>
175+
</div>
176+
<div class="row">
177+
<div class="col">
178+
{{adminltetags.useTag('fields',
179+
[
180+
'component' : component,
181+
'componentName' : componentName,
182+
'componentId' : componentId,
183+
'sectionId' : sectionId,
184+
'fieldId' : 'bundle_modules',
185+
'fieldLabel' : 'Bundle Modules',
186+
'fieldType' : 'textarea',
187+
'fieldDataMaxLength' : 4096,
188+
'fieldHelp' : true,
189+
'fieldHelpTooltipContent' : 'Bundle Modules',
190+
'fieldBazScan' : true,
191+
'fieldBazPostOnCreate' : true,
192+
'fieldBazPostOnUpdate' : true,
193+
'fieldDataInputMaxLength' : 4096,
194+
'fieldTextareaRows' : 15,
195+
'fieldValue' : bundleModules
196+
]
197+
)}}
198+
</div>
199+
</div>

0 commit comments

Comments
 (0)