summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md19
-rw-r--r--Dockerfile5
-rw-r--r--Stackerfile.yml2
-rw-r--r--client/components/lists/list.js8
-rw-r--r--docker-compose.yml6
-rw-r--r--i18n/de.i18n.json2
-rw-r--r--i18n/fr.i18n.json84
-rw-r--r--i18n/pl.i18n.json66
-rw-r--r--i18n/pt-BR.i18n.json66
-rw-r--r--i18n/ru.i18n.json12
-rw-r--r--models/cards.js4
-rw-r--r--package.json2
-rwxr-xr-xreleases/rebuild-release.sh13
-rwxr-xr-xreleases/rebuild-wekan.sh130
-rwxr-xr-xreleases/release-sandstorm.sh3
-rwxr-xr-xreleases/release-snap.sh3
-rwxr-xr-xreleases/release.sh6
-rwxr-xr-xreleases/virtualbox/start-wekan.sh4
-rw-r--r--sandstorm-pkgdef.capnp4
-rwxr-xr-xsnap-src/bin/config12
-rwxr-xr-xsnap-src/bin/wekan-help38
-rw-r--r--snapcraft.yaml2
-rwxr-xr-xstacksmith/user-scripts/build.sh1
-rwxr-xr-xstart-wekan.bat6
-rwxr-xr-xstart-wekan.sh4
25 files changed, 346 insertions, 156 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5693aca2..62279e0e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,11 +1,22 @@
-# Upcoming Wekan release
+# v2.38 2019-03-06 Wekan release
This release adds the following new features:
-- [Added a Helm Chart to the project](https://github.com/wekan/wekan/pull/2227).
- Thanks to TechnoTaff.
+- [Added a Helm Chart to the project](https://github.com/wekan/wekan/pull/2227), thanks to TechnoTaff.
+- [Added support for LDAP admin status sync](https://github.com/wekan/wekan-ldap/pull/40).
+ Examples: LDAP_SYNC_ADMIN_STATUS=true, LDAP_SYNC_ADMIN_GROUP=group1,group2 (https://github.com/wekan/wekan/commit/7e451d9033eb6162cd37de3e5ffabdc22e272948).
+ Thanks to JulianJacobi and xet7.
-Thanks to above GitHub users for their contributions.
+and fixes the following bugs:
+
+- [Fix card deletion from archive](https://github.com/wekan/wekan/commit/77754cf32f28498e550a46325d90eb41f08f8552). Thanks to andresmanelli.
+- [Fix card move with wrong swimlaneId](https://github.com/wekan/wekan/commit/1bef3a3f8ff4eac43bf97cc8b86d85e618b0e2ef). Thanks to andresmanelli.
+ NOTE: This does not yet fix card move [with Custom Field](https://github.com/wekan/wekan/issues/2233), it will be fixed later.
+- [Fix: LDAP Authentication with Recursive Group Filtering Does Not Work on Snap](https://github.com/wekan/wekan/issues/2228). Thanks to apages2.
+- [Use ubuntu:cosmic base in Dockerfile](https://github.com/wekan/wekan/commit/df00776e6ca47080435eca9a31a16fd24c0770ed). Thanks to xet7.
+- [Remove phantomjs binary from Docker/Snap/Stackerfile to reduce size](https://github.com/wekan/wekan/issues/2229). Thanks to soohwa.
+
+Thanks to above GitHub users for their contributions, and translators for their translations.
# v2.37 2019-03-04 Wekan release
diff --git a/Dockerfile b/Dockerfile
index f4ed9757..58a1b629 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -75,6 +75,8 @@ ARG LDAP_SYNC_USER_DATA
ARG LDAP_SYNC_USER_DATA_FIELDMAP
ARG LDAP_SYNC_GROUP_ROLES
ARG LDAP_DEFAULT_DOMAIN
+ARG LDAP_SYNC_ADMIN_STATUS
+ARG LDAP_SYNC_ADMIN_GROUPS
ARG LOGOUT_WITH_TIMER
ARG LOGOUT_IN
ARG LOGOUT_ON_HOURS
@@ -159,6 +161,8 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
LDAP_SYNC_USER_DATA_FIELDMAP="" \
LDAP_SYNC_GROUP_ROLES="" \
LDAP_DEFAULT_DOMAIN="" \
+ LDAP_SYNC_ADMIN_STATUS="" \
+ LDAP_SYNC_ADMIN_GROUPS="" \
LOGOUT_WITH_TIMER=false \
LOGOUT_IN="" \
LOGOUT_ON_HOURS="" \
@@ -293,6 +297,7 @@ RUN \
gosu wekan:wekan /home/wekan/.meteor/meteor npm install && \
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
+ rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs && \
chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
diff --git a/Stackerfile.yml b/Stackerfile.yml
index f4f1f655..02bebae3 100644
--- a/Stackerfile.yml
+++ b/Stackerfile.yml
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v2.37.0"
+appVersion: "v2.38.0"
files:
userUploads:
- README.md
diff --git a/client/components/lists/list.js b/client/components/lists/list.js
index 043cb77c..868be2ce 100644
--- a/client/components/lists/list.js
+++ b/client/components/lists/list.js
@@ -67,7 +67,13 @@ BlazeComponent.extendComponent({
const nCards = MultiSelection.isActive() ? MultiSelection.count() : 1;
const sortIndex = calculateIndex(prevCardDom, nextCardDom, nCards);
const listId = Blaze.getData(ui.item.parents('.list').get(0))._id;
- const swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id;
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ let swimlaneId = '';
+ const boardView = Meteor.user().profile.boardView;
+ if (boardView === 'board-view-swimlanes')
+ swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id;
+ else if ((boardView === 'board-view-lists') || (boardView === 'board-view-cal'))
+ swimlaneId = currentBoard.getDefaultSwimline()._id;
// Normally the jquery-ui sortable library moves the dragged DOM element
// to its new position, which disrupts Blaze reactive updates mechanism
diff --git a/docker-compose.yml b/docker-compose.yml
index c5eb74b0..9646a012 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -501,6 +501,12 @@ services:
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#- LDAP_DEFAULT_DOMAIN=
+ #
+ # Enable/Disable syncing of admin status based on ldap groups:
+ #- LDAP_SYNC_ADMIN_STATUS=true
+ #
+ # Comma separated list of admin group names to sync.
+ #- LDAP_SYNC_ADMIN_GROUPS=group1,group2
#---------------------------------------------------------------------
# ==== LOGOUT TIMER, probably does not work yet ====
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json
index 96a57814..2d89faaa 100644
--- a/i18n/de.i18n.json
+++ b/i18n/de.i18n.json
@@ -28,7 +28,7 @@
"act-importCard": "importiert Karte __card__ auf der Liste __list__ bei Swimlane __swimlane__ in Board __board__ ",
"act-importList": "importiert Liste __list__ bei Swimlane __swimlane__ in Board __board__ ",
"act-joinMember": "fügt Mitglied __member__ der Karte __card__ auf der Liste __list__ bei Swimlane __swimlane__ an Board __board__ hinzu",
- "act-moveCard": "verschiebe Karte __card__ von Liste __oldList__ von Swimlane __oldSwimlane__ von Board __oldBoard__ nach Liste __list__ in Swimlane __swimlane__ zu Board __board__",
+ "act-moveCard": "verschiebt Karte __card__ von Liste __oldList__ von Swimlane __oldSwimlane__ von Board __oldBoard__ nach Liste __list__ in Swimlane __swimlane__ zu Board __board__",
"act-removeBoardMember": "entfernte Mitglied __member__ vom Board __board__",
"act-restoredCard": "wiederherstellte Karte __card__ auf der Liste __list__ bei Swimlane __swimlane__ an Board __board__",
"act-unjoinMember": "entfernte Mitglied __member__ von Karte __card__ auf der Liste __list__ bei Swimlane __swimlane__ an Board __board__",
diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json
index d7e204c4..2c942ed1 100644
--- a/i18n/fr.i18n.json
+++ b/i18n/fr.i18n.json
@@ -75,11 +75,11 @@
"add-cover": "Ajouter la couverture",
"add-label": "Ajouter une étiquette",
"add-list": "Ajouter une liste",
- "add-members": "Assigner des membres",
+ "add-members": "Assigner des participants",
"added": "Ajouté le",
- "addMemberPopup-title": "Membres",
+ "addMemberPopup-title": "Participants",
"admin": "Admin",
- "admin-desc": "Peut voir et éditer les cartes, supprimer des membres et changer les paramètres du tableau.",
+ "admin-desc": "Peut voir et éditer les cartes, supprimer des participants et changer les paramètres du tableau.",
"admin-announcement": "Annonce",
"admin-announcement-active": "Annonce destinée à tous",
"admin-announcement-title": "Annonce de l'administrateur",
@@ -103,7 +103,7 @@
"archives": "Archiver",
"template": "Modèle",
"templates": "Modèles",
- "assign-member": "Affecter un membre",
+ "assign-member": "Affecter un participant",
"attached": "joint",
"attachment": "Pièce jointe",
"attachment-delete-pop": "La suppression d'une pièce jointe est définitive. Elle ne peut être annulée.",
@@ -141,9 +141,9 @@
"card-edit-attachments": "Modifier les pièces jointes",
"card-edit-custom-fields": "Éditer les champs personnalisés",
"card-edit-labels": "Gérer les étiquettes",
- "card-edit-members": "Gérer les membres",
+ "card-edit-members": "Gérer les participants",
"card-labels-title": "Modifier les étiquettes de la carte.",
- "card-members-title": "Ajouter ou supprimer des membres à la carte.",
+ "card-members-title": "Assigner ou supprimer des participants à la carte.",
"card-start": "Début",
"card-start-on": "Commence le",
"cardAttachmentsPopup-title": "Ajouter depuis",
@@ -152,7 +152,7 @@
"cardDeletePopup-title": "Supprimer la carte ?",
"cardDetailsActionsPopup-title": "Actions sur la carte",
"cardLabelsPopup-title": "Étiquettes",
- "cardMembersPopup-title": "Membres",
+ "cardMembersPopup-title": "Participants",
"cardMorePopup-title": "Plus",
"cardTemplatePopup-title": "Créer un modèle",
"cards": "Cartes",
@@ -247,7 +247,7 @@
"deleteLabelPopup-title": "Supprimer l'étiquette ?",
"description": "Description",
"disambiguateMultiLabelPopup-title": "Préciser l'action sur l'étiquette",
- "disambiguateMultiMemberPopup-title": "Préciser l'action sur le membre",
+ "disambiguateMultiMemberPopup-title": "Préciser l'action sur le participant",
"discard": "Mettre à la corbeille",
"done": "Fait",
"download": "Télécharger",
@@ -263,13 +263,13 @@
"editLabelPopup-title": "Modifier l'étiquette",
"editNotificationPopup-title": "Modifier la notification",
"editProfilePopup-title": "Modifier le profil",
- "email": "Email",
+ "email": "E-mail",
"email-enrollAccount-subject": "Un compte a été créé pour vous sur __siteName__",
"email-enrollAccount-text": "Bonjour __user__,\n\nPour commencer à utiliser ce service, il suffit de cliquer sur le lien ci-dessous.\n\n__url__\n\nMerci.",
"email-fail": "Échec de l'envoi du courriel.",
"email-fail-text": "Une erreur est survenue en tentant d'envoyer l'email",
- "email-invalid": "Adresse email incorrecte.",
- "email-invite": "Inviter par email",
+ "email-invalid": "Adresse e-mail incorrecte.",
+ "email-invite": "Inviter par e-mail",
"email-invite-subject": "__inviter__ vous a envoyé une invitation",
"email-invite-text": "Cher __user__,\n\n__inviter__ vous invite à rejoindre le tableau \"__board__\" pour collaborer.\n\nVeuillez suivre le lien ci-dessous :\n\n__url__\n\nMerci.",
"email-resetPassword-subject": "Réinitialiser votre mot de passe sur __siteName__",
@@ -280,7 +280,7 @@
"enable-wip-limit": "Activer la limite WIP",
"error-board-doesNotExist": "Ce tableau n'existe pas",
"error-board-notAdmin": "Vous devez être administrateur de ce tableau pour faire cela",
- "error-board-notAMember": "Vous devez être membre de ce tableau pour faire cela",
+ "error-board-notAMember": "Vous devez être participant de ce tableau pour faire cela",
"error-json-malformed": "Votre texte JSON n'est pas valide",
"error-json-schema": "Vos données JSON ne contiennent pas l'information appropriée dans un format correct",
"error-list-doesNotExist": "Cette liste n'existe pas",
@@ -294,7 +294,7 @@
"filter-cards": "Filtrer les cartes",
"filter-clear": "Supprimer les filtres",
"filter-no-label": "Aucune étiquette",
- "filter-no-member": "Aucun membre",
+ "filter-no-member": "Aucun participant",
"filter-no-custom-fields": "Pas de champs personnalisés",
"filter-on": "Le filtre est actif",
"filter-on-desc": "Vous êtes en train de filtrer les cartes sur ce tableau. Cliquez ici pour modifier les filtres.",
@@ -310,9 +310,9 @@
"link": "Lien",
"import-board": "importer un tableau",
"import-board-c": "Importer un tableau",
- "import-board-title-trello": "Importer le tableau depuis Trello",
- "import-board-title-wekan": "Importer le tableau depuis l'export précédent",
- "import-sandstorm-backup-warning": "Ne supprimez pas les données que vous importez du tableau exporté d'origine ou de Trello avant de vérifier que la graine peut se fermer et s'ouvrir à nouveau, ou qu'une erreur \"Tableau introuvable\" survient, sinon vous perdrez vos données.",
+ "import-board-title-trello": "Importer un tableau depuis Trello",
+ "import-board-title-wekan": "Importer un tableau depuis un export précédent",
+ "import-sandstorm-backup-warning": "Ne supprimez pas les données que vous importez d'un tableau exporté d'origine ou de Trello avant de vérifier que la graine peut se fermer et s'ouvrir à nouveau ou qu'une erreur \"Tableau introuvable\" survient, sinon vous perdrez vos données.",
"import-sandstorm-warning": "Le tableau importé supprimera toutes les données du tableau et les remplacera avec celles du tableau importé.",
"from-trello": "Depuis Trello",
"from-wekan": "Depuis un export précédent",
@@ -320,15 +320,15 @@
"import-board-instruction-wekan": "Dans votre tableau, allez dans 'Menu', puis 'Exporter un tableau', et copier le texte du fichier téléchargé.",
"import-board-instruction-about-errors": "Si une erreur survient en important le tableau, il se peut que l'import ait fonctionné, et que le tableau se trouve sur la page \"Tous les tableaux\".",
"import-json-placeholder": "Collez ici les données JSON valides",
- "import-map-members": "Faire correspondre aux membres",
- "import-members-map": "Le tableau que vous venez d'importer contient des membres. Veuillez associer les membres que vous souhaitez importer à vos utilisateurs.",
- "import-show-user-mapping": "Contrôler l'association des membres",
- "import-user-select": "Sélectionnez l'utilisateur existant que vous voulez associer à ce membre",
- "importMapMembersAddPopup-title": "Sélectionner le membre",
+ "import-map-members": "Assigner des participants",
+ "import-members-map": "Le tableau que vous venez d'importer contient des participants. Veuillez assigner les participants que vous souhaitez importer à vos utilisateurs.",
+ "import-show-user-mapping": "Contrôler l'assignation des participants",
+ "import-user-select": "Sélectionnez l'utilisateur existant que vous voulez associer à ce participant",
+ "importMapMembersAddPopup-title": "Sélectionner le participant",
"info": "Version",
"initials": "Initiales",
"invalid-date": "Date invalide",
- "invalid-time": "Temps invalide",
+ "invalid-time": "Heure invalide",
"invalid-user": "Utilisateur invalide",
"joined": "a rejoint",
"just-invited": "Vous venez d'être invité à ce tableau",
@@ -354,15 +354,15 @@
"listImportCardPopup-title": "Importer une carte Trello",
"listMorePopup-title": "Plus",
"link-list": "Lien vers cette liste",
- "list-delete-pop": "Toutes les actions seront supprimées du fil d'activité et il ne sera plus possible de les récupérer. Cette action ne peut pas être annulée.",
+ "list-delete-pop": "Toutes les actions seront supprimées du fil d'activité et il ne sera plus possible de les récupérer. Cette action est irréversible.",
"list-delete-suggest-archive": "Vous pouvez archiver une liste pour l'enlever du tableau tout en conservant son activité.",
"lists": "Listes",
"swimlanes": "Couloirs",
"log-out": "Déconnexion",
"log-in": "Connexion",
"loginPopup-title": "Connexion",
- "memberMenuPopup-title": "Préférence de membre",
- "members": "Membres",
+ "memberMenuPopup-title": "Préférence du participant",
+ "members": "Participants",
"menu": "Menu",
"move-selection": "Déplacer la sélection",
"moveCardPopup-title": "Déplacer la carte",
@@ -382,7 +382,7 @@
"normal": "Normal",
"normal-desc": "Peut voir et modifier les cartes. Ne peut pas changer les paramètres.",
"not-accepted-yet": "L'invitation n'a pas encore été acceptée",
- "notify-participate": "Recevoir les mises à jour de toutes les cartes auxquelles vous participez en tant que créateur ou que membre ",
+ "notify-participate": "Recevoir les mises à jour de toutes les cartes auxquelles vous participez en tant que créateur ou que participant ",
"notify-watch": "Recevoir les mises à jour de tous les tableaux, listes ou cartes que vous suivez",
"optional": "optionnel",
"or": "ou",
@@ -404,10 +404,10 @@
"remove-from-board": "Retirer du tableau",
"remove-label": "Retirer l'étiquette",
"listDeletePopup-title": "Supprimer la liste ?",
- "remove-member": "Supprimer le membre",
+ "remove-member": "Supprimer le participant",
"remove-member-from-card": "Supprimer de la carte",
- "remove-member-pop": "Supprimer __name__ (__username__) de __boardTitle__ ? Ce membre sera supprimé de toutes les cartes du tableau et recevra une notification.",
- "removeMemberPopup-title": "Supprimer le membre ?",
+ "remove-member-pop": "Supprimer __name__ (__username__) de __boardTitle__ ? Ce participant sera supprimé de toutes les cartes du tableau et recevra une notification.",
+ "removeMemberPopup-title": "Supprimer le participant ?",
"rename": "Renommer",
"rename-board": "Renommer le tableau",
"restore": "Restaurer",
@@ -421,13 +421,13 @@
"setWipLimitPopup-title": "Définir la limite WIP",
"shortcut-assign-self": "Affecter cette carte à vous-même",
"shortcut-autocomplete-emoji": "Auto-complétion des emoji",
- "shortcut-autocomplete-members": "Auto-complétion des membres",
+ "shortcut-autocomplete-members": "Auto-complétion des participants",
"shortcut-clear-filters": "Retirer tous les filtres",
"shortcut-close-dialog": "Fermer la boîte de dialogue",
"shortcut-filter-my-cards": "Filtrer mes cartes",
"shortcut-show-shortcuts": "Afficher cette liste de raccourcis",
- "shortcut-toggle-filterbar": "Afficher/Cacher la barre latérale des filtres",
- "shortcut-toggle-sidebar": "Afficher/Cacher la barre latérale du tableau",
+ "shortcut-toggle-filterbar": "Afficher/Masquer la barre latérale des filtres",
+ "shortcut-toggle-sidebar": "Afficher/Masquer la barre latérale du tableau",
"show-cards-minimum-count": "Afficher le nombre de cartes si la liste en contient plus de ",
"sidebar-open": "Ouvrir le panneau",
"sidebar-close": "Fermer le panneau",
@@ -447,9 +447,9 @@
"time": "Temps",
"title": "Titre",
"tracking": "Suivi",
- "tracking-info": "Vous serez notifié de toute modification concernant les cartes pour lesquelles vous êtes impliqué en tant que créateur ou membre.",
+ "tracking-info": "Vous serez notifié de toute modification concernant les cartes pour lesquelles vous êtes impliqué en tant que créateur ou participant.",
"type": "Type",
- "unassign-member": "Retirer le membre",
+ "unassign-member": "Retirer le participant",
"unsaved-description": "Vous avez une description non sauvegardée",
"unwatch": "Arrêter de suivre",
"upload": "Télécharger",
@@ -480,7 +480,7 @@
"invite": "Inviter",
"invite-people": "Inviter une personne",
"to-boards": "Au(x) tableau(x)",
- "email-addresses": "Adresses email",
+ "email-addresses": "Adresses mail",
"smtp-host-description": "L'adresse du serveur SMTP qui gère vos mails.",
"smtp-port-description": "Le port des mails sortants du serveur SMTP.",
"smtp-tls-description": "Activer la gestion de TLS sur le serveur SMTP",
@@ -494,7 +494,7 @@
"invitation-code": "Code d'invitation",
"email-invite-register-subject": "__inviter__ vous a envoyé une invitation",
"email-invite-register-text": "Cher __user__,\n\n__inviter__ vous invite à le rejoindre sur le tableau kanban pour collaborer.\n\nVeuillez suivre le lien ci-dessous :\n__url__\n\nVotre code d'invitation est : __icode__\n\nMerci.",
- "email-smtp-test-subject": "Email de test SMTP",
+ "email-smtp-test-subject": "E-mail de test SMTP",
"email-smtp-test-text": "Vous avez envoyé un mail avec succès",
"error-invitation-code-not-exist": "Ce code d'invitation n'existe pas.",
"error-notAuthorized": "Vous n'êtes pas autorisé à accéder à cette page.",
@@ -592,8 +592,8 @@
"r-when-a-label-is": "Quand une étiquette est",
"r-when-the-label-is": "Quand l'étiquette est",
"r-list-name": "Nom de la liste",
- "r-when-a-member": "Quand un membre est",
- "r-when-the-member": "Quand le membre",
+ "r-when-a-member": "Quand un participant est",
+ "r-when-the-member": "Quand le participant",
"r-name": "nom",
"r-when-a-attach": "Quand une pièce jointe",
"r-when-a-checklist": "Quand une checklist est",
@@ -614,7 +614,7 @@
"r-add": "Ajouter",
"r-remove": "Supprimer",
"r-label": "étiquette",
- "r-member": "membre",
+ "r-member": "participant",
"r-remove-all": "Supprimer tous les membres de la carte",
"r-set-color": "Définir la couleur à",
"r-checklist": "checklist",
@@ -644,9 +644,9 @@
"r-create-card": "Créer une nouvelle carte",
"r-in-list": "dans la liste",
"r-in-swimlane": "Dans le couloir",
- "r-d-add-member": "Ajouter un membre",
- "r-d-remove-member": "Supprimer un membre",
- "r-d-remove-all-member": "Supprimer tous les membres",
+ "r-d-add-member": "Ajouter un participant",
+ "r-d-remove-member": "Supprimer un participant",
+ "r-d-remove-all-member": "Supprimer tous les participants",
"r-d-check-all": "Cocher tous les éléments d'une liste",
"r-d-uncheck-all": "Décocher tous les éléments d'une liste",
"r-d-check-one": "Cocher l'élément",
diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json
index 292c966c..74da5b1c 100644
--- a/i18n/pl.i18n.json
+++ b/i18n/pl.i18n.json
@@ -1,37 +1,37 @@
{
"accept": "Akceptuj",
"act-activity-notify": "Powiadomienia aktywności",
- "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createBoard": "created board __board__",
- "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createList": "added list __list__ to board __board__",
- "act-addBoardMember": "added member __member__ to board __board__",
- "act-archivedBoard": "Board __board__ moved to Archive",
- "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
- "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
- "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
- "act-importBoard": "imported board __board__",
- "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
- "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-moveCard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeBoardMember": "removed member __member__ from board __board__",
- "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addAttachment": "Dodano załącznik __attachment__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-deleteAttachment": "Usunięto załącznik __attachment__ na karcie __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-addSubtask": "Dodane podzadanie __subtask__ na karcie __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-addLabel": "Dodano etykietę __label__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-removeLabel": "Usunięto etykietę __label__ z karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-addChecklist": "Dodano listę zadań __checklist__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-addChecklistItem": "Dodano element listy zadań __checklistItem__ do listy zadań __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-removeChecklist": "Usunięto listę zadań __checklist__ z karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-removeChecklistItem": "Usunięto element listy zadań __checklistItem__ z listy zadań __checkList__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-checkedItem": "Zaznaczono __checklistItem__ na liście zadań __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-uncheckedItem": "Odznaczono __checklistItem__ na liście __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-completeChecklist": "Wykonano wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
+ "act-uncompleteChecklist": "Wycofano ukończenie wykonania listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
+ "act-addComment": "Dodano komentarz na karcie __card__: __comment__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-createBoard": "Utworzono tablicę __board__",
+ "act-createCard": "Utworzono kartę __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-createCustomField": "Utworzono niestandardowe pole __customField__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
+ "act-createList": "Dodano listę __list__ do tablicy __board__",
+ "act-addBoardMember": "Dodano użytykownika __member__ do tablicy __board__",
+ "act-archivedBoard": "Tablica __board__ została przeniesiona do Archiwum",
+ "act-archivedCard": "Karta __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__ została przeniesiona do Archiwum",
+ "act-archivedList": "Lista __list__ na diagramie czynności __swimlane__ na tablicy __board__ została przeniesiona do Archiwum",
+ "act-archivedSwimlane": "Diagram czynności __swimlane__ na tablicy __board__ został przeniesiony do Archiwum",
+ "act-importBoard": "Zaimportowano tablicę __board__",
+ "act-importCard": "Zaimportowano kartę __card__ do listy __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-importList": "Zaimportowano listę __list__ na diagram czynności __swimlane__ do tablicy __board__",
+ "act-joinMember": "Dodano użytkownika __member__ do karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-moveCard": "Przeniesiono kartę __card__ z listy __oldList__ na diagramie czynności __oldSwimlane__ na tablicy __oldBoard__ do listy __listy__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-removeBoardMember": "Usunięto użytkownika __member__ z tablicy __board__",
+ "act-restoredCard": "Przywrócono kartę __card__ na listę __list__ na diagram czynności__ na tablicy __board__",
+ "act-unjoinMember": "Usunięto użytkownika __member__ z karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Akcje",
@@ -56,14 +56,14 @@
"activity-unchecked-item": "odznaczono %s w liście zadań %s z %s",
"activity-checklist-added": "dodał(a) listę zadań do %s",
"activity-checklist-removed": "usunięto listę zadań z %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "Wykonano wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
"activity-checklist-uncompleted": "nieukończono listy zadań %s z %s",
"activity-checklist-item-added": "dodał(a) zadanie '%s' do %s",
"activity-checklist-item-removed": "usunięto element z listy zadań '%s' w %s",
"add": "Dodaj",
"activity-checked-item-card": "zaznaczono %s w liście zadań %s",
"activity-unchecked-item-card": "odznaczono %s w liście zadań %s",
- "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed-card": "Wykonano wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
"activity-checklist-uncompleted-card": "nieukończono listy zadań %s",
"add-attachment": "Dodaj załącznik",
"add-board": "Dodaj tablicę",
diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json
index 61565ce1..e04e71db 100644
--- a/i18n/pt-BR.i18n.json
+++ b/i18n/pt-BR.i18n.json
@@ -1,37 +1,37 @@
{
"accept": "Aceitar",
"act-activity-notify": "Notificação de atividade",
- "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createBoard": "created board __board__",
- "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createList": "added list __list__ to board __board__",
- "act-addBoardMember": "added member __member__ to board __board__",
- "act-archivedBoard": "Board __board__ moved to Archive",
- "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
- "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
- "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
- "act-importBoard": "imported board __board__",
- "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
- "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-moveCard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-removeBoardMember": "removed member __member__ from board __board__",
- "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addAttachment": "adicionado anexo __attachment__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-deleteAttachment": "excluido anexo __attachment__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addSubtask": "adicionada subtarefa __subtask__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addLabel": "Adicionada etiqueta __label__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-removeLabel": "Removida etiqueta __label__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addChecklist": "adicionada lista de verificação __checklist__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addChecklistItem": "adicionado o item __checklistItem__ a lista de verificação__checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-removeChecklist": "emovida a lista de verificação __checklist__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-removeChecklistItem": "removido item __checklistItem__ da lista de verificação __checkList__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-checkedItem": "marcado __checklistItem__ na lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-uncheckedItem": "desmarcado __checklistItem__ na lista __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-completeChecklist": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-uncompleteChecklist": "lista de verificação incompleta __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addComment": "comentou no cartão __card__: __comment__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-createBoard": "criado quadro__board__",
+ "act-createCard": "criado cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-createCustomField": "criado campo customizado __customField__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-createList": "adicionada lista __list__ ao quadro __board__",
+ "act-addBoardMember": "adicionado membro __member__ ao quadro __board__",
+ "act-archivedBoard": "Quadro __board__ foi Arquivado",
+ "act-archivedCard": "Cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__ foi Arquivado",
+ "act-archivedList": "Lista __list__ em raia __swimlane__ no quadro __board__ foi Arquivada",
+ "act-archivedSwimlane": "Raia __swimlane__ no quadro __board__ foi Arquivada",
+ "act-importBoard": "importado quadro __board__",
+ "act-importCard": "importado cartão __card__ para lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-importList": "importada lista __list__ para raia __swimlane__ no quadro __board__",
+ "act-joinMember": "adicionado membro __member__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-moveCard": "movido cartão __card__ da lista __oldList__ em raia __oldSwimlane__ no quadro __oldBoard__ para lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-removeBoardMember": "removido membro __member__ do quadro __board__",
+ "act-restoredCard": "restaurado cartão __card__ a lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-unjoinMember": "removido membro __member__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Ações",
@@ -56,14 +56,14 @@
"activity-unchecked-item": "desmarcado %s na lista de verificação %s de %s",
"activity-checklist-added": "Adicionada lista de verificação a %s",
"activity-checklist-removed": "removida a lista de verificação de %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"activity-checklist-uncompleted": "não-completada a lista de verificação %s de %s",
"activity-checklist-item-added": "adicionado o item de lista de verificação para '%s' em %s",
"activity-checklist-item-removed": "removida o item de lista de verificação de '%s' na %s",
"add": "Novo",
"activity-checked-item-card": "marcaddo %s na lista de verificação %s",
"activity-unchecked-item-card": "desmarcado %s na lista de verificação %s",
- "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed-card": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"activity-checklist-uncompleted-card": "não-completada a lista de verificação %s",
"add-attachment": "Adicionar Anexos",
"add-board": "Adicionar Quadro",
diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json
index 2819408d..0db71a82 100644
--- a/i18n/ru.i18n.json
+++ b/i18n/ru.i18n.json
@@ -15,22 +15,22 @@
"act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createBoard": "created board __board__",
+ "act-createBoard": "создал доску __board__",
"act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
- "act-createList": "added list __list__ to board __board__",
- "act-addBoardMember": "added member __member__ to board __board__",
+ "act-createList": "добавил список __list__ на доску __board__",
+ "act-addBoardMember": "добавил участника __member__ на доску __board__",
"act-archivedBoard": "Доска __board__ перемещена в Архив",
- "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedCard": "Карточка __card__ из списка __list__ с дорожки __swimlane__ доски __board__ перемещена в Архив",
"act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
"act-archivedSwimlane": "Дорожка __swimlane__ на доске __board__ перемещена в Архив",
"act-importBoard": "импортировал доску __board__",
"act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
- "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-importList": "импортировал список __list__ на дорожку __swimlane__ доски __board__",
"act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-moveCard": "переместил карточку __card__ из списка __oldList__ с дорожки __oldSwimlane__ доски __oldBoard__ в список __list__ на дорожку __swimlane__ доски __board__",
"act-removeBoardMember": "удалил участника __member__ с доски __board__",
- "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-restoredCard": "восстановил карточку __card__ в список __list__ на дорожку __swimlane__ доски __board__",
"act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
diff --git a/models/cards.js b/models/cards.js
index cf64cd9b..43d2bbfe 100644
--- a/models/cards.js
+++ b/models/cards.js
@@ -1421,8 +1421,8 @@ function cardRemover(userId, doc) {
Checklists.remove({
cardId: doc._id,
});
- Subtasks.remove({
- cardId: doc._id,
+ Cards.remove({
+ parentId: doc._id,
});
CardComments.remove({
cardId: doc._id,
diff --git a/package.json b/package.json
index 46375210..9ea32773 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v2.37.0",
+ "version": "v2.38.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
diff --git a/releases/rebuild-release.sh b/releases/rebuild-release.sh
index 9000334b..ce3d445d 100755
--- a/releases/rebuild-release.sh
+++ b/releases/rebuild-release.sh
@@ -5,11 +5,14 @@
rm -rf packages
mkdir -p ~/repos/wekan/packages
cd ~/repos/wekan/packages
- git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
- git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
- git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
- git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
- git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
+ git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
+ git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
+ git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
+ git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
+ git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
+ git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
+ mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
+ mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "sed at macOS";
diff --git a/releases/rebuild-wekan.sh b/releases/rebuild-wekan.sh
new file mode 100755
index 00000000..ed439696
--- /dev/null
+++ b/releases/rebuild-wekan.sh
@@ -0,0 +1,130 @@
+#!/bin/bash
+
+echo "Note: If you use other locale than en_US.UTF-8 , you need to additionally install en_US.UTF-8"
+echo " with 'sudo dpkg-reconfigure locales' , so that MongoDB works correctly."
+echo " You can still use any other locale as your main locale."
+
+X64NODE="https://releases.wekan.team/node-v8.11.3-linux-x64.tar.gz"
+
+function pause(){
+ read -p "$*"
+}
+
+echo
+PS3='Please enter your choice: '
+options=("Install Wekan dependencies" "Build Wekan" "Quit")
+select opt in "${options[@]}"
+do
+ case $opt in
+ "Install Wekan dependencies")
+
+ if [[ "$OSTYPE" == "linux-gnu" ]]; then
+ echo "Linux";
+
+ if [ "$(grep -Ei 'buntu|mint' /etc/*release)" ]; then
+ sudo apt install -y build-essential git curl wget
+# sudo apt -y install nodejs npm
+# sudo npm -g install n
+# sudo n 8.11.3
+ fi
+
+# if [ "$(grep -Ei 'debian' /etc/*release)" ]; then
+# sudo apt install -y build-essential git curl wget
+# echo "Debian, or Debian on Windows Subsystem for Linux"
+# curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
+# sudo apt install -y nodejs
+# fi
+
+ # TODO: Add Sandstorm for version of Node.js install
+ #MACHINE_TYPE=`uname -m`
+ #if [ ${MACHINE_TYPE} == 'x86_64' ]; then
+ # # 64-bit stuff here
+ # wget ${X64NODE}
+ # sudo tar -C /usr/local --strip-components 1 -xzf ${X64NODE}
+ #elif [ ${MACHINE_TYPE} == '32bit' ]; then
+ # echo "TODO: 32-bit Linux install here"
+ # exit
+ #fi
+ elif [[ "$OSTYPE" == "darwin"* ]]; then
+ echo "macOS";
+ pause '1) Install XCode 2) Install Node 8.x from https://nodejs.org/en/ 3) Press [Enter] key to continue.'
+ elif [[ "$OSTYPE" == "cygwin" ]]; then
+ # POSIX compatibility layer and Linux environment emulation for Windows
+ echo "TODO: Add Cygwin";
+ exit;
+ elif [[ "$OSTYPE" == "msys" ]]; then
+ # Lightweight shell and GNU utilities compiled for Windows (part of MinGW)
+ echo "TODO: Add msys on Windows";
+ exit;
+ elif [[ "$OSTYPE" == "win32" ]]; then
+ # I'm not sure this can happen.
+ echo "TODO: Add Windows";
+ exit;
+ elif [[ "$OSTYPE" == "freebsd"* ]]; then
+ echo "TODO: Add FreeBSD";
+ exit;
+ else
+ echo "Unknown"
+ echo ${OSTYPE}
+ exit;
+ fi
+
+ ## Latest npm with Meteor 1.6
+ sudo npm -g install npm
+ sudo npm -g install node-gyp
+ # Latest fibers for Meteor 1.6
+ sudo npm -g install fibers@2.0.0
+ # Install Meteor, if it's not yet installed
+ curl https://install.meteor.com | bash
+# mkdir ~/repos
+# cd ~/repos
+# git clone https://github.com/wekan/wekan.git
+# cd wekan
+# git checkout devel
+ break
+ ;;
+ "Build Wekan")
+ echo "Building Wekan."
+ cd ~/repos/wekan
+ rm -rf packages
+ mkdir -p ~/repos/wekan/packages
+ cd ~/repos/wekan/packages
+ git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
+ git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
+ git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
+ git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
+ git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
+ if [[ "$OSTYPE" == "darwin"* ]]; then
+ echo "sed at macOS";
+ sed -i '' 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
+ else
+ echo "sed at ${OSTYPE}"
+ sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
+ fi
+
+ cd ~/repos/wekan
+ rm -rf node_modules
+ meteor npm install
+ rm -rf .build
+ meteor build .build --directory
+ cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
+ #Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
+ #https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
+ #https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
+ #cd ~/repos/wekan/.build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
+ #rm -rf node_modules/bcrypt
+ #meteor npm install bcrypt
+ cd ~/repos/wekan/.build/bundle/programs/server
+ rm -rf node_modules
+ meteor npm install
+ #meteor npm install bcrypt
+ cd ~/repos
+ echo Done.
+ break
+ ;;
+ "Quit")
+ break
+ ;;
+ *) echo invalid option;;
+ esac
+done
diff --git a/releases/release-sandstorm.sh b/releases/release-sandstorm.sh
index e696eab4..89dfc4fc 100755
--- a/releases/release-sandstorm.sh
+++ b/releases/release-sandstorm.sh
@@ -12,7 +12,8 @@ cd ~/repos
cd ~/repos/wekan
meteor-spk pack wekan-$1.spk
spk publish wekan-$1.spk
-scp wekan-$1.spk x2:/var/snap/wekan/common/releases.wekan.team/
+#scp wekan-$1.spk x2:/var/snap/wekan/common/releases.wekan.team/
+scp wekan-$1.spk x2:/var/www/releases.wekan.team/
mv wekan-$1.spk ..
# Delete old stuff
diff --git a/releases/release-snap.sh b/releases/release-snap.sh
index 127334c3..6ef37bff 100755
--- a/releases/release-snap.sh
+++ b/releases/release-snap.sh
@@ -22,5 +22,6 @@ cd ~/repos/wekan
sudo snap install --dangerous wekan_$1_amd64.snap
echo "Now you can test local installed snap."
snapcraft push wekan_$1_amd64.snap
-scp wekan_$1_amd64.snap x2:/var/snap/wekan/common/releases.wekan.team/
+#scp wekan_$1_amd64.snap x2:/var/snap/wekan/common/releases.wekan.team/
+scp wekan_$1_amd64.snap x2:/var/www/releases.wekan.team/
mv wekan_$1_amd64.snap ..
diff --git a/releases/release.sh b/releases/release.sh
index 85c60b17..3206b7f1 100755
--- a/releases/release.sh
+++ b/releases/release.sh
@@ -1,9 +1,7 @@
# Usage: ./release.sh 1.36
# Build Sandstorm
-cd ~/repos/wekan
-./releases/release-sandstorm.sh $1
+./release-sandstorm.sh $1
# Build Snap
-cd ~/repos/wekan
-./releases/release-snap.sh $1
+./release-snap.sh $1
diff --git a/releases/virtualbox/start-wekan.sh b/releases/virtualbox/start-wekan.sh
index e04209d0..08c79778 100755
--- a/releases/virtualbox/start-wekan.sh
+++ b/releases/virtualbox/start-wekan.sh
@@ -247,6 +247,10 @@
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#export LDAP_DEFAULT_DOMAIN=
+ # Enable/Disable syncing of admin status based on ldap groups:
+ #export LDAP_SYNC_ADMIN_STATUS=true
+ # Comma separated list of admin group names.
+ #export LDAP_SYNC_ADMIN_GROUPS=group1,group2
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#export LOGOUT_WITH_TIMER=
diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp
index 4933796e..8ba296e4 100644
--- a/sandstorm-pkgdef.capnp
+++ b/sandstorm-pkgdef.capnp
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
- appVersion = 239,
+ appVersion = 240,
# Increment this for every release.
- appMarketingVersion = (defaultText = "2.37.0~2019-03-04"),
+ appMarketingVersion = (defaultText = "2.38.0~2019-03-06"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
diff --git a/snap-src/bin/config b/snap-src/bin/config
index 9945cd5a..3e32c221 100755
--- a/snap-src/bin/config
+++ b/snap-src/bin/config
@@ -3,7 +3,7 @@
# All supported keys are defined here together with descriptions and default values
# list of supported keys
-keys="DEBUG MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API EMAIL_NOTIFICATION_TIMEOUT CORS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED 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_EMAIL_MAP 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_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 LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD"
+keys="DEBUG MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API EMAIL_NOTIFICATION_TIMEOUT CORS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED 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_EMAIL_MAP 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_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 LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD"
# default values
DESCRIPTION_DEBUG="Debug OIDC OAuth2 etc. Example: sudo snap set wekan debug='true'"
@@ -264,7 +264,7 @@ KEY_LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT="ldap-group-filter-member-format"
DESCRIPTION_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-group-name. Default: ''"
DEFAULT_LDAP_GROUP_FILTER_GROUP_NAME=""
-KEY_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-member-format"
+KEY_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-member-name"
DESCRIPTION_LDAP_UNIQUE_IDENTIFIER_FIELD="This field is sometimes class GUID (Globally Unique Identifier)"
DEFAULT_LDAP_UNIQUE_IDENTIFIER_FIELD=""
@@ -314,6 +314,14 @@ DESCRIPTION_LDAP_SYNC_GROUP_ROLES="ldap-sync-group-roles . Default: '' (empty)."
DEFAULT_LDAP_SYNC_GROUP_ROLES=""
KEY_LDAP_SYNC_GROUP_ROLES="ldap-sync-group-roles"
+DESCRIPTION_LDAP_SYNC_ADMIN_STATUS="Enable/Disable syncing of admin status based on LDAP groups. Example: true"
+DEFAULT_LDAP_SYNC_ADMIN_STATUS=""
+KEY_LDAP_SYNC_ADMIN_STATUS="ldap-sync-admin-status"
+
+DESCRIPTION_LDAP_SYNC_ADMIN_GROUPS="Comma separated list of admin group names to sync. Example: group1, group2"
+DEFAULT_LDAP_SYNC_ADMIN_GROUPS=""
+KEY_LDAP_SYNC_ADMIN_GROUPS="ldap-sync-admin-groups"
+
DESCRIPTION_LDAP_DEFAULT_DOMAIN="The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP"
DEFAULT_LDAP_DEFAULT_DOMAIN=""
KEY_LDAP_DEFAULT_DOMAIN="ldap-default-domain"
diff --git a/snap-src/bin/wekan-help b/snap-src/bin/wekan-help
index 8d88527f..e1945357 100755
--- a/snap-src/bin/wekan-help
+++ b/snap-src/bin/wekan-help
@@ -297,22 +297,28 @@ echo -e "Ldap Default Domain."
echo -e "The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP:"
echo -e "\t$ snap set $SNAP_NAME ldap-default-domain=''"
echo -e "\n"
-# echo -e "Logout with timer."
-# echo -e "Enable or not the option that allows to disconnect an user after a given time:"
-# echo -e "\t$ snap set $SNAP_NAME logout-with-timer='true'"
-# echo -e "\n"
-# echo -e "Logout in."
-# echo -e "Logout in how many days:"
-# echo -e "\t$ snap set $SNAP_NAME logout-in='1'"
-# echo -e "\n"
-# echo -e "Logout on hours."
-# echo -e "Logout in how many hours:"
-# echo -e "\t$ snap set $SNAP_NAME logout-on-hours='9'"
-# echo -e "\n"
-# echo -e "Logout on minutes."
-# echo -e "Logout in how many minutes:"
-# echo -e "\t$ snap set $SNAP_NAME logout-on-minutes='5'"
-# echo -e "\n"
+echo -e "Enable/Disable syncing of admin status based on LDAP groups."
+echo -e "\t$ snap set $SNAP_NAME ldap-sync-admin-status='true'"
+echo -e "\n"
+echo -e "Comma separated list of admin group names to sync."
+echo -e "\t$ snap set $SNAP_NAME ldap-sync-admin-groups='group1,group2'"
+echo -e "\n"
+echo -e "Logout with timer."
+echo -e "Enable or not the option that allows to disconnect an user after a given time:"
+echo -e "\t$ snap set $SNAP_NAME logout-with-timer='true'"
+echo -e "\n"
+echo -e "Logout in."
+echo -e "Logout in how many days:"
+echo -e "\t$ snap set $SNAP_NAME logout-in='1'"
+echo -e "\n"
+echo -e "Logout on hours."
+echo -e "Logout in how many hours:"
+echo -e "\t$ snap set $SNAP_NAME logout-on-hours='9'"
+echo -e "\n"
+echo -e "Logout on minutes."
+echo -e "Logout in how many minutes:"
+echo -e "\t$ snap set $SNAP_NAME logout-on-minutes='5'"
+echo -e "\n"
echo -e "Default authentication method."
echo -e "The default authentication method used if a user does not exist to create and authenticate. Method can be password or ldap."
echo -e "\t$ snap set $SNAP_NAME default-authentication-method='ldap'"
diff --git a/snapcraft.yaml b/snapcraft.yaml
index be6d0586..07c65e5a 100644
--- a/snapcraft.yaml
+++ b/snapcraft.yaml
@@ -206,7 +206,7 @@ parts:
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
- execstack --clear-execstack $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
+ rm $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
organize:
README: README.wekan
prime:
diff --git a/stacksmith/user-scripts/build.sh b/stacksmith/user-scripts/build.sh
index 2c55d4f0..86283202 100755
--- a/stacksmith/user-scripts/build.sh
+++ b/stacksmith/user-scripts/build.sh
@@ -92,6 +92,7 @@ sudo -u wekan ${meteor} npm install
sudo -u wekan ${meteor} build --directory /home/wekan/app_build
sudo cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js
sudo chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js
+sudo rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
cd /home/wekan/app_build/bundle/programs/server/
sudo npm install
sudo chown -R wekan:wekan ./node_modules
diff --git a/start-wekan.bat b/start-wekan.bat
index eebfa607..229bf2db 100755
--- a/start-wekan.bat
+++ b/start-wekan.bat
@@ -248,6 +248,12 @@ REM # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create
REM # example :
REM SET LDAP_DEFAULT_DOMAIN=
+REM # Enable/Disable syncing of admin status based on ldap groups:
+REM SET LDAP_SYNC_ADMIN_STATUS=true
+
+REM # Comma separated list of admin group names to sync.
+REM SET LDAP_SYNC_ADMIN_GROUPS=group1,group2
+
REM ------------------------------------------------
REM # LOGOUT_WITH_TIMER : Enables or not the option logout with timer
diff --git a/start-wekan.sh b/start-wekan.sh
index 7b7cd6a9..78084c1c 100755
--- a/start-wekan.sh
+++ b/start-wekan.sh
@@ -265,6 +265,10 @@ function wekan_repo_check(){
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#export LDAP_DEFAULT_DOMAIN=
+ # Enable/Disable syncing of admin status based on ldap groups:
+ #export LDAP_SYNC_ADMIN_STATUS=true
+ # Comma separated list of admin group names to sync.
+ #export LDAP_SYNC_ADMIN_GROUPS=group1,group2
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#export LOGOUT_WITH_TIMER=