Skip to content

Commit

Permalink
Added both backend and frontend code to handle new faculty type notif…
Browse files Browse the repository at this point in the history
…ications.
  • Loading branch information
jullia andrei committed Oct 4, 2024
1 parent 19d5fa5 commit 31fa23b
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 26 deletions.
8 changes: 4 additions & 4 deletions src/notifications.js
Original file line number Diff line number Diff line change
Expand Up @@ -157,10 +157,10 @@ Notifications.create = async function (data) {
if (!result.data) {
return null;
}
// Handle faculty reply notification
if (result.data.type === 'faculty-reply') {
result.data.importance = result.data.importance || 6; // Setting a higher importance for faculty replies
}
// Handle faculty reply notification
if (result.data.type === 'faculty-reply') {
result.data.importance = result.data.importance || 6; // Setting a higher importance for faculty replies
}
await Promise.all([
db.sortedSetAdd('notifications', now, data.nid),
db.setObject(`notifications:${data.nid}`, data),
Expand Down
40 changes: 18 additions & 22 deletions src/topics/create.js
Original file line number Diff line number Diff line change
Expand Up @@ -209,38 +209,34 @@ module.exports = function (Topics) {
if (parseInt(uid, 10) || meta.config.allowGuestReplyNotifications) {
const { displayname } = postData.user;

// Checks if the user is an admin
const isAdmin = await privileges.users.isAdministrator(uid);
let notificationType = 'new-reply';
let notificationMessage;
let nid;
let mergeId;

if (isAdmin) {
// Handles admin/instructor notification separately so it doesn't get bundled with
// notifications of non-admin replies.
// It does this by using a different notification ID and merge ID for admin replies.
notificationMessage = translator.compile('notifications:admin-posted-to', displayname, postData.topic.title);
Topics.notifyFollowers(postData, uid, {
type: 'new-reply',
bodyShort: notificationMessage,
nid: `admin_post:tid:${postData.topic.tid}:pid:${postData.pid}:uid:${uid}`,
mergeId: `notifications:admin-posted-to|${postData.topic.tid}`,
});
notificationType = 'faculty-reply';
notificationMessage = translator.compile('notifications:faculty-posted-to', displayname, postData.topic.title);
nid = `faculty_post:tid:${postData.topic.tid}:pid:${postData.pid}:uid:${uid}`;
mergeId = `notifications:faculty-posted-to|${postData.topic.tid}`;
} else {
// This code handles non-admin replies, allowing bundling.
notificationMessage = translator.compile('notifications:user-posted-to', displayname, postData.topic.title);

Topics.notifyFollowers(postData, uid, {
type: 'new-reply',
bodyShort: notificationMessage,
nid: `new_post:tid:${postData.topic.tid}:pid:${postData.pid}:uid:${uid}`,
mergeId: `notifications:user-posted-to|${postData.topic.tid}`,
});
nid = `new_post:tid:${postData.topic.tid}:pid:${postData.pid}:uid:${uid}`;
mergeId = `notifications:user-posted-to|${postData.topic.tid}`;
}

await Topics.notifyFollowers(postData, uid, {
type: notificationType,
bodyShort: notificationMessage,
nid: nid,
mergeId: mergeId,
});

analytics.increment(['posts', `posts:byCid:${data.cid}`]);
plugins.hooks.fire('action:topic.reply', { post: _.clone(postData), data: data });

return postData;
}

return postData;
};

async function onNewPost(postData, data) {
Expand Down
9 changes: 9 additions & 0 deletions src/user/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ module.exports = function (User) {
settings[notificationType] = getSetting(settings, notificationType, 'notification');
});

// Load the faculty reply notification setting
settings['notificationType_faculty-reply'] = getSetting(settings, 'notificationType_faculty-reply', 'notification');

return settings;
}

Expand Down Expand Up @@ -155,6 +158,12 @@ module.exports = function (User) {
settings[notificationType] = data[notificationType];
}
});

// Handling for faculty-reply notification
if (data['notificationType_faculty-reply']) {
settings['notificationType_faculty-reply'] = data['notificationType_faculty-reply'];
}

const result = await plugins.hooks.fire('filter:user.saveSettings', { uid: uid, settings: settings, data: data });
await db.setObject(`user:${uid}:settings`, result.settings);
await User.updateDigestSetting(uid, data.dailyDigestFreq);
Expand Down

0 comments on commit 31fa23b

Please sign in to comment.