Merge branch 'devel' into copyMany

This commit is contained in:
Erik Turk 2018-02-08 13:04:43 -05:00
commit 69aeee536d
9 changed files with 62 additions and 25 deletions

View file

@ -1,8 +1,26 @@
# v0.73 2018-02-08 Wekan release
This release fixes the following bugs:
- [Fix Ubuntu snap build](https://github.com/wekan/wekan/pull/1469).
Thanks to GitHub user kubiko for contributions.
# v0.72 2018-02-07 Wekan release
This release fixes the following bugs:
- [Fix card sorting](https://github.com/wekan/wekan/pull/1465);
- [Fix import Trello board without swimlanes](https://github.com/wekan/wekan/commit/5871a478e1280818f12fcb7250b7cbccf6907cf0);
- [Fix swimlane move parameters](https://github.com/wekan/wekan/commit/fcebb2a5373d6dea41b98b530c176cbee31bee4b).
Thanks to GitHub users andresmanelli and ViViDboarder for their contributions.
# v0.71 2018-02-03 Wekan release # v0.71 2018-02-03 Wekan release
This release fixes the following bugs: This release fixes the following bugs:
- [Fix Welcome board is not editable: Added default swimlane to Welcome board](https://github.com/wekan/wekan/commit/9df3e3d26bffb2268cdcc7fa768eda60e4f0975c). - [Fix Welcome board is not editable: Added default swimlane to Welcome board](https://github.com/wekan/wekan/commit/9df3e3d26bffb2268cdcc7fa768eda60e4f0975c);
- [Fix Import Wekan board with swimlanes](https://github.com/wekan/wekan/commit/ec0a8449ba98aea708e484d386e5a209e2be8fff). - [Fix Import Wekan board with swimlanes](https://github.com/wekan/wekan/commit/ec0a8449ba98aea708e484d386e5a209e2be8fff).
Thanks to GitHub user andresmanelli for contributions. Thanks to GitHub user andresmanelli for contributions.

View file

@ -173,13 +173,13 @@ Template.cardDetailsActionsPopup.events({
'click .js-copy-many-card': Popup.open('copyManyCard'), 'click .js-copy-many-card': Popup.open('copyManyCard'),
'click .js-move-card-to-top' (evt) { 'click .js-move-card-to-top' (evt) {
evt.preventDefault(); evt.preventDefault();
const minOrder = _.min(this.list().cards().map((c) => c.sort)); const minOrder = _.min(this.list().cards(this.swimlaneId).map((c) => c.sort));
this.move(this.listId, minOrder - 1); this.move(this.swimlaneId, this.listId, minOrder - 1);
}, },
'click .js-move-card-to-bottom' (evt) { 'click .js-move-card-to-bottom' (evt) {
evt.preventDefault(); evt.preventDefault();
const maxOrder = _.max(this.list().cards().map((c) => c.sort)); const maxOrder = _.max(this.list().cards(this.swimlaneId).map((c) => c.sort));
this.move(this.listId, maxOrder + 1); this.move(this.swimlaneId, this.listId, maxOrder + 1);
}, },
'click .js-archive' (evt) { 'click .js-archive' (evt) {
evt.preventDefault(); evt.preventDefault();
@ -216,7 +216,7 @@ Template.moveCardPopup.events({
// instead from a “component” state. // instead from a “component” state.
const card = Cards.findOne(Session.get('currentCard')); const card = Cards.findOne(Session.get('currentCard'));
const newListId = this._id; const newListId = this._id;
card.move(newListId); card.move(card.swimlaneId, newListId, 0);
Popup.close(); Popup.close();
}, },
}); });

View file

@ -106,7 +106,7 @@
"card-comments-title": "Diese Karte hat %s Kommentar(e).", "card-comments-title": "Diese Karte hat %s Kommentar(e).",
"card-delete-notice": "Löschen ist unwiderruflich. Alle Aktionen die dieser Karte zugeordnet sind werden ebenfalls gelöscht.", "card-delete-notice": "Löschen ist unwiderruflich. Alle Aktionen die dieser Karte zugeordnet sind werden ebenfalls gelöscht.",
"card-delete-pop": "Alle Aktionen werden vom Aktivitätsfeed entfernt und die Karte kann nicht mehr geöffnet werden. Das Löschen kann nicht widerrufen werden!", "card-delete-pop": "Alle Aktionen werden vom Aktivitätsfeed entfernt und die Karte kann nicht mehr geöffnet werden. Das Löschen kann nicht widerrufen werden!",
"card-delete-suggest-archive": "Sie können eine Karte archivieren, um sie von dem Board zu entfernen und die Aktivitäten zu behalten.", "card-delete-suggest-archive": "Sie können eine Karte archivieren, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
"card-due": "Ende", "card-due": "Ende",
"card-due-on": "Ende am", "card-due-on": "Ende am",
"card-spent": "Aufgewendete Zeit", "card-spent": "Aufgewendete Zeit",
@ -135,8 +135,8 @@
"changePermissionsPopup-title": "Berechtigungen ändern", "changePermissionsPopup-title": "Berechtigungen ändern",
"changeSettingsPopup-title": "Einstellungen ändern", "changeSettingsPopup-title": "Einstellungen ändern",
"checklists": "Checklisten", "checklists": "Checklisten",
"click-to-star": "Klicken um dem Board einen Stern zu geben.", "click-to-star": "Klicken Sie, um das Board mit einem Stern zu markieren.",
"click-to-unstar": "Klicken um den Stern von dem Board zu entfernen.", "click-to-unstar": "Klicken Sie, um den Stern vom Board zu entfernen.",
"clipboard": "Zwischenablage oder Drag & Drop", "clipboard": "Zwischenablage oder Drag & Drop",
"close": "Schließen", "close": "Schließen",
"close-board": "Board schließen", "close-board": "Board schließen",
@ -219,7 +219,7 @@
"filter-no-label": "Kein Label", "filter-no-label": "Kein Label",
"filter-no-member": "Kein Mitglied", "filter-no-member": "Kein Mitglied",
"filter-on": "Filter ist aktiv", "filter-on": "Filter ist aktiv",
"filter-on-desc": "Sie filtern die Karten in diesem Board. Klicken um die Filter zu bearbeiten.", "filter-on-desc": "Sie filtern die Karten in diesem Board. Klicken Sie, um den Filter zu bearbeiten.",
"filter-to-selection": "Ergebnisse auswählen", "filter-to-selection": "Ergebnisse auswählen",
"fullname": "Vollständiger Name", "fullname": "Vollständiger Name",
"header-logo-title": "Zurück zur Board Seite.", "header-logo-title": "Zurück zur Board Seite.",
@ -270,7 +270,7 @@
"listMorePopup-title": "Mehr", "listMorePopup-title": "Mehr",
"link-list": "Link zu dieser Liste", "link-list": "Link zu dieser Liste",
"list-delete-pop": "Alle Aktionen werden aus dem Verlauf gelöscht. Die Liste kann nicht wiederhergestellt werden.", "list-delete-pop": "Alle Aktionen werden aus dem Verlauf gelöscht. Die Liste kann nicht wiederhergestellt werden.",
"list-delete-suggest-archive": "Listen können archiviert werden um sie aus dem Board zu entfernen und den Verlauf zu erhalten.", "list-delete-suggest-archive": "Listen können archiviert werden, um sie aus dem Board zu entfernen und den Verlauf zu erhalten.",
"lists": "Listen", "lists": "Listen",
"swimlanes": "Swimlanes", "swimlanes": "Swimlanes",
"log-out": "Ausloggen", "log-out": "Ausloggen",
@ -329,7 +329,7 @@
"save": "Speichern", "save": "Speichern",
"search": "Suchen", "search": "Suchen",
"select-color": "Farbe auswählen", "select-color": "Farbe auswählen",
"set-wip-limit-value": "Setzen einer Limite für die maximale Anzahl Aufgaben in dieser Liste", "set-wip-limit-value": "Setzen Sie ein Limit für die maximale Anzahl von Aufgaben in dieser Liste",
"setWipLimitPopup-title": "WIP-Limit setzen", "setWipLimitPopup-title": "WIP-Limit setzen",
"shortcut-assign-self": "Fügen Sie sich zur aktuellen Karte hinzu", "shortcut-assign-self": "Fügen Sie sich zur aktuellen Karte hinzu",
"shortcut-autocomplete-emoji": "Emojis vervollständigen", "shortcut-autocomplete-emoji": "Emojis vervollständigen",
@ -344,7 +344,7 @@
"sidebar-open": "Seitenleiste öffnen", "sidebar-open": "Seitenleiste öffnen",
"sidebar-close": "Seitenleiste schließen", "sidebar-close": "Seitenleiste schließen",
"signupPopup-title": "Benutzerkonto erstellen", "signupPopup-title": "Benutzerkonto erstellen",
"star-board-title": "Klicken um das Board mit einem Stern zu markieren. Es erscheint dann oben in ihrer Boardliste.", "star-board-title": "Klicken Sie, um das Board mit einem Stern zu markieren. Es erscheint dann oben in ihrer Boardliste.",
"starred-boards": "Markierte Boards", "starred-boards": "Markierte Boards",
"starred-boards-description": "Markierte Boards erscheinen oben in ihrer Boardliste.", "starred-boards-description": "Markierte Boards erscheinen oben in ihrer Boardliste.",
"subscribe": "Abonnieren", "subscribe": "Abonnieren",
@ -373,12 +373,12 @@
"watching": "Beobachten", "watching": "Beobachten",
"watching-info": "Sie werden über alle Änderungen in diesem Board benachrichtigt", "watching-info": "Sie werden über alle Änderungen in diesem Board benachrichtigt",
"welcome-board": "Willkommen-Board", "welcome-board": "Willkommen-Board",
"welcome-swimlane": "Milestone 1", "welcome-swimlane": "Meilenstein 1",
"welcome-list1": "Grundlagen", "welcome-list1": "Grundlagen",
"welcome-list2": "Fortgeschritten", "welcome-list2": "Fortgeschritten",
"what-to-do": "Was wollen Sie tun?", "what-to-do": "Was wollen Sie tun?",
"wipLimitErrorPopup-title": "Ungültiges WIP-Limit", "wipLimitErrorPopup-title": "Ungültiges WIP-Limit",
"wipLimitErrorPopup-dialog-pt1": "Die Anzahl Aufgaben in dieser Liste ist grösser als das von Ihnen definierte WIP-Limit.", "wipLimitErrorPopup-dialog-pt1": "Die Anzahl von Aufgaben in dieser Liste ist größer als das von Ihnen definierte WIP-Limit.",
"wipLimitErrorPopup-dialog-pt2": "Bitte verschieben Sie einige Aufgaben aus dieser Liste oder setzen Sie ein grösseres WIP-Limit.", "wipLimitErrorPopup-dialog-pt2": "Bitte verschieben Sie einige Aufgaben aus dieser Liste oder setzen Sie ein grösseres WIP-Limit.",
"admin-panel": "Administration", "admin-panel": "Administration",
"settings": "Einstellungen", "settings": "Einstellungen",

View file

@ -225,10 +225,9 @@ Cards.mutations({
swimlaneId, swimlaneId,
listId, listId,
boardId: list.boardId, boardId: list.boardId,
sort: sortIndex,
}; };
if (sortIndex) {
mutatedFields.sort = sortIndex;
}
return {$set: mutatedFields}; return {$set: mutatedFields};
}, },

View file

@ -82,8 +82,8 @@ Lists.helpers({
}; };
if (swimlaneId) if (swimlaneId)
selector.swimlaneId = swimlaneId; selector.swimlaneId = swimlaneId;
return Cards.find(Filter.mongoSelector(selector, return Cards.find(Filter.mongoSelector(selector),
{ sort: ['sort'] })); { sort: ['sort'] });
}, },
allCards() { allCards() {

View file

@ -23,6 +23,8 @@ export class TrelloCreator {
// Map of labels Trello ID => Wekan ID // Map of labels Trello ID => Wekan ID
this.labels = {}; this.labels = {};
// Default swimlane
this.swimlane = null;
// Map of lists Trello ID => Wekan ID // Map of lists Trello ID => Wekan ID
this.lists = {}; this.lists = {};
// Map of cards Trello ID => Wekan ID // Map of cards Trello ID => Wekan ID
@ -230,6 +232,7 @@ export class TrelloCreator {
dateLastActivity: this._now(), dateLastActivity: this._now(),
description: card.desc, description: card.desc,
listId: this.lists[card.idList], listId: this.lists[card.idList],
swimlaneId: this.swimlane,
sort: card.pos, sort: card.pos,
title: card.name, title: card.name,
// we attribute the card to its creator if available // we attribute the card to its creator if available
@ -397,6 +400,22 @@ export class TrelloCreator {
}); });
} }
createSwimlanes(boardId) {
const swimlaneToCreate = {
archived: false,
boardId,
// We are being defensing here by providing a default date (now) if the
// creation date wasn't found on the action log. This happen on old
// Wekan boards (eg from 2013) that didn't log the 'createList' action
// we require.
createdAt: this._now(),
title: 'Default',
};
const swimlaneId = Swimlanes.direct.insert(swimlaneToCreate);
Swimlanes.direct.update(swimlaneId, {$set: {'updatedAt': this._now()}});
this.swimlane = swimlaneId;
}
createChecklists(trelloChecklists) { createChecklists(trelloChecklists) {
trelloChecklists.forEach((checklist) => { trelloChecklists.forEach((checklist) => {
if (this.cards[checklist.idCard]) { if (this.cards[checklist.idCard]) {
@ -607,6 +626,7 @@ export class TrelloCreator {
this.parseActions(board.actions); this.parseActions(board.actions);
const boardId = this.createBoardAndLabels(board); const boardId = this.createBoardAndLabels(board);
this.createLists(board.lists, boardId); this.createLists(board.lists, boardId);
this.createSwimlanes(boardId);
this.createCards(board.cards, boardId); this.createCards(board.cards, boardId);
this.createChecklists(board.checklists); this.createChecklists(board.checklists);
this.importActions(board.actions, boardId); this.importActions(board.actions, boardId);

View file

@ -1,6 +1,6 @@
{ {
"name": "wekan", "name": "wekan",
"version": "0.71.0", "version": "0.73.0",
"description": "The open-source Trello-like kanban", "description": "The open-source Trello-like kanban",
"private": true, "private": true,
"scripts": { "scripts": {

View file

@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"), appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user. # The name of the app as it is displayed to the user.
appVersion = 56, appVersion = 58,
# Increment this for every release. # Increment this for every release.
appMarketingVersion = (defaultText = "0.71.0~2018-02-03"), appMarketingVersion = (defaultText = "0.73.0~2018-02-08"),
# Human-readable presentation of the app version. # Human-readable presentation of the app version.
minUpgradableAppVersion = 0, minUpgradableAppVersion = 0,

View file

@ -76,9 +76,8 @@ parts:
- node-gyp - node-gyp
- node-pre-gyp - node-pre-gyp
- fibers@2.0.0 - fibers@2.0.0
stage-packages:
- ca-certificates
build-packages: build-packages:
- ca-certificates
- apt-utils - apt-utils
- python - python
- g++ - g++
@ -118,6 +117,7 @@ parts:
install: | install: |
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/ cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/ cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
organize: organize:
README: README.wekan README: README.wekan