Skip to content
Next Next commit
added ellipsis options to add settings to bundles
  • Loading branch information
gustavobascope committed Jan 10, 2025
commit ceff2a8cbb59b70ee3dd62a87f2856cce10a4e71
13 changes: 12 additions & 1 deletion ProcessMaker/Http/Controllers/Api/DevLinkController.php
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ public function addAsset(Request $request, Bundle $bundle)

public function addSettings(Request $request, Bundle $bundle)
{
$bundle->addSettings($request->input('setting'), $request->input('config'));
$bundle->addSettings($request->input('setting'), $request->input('config'), $request->input('type'));
}

public function addAssetToBundles(Request $request)
Expand All @@ -238,6 +238,17 @@ public function addAssetToBundles(Request $request)
}
}

public function addSettingToBundles(Request $request)
{
$bundles = $request->input('bundles');
foreach ($bundles as $id) {
$bundle = Bundle::find($id);
if ($bundle) {
$bundle->addSettingToBundles($request->input('setting'), $request->input('config'));
}
}
}

public function sharedAssets(Request $request)
{
return Setting::Where('group', 'Devlink')->get();
Expand Down
59 changes: 53 additions & 6 deletions ProcessMaker/Models/Bundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use ProcessMaker\ImportExport\Logger;
use ProcessMaker\ImportExport\Options;
use ProcessMaker\Models\ProcessMakerModel;
use ProcessMaker\Models\SettingsMenus;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;

Expand Down Expand Up @@ -138,18 +139,52 @@ public function addAsset(ProcessMakerModel $asset)
]);
}

public function addSettings($setting, $config)
public function addSettings($setting, $newId, $type = null)
{
$exists = $this->settings()->where('setting', $setting)->exists();
if ($exists) {
$this->settings()->where('setting', $setting)->update([
'config' => $config,
$existingSetting = $this->settings()->where('setting', $setting)->first();

if ($existingSetting) {
// If the config is null, do not add the new ID
if (is_null($existingSetting->config)) {
return;
}

// Decode the existing JSON
$config = json_decode($existingSetting->config, true);

// Ensure 'id' is an array
if (!isset($config['id']) || !is_array($config['id'])) {
$config['id'] = [];
}

// Add the new ID
$config['id'][] = $newId;

// Remove duplicates
$config['id'] = array_unique($config['id']);

// Update the config
$existingSetting->update([
'config' => json_encode($config),
]);
} else {
// Create a new BundleSetting with the initial ID
$config = ['id' => []];
if ($newId) {
$config['id'][] = $newId;
}

if ($type) {
$settingsMenu = SettingsMenus::where('menu_group', $setting)->first();
if ($settingsMenu) {
$config['id'] = $settingsMenu->id;
}
}

BundleSetting::create([
'bundle_id' => $this->id,
'setting' => $setting,
'config' => $config,
'config' => json_encode($config),
]);
}
}
Expand All @@ -166,6 +201,18 @@ public function addAssetToBundles(ProcessMakerModel $asset)
return $message;
}

public function addSettingToBundles($setting, $newId)
{
$message = null;
try {
$this->addSettings($setting, $newId);
} catch (ValidationException $ve) {
$message = $ve->getMessage();
}

return $message;
}

public function validateEditable()
{
if (!$this->editable()) {
Expand Down
11 changes: 7 additions & 4 deletions ProcessMaker/Models/Setting.php
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ public static function messages()
*
* @param string $key
*
* @return \ProcessMaker\Models\Setting|null
* @return Setting|null
* @throws \Exception
*/
public static function byKey(string $key)
Expand Down Expand Up @@ -382,7 +382,7 @@ public static function getFavicon()
*/
public static function groupsByMenu($menuId)
{
$query = Setting::query()
$query = self::query()
->select('group')
->groupBy('group')
->where('group_id', $menuId)
Expand All @@ -409,7 +409,7 @@ public static function groupsByMenu($menuId)
*/
public static function updateSettingsGroup($settingsGroup, $id)
{
Setting::where('group', $settingsGroup)->whereNull('group_id')->chunk(
self::where('group', $settingsGroup)->whereNull('group_id')->chunk(
50,
function ($settings) use ($id) {
foreach ($settings as $setting) {
Expand All @@ -429,7 +429,7 @@ function ($settings) use ($id) {
*/
public static function updateAllSettingsGroupId()
{
Setting::whereNull('group_id')->chunk(100, function ($settings) {
self::whereNull('group_id')->chunk(100, function ($settings) {
$defaultId = SettingsMenus::EMAIL_MENU_GROUP;
foreach ($settings as $setting) {
// Define the value of 'menu_group' based on 'group'
Expand Down Expand Up @@ -466,6 +466,9 @@ public static function updateAllSettingsGroupId()
case 'System': // System not related with settings menu
$id = null;
break;
case 'Devlink':
$id = null;
break;
default: // The default value
if (preg_match('/^Email Server/', $setting->group)) {
$id = SettingsMenus::getId(SettingsMenus::EMAIL_MENU_GROUP);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
@navigate="onNavigate"
:actions="actions"
:data="props.rowData"
:permission="permission"
:divider="true"
/>
</template>
Expand All @@ -46,6 +47,10 @@
{{ props.rowData.secret.substr(0, 10) }}...
</template>
</vuetable>
<add-to-bundle
asset-type="auth_clients"
:setting="true"
/>
<pagination
:single="$t('Auth Client')"
:plural="$t('Auth Clients')"
Expand All @@ -63,13 +68,14 @@
import datatableMixin from "../../../components/common/mixins/datatable";
import dataLoadingMixin from "../../../components/common/mixins/apiDataLoading";
import EllipsisMenu from "../../../components/shared/EllipsisMenu.vue";
import AddToBundle from "../../../components/shared/AddToBundle.vue";
import { createUniqIdsMixin } from "vue-uniq-ids";
const uniqIdsMixin = createUniqIdsMixin();

export default {
components: {EllipsisMenu},
components: {EllipsisMenu, AddToBundle},
mixins: [datatableMixin, dataLoadingMixin, uniqIdsMixin],
props: ["filter"],
props: ["filter", "permission"],
data() {
return {
copytext: "",
Expand All @@ -82,6 +88,7 @@ export default {
],
actions: [
{ value: "edit-item", content: "Edit Auth Client", icon: "fas fa-pen-square", ariaDescribedBy: 'data.id'},
{ value: "add-to-bundle", content: "Add to Bundle", icon: "fas fa-folder-plus", permission: "admin", emit_on_root: 'add-to-bundle'},
{ value: "delete-item", content: "Delete Auth Client", icon: "fas fa-trash-alt", ariaDescribedBy: 'data.id'},
],
fields: [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@
:checked="!!isInSettings(config)"
switch
@change="$emit('config-change', {
key: config.type,
key: config.type,
value: $event,
settingId: isInSettings(config)?.id
settingId: isInSettings(config)?.id,
type: props.type
})"
/>
</div>
Expand All @@ -46,6 +47,10 @@ const props = defineProps({
title: {
type: String,
required: true
},
type: {
type: String,
required: false
}
});

Expand Down
2 changes: 2 additions & 0 deletions resources/js/admin/devlink/components/BundleDetail.vue
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
:values="bundle.settings"
@config-change="handleConfigChange"
title="Settings"
type="settings"
/>

<BundleModal
Expand Down Expand Up @@ -184,6 +185,7 @@ const handleConfigChange = (event) => {
ProcessMaker.apiClient.post(`devlink/local-bundles/${bundle.value.id}/add-settings`, {
setting: event.key,
config: null,
type: event.type,
})
.then(() => {
loadAssets();
Expand Down
12 changes: 8 additions & 4 deletions resources/js/admin/devlink/components/platformConfigurations.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,16 @@ export default [
name: "UI Settings",
},
{
type: "script_executors",
name: "Script Executors",
type: "ui_dashboards",
name: "Dashboards",
},
{
type: "ui_menus",
name: "Menus",
},
{
type: "analytics_settings",
name: "Analytics Settings",
type: "script_executors",
name: "Script Executors",
},
{
type: "public_files",
Expand Down
8 changes: 4 additions & 4 deletions resources/js/admin/devlink/components/settings.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
export default [
{
type: "email_settings",
type: "Email",
name: "Email Settings",
},
{
type: "log-in_auth",
type: "Log-In & Auth",
name: "Log-in & Auth",
},
{
type: "user_settings",
type: "User Settings",
name: "User Settings",
},
{
type: "integrations",
type: "Integrations",
name: "Integrations",
},
];
8 changes: 7 additions & 1 deletion resources/js/admin/groups/components/GroupsListing.vue
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@
/>
</template>
</vuetable>
<add-to-bundle
asset-type="groups"
:setting="true"
/>
<pagination
:single="$t('Group')"
:plural="$t('Groups')"
Expand All @@ -49,11 +53,12 @@
import datatableMixin from "../../../components/common/mixins/datatable";
import dataLoadingMixin from "../../../components/common/mixins/apiDataLoading";
import EllipsisMenu from "../../../components/shared/EllipsisMenu.vue";
import AddToBundle from "../../../components/shared/AddToBundle.vue";
import { createUniqIdsMixin } from "vue-uniq-ids";
const uniqIdsMixin = createUniqIdsMixin();

export default {
components: {EllipsisMenu},
components: {EllipsisMenu, AddToBundle},
mixins: [datatableMixin, dataLoadingMixin, uniqIdsMixin],
props: ["filter", "permission"],
data() {
Expand All @@ -69,6 +74,7 @@ export default {
],
actions: [
{ value: "edit-item", content: "Edit Group", link: true, href: '/admin/groups/{{id}}/edit', icon: "fas fa-pen-square", permission:'edit-groups', ariaDescribedBy: 'data.id'},
{ value: "add-to-bundle", content: "Add to Bundle", icon: "fas fa-folder-plus", permission: "admin", emit_on_root: 'add-to-bundle'},
{ value: "delete-item", content: "Delete Group", icon: "fas fa-trash-alt", permission: 'delete-groups', ariaDescribedBy: 'data.id'},
],
fields: [
Expand Down
18 changes: 18 additions & 0 deletions resources/js/admin/script-executors/ScriptExecutors.vue
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,23 @@
>
<i class="fas fa-trash-alt fa-lg fa-fw"></i>
</b-btn>
<b-btn
variant="link"
@click="onAddToBundle(props.rowData)"
v-b-tooltip.hover
:title="$t('Add to Bundle')"
v-uni-aria-describedby="props.rowData.id.toString()"
>
<i class="fas fa-folder-plus fa-lg fa-fw"></i>
</b-btn>
</div>
</div>
</template>
</vuetable>
<add-to-bundle
asset-type="script_executors"
:setting="true"
/>
<pagination
:single="$t('Script Executor')"
:plural="$t('Script Executors')"
Expand Down Expand Up @@ -221,11 +234,13 @@
<script>
import datatableMixin from "../../components/common/mixins/datatable";
import dataLoadingMixin from "../../components/common/mixins/apiDataLoading";
import AddToBundle from "../../components/shared/AddToBundle.vue";
import { createUniqIdsMixin } from "vue-uniq-ids";
const uniqIdsMixin = createUniqIdsMixin();

export default {
mixins: [datatableMixin, dataLoadingMixin, uniqIdsMixin],
components: { AddToBundle },
props: ["filter", "permission"],
data() {
return {
Expand Down Expand Up @@ -508,6 +523,9 @@ export default {
this.loading = false;
});
},
onAddToBundle(data) {
this.$root.$emit('add-to-bundle', data);
},
},
};
</script>
Expand Down
Loading