Compare commits

...
17 Commits
Author SHA1 Message Date
Lauri Ojansivu f8e5565b49 v5.65 2021-10-12 20:22:11 +03:00
Lauri Ojansivu 4a7718820c Updated translations. 2021-10-12 19:36:49 +03:00
Lauri Ojansivu c2d47cfcdb Updated ChangeLog. 2021-10-12 19:25:18 +03:00
Lauri Ojansivu 64fc2e5d8f Updated to Node.js v12.22.7. Thanks to Node.js developers. 2021-10-12 19:23:14 +03:00
Lauri Ojansivu 7c5763439c Updated ChangeLog. 2021-10-12 19:21:52 +03:00
Lauri Ojansivu d39e8bc03a Merge pull request #4052 from Emile840/master
Fix bug "if OIDC button text was customized, the default text will be added if a user click on 'sing in'"
2021-10-12 19:18:27 +03:00
Emile NDAGIJIMANA 6cd59f8ce1 Fix bug 'if OIDC button text was customized, the default text will be added if a user click on sing in' 2021-10-12 17:41:12 +02:00
Lauri Ojansivu 37a3fbf69c Updated translations. 2021-10-10 18:06:57 +03:00
Lauri Ojansivu 684fd8c2c5 Updated ChangeLog. 2021-10-10 12:15:34 +03:00
Lauri Ojansivu d481328b20 Merge pull request #4047 from Ben0it-T/master
Excel Export : fix add comments worksheet (#4045)
2021-10-10 12:10:15 +03:00
Ben0it-T e694c587e5 Excel Export : fix add comments worksheet (#4045) 2021-10-10 10:54:27 +02:00
Lauri Ojansivu 3125cefd41 v5.64 2021-10-09 14:42:03 +03:00
Lauri Ojansivu c27a622289 Update WeKan ® 2021-10-09 14:22:26 +03:00
Lauri Ojansivu 51875dc155 Updated translations. 2021-10-09 14:10:32 +03:00
Lauri Ojansivu f9bdfa54e7 Updated ChangeLog. 2021-10-09 14:04:19 +03:00
Lauri Ojansivu 8fbee23797 Merge pull request #4045 from Ben0it-T/master
Excel Export : add board description, add comments worksheet
2021-10-09 14:02:13 +03:00
Ben0it-T 153e4cc3fa Excel Export : add board description, add comments worksheet 2021-10-09 12:20:34 +02:00
29 changed files with 474 additions and 183 deletions

No files matched your search

+1 -1
View File
@@ -6,7 +6,7 @@ ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v12.22.6 \
NODE_VERSION=v12.22.7 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
+1 -1
View File
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.22.6
node-engine: 12.22.7
node-packages:
- node-gyp
- node-pre-gyp
+1 -1
View File
@@ -83,7 +83,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.22.6
node-engine: 12.22.7
node-packages:
- node-gyp
- node-pre-gyp
+1 -1
View File
@@ -3,7 +3,7 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
TRAVIS_NODE_VERSION: 12.22.6
TRAVIS_NODE_VERSION: 12.22.7
TRAVIS_NPM_VERSION: latest
before_install:
+24 -2
View File
@@ -1,7 +1,29 @@
[Mac ChangeLog](https://github.com/wekan/wekan/wiki/Mac)
Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874
# v5.65 2021-10-12 Wekan release
This release adds to following CRITICAL SECURITY UPDATES:
- [Updated to Node.js v12.22.7](https://github.com/wekan/wekan/commit/64fc2e5d8fe50115175d44c01f7fca4e668c7231).
Thanks to Node.js developers.
and fixes the following bugs:
- [Excel Export: Export only comments for cards that are not linked](https://github.com/wekan/wekan/pull/4047).
Thanks to Ben0it-T.
- [If OIDC button text was customized, the default text will be added if a user click on `Sign In`](https://github.com/wekan/wekan/pull/4052).
Thanks to Emile840.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.64 2021-10-09 WeKan ® release
This release adds the following new features:
- [Excel Export : add board description, add comments worksheet](https://github.com/wekan/wekan/pull/4045).
Thanks to Ben0it-T.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.63 2021-10-07 Wekan release
+1 -1
View File
@@ -12,7 +12,7 @@ ARG DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
DEBUG=false \
NODE_VERSION=v12.22.6 \
NODE_VERSION=v12.22.7 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
+2 -2
View File
@@ -4,7 +4,7 @@ FROM amd64/alpine:3.7 AS builder
ENV QEMU_VERSION=v4.2.0-6 \
QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.22.6 \
NODE_VERSION=v12.22.7 \
WEKAN_VERSION=latest \
WEKAN_ARCHITECTURE=arm64
@@ -40,7 +40,7 @@ LABEL maintainer="wekan"
# Set the environment variables (defaults where required)
ENV QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.22.6 \
NODE_VERSION=v12.22.7 \
NODE_ENV=production \
NPM_VERSION=latest \
WITH_API=true \
+24 -24
View File
@@ -1,6 +1,6 @@
[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/wekan/wekan)
# Wekan - Open Source kanban
# WeKan ® - Open Source kanban
[![Contributors](https://img.shields.io/github/contributors/wekan/wekan.svg "Contributors")](https://github.com/wekan/wekan/graphs/contributors)
[![Docker Repository on Quay](https://quay.io/repository/wekan/wekan/status "Docker Repository on Quay")](https://quay.io/repository/wekan/wekan)
@@ -14,19 +14,19 @@
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwekan%2Fwekan.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_shield)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4619/badge)](https://bestpractices.coreinfrastructure.org/projects/4619)
## [Translate Wekan at Transifex](https://transifex.com/wekan/wekan)
## [Translate WeKan ® at Transifex](https://transifex.com/wekan/wekan)
Translations to non-English languages are accepted only at [Transifex](https://transifex.com/wekan/wekan) using webbrowser.
New English strings of new features can be added as PRs to edge branch file wekan/i18n/en.i18n.json .
## [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues)
Please add most of your questions as GitHub issue: [Wekan Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
Please add most of your questions as GitHub issue: [WeKan ® Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
It's better than at chat where details get lost when chat scrolls up.
## Chat
[Discussions][discussions] - Wekan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
[Discussions][discussions] - WeKan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
[Wekan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
@@ -41,9 +41,9 @@ See https://github.com/wekan/wekan/issues/3874
- Please read the [FAQ](https://github.com/wekan/wekan/wiki/FAQ) first
- Please don't feed the [trolls](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-troll) and [spammers](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-spammer) that are mentioned in the FAQ :)
## About Wekan
## About WeKan ®
Wekan is an completely [Open Source][open_source] and [Free software][free_software]
WeKan ® is an completely [Open Source][open_source] and [Free software][free_software]
collaborative kanban board application with MIT license.
Whether you’re maintaining a personal todo list, planning your holidays with some friends,
@@ -51,58 +51,58 @@ or working in a team on your next revolutionary idea, Kanban boards are an unbea
to keep your things organized. They give you a visual overview of the current state of your project,
and make you productive by allowing you to focus on the few items that matter the most.
Since Wekan is a free software, you don’t have to trust us with your data and can
Since WeKan ® is a free software, you don’t have to trust us with your data and can
install Wekan on your own computer or server. In fact we encourage you to do
that by providing one-click installation on various platforms.
- Wekan is used in [most countries of the world](https://snapcraft.io/wekan).
- WeKan ® is used in [most countries of the world](https://snapcraft.io/wekan).
- Wekan largest user has 13k users using Wekan in their company.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 63 languages.
- [Features][features]: Wekan has real-time user interface.
- [Platforms][platforms]: Wekan supports many platforms.
Wekan is critical part of new platforms Wekan is currently being integrated to.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 70 languages.
- [Features][features]: WeKan ® has real-time user interface.
- [Platforms][platforms]: WeKan ® supports many platforms.
WeKan ® is critical part of new platforms Wekan is currently being integrated to.
## Requirements
- 64bit: Linux [Snap](https://github.com/wekan/wekan-snap/wiki/Install) or [Sandstorm](https://sandstorm.io) /
[Mac](https://github.com/wekan/wekan/wiki/Mac) / [Windows](https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows).
[More Platforms](https://github.com/wekan/wekan/wiki/Platforms), bundle for RasPi3 ARM and other CPUs where Node.js and MongoDB exists.
- 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM.
- 1 GB RAM minimum free for WeKan ®. Production server should have minimum total 4 GB RAM.
For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/master/docker-compose.yml): 3 frontend servers,
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
- Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted.
- SECURITY: Updating to newest Wekan version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
Old versions have security issues because of old versions Node.js etc. Only newest Wekan is supported.
Wekan on Sandstorm is not usually affected by any Standalone Wekan (Snap/Docker/Source) security issues.
- SECURITY: Updating to newest WeKan ® version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
Old versions have security issues because of old versions Node.js etc. Only newest WeKan ® is supported.
WeKan ® on Sandstorm is not usually affected by any Standalone WeKan ® (Snap/Docker/Source) security issues.
- [Reporting all new bugs immediately](https://github.com/wekan/wekan/issues).
New features and fixes are added to Wekan [many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
- [Backups](https://github.com/wekan/wekan/wiki/Backup) of Wekan database once a day miminum.
New features and fixes are added to WeKan ® [many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
- [Backups](https://github.com/wekan/wekan/wiki/Backup) of WeKan ® database once a day miminum.
Bugs, updates, users deleting list or card, harddrive full, harddrive crash etc can eat your data. There is no undo yet.
Some bug can cause Wekan board to not load at all, requiring manual fixing of database content.
Some bug can cause WeKan ® board to not load at all, requiring manual fixing of database content.
## Roadmap and Demo
[Roadmap][roadmap_wekan] - Public read-only board at Wekan demo.
[Roadmap][roadmap_wekan] - Public read-only board at WeKan ® demo.
[Developer Documentation][dev_docs]
- There is many companies and individuals contributing code to Wekan, to add features and bugfixes
- There is many companies and individuals contributing code to WeKan ®, to add features and bugfixes
[many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
- [Please add Add new Feature Requests and Bug Reports immediately](https://github.com/wekan/wekan/issues).
- [Commercial Support](https://wekan.team/commercial-support/).
We also welcome sponsors for features and bugfixes.
By working directly with Wekan you get the benefit of active maintenance and new features added by growing Wekan developer community.
By working directly with WeKan ® you get the benefit of active maintenance and new features added by growing WeKan ® developer community.
## Screenshot
[More screenshots at Features page](https://github.com/wekan/wekan/wiki/Features)
[![Screenshot of Wekan][screenshot_wekan]][roadmap_wekan]
[![Screenshot of WeKan ®][screenshot_wekan]][roadmap_wekan]
## License
Wekan is released under the very permissive [MIT license](LICENSE), and made
WeKan ® is released under the very permissive [MIT license](LICENSE), and made
with [Meteor](https://www.meteor.com).
[platforms]: https://github.com/wekan/wekan/wiki/Platforms
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v5.63.0"
appVersion: "v5.65.0"
files:
userUploads:
- README.md
+6 -6
View File
@@ -86,7 +86,7 @@ BlazeComponent.extendComponent({
});
},
userHasTeams(){
if(Meteor.user().teams && Meteor.user().teams.length > 0)
if(Meteor.user() != null && Meteor.user().teams && Meteor.user().teams.length > 0)
return true;
else
return false;
@@ -98,7 +98,7 @@ BlazeComponent.extendComponent({
return [];
},
userHasOrgs(){
if(Meteor.user().orgs && Meteor.user().orgs.length > 0)
if(Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
return true;
else
return false;
@@ -111,13 +111,13 @@ BlazeComponent.extendComponent({
},
userHasOrgsOrTeams(){
let boolUserHasOrgs;
if(Meteor.user().orgs && Meteor.user().orgs.length > 0)
if(Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
boolUserHasOrgs = true;
else
boolUserHasOrgs = false;
let boolUserHasTeams;
if(Meteor.user().teams && Meteor.user().teams.length > 0)
if(Meteor.user() != null && Meteor.user().teams && Meteor.user().teams.length > 0)
boolUserHasTeams = true;
else
boolUserHasTeams = false;
@@ -153,7 +153,7 @@ BlazeComponent.extendComponent({
// },
// });
let orgIdsUserBelongs = currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
let orgIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
if(orgIdsUserBelongs && orgIdsUserBelongs != ''){
let orgsIds = orgIdsUserBelongs.split(',');
// for(let i = 0; i < orgsIds.length; i++){
@@ -164,7 +164,7 @@ BlazeComponent.extendComponent({
query.$and[2].$or.push({'orgs.orgId': {$in : orgsIds}});
}
let teamIdsUserBelongs = currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
let teamIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
if(teamIdsUserBelongs && teamIdsUserBelongs != ''){
let teamsIds = teamIdsUserBelongs.split(',');
// for(let i = 0; i < teamsIds.length; i++){
+46
View File
@@ -6,6 +6,9 @@ const i18nTagToT9n = i18nTag => {
return i18nTag;
};
let alreadyCheck = 1;
let isCheckDone = false;
const validator = {
set(obj, prop, value) {
if (prop === 'state' && value !== 'signIn') {
@@ -166,6 +169,49 @@ Template.userFormsLayout.events({
});
}
},
'DOMSubtreeModified #at-oidc'(event){
if(alreadyCheck <= 2){
let currSetting = Settings.findOne();
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
if(alreadyCheck == 1){
alreadyCheck++;
oidcBtnElt.html("");
}
else{
alreadyCheck++;
oidcBtnElt.html(htmlvalue);
}
}
}
else{
alreadyCheck = 1;
}
},
'DOMSubtreeModified .at-form'(event){
if(alreadyCheck <= 2 && !isCheckDone){
if(document.getElementById("at-oidc") != null){
let currSetting = Settings.findOne();
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
if(alreadyCheck == 1){
alreadyCheck++;
oidcBtnElt.html("");
}
else{
alreadyCheck++;
isCheckDone = true;
oidcBtnElt.html(htmlvalue);
}
}
}
}
else{
alreadyCheck = 1;
}
},
});
Template.defaultLayout.events({
@@ -21,7 +21,7 @@ template(name='statistics')
table
tbody
tr
th Wekan {{_ 'info'}}
th WeKan ® {{_ 'info'}}
td {{statistics.version}}
tr
th {{_ 'Meteor_version'}}
+1 -1
View File
@@ -1,5 +1,5 @@
apiVersion: v2
appVersion: "5.63"
appVersion: "5.65"
dependencies:
- condition: mongodb.enabled
name: mongodb
+1 -1
View File
@@ -14,7 +14,7 @@ serviceAccounts:
##
image:
repository: quay.io/wekan/wekan
tag: v5.63
tag: v5.65
pullPolicy: IfNotPresent
## Configuration for wekan component
+5 -5
View File
@@ -159,8 +159,8 @@
"card-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Alle Aktionen, die dieser Karte zugeordnet sind, werden ebenfalls gelöscht.",
"card-delete-pop": "Alle Aktionen werden aus dem Aktivitätsfeed entfernt und die Karte kann nicht wiedereröffnet werden. Die Aktion kann nicht rückgängig gemacht werden.",
"card-delete-suggest-archive": "Sie können eine Karte ins Archiv verschieben, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-archive-pop": "Die Karte wird nach der Archivierung in dieser Liste nicht mehr sichtbar sein.",
"card-archive-suggest-cancel": "Die Karte kann später aus dem Archiv wiederhergestellt werden.",
"card-due": "fällig",
"card-due-on": "fällig am",
"card-spent": "Aufgewendete Zeit",
@@ -209,7 +209,7 @@
"deletePokerPopup-title": "Planning Poker löschen ?",
"poker-delete-pop": "Die Löschung ist permanent. Sie werden alles im Zusammenhang mit diesem Planning Poker verlieren.",
"cardDeletePopup-title": "Karte löschen?",
"cardArchivePopup-title": "Archive Card?",
"cardArchivePopup-title": "Karte archivieren?",
"cardDetailsActionsPopup-title": "Kartenaktionen",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Mitglieder",
@@ -372,8 +372,8 @@
"exportBoardPopup-title": "Board exportieren",
"exportCardPopup-title": "Karte exportieren",
"sort": "Sortieren",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sorted": "Sortiert",
"remove-sort": "Sortierung entfernen",
"sort-desc": "Zum Sortieren der Liste klicken",
"list-sort-by": "Sortieren der Liste nach:",
"list-label-modifiedAt": "Letzte Zugriffszeit",
+3 -3
View File
@@ -159,8 +159,8 @@
"card-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Alle Aktionen, die dieser Karte zugeordnet sind, werden ebenfalls gelöscht.",
"card-delete-pop": "Alle Aktionen werden aus dem Aktivitätsfeed entfernt und die Karte kann nicht wiedereröffnet werden. Die Aktion kann nicht rückgängig gemacht werden.",
"card-delete-suggest-archive": "Sie können eine Karte ins Archiv verschieben, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-archive-pop": "Die Karte wird nach ihrer Archivierung nicht in dieser Liste sichtbar sein.",
"card-archive-suggest-cancel": "Sie können die Karte später aus dem Archiv wiederherstellen.",
"card-due": "Fällig",
"card-due-on": "Fällig am",
"card-spent": "Aufgewendete Zeit",
@@ -209,7 +209,7 @@
"deletePokerPopup-title": "Planungspoker löschen?",
"poker-delete-pop": "Die Löschung ist permanent. Sie werden alles im Zusammenhang mit diesem Planungspoker verlieren.",
"cardDeletePopup-title": "Karte löschen?",
"cardArchivePopup-title": "Archive Card?",
"cardArchivePopup-title": "Karte archivieren?",
"cardDetailsActionsPopup-title": "Kartenaktionen",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Mitglieder",
+3 -3
View File
@@ -159,8 +159,8 @@
"card-delete-notice": "Verwijdering is permanent. Je raakt alles acties die gekoppeld zijn aan deze kaart kwijt.",
"card-delete-pop": "Alle acties worden verwijderd van de activiteiten feed, en er zal geen mogelijkheid zijn om de kaart opnieuw te openen. Er is geen herstelmogelijkheid.",
"card-delete-suggest-archive": "Je kunt een kaart naar Archief verplaatsen om die van het bord te verwijderen waarbij de activiteiten behouden blijven.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-archive-pop": "Kaart is na archivering niet meer zichtbaar op deze lijst.",
"card-archive-suggest-cancel": "Je kunt de kaart later terughalen vanuit het Archief.",
"card-due": "Verval",
"card-due-on": "Vervalt op ",
"card-spent": "Gespendeerde tijd",
@@ -209,7 +209,7 @@
"deletePokerPopup-title": "Planning poker verwijderen?",
"poker-delete-pop": "Verwijdering is permanent. Je verlies alle acties die gekoppeld zijn aan deze poker sessie.",
"cardDeletePopup-title": "Kaart verwijderen?",
"cardArchivePopup-title": "Archive Card?",
"cardArchivePopup-title": "Kaart archiveren?",
"cardDetailsActionsPopup-title": "Kaart actie ondernemen",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Leden",
+18 -18
View File
@@ -132,7 +132,7 @@
"auto-watch": "Automatycznie obserwuj tablice gdy zostaną stworzone",
"avatar-too-big": "Awatar jest za duży (maksymalnie 520KB)",
"back": "Wstecz",
"board-change-color": "Zmień barwę",
"board-change-color": "Zmień kolor",
"board-nb-stars": "%s odznaczeń",
"board-not-found": "Nie znaleziono tablicy",
"board-private-info": "Ta tablica będzie <strong>prywatna</strong>.",
@@ -458,7 +458,7 @@
"list-archive-cards-pop": "To usunie wszystkie karty z tej listy z tej tablicy. Aby przejrzeć karty w Archiwum i przywrócić na tablicę, kliknij \"Menu\" > \"Archiwizuj\".",
"list-move-cards": "Przenieś wszystkie karty z tej listy",
"list-select-cards": "Zaznacz wszystkie karty z tej listy",
"set-color-list": "Ustaw barwę",
"set-color-list": "Ustaw kolor",
"listActionPopup-title": "Działania na liście",
"settingsUserPopup-title": "Ustawienia konta użytkownika",
"settingsTeamPopup-title": "Ustawienia Zespołu",
@@ -533,7 +533,7 @@
"rules": "Reguły",
"search-cards": "Szukaj w tytułach kart/list oraz opisach i niestandardowych polach na tej tablicy",
"search-example": "Wpisz tekst do wyszukania i wciśnij Enter",
"select-color": "Wybierz barwę",
"select-color": "Wybierz kolor",
"select-board": "Wybierz tablicę",
"set-wip-limit-value": "Ustaw maksymalny limit kart na tej liście",
"setWipLimitPopup-title": "Ustaw limit kart na liście",
@@ -675,10 +675,10 @@
"card-end-on": "Kończy się",
"editCardReceivedDatePopup-title": "Zmień datę przyjęcia",
"editCardEndDatePopup-title": "Zmień datę zakończenia",
"setCardColorPopup-title": "Ustaw barwę",
"setCardActionsColorPopup-title": "Wybierz barwę",
"setSwimlaneColorPopup-title": "Wybierz barwę",
"setListColorPopup-title": "Wybierz barwę",
"setCardColorPopup-title": "Ustaw kolor",
"setCardActionsColorPopup-title": "Wybierz kolor",
"setSwimlaneColorPopup-title": "Wybierz kolor",
"setListColorPopup-title": "Wybierz kolor",
"assigned-by": "Przypisane przez",
"requested-by": "Zlecone przez",
"card-sorting-by-number": "Sortowanie kart wg numeru",
@@ -764,7 +764,7 @@
"r-label": "etykietę",
"r-member": "użytkownika",
"r-remove-all": "Usuń wszystkich użytkowników tej karty",
"r-set-color": "Ustaw barwę na",
"r-set-color": "Ustaw kolor na",
"r-checklist": "czeklistę",
"r-check-all": "Zaznacz wszystkie",
"r-uncheck-all": "Odznacz wszystkie",
@@ -1022,7 +1022,7 @@
"globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - gdzie *<n>* to liczba naturalna określająca liczbę kart wyświetlanych na stronie.",
"globalSearch-instructions-notes-1": "Można używać wielu kluczy w jednym zapytaniu.",
"globalSearch-instructions-notes-2": "Operatory tego samego typu są traktowane jako alternatywy. To znaczy, że zwracane są wszystkie karty, w których spełnione jest przynajmniej jedno z kryteriów.\n`__operator_list__:Dostępne __operator_list__:Wstrzymane` zwróci karty znajdujące się na listach o nazwach *Dostępne* i *Wstrzymane*.",
"globalSearch-instructions-notes-3": "Operatory różnego typu traktowane są jako suma logiczna (*AND*). Zwracane są tylko karty pasujące do wszystkich operatorów różnego typu. `__operator_list__:Dostępne __operator_label__:czerwona` zwróci tylko karty z listy *Dostępne*, które mają etykietę o barwie *czerwona*.",
"globalSearch-instructions-notes-3": "Operatory różnego typu traktowane są jako suma logiczna *AND*. Zwracane są tylko karty pasujące do wszystkich operatorów różnego typu. `__operator_list__:Dostępne __operator_label__:czerwona` zwróci tylko karty z listy *Dostępne*, które mają etykietę w kolorze *czerwonym*.",
"globalSearch-instructions-notes-3-2": "Dni można określać za pomocą liczby dodatniej lub ujemnej, albo za pomocą `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` lub `__predicate_year__` dla bieżącego okresu.",
"globalSearch-instructions-notes-4": "W kluczach wyszukiwania wielkie i małe litery można stosować zamiennie.",
"globalSearch-instructions-notes-5": "Domyślnie karty zarchiwizowane nie są przeszukiwane.",
@@ -1057,15 +1057,15 @@
"copy-swimlane": "Skopiuj ścieżkę",
"copySwimlanePopup-title": "Kopiowanie ścieżki",
"display-card-creator": "Wyświetlaj autora karty",
"wait-spinner": "Wait Spinner",
"Bounce": "Bounce Wait Spinner",
"Cube": "Cube Wait Spinner",
"Cube-Grid": "Cube-Grid Wait Spinner",
"Dot": "Dot Wait Spinner",
"Double-Bounce": "Double Bounce Wait Spinner",
"Rotateplane": "Rotateplane Wait Spinner",
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"wait-spinner": "Animowany wskaźnik postępu",
"Bounce": "Odbijanie",
"Cube": "Sześcian",
"Cube-Grid": "Sześcian-Siatka",
"Dot": "Kropki",
"Double-Bounce": "Podwójne odbicie",
"Rotateplane": "Obrót płaszczyzny",
"Scaleout": "Skalowanie",
"Wave": "Fala",
"maximize-card": "Maksymalizuj kartę",
"minimize-card": "Minimalizuj kartę",
"delete-org-warning-message": "Nie można usunąć tej organizacji. Do organizacji należy co najmniej jeden użytkownik.",
+9 -9
View File
@@ -159,8 +159,8 @@
"card-delete-notice": "彻底删除的操作不可恢复,你将会丢失该卡片相关的所有操作记录。",
"card-delete-pop": "所有的活动将从活动摘要中被移除且您将无法重新打开该卡片。此操作无法撤销。",
"card-delete-suggest-archive": "您可以移动卡片到活动以便从看板中删除并保持活动。",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-archive-pop": "归档卡片后,卡片在此列表中将不可见。",
"card-archive-suggest-cancel": "稍后你可以从归档中恢复卡片。",
"card-due": "到期",
"card-due-on": "期限",
"card-spent": "耗时",
@@ -209,7 +209,7 @@
"deletePokerPopup-title": "删除计划扑克?",
"poker-delete-pop": "永久删除。对该计划扑克的所有操作记录将会丢失。",
"cardDeletePopup-title": "彻底删除卡片?",
"cardArchivePopup-title": "Archive Card?",
"cardArchivePopup-title": "归档卡片?",
"cardDetailsActionsPopup-title": "卡片操作",
"cardLabelsPopup-title": "标签",
"cardMembersPopup-title": "成员",
@@ -372,8 +372,8 @@
"exportBoardPopup-title": "导出看板",
"exportCardPopup-title": "导出卡片",
"sort": "排序",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sorted": "已排序",
"remove-sort": "删除排序",
"sort-desc": "点此来将列表排序",
"list-sort-by": "按此来将列表排序:",
"list-label-modifiedAt": "上次访问时间",
@@ -657,14 +657,14 @@
"automatically-field-on-card": "添加字段至新卡片",
"always-field-on-card": "添加字段至所有卡片",
"showLabel-field-on-card": "在迷你卡片上显示字段标签",
"showSum-field-on-list": "Show sum of fields at top of list",
"showSum-field-on-list": "在列表顶部显示字段总和",
"yes": "是",
"no": "否",
"accounts": "账号",
"accounts-allowEmailChange": "允许邮箱变更",
"accounts-allowUserNameChange": "允许变更用户名",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"tableVisibilityMode-allowPrivateOnly": "看板可见性:仅显示私人看板",
"tableVisibilityMode": "看板可见性",
"createdAt": "创建于",
"modifiedAt": "修改时间",
"verified": "已验证",
@@ -834,7 +834,7 @@
"error-undefined": "出了点问题",
"error-ldap-login": "尝试登录时出错",
"display-authentication-method": "显示认证方式",
"oidc-button-text": "Customize the OIDC button text",
"oidc-button-text": "自定义 OIDC 按钮文本",
"default-authentication-method": "默认认证方式",
"duplicate-board": "复制看板",
"org-number": "组织数量为:",
+309 -86
View File
@@ -156,6 +156,8 @@ class ExporterExcel {
return user;
});
//init exceljs workbook
const workbook = createWorkbook();
workbook.creator = TAPi18n.__('export-board','',this.userLanguage);
@@ -364,39 +366,7 @@ class ExporterExcel {
//return new Date(curdate.setHours(curdate.getHours() + 8));
//return curdate;
}
//add blank row
ws.addRow().values = ['', '', '', '', '', ''];
//add kanban info
ws.addRow().values = [
TAPi18n.__('createdAt','',this.userLanguage),
addTZhours(result.createdAt),
TAPi18n.__('modifiedAt','',this.userLanguage),
addTZhours(result.modifiedAt),
TAPi18n.__('members','',this.userLanguage),
jmem,
];
ws.getRow(3).font = {
name: TAPi18n.__('excel-font'),
size: 10,
bold: true,
};
ws.mergeCells('F3:R3');
ws.getCell('B3').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
bold: true,
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
};
ws.getCell('D3').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
bold: true,
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
};
//cell center
function cellCenter(cellno) {
ws.getCell(cellno).alignment = {
@@ -412,13 +382,7 @@ class ExporterExcel {
wrapText: true,
};
}
cellCenter('A3');
cellCenter('B3');
cellCenter('C3');
cellCenter('D3');
cellCenter('E3');
cellLeft('F3');
ws.getRow(3).height = 20;
//all border
function allBorder(cellno) {
ws.getCell(cellno).border = {
@@ -436,12 +400,84 @@ class ExporterExcel {
},
};
}
allBorder('A3');
allBorder('B3');
allBorder('C3');
allBorder('D3');
allBorder('E3');
allBorder('F3');
//add blank row
ws.addRow().values = ['', '', '', '', '', ''];
//add board description
ws.addRow().values = [
TAPi18n.__('description','',this.userLanguage),
result.description,
];
ws.mergeCells('B3:H3');
ws.getRow(3).height = 40;
ws.getRow(3).font = {
name: TAPi18n.__('excel-font'),
size: 10,
};
ws.getCell('A3').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
bold: true,
},
};
ws.getCell(`B3`).alignment = {
wrapText: true,
vertical: 'middle',
};
cellCenter('A3');
//add blank row
ws.addRow().values = ['', '', '', '', '', ''];
//add kanban info
ws.addRow().values = [
TAPi18n.__('createdAt','',this.userLanguage),
addTZhours(result.createdAt),
TAPi18n.__('modifiedAt','',this.userLanguage),
addTZhours(result.modifiedAt),
TAPi18n.__('members','',this.userLanguage),
jmem,
];
ws.getRow(5).font = {
name: TAPi18n.__('excel-font'),
size: 10,
bold: true,
};
ws.mergeCells('F5:R5');
ws.getCell('B5').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
bold: true,
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
};
ws.getCell('D5').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
bold: true,
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
};
cellCenter('A5');
cellCenter('B5');
cellCenter('C5');
cellCenter('D5');
cellCenter('E5');
cellLeft('F5');
ws.getRow(5).height = 20;
allBorder('A5');
allBorder('B5');
allBorder('C5');
allBorder('D5');
allBorder('E5');
allBorder('F5');
//add blank row
ws.addRow().values = [
'',
@@ -483,46 +519,46 @@ class ExporterExcel {
TAPi18n.__('overtime-hours','',this.userLanguage),
TAPi18n.__('spent-time-hours','',this.userLanguage),
];
ws.getRow(5).height = 20;
allBorder('A5');
allBorder('B5');
allBorder('C5');
allBorder('D5');
allBorder('E5');
allBorder('F5');
allBorder('G5');
allBorder('H5');
allBorder('I5');
allBorder('J5');
allBorder('K5');
allBorder('L5');
allBorder('M5');
allBorder('N5');
allBorder('O5');
allBorder('P5');
allBorder('Q5');
allBorder('R5');
cellCenter('A5');
cellCenter('B5');
cellCenter('C5');
cellCenter('D5');
cellCenter('E5');
cellCenter('F5');
cellCenter('G5');
cellCenter('H5');
cellCenter('I5');
cellCenter('J5');
cellCenter('K5');
cellCenter('L5');
cellCenter('M5');
cellCenter('N5');
cellCenter('O5');
cellCenter('P5');
cellCenter('Q5');
cellCenter('R5');
ws.getRow(5).font = {
ws.getRow(7).height = 20;
allBorder('A7');
allBorder('B7');
allBorder('C7');
allBorder('D7');
allBorder('E7');
allBorder('F7');
allBorder('G7');
allBorder('H7');
allBorder('I7');
allBorder('J7');
allBorder('K7');
allBorder('L7');
allBorder('M7');
allBorder('N7');
allBorder('O7');
allBorder('P7');
allBorder('Q7');
allBorder('R7');
cellCenter('A7');
cellCenter('B7');
cellCenter('C7');
cellCenter('D7');
cellCenter('E7');
cellCenter('F7');
cellCenter('G7');
cellCenter('H7');
cellCenter('I7');
cellCenter('J7');
cellCenter('K7');
cellCenter('L7');
cellCenter('M7');
cellCenter('N7');
cellCenter('O7');
cellCenter('P7');
cellCenter('Q7');
cellCenter('R7');
ws.getRow(7).font = {
name: TAPi18n.__('excel-font'),
size: 12,
size: 10,
bold: true,
};
//add blank row
@@ -577,8 +613,12 @@ class ExporterExcel {
jcard.isOvertime ? 'true' : 'false',
jcard.spentTime,
];
const y = Number(i) + 6;
const y = Number(i) + 8;
//ws.getRow(y).height = 25;
ws.getRow(y).font = {
name: TAPi18n.__('excel-font'),
size: 10,
};
allBorder(`A${y}`);
allBorder(`B${y}`);
allBorder(`C${y}`);
@@ -614,6 +654,189 @@ class ExporterExcel {
wrapText: true,
};
}
//Activities worksheet
//init worksheet
const worksheet2 = workbook.addWorksheet(TAPi18n.__('activity','',this.userLanguage), {
properties: {
tabColor: {
argb: 'FFC0000',
},
},
pageSetup: {
paperSize: 9,
orientation: 'landscape',
},
});
//get worksheet
const ws2 = workbook.getWorksheet(TAPi18n.__('activity','',this.userLanguage));
ws2.properties.defaultRowHeight = 20;
//init columns
ws2.columns = [
{
key: 'a',
width: 14,
},
{
key: 'b',
width: 60,
},
{
key: 'c',
width: 40,
},
{
key: 'd',
width: 40,
},
{
key: 'e',
width: 30,
style: {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
},
},
{
key: 'f',
width: 30,
style: {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
},
},
];
//all border
function allBorderWs2(cellno) {
ws2.getCell(cellno).border = {
top: {
style: 'thin',
},
left: {
style: 'thin',
},
bottom: {
style: 'thin',
},
right: {
style: 'thin',
},
};
}
//add title line
ws2.mergeCells('A1:F1');
ws2.getCell('A1').value = result.title;
ws2.getCell('A1').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '20',
},
};
ws2.getCell('A1').alignment = {
vertical: 'middle',
horizontal: 'center',
wrapText: true,
};
ws2.getRow(1).height = 40;
//add blank row
ws2.addRow().values = ['', '', '', '', '', ''];
//add comment title
ws2.addRow().values = [
TAPi18n.__('number','',this.userLanguage),
TAPi18n.__('activity','',this.userLanguage),
TAPi18n.__('card','',this.userLanguage),
TAPi18n.__('owner','',this.userLanguage),
TAPi18n.__('createdAt','',this.userLanguage),
TAPi18n.__('last-modified-at','',this.userLanguage),
];
ws2.getRow(3).height = 20;
ws2.getRow(3).font = {
name: TAPi18n.__('excel-font'),
size: 10,
bold: true,
};
ws2.getRow(3).alignment = {
vertical: 'middle',
horizontal: 'center',
wrapText: true,
};
allBorderWs2('A3');
allBorderWs2('B3');
allBorderWs2('C3');
allBorderWs2('D3');
allBorderWs2('E3');
allBorderWs2('F3');
//add comment info
let commentcnt = 0;
for (const i in result.comments) {
const jcomment = result.comments[i];
//card title
const parentCard = result.cards.find(
(card) => card._id === jcomment.cardId,
);
jcomment.cardTitle = parentCard ? parentCard.title : '';
if (jcomment.cardTitle == '') {
continue;
}
//add comment detail
commentcnt++;
ws2.addRow().values = [
commentcnt.toString(),
jcomment.text,
jcomment.cardTitle,
jmeml[jcomment.userId],
addTZhours(jcomment.createdAt),
addTZhours(jcomment.modifiedAt),
];
const y = commentcnt + 3;
ws2.getRow(y).font = {
name: TAPi18n.__('excel-font'),
size: 10,
};
ws2.getCell(`A${y}`).alignment = {
vertical: 'middle',
horizontal: 'center',
wrapText: true,
};
ws2.getCell(`B${y}`).alignment = {
vertical: 'middle',
wrapText: true,
};
ws2.getCell(`C${y}`).alignment = {
vertical: 'middle',
wrapText: true,
};
ws2.getCell(`D${y}`).alignment = {
vertical: 'middle',
wrapText: true,
};
ws2.getCell(`E${y}`).alignment = {
vertical: 'middle',
wrapText: true,
};
ws2.getCell(`F${y}`).alignment = {
vertical: 'middle',
wrapText: true,
};
allBorderWs2(`A${y}`);
allBorderWs2(`B${y}`);
allBorderWs2(`C${y}`);
allBorderWs2(`D${y}`);
allBorderWs2(`E${y}`);
allBorderWs2(`F${y}`);
}
workbook.xlsx.write(res).then(function () {});
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v5.63.0",
"version": "v5.65.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v5.63.0",
"version": "v5.65.0",
"description": "Open-Source kanban",
"private": true,
"repository": {
+3 -3
View File
@@ -7,7 +7,7 @@
<meta charset="utf-8">
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>Wekan REST API v5.63</title>
<title>Wekan REST API v5.65</title>
<style>
</style>
@@ -1555,7 +1555,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 v5.63">Wekan REST API v5.63</a>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v5.65">Wekan REST API v5.65</a>
</li>
@@ -2128,7 +2128,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 v5.63</h1>
<h1 id="wekan-rest-api">Wekan REST API v5.65</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 -1
View File
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
version: v5.63
version: v5.65
description: |
The REST API allows you to control and extend Wekan with ease.
+2 -2
View File
@@ -18,8 +18,8 @@ REM Install chocolatey
choco install -y git curl python2 dotnet4.5.2 nano mongodb-4 mongoclient
curl -O https://nodejs.org/dist/v12.22.6/node-v12.22.6-x64.msi
call node-v12.22.6-x64.msi
curl -O https://nodejs.org/dist/v12.22.7/node-v12.22.7-x64.msi
call node-v12.22.7-x64.msi
call npm config -g set msvs_version 2015
call meteor npm config -g set msvs_version 2015
+1 -1
View File
@@ -30,7 +30,7 @@ do
#curl -0 -L https://npmjs.org/install.sh | sudo sh
#sudo chown -R $(id -u):$(id -g) $HOME/.npm
#sudo npm -g install n
#sudo n 12.22.6
#sudo n 12.22.7
elif [[ "$OSTYPE" == "darwin"* ]]; then
echo "macOS";
pause '1) Install XCode 2) Install Node 12.x from https://nodejs.org/en/ 3) Press [Enter] key to continue.'
+2 -2
View File
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
appVersion = 563,
appVersion = 565,
# Increment this for every release.
appMarketingVersion = (defaultText = "5.63.0~2021-10-07"),
appMarketingVersion = (defaultText = "5.65.0~2021-10-12"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
+4 -4
View File
@@ -1,8 +1,8 @@
name: wekan
version: '5.63'
summary: The open-source kanban
version: '5.65'
summary: Open Source kanban
description: |
Wekan is an open-source and collaborative kanban board application.
WeKan ® is an Open Source and collaborative kanban board application.
Whether you’re maintaining a personal todo list, planning your holidays with some friends, or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool to keep your things organized. They give you a visual overview of the current state of your project, and make you productive by allowing you to focus on the few items that matter the most.
Depending on target environment, some configuration settings might need to be adjusted.
@@ -80,7 +80,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.22.6
node-engine: 12.22.7
node-packages:
- node-gyp
- node-pre-gyp
+1 -1
View File
@@ -2,7 +2,7 @@
set -euxo pipefail
BUILD_DEPS="bsdtar gnupg wget curl bzip2 python git ca-certificates perl-Digest-SHA"
NODE_VERSION=v12.22.6
NODE_VERSION=v12.22.7
#METEOR_RELEASE=1.6.0.1 - for Stacksmith, meteor-1.8 branch that could have METEOR@1.8.1-beta.8 or newer
USE_EDGE=false
METEOR_EDGE=1.5-beta.17