Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3125cefd41 | ||
|
|
c27a622289 | ||
|
|
51875dc155 | ||
|
|
f9bdfa54e7 | ||
|
|
8fbee23797 | ||
|
|
153e4cc3fa |
No files matched your search
+8
-2
@@ -1,7 +1,13 @@
|
||||
[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.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,6 +1,6 @@
|
||||
[](https://gitpod.io/#https://github.com/wekan/wekan)
|
||||
|
||||
# Wekan - Open Source kanban
|
||||
# WeKan ® - Open Source kanban
|
||||
|
||||
[](https://github.com/wekan/wekan/graphs/contributors)
|
||||
[](https://quay.io/repository/wekan/wekan)
|
||||
@@ -14,19 +14,19 @@
|
||||
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_shield)
|
||||
[](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
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v5.63.0"
|
||||
appVersion: "v5.64.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -21,7 +21,7 @@ template(name='statistics')
|
||||
table
|
||||
tbody
|
||||
tr
|
||||
th Wekan {{_ 'info'}}
|
||||
th WeKan ® {{_ 'info'}}
|
||||
td {{statistics.version}}
|
||||
tr
|
||||
th {{_ 'Meteor_version'}}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
apiVersion: v2
|
||||
appVersion: "5.63"
|
||||
appVersion: "5.64"
|
||||
dependencies:
|
||||
- condition: mongodb.enabled
|
||||
name: mongodb
|
||||
|
||||
@@ -14,7 +14,7 @@ serviceAccounts:
|
||||
##
|
||||
image:
|
||||
repository: quay.io/wekan/wekan
|
||||
tag: v5.63
|
||||
tag: v5.64
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
## Configuration for wekan component
|
||||
|
||||
+3
-3
@@ -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
@@ -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.",
|
||||
|
||||
+325
-86
@@ -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,205 @@ 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
|
||||
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 : '';
|
||||
|
||||
//add comment detail
|
||||
const t = Number(i) + 1;
|
||||
ws2.addRow().values = [
|
||||
t.toString(),
|
||||
jcomment.text,
|
||||
jcomment.cardTitle,
|
||||
jmeml[jcomment.userId],
|
||||
addTZhours(jcomment.createdAt),
|
||||
addTZhours(jcomment.modifiedAt),
|
||||
|
||||
|
||||
];
|
||||
|
||||
const y = Number(i) + 4;
|
||||
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 () {});
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v5.63.0",
|
||||
"version": "v5.64.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v5.63.0",
|
||||
"version": "v5.64.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"repository": {
|
||||
|
||||
@@ -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.64</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.64">Wekan REST API v5.64</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.64</h1>
|
||||
<blockquote>
|
||||
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
|
||||
</blockquote>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: Wekan REST API
|
||||
version: v5.63
|
||||
version: v5.64
|
||||
description: |
|
||||
The REST API allows you to control and extend Wekan with ease.
|
||||
|
||||
|
||||
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 563,
|
||||
appVersion = 564,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "5.63.0~2021-10-07"),
|
||||
appMarketingVersion = (defaultText = "5.64.0~2021-10-09"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
name: wekan
|
||||
version: '5.63'
|
||||
summary: The open-source kanban
|
||||
version: '5.64'
|
||||
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.
|
||||
|
||||
Reference in new issue
Block a user