Skip to content

Commit b09bad2

Browse files
Merge pull request #6619 from christianbeeznest/storm-22854
Message: Hide messaging UI and block /resources/messages when message.allow_message_tool is false - refs BT#22854
2 parents 0416d40 + b178985 commit b09bad2

File tree

5 files changed

+81
-57
lines changed

5 files changed

+81
-57
lines changed

assets/vue/components/layout/TopbarLoggedIn.vue

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,13 @@
1616
</BaseAppLink>
1717

1818
<BaseAppLink
19+
v-if="messagingEnabled"
1920
:class="{ 'item-button--unread': !!btnInboxBadge }"
2021
:to="{ name: 'MessageList' }"
2122
class="item-button"
2223
>
23-
<BaseIcon
24-
class="item-button__icon"
25-
icon="inbox"
26-
/>
27-
<span
28-
v-if="btnInboxBadge"
29-
class="item-button__badge"
30-
v-text="btnInboxBadge"
31-
/>
24+
<BaseIcon class="item-button__icon" icon="inbox" />
25+
<span v-if="btnInboxBadge" class="item-button__badge" v-text="btnInboxBadge" />
3226
</BaseAppLink>
3327
</div>
3428
<div class="app-topbar__end">
@@ -81,6 +75,7 @@ const platformConfigStore = usePlatformConfig()
8175
const messageRelUserStore = useMessageRelUserStore()
8276
const notification = useNotification()
8377
const cidReqStore = useCidReqStore()
78+
const messagingEnabled = computed(() => platformConfigStore.getSetting("message.allow_message_tool") === "true")
8479
8580
const ticketUrl = computed(() => {
8681
const searchParms = new URLSearchParams()
@@ -137,9 +132,12 @@ function toggleUserMenu(event) {
137132
}
138133
139134
const btnInboxBadge = computed(() => {
135+
if (!messagingEnabled.value) return null
140136
const unreadCount = messageRelUserStore.countUnread
141-
return unreadCount > 20 ? "9+" : unreadCount > 0 ? unreadCount.toString() : null
137+
return unreadCount > 20 ? "20+" : unreadCount > 0 ? unreadCount.toString() : null
142138
})
143139
144-
messageRelUserStore.findUnreadCount().catch((e) => notification.showErrorNotification(e))
140+
if (messagingEnabled.value) {
141+
messageRelUserStore.findUnreadCount().catch((e) => notification.showErrorNotification(e))
142+
}
145143
</script>

assets/vue/components/social/SocialSideMenu.vue

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,14 @@
1919
{{ t("Home") }}
2020
</BaseAppLink>
2121
</li>
22-
<li :class="['menu-item', { active: isActive('/resources/messages') }]">
22+
<li
23+
v-if="messagingEnabled"
24+
:class="['menu-item', { active: isActive('/resources/messages') }]"
25+
>
2326
<BaseAppLink to="/resources/messages">
24-
<i
25-
aria-hidden="true"
26-
class="mdi mdi-email"
27-
></i>
27+
<i aria-hidden="true" class="mdi mdi-email"></i>
2828
{{ t("Messages") }}
29-
<span
30-
v-if="unreadMessagesCount > 0"
31-
class="badge badge-warning"
32-
>{{ unreadMessagesCount }}</span
33-
>
29+
<span v-if="unreadMessagesCount > 0" class="badge badge-warning">{{ unreadMessagesCount }}</span>
3430
</BaseAppLink>
3531
</li>
3632
<li :class="['menu-item', { active: isActive('/resources/friends/invitations') }]">
@@ -126,16 +122,13 @@
126122
{{ t("Home") }}
127123
</BaseAppLink>
128124
</li>
129-
<li class="menu-item">
125+
<li class="menu-item" v-if="messagingEnabled">
130126
<a
131127
class="ajax"
132128
href="/main/inc/ajax/user_manager.ajax.php?a=get_user_popup&user_id={{user.id}}"
133129
rel="noopener noreferrer"
134130
>
135-
<i
136-
aria-hidden="true"
137-
class="mdi mdi-email"
138-
></i>
131+
<i aria-hidden="true" class="mdi mdi-email"></i>
139132
{{ t("Send message") }}
140133
</a>
141134
</li>
@@ -166,6 +159,7 @@ const isCurrentUser = inject("is-current-user")
166159
const groupLink = ref({ name: "UserGroupShow" })
167160
const platformConfigStore = usePlatformConfig()
168161
const globalForumsCourse = computed(() => platformConfigStore.getSetting("forum.global_forums_course_id"))
162+
const messagingEnabled = computed(() => platformConfigStore.getSetting("message.allow_message_tool") === "true")
169163
const isValidGlobalForumsCourse = computed(() => {
170164
const courseId = globalForumsCourse.value
171165
return courseId !== null && courseId !== undefined && courseId > 0
@@ -203,7 +197,9 @@ watchEffect(() => {
203197
currentNodeId.value = currentUser.resourceNode.id
204198
}
205199
}
206-
messageRelUserStore.findUnreadCount()
200+
if (messagingEnabled.value) {
201+
messageRelUserStore.findUnreadCount()
202+
}
207203
if (user.value && user.value.id) {
208204
fetchInvitationsCount(user.value.id)
209205
}

assets/vue/composables/useSocialMenuItems.js

Lines changed: 52 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ export function useSocialMenuItems() {
1818
const { isCurrentUser } = useSocialInfo()
1919
const { user } = storeToRefs(securityStore)
2020

21-
const unreadMessagesCount = computed(() => messageRelUserStore.countUnread)
21+
const messagingEnabled = computed(() => platformConfigStore.getSetting("message.allow_message_tool") === "true")
22+
23+
const unreadMessagesCount = computed(() => (messagingEnabled.value ? messageRelUserStore.countUnread : 0))
24+
2225
const globalForumsCourse = computed(() => platformConfigStore.getSetting("forum.global_forums_course_id"))
2326
const hideSocialGroupBlock = computed(
2427
() => platformConfigStore.getSetting("social.hide_social_groups_block") === "true",
@@ -42,11 +45,7 @@ export function useSocialMenuItems() {
4245
const getGroupLink = async () => {
4346
try {
4447
const response = await axios.get("/social-network/get-forum-link")
45-
if (isValidGlobalForumsCourse.value) {
46-
groupLink.value = response.data.go_to
47-
} else {
48-
groupLink.value = { name: "UserGroupList" }
49-
}
48+
groupLink.value = isValidGlobalForumsCourse.value ? response.data.go_to : { name: "UserGroupList" }
5049
} catch (error) {
5150
console.error("Error fetching forum link:", error)
5251
groupLink.value = { name: "UserGroupList" }
@@ -59,43 +58,66 @@ export function useSocialMenuItems() {
5958
}
6059

6160
const items = computed(() => {
62-
const menuItems = [
63-
{ icon: "mdi mdi-home", label: t("Home"), route: "/social" },
64-
{
61+
const menuItems = []
62+
63+
// Home
64+
menuItems.push({ icon: "mdi mdi-home", label: t("Home"), route: "/social" })
65+
66+
if (messagingEnabled.value) {
67+
menuItems.push({
6568
icon: "mdi mdi-email",
6669
label: t("Messages"),
6770
route: "/resources/messages",
6871
badgeCount: unreadMessagesCount.value,
69-
},
70-
{ icon: "mdi mdi-handshake", label: t("My friends"), route: { name: "UserRelUserList" } },
71-
{
72-
icon: "mdi mdi-briefcase",
73-
label: t("My files"),
74-
route: { name: "PersonalFileList", params: { node: securityStore.user.resourceNode.id } },
75-
},
76-
{ icon: "mdi mdi-account", label: t("Personal data"), route: "/resources/users/personal_data" },
77-
]
72+
})
73+
}
74+
75+
// My friends
76+
menuItems.push({
77+
icon: "mdi mdi-handshake",
78+
label: t("My friends"),
79+
route: { name: "UserRelUserList" },
80+
})
7881

7982
if (!hideSocialGroupBlock.value) {
80-
menuItems.splice(3, 0, {
83+
menuItems.push({
8184
icon: "mdi mdi-group",
8285
label: t("Social groups"),
8386
route: groupLink.value,
8487
isLink: isValidGlobalForumsCourse.value,
8588
})
8689
}
8790

88-
return isCurrentUser.value
89-
? menuItems
90-
: [
91-
{ icon: "mdi mdi-home", label: t("Home"), route: "/social" },
92-
{
93-
icon: "mdi mdi-email",
94-
label: t("Send message"),
95-
link: `/main/inc/ajax/user_manager.ajax.php?a=get_user_popup&user_id=${user.value.id}`,
96-
isExternal: true,
97-
},
98-
]
91+
// My files
92+
menuItems.push({
93+
icon: "mdi mdi-briefcase",
94+
label: t("My files"),
95+
route: { name: "PersonalFileList", params: { node: securityStore.user.resourceNode.id } },
96+
})
97+
98+
// Personal data
99+
menuItems.push({
100+
icon: "mdi mdi-account",
101+
label: t("Personal data"),
102+
route: "/resources/users/personal_data",
103+
})
104+
105+
if (!isCurrentUser.value) {
106+
const othersMenu = [{ icon: "mdi mdi-home", label: t("Home"), route: "/social" }]
107+
108+
if (messagingEnabled.value) {
109+
othersMenu.push({
110+
icon: "mdi mdi-email",
111+
label: t("Send message"),
112+
link: `/main/inc/ajax/user_manager.ajax.php?a=get_user_popup&user_id=${user.value.id}`,
113+
isExternal: true,
114+
})
115+
}
116+
117+
return othersMenu
118+
}
119+
120+
return menuItems
99121
})
100122

101123
return { items }

assets/vue/views/message/MessageList.vue

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ import InputGroup from "primevue/inputgroup"
309309
import InputText from "primevue/inputtext"
310310
import messageRelUserService from "../../services/messagereluser"
311311
import { useMessageReceiverFormatter } from "../../composables/message/messageFormatter"
312+
import { usePlatformConfig } from "../../store/platformConfig"
312313
313314
const route = useRoute()
314315
const router = useRouter()
@@ -324,6 +325,8 @@ const messageRelUserStore = useMessageRelUserStore()
324325
const { abbreviatedDatetime } = useFormatDate()
325326
326327
const { mapReceiverMixToUsers } = useMessageReceiverFormatter()
328+
const platformConfigStore = usePlatformConfig()
329+
const messagingEnabled = computed(() => platformConfigStore.getSetting("message.allow_message_tool") === "true")
327330
328331
const mItemsMarkAs = ref([
329332
{
@@ -629,6 +632,10 @@ function showDlgConfirmDeleteMultiple() {
629632
}
630633
631634
onMounted(() => {
635+
if (!messagingEnabled.value) {
636+
router.replace("/social")
637+
return
638+
}
632639
showInbox()
633640
})
634641

src/CoreBundle/Controller/PlatformConfigurationController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ public function list(SettingsManager $settingsManager): Response
121121
'platform.push_notification_settings',
122122
'session.user_session_display_mode',
123123
'course.resource_sequence_show_dependency_in_course_intro',
124+
'message.allow_message_tool',
124125
];
125126

126127
$user = $this->userHelper->getCurrent();

0 commit comments

Comments
 (0)