Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
121686a928 | ||
|
|
3563e0145d | ||
|
|
c630714245 | ||
|
|
5ebb47cb0e | ||
|
|
115701fa65 | ||
|
|
a182dde11f | ||
|
|
1e20e2601f | ||
|
|
4d066b1f30 |
No files matched your search
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v3.91.0",
|
||||
"version": "v3.92.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v3.91.0",
|
||||
"version": "v3.92.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,3 +1,18 @@
|
||||
# v3.92 2020-04-09 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Scheduler to clean up read notifications. Also added a button to manually remove all
|
||||
read notifications, and a fix to prevent users form getting notifications for their own
|
||||
actions](https://github.com/wekan/wekan/pull/2998).
|
||||
Thanks to jtbairdsr.
|
||||
- [Add setting](https://github.com/wekan/wekan/commit/5ebb47cb0ec7272894a37d99579ede872251f55c)
|
||||
default [NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2](https://github.com/wekan/wekan/pull/2998)
|
||||
to all Wekan platforms.
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v3.91 2020-04-08 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
@@ -26,6 +26,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
|
||||
ATTACHMENTS_STORE_PATH="" \
|
||||
MAX_IMAGE_PIXEL="" \
|
||||
IMAGE_COMPRESS_RATIO="" \
|
||||
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
|
||||
BIGEVENTS_PATTERN=NONE \
|
||||
NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
|
||||
NOTIFY_DUE_AT_HOUR_OF_DAY="" \
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v3.91.0"
|
||||
appVersion: "v3.92.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -40,31 +40,29 @@ BlazeComponent.extendComponent({
|
||||
|
||||
voteState() {
|
||||
const card = this.currentData();
|
||||
const userId = Meteor.userId()
|
||||
let state
|
||||
const userId = Meteor.userId();
|
||||
let state;
|
||||
if (card.vote) {
|
||||
if (card.vote.positive) {
|
||||
state = _.contains(card.vote.positive, userId);
|
||||
if (state === true) return true
|
||||
if (state === true) return true;
|
||||
}
|
||||
if (card.vote.negative) {
|
||||
state = _.contains(card.vote.negative, userId);
|
||||
if (state === true) return false
|
||||
if (state === true) return false;
|
||||
}
|
||||
}
|
||||
return null
|
||||
return null;
|
||||
},
|
||||
voteCountPositive() {
|
||||
const card = this.currentData();
|
||||
if (card.vote && card.vote.positive)
|
||||
return card.vote.positive.length
|
||||
return null
|
||||
if (card.vote && card.vote.positive) return card.vote.positive.length;
|
||||
return null;
|
||||
},
|
||||
voteCountNegative() {
|
||||
const card = this.currentData();
|
||||
if (card.vote && card.vote.negative)
|
||||
return card.vote.negative.length
|
||||
return null
|
||||
if (card.vote && card.vote.negative) return card.vote.negative.length;
|
||||
return null;
|
||||
},
|
||||
isWatching() {
|
||||
const card = this.currentData();
|
||||
@@ -408,17 +406,17 @@ BlazeComponent.extendComponent({
|
||||
Meteor.call('toggleSystemMessages');
|
||||
},
|
||||
'click .js-vote'(e) {
|
||||
const forIt = $(e.target).hasClass('js-vote-positive')
|
||||
let newState = null
|
||||
const forIt = $(e.target).hasClass('js-vote-positive');
|
||||
let newState = null;
|
||||
if (
|
||||
this.voteState() == null ||
|
||||
this.voteState() == false && forIt ||
|
||||
this.voteState() == true && !forIt
|
||||
(this.voteState() == false && forIt) ||
|
||||
(this.voteState() == true && !forIt)
|
||||
) {
|
||||
newState = forIt
|
||||
newState = forIt;
|
||||
}
|
||||
this.data().setVote(Meteor.userId(), newState)
|
||||
}
|
||||
this.data().setVote(Meteor.userId(), newState);
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
@@ -613,7 +611,7 @@ Template.cardDetailsActionsPopup.events({
|
||||
'click .js-set-card-color': Popup.open('setCardColor'),
|
||||
'click .js-cancel-voting'(event) {
|
||||
event.preventDefault();
|
||||
this.unsetVote()
|
||||
this.unsetVote();
|
||||
Popup.close();
|
||||
},
|
||||
'click .js-move-card-to-top'(event) {
|
||||
@@ -649,7 +647,7 @@ Template.cardDetailsActionsPopup.events({
|
||||
},
|
||||
});
|
||||
|
||||
Template.editCardTitleForm.onRendered(function () {
|
||||
Template.editCardTitleForm.onRendered(function() {
|
||||
autosize(this.$('.js-edit-card-title'));
|
||||
});
|
||||
|
||||
@@ -663,7 +661,7 @@ Template.editCardTitleForm.events({
|
||||
},
|
||||
});
|
||||
|
||||
Template.editCardRequesterForm.onRendered(function () {
|
||||
Template.editCardRequesterForm.onRendered(function() {
|
||||
autosize(this.$('.js-edit-card-requester'));
|
||||
});
|
||||
|
||||
@@ -676,7 +674,7 @@ Template.editCardRequesterForm.events({
|
||||
},
|
||||
});
|
||||
|
||||
Template.editCardAssignerForm.onRendered(function () {
|
||||
Template.editCardAssignerForm.onRendered(function() {
|
||||
autosize(this.$('.js-edit-card-assigner'));
|
||||
});
|
||||
|
||||
@@ -816,7 +814,7 @@ Template.copyChecklistToManyCardsPopup.events({
|
||||
|
||||
// copy subtasks
|
||||
cursor = Cards.find({ parentId: oldId });
|
||||
cursor.forEach(function () {
|
||||
cursor.forEach(function() {
|
||||
'use strict';
|
||||
const subtask = arguments[0];
|
||||
subtask.parentId = _id;
|
||||
@@ -965,7 +963,7 @@ BlazeComponent.extendComponent({
|
||||
}
|
||||
}
|
||||
},
|
||||
'click .js-delete': Popup.afterConfirm('cardDelete', function () {
|
||||
'click .js-delete': Popup.afterConfirm('cardDelete', function() {
|
||||
Popup.close();
|
||||
Cards.remove(this._id);
|
||||
Utils.goBoardId(this.boardId);
|
||||
@@ -1003,9 +1001,8 @@ BlazeComponent.extendComponent({
|
||||
'submit .edit-vote-question'(evt) {
|
||||
evt.preventDefault();
|
||||
const voteQuestion = evt.target.vote.value;
|
||||
this.currentCard.setVoteQuestion(voteQuestion)
|
||||
this.currentCard.setVoteQuestion(voteQuestion);
|
||||
Popup.close();
|
||||
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
@@ -22,11 +22,20 @@ BlazeComponent.extendComponent({
|
||||
const listId = targetBoard.getDefaultSubtasksListId();
|
||||
|
||||
//Get the full swimlane data for the parent task.
|
||||
const parentSwimlane = Swimlanes.findOne({boardId: crtBoard._id, _id: card.swimlaneId});
|
||||
const parentSwimlane = Swimlanes.findOne({
|
||||
boardId: crtBoard._id,
|
||||
_id: card.swimlaneId,
|
||||
});
|
||||
//find the swimlane of the same name in the target board.
|
||||
const targetSwimlane = Swimlanes.findOne({boardId: targetBoard._id, title: parentSwimlane.title});
|
||||
const targetSwimlane = Swimlanes.findOne({
|
||||
boardId: targetBoard._id,
|
||||
title: parentSwimlane.title,
|
||||
});
|
||||
//If no swimlane with a matching title exists in the target board, fall back to the default swimlane.
|
||||
const swimlaneId = targetSwimlane === undefined ? targetBoard.getDefaultSwimline()._id : targetSwimlane._id;
|
||||
const swimlaneId =
|
||||
targetSwimlane === undefined
|
||||
? targetBoard.getDefaultSwimline()._id
|
||||
: targetSwimlane._id;
|
||||
|
||||
if (title) {
|
||||
const _id = Cards.insert({
|
||||
|
||||
@@ -14,3 +14,7 @@ template(name='notificationsDrawer')
|
||||
+notification(activityData=activity index=dbIndex read=read)
|
||||
if($gt unreadNotifications 0)
|
||||
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() {
|
||||
return Users.findOne(Meteor.userId());
|
||||
},
|
||||
readNotifications() {
|
||||
const readNotifications = _.filter(
|
||||
Meteor.user().profile.notifications,
|
||||
v => !!v.read,
|
||||
);
|
||||
return readNotifications.length;
|
||||
},
|
||||
});
|
||||
|
||||
Template.notificationsDrawer.events({
|
||||
@@ -35,4 +42,12 @@ Template.notificationsDrawer.events({
|
||||
'click .toggle-read'() {
|
||||
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
|
||||
opacity 1
|
||||
|
||||
.all-read
|
||||
.all-read,
|
||||
.remove-read
|
||||
color belize
|
||||
background-color: #fafafa
|
||||
margin 8px 16px 12px
|
||||
display inline-block
|
||||
|
||||
.remove-read
|
||||
float right
|
||||
|
||||
&:hover
|
||||
color #eb4646 !important
|
||||
|
||||
i.fa
|
||||
color inherit
|
||||
|
||||
|
||||
ul.notifications
|
||||
display: block
|
||||
padding: 0px 16px
|
||||
|
||||
@@ -254,6 +254,11 @@ services:
|
||||
#-MAX_IMAGE_PIXEL=1024
|
||||
#-IMAGE_COMPRESS_RATIO=80
|
||||
#---------------------------------------------------------------
|
||||
# ==== NOTIFICATION TRAY AFTER READ DAYS BEFORE REMOVE =====
|
||||
# Number of days after a notification is read before we remove it.
|
||||
# Default: 2
|
||||
#- NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2
|
||||
#---------------------------------------------------------------
|
||||
# ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
|
||||
# https://github.com/wekan/wekan/pull/2541
|
||||
# Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
|
||||
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Zobrazit vše",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Označit vše jako přečtené",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Povolit přejmenování",
|
||||
"allowRenamePopup-title": "Povolit přejmenování"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
+7
-6
@@ -152,8 +152,8 @@
|
||||
"card-spent": "Aufgewendete Zeit",
|
||||
"card-edit-attachments": "Anhänge ändern",
|
||||
"card-edit-custom-fields": "Benutzerdefinierte Felder editieren",
|
||||
"card-start-voting": "Start voting",
|
||||
"card-cancel-voting": "Delete voting and all votes",
|
||||
"card-start-voting": "Abstimmung starten",
|
||||
"card-cancel-voting": "Abstimmung mit allen Stimmen löschen ",
|
||||
"card-edit-labels": "Labels ändern",
|
||||
"card-edit-members": "Mitglieder ändern",
|
||||
"card-labels-title": "Labels für diese Karte ändern.",
|
||||
@@ -163,10 +163,10 @@
|
||||
"cardAttachmentsPopup-title": "Anhängen von",
|
||||
"cardCustomField-datePopup-title": "Datum ändern",
|
||||
"cardCustomFieldsPopup-title": "Benutzerdefinierte Felder editieren",
|
||||
"cardStartVotingPopup-title": "Start a vote",
|
||||
"vote-question": "Voting question",
|
||||
"vote-for-it": "for it",
|
||||
"vote-against": "against",
|
||||
"cardStartVotingPopup-title": "Abstimmung starten",
|
||||
"vote-question": "Abstimmen über",
|
||||
"vote-for-it": "Dafür",
|
||||
"vote-against": "Dagegen",
|
||||
"cardDeletePopup-title": "Karte löschen?",
|
||||
"cardDetailsActionsPopup-title": "Kartenaktionen",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Alle anzeigen",
|
||||
"filter-by-unread": "Nach Ungelesenen filtern",
|
||||
"mark-all-as-read": "Alle als gelesen markieren",
|
||||
"remove-all-read": "Alle gelesenen entfernen",
|
||||
"allow-rename": "Umbenennen erlauben",
|
||||
"allowRenamePopup-title": "Umbenennen erlauben"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -774,6 +774,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Ver todo",
|
||||
"filter-by-unread": "Filtrar por no leído",
|
||||
"mark-all-as-read": "Marcar todo como leido",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Permitir renombrar",
|
||||
"allowRenamePopup-title": "Permitir renombrar"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Näytä kaikki",
|
||||
"filter-by-unread": "Suodata lukemattomat",
|
||||
"mark-all-as-read": "Merkkaa kaikki luetuksi",
|
||||
"remove-all-read": "Poista kaikki luetut",
|
||||
"allow-rename": "Salli uudelleennimeäminen",
|
||||
"allowRenamePopup-title": "Salli uudelleennimeäminen"
|
||||
}
|
||||
+10
-9
@@ -152,8 +152,8 @@
|
||||
"card-spent": "Temps passé",
|
||||
"card-edit-attachments": "Modifier les pièces jointes",
|
||||
"card-edit-custom-fields": "Éditer les champs personnalisés",
|
||||
"card-start-voting": "Start voting",
|
||||
"card-cancel-voting": "Delete voting and all votes",
|
||||
"card-start-voting": "Commencer le vote",
|
||||
"card-cancel-voting": "Supprimer le vote",
|
||||
"card-edit-labels": "Gérer les étiquettes",
|
||||
"card-edit-members": "Gérer les participants",
|
||||
"card-labels-title": "Modifier les étiquettes de la carte.",
|
||||
@@ -163,10 +163,10 @@
|
||||
"cardAttachmentsPopup-title": "Ajouter depuis",
|
||||
"cardCustomField-datePopup-title": "Modifier la date",
|
||||
"cardCustomFieldsPopup-title": "Éditer les champs personnalisés",
|
||||
"cardStartVotingPopup-title": "Start a vote",
|
||||
"vote-question": "Voting question",
|
||||
"vote-for-it": "for it",
|
||||
"vote-against": "against",
|
||||
"cardStartVotingPopup-title": "Commencer un vote",
|
||||
"vote-question": "Question du vote",
|
||||
"vote-for-it": "pour",
|
||||
"vote-against": "contre",
|
||||
"cardDeletePopup-title": "Supprimer la carte ?",
|
||||
"cardDetailsActionsPopup-title": "Actions sur la carte",
|
||||
"cardLabelsPopup-title": "Étiquettes",
|
||||
@@ -325,7 +325,7 @@
|
||||
"filter-clear": "Supprimer les filtres",
|
||||
"filter-no-label": "Aucune étiquette",
|
||||
"filter-no-member": "Aucun participant",
|
||||
"filter-no-assignee": "No assignee",
|
||||
"filter-no-assignee": "Pas de personne assignée",
|
||||
"filter-no-custom-fields": "Pas de champs personnalisés",
|
||||
"filter-show-archive": "Montrer les listes archivées",
|
||||
"filter-hide-empty": "Cacher les listes vides",
|
||||
@@ -760,8 +760,8 @@
|
||||
"accounts-allowUserDelete": "Autoriser les utilisateurs à supprimer leur compte",
|
||||
"hide-minicard-label-text": "Cacher le label de la minicarte",
|
||||
"show-desktop-drag-handles": "Voir les poignées de déplacement du bureau",
|
||||
"assignee": "Cessionnaire",
|
||||
"cardAssigneesPopup-title": "Cessionnaire",
|
||||
"assignee": "Personne assignée",
|
||||
"cardAssigneesPopup-title": "Personne assignée",
|
||||
"addmore-detail": "Ajouter une description plus détaillée",
|
||||
"show-on-card": "Afficher sur la carte",
|
||||
"new": "Nouveau",
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Voir tout",
|
||||
"filter-by-unread": "Filtrer par non lu",
|
||||
"mark-all-as-read": "Marquer comme lus",
|
||||
"remove-all-read": "Supprimer les lus",
|
||||
"allow-rename": "Autoriser le renommage",
|
||||
"allowRenamePopup-title": "Autoriser le renommage"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
+3
-2
@@ -153,7 +153,7 @@
|
||||
"card-edit-attachments": "עריכת קבצים מצורפים",
|
||||
"card-edit-custom-fields": "עריכת שדות בהתאמה אישית",
|
||||
"card-start-voting": "התחילו להצביע",
|
||||
"card-cancel-voting": "Delete voting and all votes",
|
||||
"card-cancel-voting": "מחיקת אפשרות ההצבעה ואת כל הקולות",
|
||||
"card-edit-labels": "עריכת תוויות",
|
||||
"card-edit-members": "עריכת חברים",
|
||||
"card-labels-title": "שינוי תוויות לכרטיס.",
|
||||
@@ -163,7 +163,7 @@
|
||||
"cardAttachmentsPopup-title": "לצרף מ־",
|
||||
"cardCustomField-datePopup-title": "החלפת תאריך",
|
||||
"cardCustomFieldsPopup-title": "עריכת שדות בהתאמה אישית",
|
||||
"cardStartVotingPopup-title": "Start a vote",
|
||||
"cardStartVotingPopup-title": "התחלת הצבעה",
|
||||
"vote-question": "שאלת הסקר",
|
||||
"vote-for-it": "בעד",
|
||||
"vote-against": "נגד",
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "להציג הכול",
|
||||
"filter-by-unread": "סימון לפי כאלו שלא נקראו",
|
||||
"mark-all-as-read": "לסמן הכול כאילו שנקראו",
|
||||
"remove-all-read": "הסרת כל אלו שנקראו",
|
||||
"allow-rename": "לאפשר שינוי שם",
|
||||
"allowRenamePopup-title": "לאפשר שינוי שם"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Mostra Tutto",
|
||||
"filter-by-unread": "Filtra per non letto",
|
||||
"mark-all-as-read": "Segna come letto",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Consenti Rinomina",
|
||||
"allowRenamePopup-title": "Consenti Rinomina"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "全てを表示",
|
||||
"filter-by-unread": "未読でフィルタ",
|
||||
"mark-all-as-read": "全て既読にする",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "リネームを許可する",
|
||||
"allowRenamePopup-title": "リネームを許可する"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Bekijk alles",
|
||||
"filter-by-unread": "Filter op Ongelezen",
|
||||
"mark-all-as-read": "Markeer alles als gelezen",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Sta Hernoemen toe",
|
||||
"allowRenamePopup-title": "Sta Hernoemen toe"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Wyświetl wszystko",
|
||||
"filter-by-unread": "Filtruj nieprzeczytane",
|
||||
"mark-all-as-read": "Zaznacz wszystkie jako przeczytane",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Zezwól na zmianę nazwy",
|
||||
"allowRenamePopup-title": "Zezwól na zmianę nazwy"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Ver tudo",
|
||||
"filter-by-unread": "Filtrar não lidas",
|
||||
"mark-all-as-read": "Marcar todas como lidas",
|
||||
"remove-all-read": "Remover todas lidas",
|
||||
"allow-rename": "Permitir renomear",
|
||||
"allowRenamePopup-title": "Permitir renomear"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
+7
-6
@@ -153,7 +153,7 @@
|
||||
"card-edit-attachments": "Изменить вложения",
|
||||
"card-edit-custom-fields": "Редактировать настраиваемые поля",
|
||||
"card-start-voting": "Запустить голосование",
|
||||
"card-cancel-voting": "Delete voting and all votes",
|
||||
"card-cancel-voting": "Отменить голосование и удалить голоса",
|
||||
"card-edit-labels": "Изменить метку",
|
||||
"card-edit-members": "Изменить участников",
|
||||
"card-labels-title": "Изменить метки для этой карточки.",
|
||||
@@ -163,10 +163,10 @@
|
||||
"cardAttachmentsPopup-title": "Прикрепить из",
|
||||
"cardCustomField-datePopup-title": "Изменить дату",
|
||||
"cardCustomFieldsPopup-title": "редактировать настраиваемые поля",
|
||||
"cardStartVotingPopup-title": "Start a vote",
|
||||
"vote-question": "Voting question",
|
||||
"vote-for-it": "for it",
|
||||
"vote-against": "against",
|
||||
"cardStartVotingPopup-title": "Голосовать",
|
||||
"vote-question": "Вопрос для голосования",
|
||||
"vote-for-it": "за",
|
||||
"vote-against": "против",
|
||||
"cardDeletePopup-title": "Удалить карточку?",
|
||||
"cardDetailsActionsPopup-title": "Действия в карточке",
|
||||
"cardLabelsPopup-title": "Метки",
|
||||
@@ -325,7 +325,7 @@
|
||||
"filter-clear": "Очистить фильтр",
|
||||
"filter-no-label": "Нет метки",
|
||||
"filter-no-member": "Нет участников",
|
||||
"filter-no-assignee": "No assignee",
|
||||
"filter-no-assignee": "Не применимо",
|
||||
"filter-no-custom-fields": "Нет настраиваемых полей",
|
||||
"filter-show-archive": "Показать архивные списки",
|
||||
"filter-hide-empty": "Скрыть пустые списки",
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Показать все",
|
||||
"filter-by-unread": "Фильтр по непрочитанным",
|
||||
"mark-all-as-read": "Отметить все как прочитанные",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Разрешить переименование",
|
||||
"allowRenamePopup-title": "Разрешить переименование"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
+9
-8
@@ -75,9 +75,9 @@
|
||||
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
|
||||
"activity-editComment": "izmenjen komentar",
|
||||
"activity-deleteComment": "izbrisan komentar",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-attachment": "Dodaj prilog",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-card": "Dodaj karticu",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-subtask": "Add Subtask",
|
||||
"add-checklist": "Add Checklist",
|
||||
@@ -265,15 +265,15 @@
|
||||
"delete": "Delete",
|
||||
"deleteCustomFieldPopup-title": "Delete Custom Field?",
|
||||
"deleteLabelPopup-title": "Delete Label?",
|
||||
"description": "Description",
|
||||
"description": "Opis",
|
||||
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
|
||||
"disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
|
||||
"discard": "Discard",
|
||||
"done": "Done",
|
||||
"download": "Download",
|
||||
"edit": "Edit",
|
||||
"discard": "Odbaci",
|
||||
"done": "Završeno",
|
||||
"download": "Preuzmi",
|
||||
"edit": "Uredi",
|
||||
"edit-avatar": "Change Avatar",
|
||||
"edit-profile": "Edit Profile",
|
||||
"edit-profile": "Uredi profil",
|
||||
"edit-wip-limit": "Edit WIP Limit",
|
||||
"soft-wip-limit": "Soft WIP Limit",
|
||||
"editCardStartDatePopup-title": "Izmeni početni datum",
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "Prikaži sve",
|
||||
"filter-by-unread": "Filtriraj nepročitano",
|
||||
"mark-all-as-read": "Označi sve kao pročitano",
|
||||
"remove-all-read": "Ukloni sve pročitano",
|
||||
"allow-rename": "Dozvoli preimenovanje",
|
||||
"allowRenamePopup-title": "Dozvoli preimenovanje"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "查看全部",
|
||||
"filter-by-unread": "过滤未读",
|
||||
"mark-all-as-read": "标记全部已读",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "允许重命名",
|
||||
"allowRenamePopup-title": "允许重命名"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
"mark-all-as-read": "Mark all as read",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "Allow Rename",
|
||||
"allowRenamePopup-title": "Allow Rename"
|
||||
}
|
||||
@@ -771,6 +771,7 @@
|
||||
"view-all": "檢視全部",
|
||||
"filter-by-unread": "篩選: 未讀",
|
||||
"mark-all-as-read": "標示全部已讀",
|
||||
"remove-all-read": "Remove all read",
|
||||
"allow-rename": "允許更名",
|
||||
"allowRenamePopup-title": "允許更名"
|
||||
}
|
||||
@@ -282,7 +282,10 @@ if (Meteor.isServer) {
|
||||
);
|
||||
}
|
||||
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({
|
||||
|
||||
+31
-31
@@ -334,8 +334,8 @@ Cards.attachSchema(
|
||||
'vote.end': {
|
||||
type: Date,
|
||||
optional: true,
|
||||
defaultValue: null
|
||||
}
|
||||
defaultValue: null,
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -728,7 +728,7 @@ Cards.helpers({
|
||||
|
||||
parentString(sep) {
|
||||
return this.parentList()
|
||||
.map(function (elem) {
|
||||
.map(function(elem) {
|
||||
return elem.title;
|
||||
})
|
||||
.join(sep);
|
||||
@@ -1449,11 +1449,11 @@ Cards.mutations({
|
||||
$set: {
|
||||
vote: {
|
||||
question,
|
||||
positive:[],
|
||||
negative:[]
|
||||
positive: [],
|
||||
negative: [],
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
unsetVote() {
|
||||
return {
|
||||
@@ -1467,32 +1467,32 @@ Cards.mutations({
|
||||
case true:
|
||||
// vote for it
|
||||
return {
|
||||
$pull:{
|
||||
"vote.negative": userId
|
||||
$pull: {
|
||||
'vote.negative': userId,
|
||||
},
|
||||
$addToSet: {
|
||||
"vote.positive": userId
|
||||
}
|
||||
}
|
||||
'vote.positive': userId,
|
||||
},
|
||||
};
|
||||
case false:
|
||||
// vote against
|
||||
return {
|
||||
$pull:{
|
||||
"vote.positive": userId
|
||||
$pull: {
|
||||
'vote.positive': userId,
|
||||
},
|
||||
$addToSet: {
|
||||
"vote.negative" : userId
|
||||
}
|
||||
}
|
||||
'vote.negative': userId,
|
||||
},
|
||||
};
|
||||
|
||||
default:
|
||||
// Remove votes
|
||||
return {
|
||||
$pull:{
|
||||
"vote.positive": userId,
|
||||
"vote.negative" : userId
|
||||
$pull: {
|
||||
'vote.positive': userId,
|
||||
'vote.negative': userId,
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -1897,7 +1897,7 @@ if (Meteor.isServer) {
|
||||
});
|
||||
|
||||
//New activity for card moves
|
||||
Cards.after.update(function (userId, doc, fieldNames) {
|
||||
Cards.after.update(function(userId, doc, fieldNames) {
|
||||
const oldListId = this.previous.listId;
|
||||
const oldSwimlaneId = this.previous.swimlaneId;
|
||||
const oldBoardId = this.previous.boardId;
|
||||
@@ -1943,7 +1943,7 @@ if (Meteor.isServer) {
|
||||
// change list modifiedAt, when user modified the key values in timingaction array, if it's endAt, put the modifiedAt of list back to one year ago for sorting purpose
|
||||
const modifiedAt = new Date(
|
||||
new Date(value).getTime() -
|
||||
(action === 'endAt' ? 365 * 24 * 3600 * 1e3 : 0),
|
||||
(action === 'endAt' ? 365 * 24 * 3600 * 1e3 : 0),
|
||||
); // set it as 1 year before
|
||||
const boardId = list.boardId;
|
||||
Lists.direct.update(
|
||||
@@ -1997,7 +1997,7 @@ if (Meteor.isServer) {
|
||||
JsonRoutes.add(
|
||||
'GET',
|
||||
'/api/boards/:boardId/swimlanes/:swimlaneId/cards',
|
||||
function (req, res) {
|
||||
function(req, res) {
|
||||
const paramBoardId = req.params.boardId;
|
||||
const paramSwimlaneId = req.params.swimlaneId;
|
||||
Authentication.checkBoardAccess(req.userId, paramBoardId);
|
||||
@@ -2007,7 +2007,7 @@ if (Meteor.isServer) {
|
||||
boardId: paramBoardId,
|
||||
swimlaneId: paramSwimlaneId,
|
||||
archived: false,
|
||||
}).map(function (doc) {
|
||||
}).map(function(doc) {
|
||||
return {
|
||||
_id: doc._id,
|
||||
title: doc.title,
|
||||
@@ -2031,7 +2031,7 @@ if (Meteor.isServer) {
|
||||
* title: string,
|
||||
* description: string}]
|
||||
*/
|
||||
JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards', function (
|
||||
JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards', function(
|
||||
req,
|
||||
res,
|
||||
) {
|
||||
@@ -2044,7 +2044,7 @@ if (Meteor.isServer) {
|
||||
boardId: paramBoardId,
|
||||
listId: paramListId,
|
||||
archived: false,
|
||||
}).map(function (doc) {
|
||||
}).map(function(doc) {
|
||||
return {
|
||||
_id: doc._id,
|
||||
title: doc.title,
|
||||
@@ -2066,7 +2066,7 @@ if (Meteor.isServer) {
|
||||
JsonRoutes.add(
|
||||
'GET',
|
||||
'/api/boards/:boardId/lists/:listId/cards/:cardId',
|
||||
function (req, res) {
|
||||
function(req, res) {
|
||||
const paramBoardId = req.params.boardId;
|
||||
const paramListId = req.params.listId;
|
||||
const paramCardId = req.params.cardId;
|
||||
@@ -2098,7 +2098,7 @@ if (Meteor.isServer) {
|
||||
* @param {string} [assignees] the array of maximum one ID of assignee of the new card
|
||||
* @return_type {_id: string}
|
||||
*/
|
||||
JsonRoutes.add('POST', '/api/boards/:boardId/lists/:listId/cards', function (
|
||||
JsonRoutes.add('POST', '/api/boards/:boardId/lists/:listId/cards', function(
|
||||
req,
|
||||
res,
|
||||
) {
|
||||
@@ -2205,7 +2205,7 @@ if (Meteor.isServer) {
|
||||
JsonRoutes.add(
|
||||
'PUT',
|
||||
'/api/boards/:boardId/lists/:listId/cards/:cardId',
|
||||
function (req, res) {
|
||||
function(req, res) {
|
||||
Authentication.checkUserId(req.userId);
|
||||
const paramBoardId = req.params.boardId;
|
||||
const paramCardId = req.params.cardId;
|
||||
@@ -2504,7 +2504,7 @@ if (Meteor.isServer) {
|
||||
JsonRoutes.add(
|
||||
'DELETE',
|
||||
'/api/boards/:boardId/lists/:listId/cards/:cardId',
|
||||
function (req, res) {
|
||||
function(req, res) {
|
||||
Authentication.checkUserId(req.userId);
|
||||
const paramBoardId = req.params.boardId;
|
||||
const paramListId = req.params.listId;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { SyncedCron } from 'meteor/percolate:synced-cron';
|
||||
|
||||
// Sandstorm context is detected using the METEOR_SETTINGS environment variable
|
||||
// in the package definition.
|
||||
const isSandstorm =
|
||||
@@ -926,6 +928,38 @@ 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_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE;
|
||||
// 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) {
|
||||
// Let mongoDB ensure username unicity
|
||||
Meteor.startup(() => {
|
||||
@@ -939,6 +973,9 @@ if (Meteor.isServer) {
|
||||
},
|
||||
{ unique: true },
|
||||
);
|
||||
Meteor.defer(() => {
|
||||
addCronJob();
|
||||
});
|
||||
});
|
||||
|
||||
// OLD WAY THIS CODE DID WORK: When user is last admin of board,
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v3.91.0",
|
||||
"version": "v3.92.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v3.91.0",
|
||||
"version": "v3.92.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1524,7 +1524,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
||||
<ul class="toc-list-h1">
|
||||
|
||||
<li>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.91">Wekan REST API v3.91</a>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.92">Wekan REST API v3.92</a>
|
||||
|
||||
</li>
|
||||
|
||||
@@ -2022,7 +2022,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="wekan-rest-api">Wekan REST API v3.91</h1>
|
||||
<h1 id="wekan-rest-api">Wekan REST API v3.92</h1>
|
||||
<blockquote>
|
||||
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
|
||||
</blockquote>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: Wekan REST API
|
||||
version: v3.91
|
||||
version: v3.92
|
||||
description: |
|
||||
The REST API allows you to control and extend Wekan with ease.
|
||||
|
||||
|
||||
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 391,
|
||||
appVersion = 392,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "3.91.0~2020-04-08"),
|
||||
appMarketingVersion = (defaultText = "3.92.0~2020-04-09"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
@@ -242,6 +242,7 @@ const myCommand :Spk.Manifest.Command = (
|
||||
(key = "SCROLLINERTIA", value="0"),
|
||||
(key = "SCROLLAMOUNT", value="auto"),
|
||||
(key = "CARD_OPENED_WEBHOOK_ENABLED", value="false"),
|
||||
(key = "NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE", value=""),
|
||||
(key = "BIGEVENTS_PATTERN", value="NONE"),
|
||||
(key = "MATOMO_ADDRESS", value=""),
|
||||
(key = "MATOMO_SITE_ID", value=""),
|
||||
|
||||
+5
-1
@@ -3,7 +3,7 @@
|
||||
# All supported keys are defined here together with descriptions and default values
|
||||
|
||||
# list of supported keys
|
||||
keys="DEBUG MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API RICHER_CARD_COMMENT_EDITOR CARD_OPENED_WEBHOOK_ENABLED ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW MAX_IMAGE_PIXEL IMAGE_COMPRESS_RATIO BIGEVENTS_PATTERN NOTIFY_DUE_DAYS_BEFORE_AND_AFTER NOTIFY_DUE_AT_HOUR_OF_DAY EMAIL_NOTIFICATION_TIMEOUT CORS CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_LOGIN_STYLE OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_ID_TOKEN_WHITELIST_FIELDS OAUTH2_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_AUTHENTICATION LDAP_USER_AUTHENTICATION_FIELD LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD ATTACHMENTS_STORE_PATH SCROLLINERTIA SCROLLAMOUNT"
|
||||
keys="DEBUG MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API RICHER_CARD_COMMENT_EDITOR CARD_OPENED_WEBHOOK_ENABLED ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW MAX_IMAGE_PIXEL IMAGE_COMPRESS_RATIO BIGEVENTS_PATTERN NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE NOTIFY_DUE_DAYS_BEFORE_AND_AFTER NOTIFY_DUE_AT_HOUR_OF_DAY EMAIL_NOTIFICATION_TIMEOUT CORS CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_LOGIN_STYLE OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_ID_TOKEN_WHITELIST_FIELDS OAUTH2_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_AUTHENTICATION LDAP_USER_AUTHENTICATION_FIELD LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD ATTACHMENTS_STORE_PATH SCROLLINERTIA SCROLLAMOUNT"
|
||||
|
||||
# default values
|
||||
DESCRIPTION_DEBUG="Debug OIDC OAuth2 etc. Example: sudo snap set wekan debug='true'"
|
||||
@@ -104,6 +104,10 @@ DESCRIPTION_IMAGE_COMPRESS_RATIO="Image compress ratio: Allow to shrink attached
|
||||
DEFAULT_IMAGE_COMPRESS_RATIO=""
|
||||
KEY_IMAGE_COMPRESS_RATIO="image-compress-ratio"
|
||||
|
||||
DESCRIPTION_NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="Number of days after a notification is read before we remove it. Default: 2."
|
||||
DEFAULT_NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=""
|
||||
KEY_NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="notification-tray-after-read-days-before-remove"
|
||||
|
||||
DESCRIPTION_BIGEVENTS_PATTERN="Big events pattern: Notify always due etc regardless of notification settings. Default: NONE, All: received|start|due|end, Disabled: NONE"
|
||||
DEFAULT_BIGEVENTS_PATTERN="NONE"
|
||||
KEY_BIGEVENTS_PATTERN="bigevents-pattern"
|
||||
|
||||
@@ -105,6 +105,11 @@ echo -e "\t$ snap set $SNAP_NAME attachments-store-path='/var/snap/wekan/common/
|
||||
echo -e "Disabled:"
|
||||
echo -e "\t$ snap set $SNAP_NAME attachments-store-path=''"
|
||||
echo -e "\n"
|
||||
echo -e "NOTIFICATION TRAY AFTER READ DAYS BEFORE REMOVE https://github.com/wekan/wekan/pull/2998"
|
||||
echo -e "Number of days after a notification is read before we remove it. Default: 2."
|
||||
echo -e "Default:"
|
||||
echo -e "\t$ snap set $SNAP_NAME notification-tray-after-read-days-before-remove='2'"
|
||||
echo -e "\n"
|
||||
echo -e "BIGEVENTS DUE ETC NOTIFICATIONS https://github.com/wekan/wekan/pull/2541"
|
||||
echo -e "Big events pattern: Notify always due etc regardless of notification settings. Default: due, All: received|start|due|end, Disabled: NONE"
|
||||
echo -e "Default:"
|
||||
|
||||
@@ -48,6 +48,11 @@ REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
|
||||
REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
|
||||
REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
|
||||
|
||||
REM # ==== NOTIFICATION TRAY AFTER READ DAYS BEFORE REMOVE =====
|
||||
REM # Number of days after a notification is read before we remove it.
|
||||
REM # Default: 2
|
||||
REM SET NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2
|
||||
|
||||
REM # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
|
||||
REM # https://github.com/wekan/wekan/pull/2541
|
||||
REM # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
|
||||
|
||||
@@ -54,6 +54,11 @@
|
||||
#export MAX_IMAGE_PIXEL=1024
|
||||
#export IMAGE_COMPRESS_RATIO=80
|
||||
#---------------------------------------------------------------
|
||||
# ==== NOTIFICATION TRAY AFTER READ DAYS BEFORE REMOVE =====
|
||||
# Number of days after a notification is read before we remove it.
|
||||
# Default: 2
|
||||
#- NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2
|
||||
#---------------------------------------------------------------
|
||||
# ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
|
||||
# https://github.com/wekan/wekan/pull/2541
|
||||
# Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
|
||||
|
||||
@@ -244,6 +244,11 @@ services:
|
||||
#-MAX_IMAGE_PIXEL=1024
|
||||
#-IMAGE_COMPRESS_RATIO=80
|
||||
#---------------------------------------------------------------
|
||||
# ==== NOTIFICATION TRAY AFTER READ DAYS BEFORE REMOVE =====
|
||||
# Number of days after a notification is read before we remove it.
|
||||
# Default: 2
|
||||
#- NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2
|
||||
#---------------------------------------------------------------
|
||||
# ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
|
||||
# https://github.com/wekan/wekan/pull/2541
|
||||
# Introduced a system env var BIGEVENTS_PATTERN default as "NONE",
|
||||
|
||||
Reference in new issue
Block a user