Skip to content

Commit ceff2a8

Browse files
added ellipsis options to add settings to bundles
1 parent 920477c commit ceff2a8

File tree

15 files changed

+222
-51
lines changed

15 files changed

+222
-51
lines changed

ProcessMaker/Http/Controllers/Api/DevLinkController.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ public function addAsset(Request $request, Bundle $bundle)
223223

224224
public function addSettings(Request $request, Bundle $bundle)
225225
{
226-
$bundle->addSettings($request->input('setting'), $request->input('config'));
226+
$bundle->addSettings($request->input('setting'), $request->input('config'), $request->input('type'));
227227
}
228228

229229
public function addAssetToBundles(Request $request)
@@ -238,6 +238,17 @@ public function addAssetToBundles(Request $request)
238238
}
239239
}
240240

241+
public function addSettingToBundles(Request $request)
242+
{
243+
$bundles = $request->input('bundles');
244+
foreach ($bundles as $id) {
245+
$bundle = Bundle::find($id);
246+
if ($bundle) {
247+
$bundle->addSettingToBundles($request->input('setting'), $request->input('config'));
248+
}
249+
}
250+
}
251+
241252
public function sharedAssets(Request $request)
242253
{
243254
return Setting::Where('group', 'Devlink')->get();

ProcessMaker/Models/Bundle.php

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use ProcessMaker\ImportExport\Logger;
1010
use ProcessMaker\ImportExport\Options;
1111
use ProcessMaker\Models\ProcessMakerModel;
12+
use ProcessMaker\Models\SettingsMenus;
1213
use Spatie\MediaLibrary\HasMedia;
1314
use Spatie\MediaLibrary\InteractsWithMedia;
1415

@@ -138,18 +139,52 @@ public function addAsset(ProcessMakerModel $asset)
138139
]);
139140
}
140141

141-
public function addSettings($setting, $config)
142+
public function addSettings($setting, $newId, $type = null)
142143
{
143-
$exists = $this->settings()->where('setting', $setting)->exists();
144-
if ($exists) {
145-
$this->settings()->where('setting', $setting)->update([
146-
'config' => $config,
144+
$existingSetting = $this->settings()->where('setting', $setting)->first();
145+
146+
if ($existingSetting) {
147+
// If the config is null, do not add the new ID
148+
if (is_null($existingSetting->config)) {
149+
return;
150+
}
151+
152+
// Decode the existing JSON
153+
$config = json_decode($existingSetting->config, true);
154+
155+
// Ensure 'id' is an array
156+
if (!isset($config['id']) || !is_array($config['id'])) {
157+
$config['id'] = [];
158+
}
159+
160+
// Add the new ID
161+
$config['id'][] = $newId;
162+
163+
// Remove duplicates
164+
$config['id'] = array_unique($config['id']);
165+
166+
// Update the config
167+
$existingSetting->update([
168+
'config' => json_encode($config),
147169
]);
148170
} else {
171+
// Create a new BundleSetting with the initial ID
172+
$config = ['id' => []];
173+
if ($newId) {
174+
$config['id'][] = $newId;
175+
}
176+
177+
if ($type) {
178+
$settingsMenu = SettingsMenus::where('menu_group', $setting)->first();
179+
if ($settingsMenu) {
180+
$config['id'] = $settingsMenu->id;
181+
}
182+
}
183+
149184
BundleSetting::create([
150185
'bundle_id' => $this->id,
151186
'setting' => $setting,
152-
'config' => $config,
187+
'config' => json_encode($config),
153188
]);
154189
}
155190
}
@@ -166,6 +201,18 @@ public function addAssetToBundles(ProcessMakerModel $asset)
166201
return $message;
167202
}
168203

204+
public function addSettingToBundles($setting, $newId)
205+
{
206+
$message = null;
207+
try {
208+
$this->addSettings($setting, $newId);
209+
} catch (ValidationException $ve) {
210+
$message = $ve->getMessage();
211+
}
212+
213+
return $message;
214+
}
215+
169216
public function validateEditable()
170217
{
171218
if (!$this->editable()) {

ProcessMaker/Models/Setting.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public static function messages()
143143
*
144144
* @param string $key
145145
*
146-
* @return \ProcessMaker\Models\Setting|null
146+
* @return Setting|null
147147
* @throws \Exception
148148
*/
149149
public static function byKey(string $key)
@@ -382,7 +382,7 @@ public static function getFavicon()
382382
*/
383383
public static function groupsByMenu($menuId)
384384
{
385-
$query = Setting::query()
385+
$query = self::query()
386386
->select('group')
387387
->groupBy('group')
388388
->where('group_id', $menuId)
@@ -409,7 +409,7 @@ public static function groupsByMenu($menuId)
409409
*/
410410
public static function updateSettingsGroup($settingsGroup, $id)
411411
{
412-
Setting::where('group', $settingsGroup)->whereNull('group_id')->chunk(
412+
self::where('group', $settingsGroup)->whereNull('group_id')->chunk(
413413
50,
414414
function ($settings) use ($id) {
415415
foreach ($settings as $setting) {
@@ -429,7 +429,7 @@ function ($settings) use ($id) {
429429
*/
430430
public static function updateAllSettingsGroupId()
431431
{
432-
Setting::whereNull('group_id')->chunk(100, function ($settings) {
432+
self::whereNull('group_id')->chunk(100, function ($settings) {
433433
$defaultId = SettingsMenus::EMAIL_MENU_GROUP;
434434
foreach ($settings as $setting) {
435435
// Define the value of 'menu_group' based on 'group'
@@ -466,6 +466,9 @@ public static function updateAllSettingsGroupId()
466466
case 'System': // System not related with settings menu
467467
$id = null;
468468
break;
469+
case 'Devlink':
470+
$id = null;
471+
break;
469472
default: // The default value
470473
if (preg_match('/^Email Server/', $setting->group)) {
471474
$id = SettingsMenus::getId(SettingsMenus::EMAIL_MENU_GROUP);

resources/js/admin/auth-clients/components/AuthClientsListing.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
@navigate="onNavigate"
3030
:actions="actions"
3131
:data="props.rowData"
32+
:permission="permission"
3233
:divider="true"
3334
/>
3435
</template>
@@ -46,6 +47,10 @@
4647
{{ props.rowData.secret.substr(0, 10) }}...
4748
</template>
4849
</vuetable>
50+
<add-to-bundle
51+
asset-type="auth_clients"
52+
:setting="true"
53+
/>
4954
<pagination
5055
:single="$t('Auth Client')"
5156
:plural="$t('Auth Clients')"
@@ -63,13 +68,14 @@
6368
import datatableMixin from "../../../components/common/mixins/datatable";
6469
import dataLoadingMixin from "../../../components/common/mixins/apiDataLoading";
6570
import EllipsisMenu from "../../../components/shared/EllipsisMenu.vue";
71+
import AddToBundle from "../../../components/shared/AddToBundle.vue";
6672
import { createUniqIdsMixin } from "vue-uniq-ids";
6773
const uniqIdsMixin = createUniqIdsMixin();
6874
6975
export default {
70-
components: {EllipsisMenu},
76+
components: {EllipsisMenu, AddToBundle},
7177
mixins: [datatableMixin, dataLoadingMixin, uniqIdsMixin],
72-
props: ["filter"],
78+
props: ["filter", "permission"],
7379
data() {
7480
return {
7581
copytext: "",
@@ -82,6 +88,7 @@ export default {
8288
],
8389
actions: [
8490
{ value: "edit-item", content: "Edit Auth Client", icon: "fas fa-pen-square", ariaDescribedBy: 'data.id'},
91+
{ value: "add-to-bundle", content: "Add to Bundle", icon: "fas fa-folder-plus", permission: "admin", emit_on_root: 'add-to-bundle'},
8592
{ value: "delete-item", content: "Delete Auth Client", icon: "fas fa-trash-alt", ariaDescribedBy: 'data.id'},
8693
],
8794
fields: [

resources/js/admin/devlink/components/BundleConfigurations.vue

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
:checked="!!isInSettings(config)"
1818
switch
1919
@change="$emit('config-change', {
20-
key: config.type,
20+
key: config.type,
2121
value: $event,
22-
settingId: isInSettings(config)?.id
22+
settingId: isInSettings(config)?.id,
23+
type: props.type
2324
})"
2425
/>
2526
</div>
@@ -46,6 +47,10 @@ const props = defineProps({
4647
title: {
4748
type: String,
4849
required: true
50+
},
51+
type: {
52+
type: String,
53+
required: false
4954
}
5055
});
5156

resources/js/admin/devlink/components/BundleDetail.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
:values="bundle.settings"
9292
@config-change="handleConfigChange"
9393
title="Settings"
94+
type="settings"
9495
/>
9596

9697
<BundleModal
@@ -184,6 +185,7 @@ const handleConfigChange = (event) => {
184185
ProcessMaker.apiClient.post(`devlink/local-bundles/${bundle.value.id}/add-settings`, {
185186
setting: event.key,
186187
config: null,
188+
type: event.type,
187189
})
188190
.then(() => {
189191
loadAssets();

resources/js/admin/devlink/components/platformConfigurations.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,16 @@ export default [
1616
name: "UI Settings",
1717
},
1818
{
19-
type: "script_executors",
20-
name: "Script Executors",
19+
type: "ui_dashboards",
20+
name: "Dashboards",
21+
},
22+
{
23+
type: "ui_menus",
24+
name: "Menus",
2125
},
2226
{
23-
type: "analytics_settings",
24-
name: "Analytics Settings",
27+
type: "script_executors",
28+
name: "Script Executors",
2529
},
2630
{
2731
type: "public_files",
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
export default [
22
{
3-
type: "email_settings",
3+
type: "Email",
44
name: "Email Settings",
55
},
66
{
7-
type: "log-in_auth",
7+
type: "Log-In & Auth",
88
name: "Log-in & Auth",
99
},
1010
{
11-
type: "user_settings",
11+
type: "User Settings",
1212
name: "User Settings",
1313
},
1414
{
15-
type: "integrations",
15+
type: "Integrations",
1616
name: "Integrations",
1717
},
1818
];

resources/js/admin/groups/components/GroupsListing.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
/>
3434
</template>
3535
</vuetable>
36+
<add-to-bundle
37+
asset-type="groups"
38+
:setting="true"
39+
/>
3640
<pagination
3741
:single="$t('Group')"
3842
:plural="$t('Groups')"
@@ -49,11 +53,12 @@
4953
import datatableMixin from "../../../components/common/mixins/datatable";
5054
import dataLoadingMixin from "../../../components/common/mixins/apiDataLoading";
5155
import EllipsisMenu from "../../../components/shared/EllipsisMenu.vue";
56+
import AddToBundle from "../../../components/shared/AddToBundle.vue";
5257
import { createUniqIdsMixin } from "vue-uniq-ids";
5358
const uniqIdsMixin = createUniqIdsMixin();
5459
5560
export default {
56-
components: {EllipsisMenu},
61+
components: {EllipsisMenu, AddToBundle},
5762
mixins: [datatableMixin, dataLoadingMixin, uniqIdsMixin],
5863
props: ["filter", "permission"],
5964
data() {
@@ -69,6 +74,7 @@ export default {
6974
],
7075
actions: [
7176
{ value: "edit-item", content: "Edit Group", link: true, href: '/admin/groups/{{id}}/edit', icon: "fas fa-pen-square", permission:'edit-groups', ariaDescribedBy: 'data.id'},
77+
{ value: "add-to-bundle", content: "Add to Bundle", icon: "fas fa-folder-plus", permission: "admin", emit_on_root: 'add-to-bundle'},
7278
{ value: "delete-item", content: "Delete Group", icon: "fas fa-trash-alt", permission: 'delete-groups', ariaDescribedBy: 'data.id'},
7379
],
7480
fields: [

resources/js/admin/script-executors/ScriptExecutors.vue

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,23 @@
5353
>
5454
<i class="fas fa-trash-alt fa-lg fa-fw"></i>
5555
</b-btn>
56+
<b-btn
57+
variant="link"
58+
@click="onAddToBundle(props.rowData)"
59+
v-b-tooltip.hover
60+
:title="$t('Add to Bundle')"
61+
v-uni-aria-describedby="props.rowData.id.toString()"
62+
>
63+
<i class="fas fa-folder-plus fa-lg fa-fw"></i>
64+
</b-btn>
5665
</div>
5766
</div>
5867
</template>
5968
</vuetable>
69+
<add-to-bundle
70+
asset-type="script_executors"
71+
:setting="true"
72+
/>
6073
<pagination
6174
:single="$t('Script Executor')"
6275
:plural="$t('Script Executors')"
@@ -221,11 +234,13 @@
221234
<script>
222235
import datatableMixin from "../../components/common/mixins/datatable";
223236
import dataLoadingMixin from "../../components/common/mixins/apiDataLoading";
237+
import AddToBundle from "../../components/shared/AddToBundle.vue";
224238
import { createUniqIdsMixin } from "vue-uniq-ids";
225239
const uniqIdsMixin = createUniqIdsMixin();
226240
227241
export default {
228242
mixins: [datatableMixin, dataLoadingMixin, uniqIdsMixin],
243+
components: { AddToBundle },
229244
props: ["filter", "permission"],
230245
data() {
231246
return {
@@ -508,6 +523,9 @@ export default {
508523
this.loading = false;
509524
});
510525
},
526+
onAddToBundle(data) {
527+
this.$root.$emit('add-to-bundle', data);
528+
},
511529
},
512530
};
513531
</script>

0 commit comments

Comments
 (0)