mirror of
https://github.com/wekan/wekan.git
synced 2025-09-22 01:50:48 +02:00
Merge branch 'jtbairdsr-master'
This commit is contained in:
commit
115701fa65
6 changed files with 72 additions and 2 deletions
|
@ -14,3 +14,7 @@ template(name='notificationsDrawer')
|
||||||
+notification(activityData=activity index=dbIndex read=read)
|
+notification(activityData=activity index=dbIndex read=read)
|
||||||
if($gt unreadNotifications 0)
|
if($gt unreadNotifications 0)
|
||||||
a.all-read {{_ 'mark-all-as-read'}}
|
a.all-read {{_ 'mark-all-as-read'}}
|
||||||
|
if ($and ($.Session.get 'showReadNotifications') ($gt readNotifications 0))
|
||||||
|
a.remove-read
|
||||||
|
i.fa.fa-trash
|
||||||
|
| {{_ 'remove-all-read'}}
|
||||||
|
|
|
@ -16,6 +16,13 @@ Template.notificationsDrawer.helpers({
|
||||||
transformedProfile() {
|
transformedProfile() {
|
||||||
return Users.findOne(Meteor.userId());
|
return Users.findOne(Meteor.userId());
|
||||||
},
|
},
|
||||||
|
readNotifications() {
|
||||||
|
const readNotifications = _.filter(
|
||||||
|
Meteor.user().profile.notifications,
|
||||||
|
v => !!v.read,
|
||||||
|
);
|
||||||
|
return readNotifications.length;
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.notificationsDrawer.events({
|
Template.notificationsDrawer.events({
|
||||||
|
@ -35,4 +42,12 @@ Template.notificationsDrawer.events({
|
||||||
'click .toggle-read'() {
|
'click .toggle-read'() {
|
||||||
Session.set('showReadNotifications', !Session.get('showReadNotifications'));
|
Session.set('showReadNotifications', !Session.get('showReadNotifications'));
|
||||||
},
|
},
|
||||||
|
'click .remove-read'() {
|
||||||
|
const user = Meteor.user();
|
||||||
|
for (const notification of user.profile.notifications) {
|
||||||
|
if (notification.read) {
|
||||||
|
user.removeNotification(notification.activity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -45,12 +45,23 @@ section#notifications-drawer
|
||||||
line-height: 24px
|
line-height: 24px
|
||||||
opacity 1
|
opacity 1
|
||||||
|
|
||||||
.all-read
|
.all-read,
|
||||||
|
.remove-read
|
||||||
color belize
|
color belize
|
||||||
background-color: #fafafa
|
background-color: #fafafa
|
||||||
margin 8px 16px 12px
|
margin 8px 16px 12px
|
||||||
display inline-block
|
display inline-block
|
||||||
|
|
||||||
|
.remove-read
|
||||||
|
float right
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
color #eb4646 !important
|
||||||
|
|
||||||
|
i.fa
|
||||||
|
color inherit
|
||||||
|
|
||||||
|
|
||||||
ul.notifications
|
ul.notifications
|
||||||
display: block
|
display: block
|
||||||
padding: 0px 16px
|
padding: 0px 16px
|
||||||
|
|
|
@ -774,6 +774,7 @@
|
||||||
"view-all": "View All",
|
"view-all": "View All",
|
||||||
"filter-by-unread": "Filter by Unread",
|
"filter-by-unread": "Filter by Unread",
|
||||||
"mark-all-as-read": "Mark all as read",
|
"mark-all-as-read": "Mark all as read",
|
||||||
|
"remove-all-read": "Remove all read",
|
||||||
"allow-rename": "Allow Rename",
|
"allow-rename": "Allow Rename",
|
||||||
"allowRenamePopup-title": "Allow Rename"
|
"allowRenamePopup-title": "Allow Rename"
|
||||||
}
|
}
|
||||||
|
|
|
@ -282,7 +282,10 @@ if (Meteor.isServer) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Notifications.getUsers(watchers).forEach(user => {
|
Notifications.getUsers(watchers).forEach(user => {
|
||||||
Notifications.notify(user, title, description, params);
|
// don't notify a user of their own behavior
|
||||||
|
if (user._id !== userId) {
|
||||||
|
Notifications.notify(user, title, description, params);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const integrations = Integrations.find({
|
const integrations = Integrations.find({
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { SyncedCron } from 'meteor/percolate:synced-cron';
|
||||||
|
|
||||||
// Sandstorm context is detected using the METEOR_SETTINGS environment variable
|
// Sandstorm context is detected using the METEOR_SETTINGS environment variable
|
||||||
// in the package definition.
|
// in the package definition.
|
||||||
const isSandstorm =
|
const isSandstorm =
|
||||||
|
@ -926,6 +928,37 @@ if (Meteor.isServer) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const addCronJob = _.debounce(
|
||||||
|
Meteor.bindEnvironment(function notificationCleanupDebounced() {
|
||||||
|
// passed in the removeAge has to be a number standing for the number of days after a notification is read before we remove it
|
||||||
|
const envRemoveAge = process.env.NOTIFICATION_REMOVAL_AGE;
|
||||||
|
// default notifications will be removed 2 days after they are read
|
||||||
|
const defaultRemoveAge = 2;
|
||||||
|
const removeAge = parseInt(envRemoveAge, 10) || defaultRemoveAge;
|
||||||
|
|
||||||
|
SyncedCron.add({
|
||||||
|
name: 'notification_cleanup',
|
||||||
|
schedule: parser => parser.text('every 1 days'),
|
||||||
|
job: () => {
|
||||||
|
for (const user of Users.find()) {
|
||||||
|
for (const notification of user.profile.notifications) {
|
||||||
|
if (notification.read) {
|
||||||
|
const removeDate = new Date(notification.read);
|
||||||
|
removeDate.setDate(removeDate.getDate() + removeAge);
|
||||||
|
if (removeDate <= new Date()) {
|
||||||
|
user.removeNotification(notification.activity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
SyncedCron.start();
|
||||||
|
}),
|
||||||
|
500,
|
||||||
|
);
|
||||||
|
|
||||||
if (Meteor.isServer) {
|
if (Meteor.isServer) {
|
||||||
// Let mongoDB ensure username unicity
|
// Let mongoDB ensure username unicity
|
||||||
Meteor.startup(() => {
|
Meteor.startup(() => {
|
||||||
|
@ -939,6 +972,9 @@ if (Meteor.isServer) {
|
||||||
},
|
},
|
||||||
{ unique: true },
|
{ unique: true },
|
||||||
);
|
);
|
||||||
|
Meteor.defer(() => {
|
||||||
|
addCronJob();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// OLD WAY THIS CODE DID WORK: When user is last admin of board,
|
// OLD WAY THIS CODE DID WORK: When user is last admin of board,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue