Add setting default NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2

to all Wekan platforms https://github.com/wekan/wekan/pull/2998

Thanks to xet7 !
This commit is contained in:
Lauri Ojansivu 2020-04-08 23:16:48 +03:00
parent 115701fa65
commit 5ebb47cb0e
12 changed files with 100 additions and 62 deletions

View file

@ -26,6 +26,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
ATTACHMENTS_STORE_PATH="" \ ATTACHMENTS_STORE_PATH="" \
MAX_IMAGE_PIXEL="" \ MAX_IMAGE_PIXEL="" \
IMAGE_COMPRESS_RATIO="" \ IMAGE_COMPRESS_RATIO="" \
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
BIGEVENTS_PATTERN=NONE \ BIGEVENTS_PATTERN=NONE \
NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \ NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
NOTIFY_DUE_AT_HOUR_OF_DAY="" \ NOTIFY_DUE_AT_HOUR_OF_DAY="" \

View file

@ -40,31 +40,29 @@ BlazeComponent.extendComponent({
voteState() { voteState() {
const card = this.currentData(); const card = this.currentData();
const userId = Meteor.userId() const userId = Meteor.userId();
let state let state;
if (card.vote) { if (card.vote) {
if (card.vote.positive) { if (card.vote.positive) {
state = _.contains(card.vote.positive, userId); state = _.contains(card.vote.positive, userId);
if (state === true) return true if (state === true) return true;
} }
if (card.vote.negative) { if (card.vote.negative) {
state = _.contains(card.vote.negative, userId); state = _.contains(card.vote.negative, userId);
if (state === true) return false if (state === true) return false;
} }
} }
return null return null;
}, },
voteCountPositive() { voteCountPositive() {
const card = this.currentData(); const card = this.currentData();
if (card.vote && card.vote.positive) if (card.vote && card.vote.positive) return card.vote.positive.length;
return card.vote.positive.length return null;
return null
}, },
voteCountNegative() { voteCountNegative() {
const card = this.currentData(); const card = this.currentData();
if (card.vote && card.vote.negative) if (card.vote && card.vote.negative) return card.vote.negative.length;
return card.vote.negative.length return null;
return null
}, },
isWatching() { isWatching() {
const card = this.currentData(); const card = this.currentData();
@ -408,17 +406,17 @@ BlazeComponent.extendComponent({
Meteor.call('toggleSystemMessages'); Meteor.call('toggleSystemMessages');
}, },
'click .js-vote'(e) { 'click .js-vote'(e) {
const forIt = $(e.target).hasClass('js-vote-positive') const forIt = $(e.target).hasClass('js-vote-positive');
let newState = null let newState = null;
if ( if (
this.voteState() == null || this.voteState() == null ||
this.voteState() == false && forIt || (this.voteState() == false && forIt) ||
this.voteState() == true && !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-set-card-color': Popup.open('setCardColor'),
'click .js-cancel-voting'(event) { 'click .js-cancel-voting'(event) {
event.preventDefault(); event.preventDefault();
this.unsetVote() this.unsetVote();
Popup.close(); Popup.close();
}, },
'click .js-move-card-to-top'(event) { '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')); 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')); 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')); autosize(this.$('.js-edit-card-assigner'));
}); });
@ -816,7 +814,7 @@ Template.copyChecklistToManyCardsPopup.events({
// copy subtasks // copy subtasks
cursor = Cards.find({ parentId: oldId }); cursor = Cards.find({ parentId: oldId });
cursor.forEach(function () { cursor.forEach(function() {
'use strict'; 'use strict';
const subtask = arguments[0]; const subtask = arguments[0];
subtask.parentId = _id; 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(); Popup.close();
Cards.remove(this._id); Cards.remove(this._id);
Utils.goBoardId(this.boardId); Utils.goBoardId(this.boardId);
@ -1003,9 +1001,8 @@ BlazeComponent.extendComponent({
'submit .edit-vote-question'(evt) { 'submit .edit-vote-question'(evt) {
evt.preventDefault(); evt.preventDefault();
const voteQuestion = evt.target.vote.value; const voteQuestion = evt.target.vote.value;
this.currentCard.setVoteQuestion(voteQuestion) this.currentCard.setVoteQuestion(voteQuestion);
Popup.close(); Popup.close();
}, },
}, },
]; ];

View file

@ -22,11 +22,20 @@ BlazeComponent.extendComponent({
const listId = targetBoard.getDefaultSubtasksListId(); const listId = targetBoard.getDefaultSubtasksListId();
//Get the full swimlane data for the parent task. //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. //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. //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) { if (title) {
const _id = Cards.insert({ const _id = Cards.insert({

View file

@ -254,6 +254,11 @@ services:
#-MAX_IMAGE_PIXEL=1024 #-MAX_IMAGE_PIXEL=1024
#-IMAGE_COMPRESS_RATIO=80 #-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 ===== # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
# https://github.com/wekan/wekan/pull/2541 # https://github.com/wekan/wekan/pull/2541
# Introduced a system env var BIGEVENTS_PATTERN default as "NONE", # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",

View file

@ -334,8 +334,8 @@ Cards.attachSchema(
'vote.end': { 'vote.end': {
type: Date, type: Date,
optional: true, optional: true,
defaultValue: null defaultValue: null,
} },
}), }),
); );
@ -728,7 +728,7 @@ Cards.helpers({
parentString(sep) { parentString(sep) {
return this.parentList() return this.parentList()
.map(function (elem) { .map(function(elem) {
return elem.title; return elem.title;
}) })
.join(sep); .join(sep);
@ -1449,11 +1449,11 @@ Cards.mutations({
$set: { $set: {
vote: { vote: {
question, question,
positive:[], positive: [],
negative:[] negative: [],
}, },
} },
} };
}, },
unsetVote() { unsetVote() {
return { return {
@ -1467,32 +1467,32 @@ Cards.mutations({
case true: case true:
// vote for it // vote for it
return { return {
$pull:{ $pull: {
"vote.negative": userId 'vote.negative': userId,
}, },
$addToSet: { $addToSet: {
"vote.positive": userId 'vote.positive': userId,
} },
} };
case false: case false:
// vote against // vote against
return { return {
$pull:{ $pull: {
"vote.positive": userId 'vote.positive': userId,
}, },
$addToSet: { $addToSet: {
"vote.negative" : userId 'vote.negative': userId,
} },
} };
default: default:
// Remove votes // Remove votes
return { return {
$pull:{ $pull: {
"vote.positive": userId, 'vote.positive': userId,
"vote.negative" : userId 'vote.negative': userId,
}, },
} };
} }
}, },
}); });
@ -1897,7 +1897,7 @@ if (Meteor.isServer) {
}); });
//New activity for card moves //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 oldListId = this.previous.listId;
const oldSwimlaneId = this.previous.swimlaneId; const oldSwimlaneId = this.previous.swimlaneId;
const oldBoardId = this.previous.boardId; 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 // 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( const modifiedAt = new Date(
new Date(value).getTime() - new Date(value).getTime() -
(action === 'endAt' ? 365 * 24 * 3600 * 1e3 : 0), (action === 'endAt' ? 365 * 24 * 3600 * 1e3 : 0),
); // set it as 1 year before ); // set it as 1 year before
const boardId = list.boardId; const boardId = list.boardId;
Lists.direct.update( Lists.direct.update(
@ -1997,7 +1997,7 @@ if (Meteor.isServer) {
JsonRoutes.add( JsonRoutes.add(
'GET', 'GET',
'/api/boards/:boardId/swimlanes/:swimlaneId/cards', '/api/boards/:boardId/swimlanes/:swimlaneId/cards',
function (req, res) { function(req, res) {
const paramBoardId = req.params.boardId; const paramBoardId = req.params.boardId;
const paramSwimlaneId = req.params.swimlaneId; const paramSwimlaneId = req.params.swimlaneId;
Authentication.checkBoardAccess(req.userId, paramBoardId); Authentication.checkBoardAccess(req.userId, paramBoardId);
@ -2007,7 +2007,7 @@ if (Meteor.isServer) {
boardId: paramBoardId, boardId: paramBoardId,
swimlaneId: paramSwimlaneId, swimlaneId: paramSwimlaneId,
archived: false, archived: false,
}).map(function (doc) { }).map(function(doc) {
return { return {
_id: doc._id, _id: doc._id,
title: doc.title, title: doc.title,
@ -2031,7 +2031,7 @@ if (Meteor.isServer) {
* title: string, * title: string,
* description: string}] * description: string}]
*/ */
JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards', function ( JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards', function(
req, req,
res, res,
) { ) {
@ -2044,7 +2044,7 @@ if (Meteor.isServer) {
boardId: paramBoardId, boardId: paramBoardId,
listId: paramListId, listId: paramListId,
archived: false, archived: false,
}).map(function (doc) { }).map(function(doc) {
return { return {
_id: doc._id, _id: doc._id,
title: doc.title, title: doc.title,
@ -2066,7 +2066,7 @@ if (Meteor.isServer) {
JsonRoutes.add( JsonRoutes.add(
'GET', 'GET',
'/api/boards/:boardId/lists/:listId/cards/:cardId', '/api/boards/:boardId/lists/:listId/cards/:cardId',
function (req, res) { function(req, res) {
const paramBoardId = req.params.boardId; const paramBoardId = req.params.boardId;
const paramListId = req.params.listId; const paramListId = req.params.listId;
const paramCardId = req.params.cardId; 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 * @param {string} [assignees] the array of maximum one ID of assignee of the new card
* @return_type {_id: string} * @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, req,
res, res,
) { ) {
@ -2205,7 +2205,7 @@ if (Meteor.isServer) {
JsonRoutes.add( JsonRoutes.add(
'PUT', 'PUT',
'/api/boards/:boardId/lists/:listId/cards/:cardId', '/api/boards/:boardId/lists/:listId/cards/:cardId',
function (req, res) { function(req, res) {
Authentication.checkUserId(req.userId); Authentication.checkUserId(req.userId);
const paramBoardId = req.params.boardId; const paramBoardId = req.params.boardId;
const paramCardId = req.params.cardId; const paramCardId = req.params.cardId;
@ -2504,7 +2504,7 @@ if (Meteor.isServer) {
JsonRoutes.add( JsonRoutes.add(
'DELETE', 'DELETE',
'/api/boards/:boardId/lists/:listId/cards/:cardId', '/api/boards/:boardId/lists/:listId/cards/:cardId',
function (req, res) { function(req, res) {
Authentication.checkUserId(req.userId); Authentication.checkUserId(req.userId);
const paramBoardId = req.params.boardId; const paramBoardId = req.params.boardId;
const paramListId = req.params.listId; const paramListId = req.params.listId;

View file

@ -931,7 +931,8 @@ if (Meteor.isServer) {
const addCronJob = _.debounce( const addCronJob = _.debounce(
Meteor.bindEnvironment(function notificationCleanupDebounced() { 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 // 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; const envRemoveAge =
process.env.NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE;
// default notifications will be removed 2 days after they are read // default notifications will be removed 2 days after they are read
const defaultRemoveAge = 2; const defaultRemoveAge = 2;
const removeAge = parseInt(envRemoveAge, 10) || defaultRemoveAge; const removeAge = parseInt(envRemoveAge, 10) || defaultRemoveAge;

View file

@ -242,6 +242,7 @@ const myCommand :Spk.Manifest.Command = (
(key = "SCROLLINERTIA", value="0"), (key = "SCROLLINERTIA", value="0"),
(key = "SCROLLAMOUNT", value="auto"), (key = "SCROLLAMOUNT", value="auto"),
(key = "CARD_OPENED_WEBHOOK_ENABLED", value="false"), (key = "CARD_OPENED_WEBHOOK_ENABLED", value="false"),
(key = "NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE", value=""),
(key = "BIGEVENTS_PATTERN", value="NONE"), (key = "BIGEVENTS_PATTERN", value="NONE"),
(key = "MATOMO_ADDRESS", value=""), (key = "MATOMO_ADDRESS", value=""),
(key = "MATOMO_SITE_ID", value=""), (key = "MATOMO_SITE_ID", value=""),

View file

@ -3,7 +3,7 @@
# All supported keys are defined here together with descriptions and default values # All supported keys are defined here together with descriptions and default values
# list of supported keys # 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 # default values
DESCRIPTION_DEBUG="Debug OIDC OAuth2 etc. Example: sudo snap set wekan debug='true'" 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="" DEFAULT_IMAGE_COMPRESS_RATIO=""
KEY_IMAGE_COMPRESS_RATIO="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" 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" DEFAULT_BIGEVENTS_PATTERN="NONE"
KEY_BIGEVENTS_PATTERN="bigevents-pattern" KEY_BIGEVENTS_PATTERN="bigevents-pattern"

View file

@ -105,6 +105,11 @@ echo -e "\t$ snap set $SNAP_NAME attachments-store-path='/var/snap/wekan/common/
echo -e "Disabled:" echo -e "Disabled:"
echo -e "\t$ snap set $SNAP_NAME attachments-store-path=''" echo -e "\t$ snap set $SNAP_NAME attachments-store-path=''"
echo -e "\n" 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 "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 "Big events pattern: Notify always due etc regardless of notification settings. Default: due, All: received|start|due|end, Disabled: NONE"
echo -e "Default:" echo -e "Default:"

View file

@ -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_LOCKOUT_PERIOD=60
REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 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 # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
REM # https://github.com/wekan/wekan/pull/2541 REM # https://github.com/wekan/wekan/pull/2541
REM # Introduced a system env var BIGEVENTS_PATTERN default as "NONE", REM # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",

View file

@ -54,6 +54,11 @@
#export MAX_IMAGE_PIXEL=1024 #export MAX_IMAGE_PIXEL=1024
#export IMAGE_COMPRESS_RATIO=80 #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 ===== # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
# https://github.com/wekan/wekan/pull/2541 # https://github.com/wekan/wekan/pull/2541
# Introduced a system env var BIGEVENTS_PATTERN default as "NONE", # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",

View file

@ -244,6 +244,11 @@ services:
#-MAX_IMAGE_PIXEL=1024 #-MAX_IMAGE_PIXEL=1024
#-IMAGE_COMPRESS_RATIO=80 #-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 ===== # ==== BIGEVENTS DUE ETC NOTIFICATIONS =====
# https://github.com/wekan/wekan/pull/2541 # https://github.com/wekan/wekan/pull/2541
# Introduced a system env var BIGEVENTS_PATTERN default as "NONE", # Introduced a system env var BIGEVENTS_PATTERN default as "NONE",