diff options
author | Maxime Quandalle <maxime@quandalle.com> | 2015-10-16 17:49:25 +0200 |
---|---|---|
committer | Maxime Quandalle <maxime@quandalle.com> | 2015-10-16 17:49:25 +0200 |
commit | 6dedf673d5bde58c8d6ca439825cbf84303a3b4e (patch) | |
tree | 727279f4431d54ab6ea330fbc5b4b80540b7f549 /models | |
parent | 15ebfa63c61694e4aa60e0f9c5047f678d6cf0c4 (diff) | |
download | wekan-6dedf673d5bde58c8d6ca439825cbf84303a3b4e.tar.gz wekan-6dedf673d5bde58c8d6ca439825cbf84303a3b4e.tar.bz2 wekan-6dedf673d5bde58c8d6ca439825cbf84303a3b4e.zip |
Prevent duplicate board labels
43de3b8 did prevent empty labels with the same color, but we also want
to prevent label with the same non-empty name and same color because
the rationale is identical.
Diffstat (limited to 'models')
-rw-r--r-- | models/boards.js | 33 | ||||
-rw-r--r-- | models/import.js | 40 |
2 files changed, 31 insertions, 42 deletions
diff --git a/models/boards.js b/models/boards.js index fd0212c5..d7d40251 100644 --- a/models/boards.js +++ b/models/boards.js @@ -135,29 +135,26 @@ Boards.mutations({ }, addLabel(name, color) { - const _id = Random.id(6); - - // If an empty label of a given color already exists we don't want to create - // an other one because they would be indistinguishable in the UI (they - // would still have different `_id` but that is not exposed to the user). - if (name === '' && this.getLabel(name, color)) { - return {}; + // If label with the same name and color already exists we don't want to + // create another one because they would be indistinguishable in the UI + // (they would still have different `_id` but that is not exposed to the + // user). + if (!this.getLabel(name, color)) { + const _id = Random.id(6); + return { $push: {labels: { _id, name, color }}}; } - return { $push: {labels: { _id, name, color }}}; }, editLabel(labelId, name, color) { - const labelIndex = this.labelIndex(labelId); - - if (name === '' && this.getLabel(name, color)) { - return {}; + if (!this.getLabel(name, color)) { + const labelIndex = this.labelIndex(labelId); + return { + $set: { + [`labels.${labelIndex}.name`]: name, + [`labels.${labelIndex}.color`]: color, + }, + }; } - return { - $set: { - [`labels.${labelIndex}.name`]: name, - [`labels.${labelIndex}.color`]: color, - }, - }; }, removeLabel(labelId) { diff --git a/models/import.js b/models/import.js index 4fe4b478..e1f77efc 100644 --- a/models/import.js +++ b/models/import.js @@ -24,16 +24,17 @@ Meteor.methods({ })); check(listId, String); check(sortIndex, Number); - } catch(e) { + } catch (e) { throw new Meteor.Error('error-json-schema'); } - // 2. check parameters are ok from a business point of view (exist & authorized) + // 2. check parameters are ok from a business point of view (exist & + // authorized) const list = Lists.findOne(listId); - if(!list) { + if (!list) { throw new Meteor.Error('error-list-doesNotExist'); } - if(Meteor.isServer) { + if (Meteor.isServer) { if (!allowIsBoardMember(Meteor.userId(), Boards.findOne(list.boardId))) { throw new Meteor.Error('error-board-notAMember'); } @@ -48,6 +49,7 @@ Meteor.methods({ createdAt: dateOfImport, dateLastActivity: dateOfImport, description: trelloCard.desc, + labelIds: [], listId: list._id, sort: sortIndex, title: trelloCard.name, @@ -59,29 +61,18 @@ Meteor.methods({ const creationAction = trelloCard.actions.find((action) => { return action.type === 'createCard'; }); - if(creationAction) { + if (creationAction) { cardToCreate.createdAt = creationAction.date; } // 5. map labels - create missing ones trelloCard.labels.forEach((currentLabel) => { - const color = currentLabel.color; - const name = currentLabel.name; - const existingLabel = list.board().getLabel(name, color); - let labelId = undefined; - if (existingLabel) { - labelId = existingLabel._id; - } else { - let labelCreated = list.board().addLabel(name, color); - // XXX currently mutations return no value so we have to fetch the label we just created - // waiting on https://github.com/mquandalle/meteor-collection-mutations/issues/1 to remove... - labelCreated = list.board().getLabel(name, color); - labelId = labelCreated._id; - } - if(labelId) { - if (!cardToCreate.labelIds) { - cardToCreate.labelIds = []; - } + const { name, color } = currentLabel; + // `addLabel` won't create dublicate labels (ie labels with the same name + // and color) so here it is used more in a "enforceLabelExistence" way. + list.board().addLabel(name, color); + const { _id: labelId } = list.board().getLabel(name, color); + if (labelId) { cardToCreate.labelIds.push(labelId); } }); @@ -99,13 +90,14 @@ Meteor.methods({ system: 'Trello', url: trelloCard.url, }, - // we attribute the import to current user, not the one from the original card + // we attribute the import to current user, not the one from the original + // card userId: Meteor.userId(), }); // 7. parse actions and add comments trelloCard.actions.forEach((currentAction) => { - if(currentAction.type === 'commentCard') { + if (currentAction.type === 'commentCard') { const commentToCreate = { boardId: list.boardId, cardId, |