From 2febd86cfa2e25836ae1e7b0844fd414b9ed8be8 Mon Sep 17 00:00:00 2001 From: Giancarlo Errigo Mattos Date: Wed, 15 Apr 2026 13:18:28 +0200 Subject: [PATCH] MT#64825 Add conference settings to Extension Settings * Added a new Conference page under Extension Settings where PBX subscribers can manage their own conference_max_participants and conference_pin * Page and fields are gated through subscriber profile attributes for administrative purposes * Restricted the route and menu entry to PBX admin users and added the new Conference entry to the Extension Settings menu Change-Id: I002c79ce6653e1183c6348775184a5a92ea8f737 (cherry picked from commit 589140c318a8e55049ba5f5454e92b07b6317841) (cherry picked from commit d02250f2dc6711c3c9614f4e8914dbb0f1522c4d) --- src/components/CscMainMenuTop.vue | 12 +- src/constants.js | 5 +- src/pages/CscPagePbxSettingsConference.vue | 183 +++++++++++++++++++++ src/router/routes.js | 17 ++ 4 files changed, 214 insertions(+), 3 deletions(-) create mode 100644 src/pages/CscPagePbxSettingsConference.vue diff --git a/src/components/CscMainMenuTop.vue b/src/components/CscMainMenuTop.vue index af6aee10..cad73b17 100644 --- a/src/components/CscMainMenuTop.vue +++ b/src/components/CscMainMenuTop.vue @@ -72,6 +72,8 @@ export default { this.hasSubscriberProfileAttribute(PROFILE_ATTRIBUTE_MAP.huntGroups) || this.hasSubscriberProfileAttribute(PROFILE_ATTRIBUTE_MAP.playAnnounceBeforeCallSetup) || this.hasSubscriberProfileAttribute(PROFILE_ATTRIBUTE_MAP.playAnnounceToCallee) + const hasExtensionSettingsSubmenus = this.isPbxEnabled && + this.hasSomeSubscriberProfileAttributes(PROFILE_ATTRIBUTES_MAP.pbxExtensionSettings) return [ { to: '/user/dashboard', @@ -250,8 +252,7 @@ export default { { icon: 'settings', label: this.$t('Extension Settings'), - visible: this.isPbxEnabled && - this.hasSomeSubscriberProfileAttributes(PROFILE_ATTRIBUTES_MAP.pbxSettings), + visible: hasExtensionSettingsSubmenus, children: [ { to: '/user/extension-settings/call-queues', @@ -270,6 +271,13 @@ export default { icon: 'dialpad', label: this.$t('Auto Attendant'), visible: this.isPbxEnabled && this.hasSubscriberProfileAttribute(PROFILE_ATTRIBUTE_MAP.autoAttendant) + }, + { + to: '/user/extension-settings/conference', + icon: 'groups', + label: this.$t('Conference'), + visible: this.isPbxAdmin && + this.hasSomeSubscriberProfileAttributes(PROFILE_ATTRIBUTES_MAP.pbxSettingsConference) } ] }, diff --git a/src/constants.js b/src/constants.js index 76731715..098f937c 100644 --- a/src/constants.js +++ b/src/constants.js @@ -26,6 +26,8 @@ export const PROFILE_ATTRIBUTE_MAP = { clir_intrapbx: 'clir_intrapbx', cstaClient: 'csta_client', cstaController: 'csta_controller', + conferenceMaxParticipants: 'conference_max_participants', + conferencePin: 'conference_pin', faxServer: 'fax_server', cscCalls: 'csc_calls', managerSecretary: 'manager_secretary', @@ -48,7 +50,8 @@ export const PROFILE_ATTRIBUTES_MAP = { callBlockingOutgoing: ['block_out_mode', 'block_out_list', 'ncos', 'ncos_set'], callBlockingPrivacy: ['clir', 'clir_intrapbx'], callSettings: ['music_on_hold', 'language'], - pbxSettings: ['auto_attendant', 'cloud_pbx_callqueue', 'max_queue_length', 'queue_wrap_up_time', 'manager_secretary'], + pbxExtensionSettings: ['auto_attendant', 'manager_secretary', 'conference_max_participants', 'conference_pin'], + pbxSettingsConference: ['conference_max_participants', 'conference_pin'], pbxSettingsCallQueue: ['cloud_pbx_callqueue', 'max_queue_length', 'queue_wrap_up_time'], callForwarding: ['cfu', 'cfb', 'cfna', 'cft', 'cfs', 'cfo', 'cfr'] } diff --git a/src/pages/CscPagePbxSettingsConference.vue b/src/pages/CscPagePbxSettingsConference.vue new file mode 100644 index 00000000..4c11ebbb --- /dev/null +++ b/src/pages/CscPagePbxSettingsConference.vue @@ -0,0 +1,183 @@ + + + diff --git a/src/router/routes.js b/src/router/routes.js index 7ee09149..3590e6af 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -30,6 +30,7 @@ import CscPagePbxSeatDetails from 'pages/CscPagePbxSeatDetails' import CscPagePbxSeats from 'pages/CscPagePbxSeats' import CscPagePbxSettingsAutoAttendant from 'pages/CscPagePbxSettingsAutoAttendant' import CscPagePbxSettingsCallQueues from 'pages/CscPagePbxSettingsCallQueues' +import CscPagePbxSettingsConference from 'pages/CscPagePbxSettingsConference' import CscPagePbxSettingsMsConfigs from 'pages/CscPagePbxSettingsMsConfigs' import CscPagePbxSoundSetDetails from 'pages/CscPagePbxSoundSetDetails' import CscPagePbxSoundSets from 'pages/CscPagePbxSoundSets' @@ -609,6 +610,22 @@ const routes = [ licenses: [LICENSES.pbx] } }, + { + path: 'extension-settings/conference', + component: CscPagePbxSettingsConference, + meta: { + get title () { + return i18n.global.t('Extension Settings') + }, + get subtitle () { + return i18n.global.t('Conference') + }, + platformFeature: FEATURES.cloudPbx, + profileAttributes: PROFILE_ATTRIBUTES_MAP.pbxSettingsConference, + capability: FEATURES.cloudPbx, + licenses: [LICENSES.pbx] + } + }, { path: 'registered-devices', name: 'RegisteredDevices',