Skip to content

feature/FOUR-21456 added ellipsis options to add settings to bundles #7879

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 23, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading