From 40a3267615d34b011acbf19d6706a85d98e2e8fb Mon Sep 17 00:00:00 2001 From: Ole Langbehn Date: Sat, 16 Mar 2019 14:25:04 +0100 Subject: make emails for invitations all lowercase for compatibility with AccountsTemplates Email addresses for invitations are stored case sensitive in mongo, together with the invitation codes. When someone tries to sign up due to an invitation, in the sign up form, due to AccountsTemplates defaults, the email address is lowercased on blur of the textbox. When they then try to sign in, they get an error about the invitation code not existing. This makes it impossible to successfully invite people using non-lowercased email addresses. This patch lowercases the emails on the client side when inviting them. Other possibilities would be to lowercase them on the server side before storing them to mongodb, making a case insensitive search on mongodb, or making the email input field in the sign up form not lowercase the email string. This patch was chosen in favor of the other possibilities because of its simplicity. --- client/components/settings/settingBody.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'client') diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js index 2f58d551..8279a092 100644 --- a/client/components/settings/settingBody.js +++ b/client/components/settings/settingBody.js @@ -90,7 +90,7 @@ BlazeComponent.extendComponent({ }, inviteThroughEmail() { - const emails = $('#email-to-invite').val().trim().split('\n').join(',').split(','); + const emails = $('#email-to-invite').val().toLowerCase().trim().split('\n').join(',').split(','); const boardsToInvite = []; $('.js-toggle-board-choose .materialCheckBox.is-checked').each(function () { boardsToInvite.push($(this).data('id')); -- cgit v1.2.3-1-g7c22 From 4cd0d1c3971f001eccf023bb84f1bee113fed215 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Manelli?= Date: Fri, 8 Mar 2019 23:39:33 +0100 Subject: Migrate customFields --- client/components/sidebar/sidebarCustomFields.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'client') diff --git a/client/components/sidebar/sidebarCustomFields.js b/client/components/sidebar/sidebarCustomFields.js index ccc8ffb9..bdd8e7a0 100644 --- a/client/components/sidebar/sidebarCustomFields.js +++ b/client/components/sidebar/sidebarCustomFields.js @@ -2,7 +2,7 @@ BlazeComponent.extendComponent({ customFields() { return CustomFields.find({ - boardId: Session.get('currentBoard'), + boardIds: {$in: [Session.get('currentBoard')]}, }); }, @@ -103,7 +103,6 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({ evt.preventDefault(); const data = { - boardId: Session.get('currentBoard'), name: this.find('.js-field-name').value.trim(), type: this.type.get(), settings: this.getSettings(), @@ -114,8 +113,10 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({ // insert or update if (!this.data()._id) { + data.boardIds = [Session.get('currentBoard')]; CustomFields.insert(data); } else { + data.boardIds = {$in: [Session.get('currentBoard')]}; CustomFields.update(this.data()._id, {$set: data}); } -- cgit v1.2.3-1-g7c22 From d01fccd9497120613bf2c0b986963e67e7f3d6fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Manelli?= Date: Sat, 16 Mar 2019 22:43:47 +0100 Subject: - Fix card copy & move between boards with customFields - Fix card copy & move between boards with labels with same name - Fix activities for labels when copying and moving card - Fix activities for customFields when copying and moving card --- client/components/activities/activities.jade | 9 ++++++++- client/components/activities/activities.js | 8 ++++++++ client/components/cards/cardDetails.js | 8 +++++--- client/components/lists/list.js | 4 ++-- client/components/sidebar/sidebarCustomFields.js | 13 ++++++++++--- 5 files changed, 33 insertions(+), 9 deletions(-) (limited to 'client') diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index 949400f6..54066da8 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -99,6 +99,9 @@ template(name="boardActivities") else | {{{_ 'activity-added' memberLink cardLink}}}. + if($eq activityType 'moveCardBoard') + | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. + if($eq activityType 'moveCard') | {{{_ 'activity-moved' cardLink oldList.title list.title}}}. @@ -135,7 +138,7 @@ template(name="cardActivities") p.activity-desc +memberName(user=user) if($eq activityType 'createCard') - | {{_ 'activity-added' cardLabel list.title}}. + | {{_ 'activity-added' cardLabel listName}}. if($eq activityType 'importCard') | {{{_ 'activity-imported' cardLabel list.title sourceLink}}}. if($eq activityType 'joinMember') @@ -176,6 +179,10 @@ template(name="cardActivities") | {{_ 'activity-sent' cardLabel boardLabel}}. if($eq activityType 'moveCard') | {{_ 'activity-moved' cardLabel oldList.title list.title}}. + + if($eq activityType 'moveCardBoard') + | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}. + if($eq activityType 'addAttachment') | {{{_ 'activity-attached' attachmentLink cardLabel}}}. if attachment.isImage diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 81995221..cbdd776e 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -74,6 +74,8 @@ BlazeComponent.extendComponent({ lastLabel(){ const lastLabelId = this.currentData().labelId; + if (!lastLabelId) + return; const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(lastLabelId); if(lastLabel.name === undefined || lastLabel.name === ''){ return lastLabel.color; @@ -84,11 +86,15 @@ BlazeComponent.extendComponent({ lastCustomField(){ const lastCustomField = CustomFields.findOne(this.currentData().customFieldId); + if (!lastCustomField) + return null; return lastCustomField.name; }, lastCustomFieldValue(){ const lastCustomField = CustomFields.findOne(this.currentData().customFieldId); + if (!lastCustomField) + return null; const value = this.currentData().value; if (lastCustomField.settings.dropdownItems && lastCustomField.settings.dropdownItems.length > 0) { const dropDownValue = _.find(lastCustomField.settings.dropdownItems, (item) => { @@ -135,6 +141,8 @@ BlazeComponent.extendComponent({ customField() { const customField = this.currentData().customField(); + if (!customField) + return null; return customField.name; }, diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index d27fe732..79e9e311 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -412,11 +412,13 @@ Template.moveCardPopup.events({ // XXX We should *not* get the currentCard from the global state, but // instead from a “component” state. const card = Cards.findOne(Session.get('currentCard')); + const bSelect = $('.js-select-boards')[0]; + const boardId = bSelect.options[bSelect.selectedIndex].value; const lSelect = $('.js-select-lists')[0]; - const newListId = lSelect.options[lSelect.selectedIndex].value; + const listId = lSelect.options[lSelect.selectedIndex].value; const slSelect = $('.js-select-swimlanes')[0]; - card.swimlaneId = slSelect.options[slSelect.selectedIndex].value; - card.move(card.swimlaneId, newListId, 0); + const swimlaneId = slSelect.options[slSelect.selectedIndex].value; + card.move(boardId, swimlaneId, listId, 0); Popup.close(); }, }); diff --git a/client/components/lists/list.js b/client/components/lists/list.js index 868be2ce..cceae7b4 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -86,12 +86,12 @@ BlazeComponent.extendComponent({ if (MultiSelection.isActive()) { Cards.find(MultiSelection.getMongoSelector()).forEach((card, i) => { - card.move(swimlaneId, listId, sortIndex.base + i * sortIndex.increment); + card.move(currentBoard._id, swimlaneId, listId, sortIndex.base + i * sortIndex.increment); }); } else { const cardDomElement = ui.item.get(0); const card = Blaze.getData(cardDomElement); - card.move(swimlaneId, listId, sortIndex.base); + card.move(currentBoard._id, swimlaneId, listId, sortIndex.base); } boardComponent.setIsDragging(false); }, diff --git a/client/components/sidebar/sidebarCustomFields.js b/client/components/sidebar/sidebarCustomFields.js index bdd8e7a0..81147ce5 100644 --- a/client/components/sidebar/sidebarCustomFields.js +++ b/client/components/sidebar/sidebarCustomFields.js @@ -116,15 +116,22 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({ data.boardIds = [Session.get('currentBoard')]; CustomFields.insert(data); } else { - data.boardIds = {$in: [Session.get('currentBoard')]}; CustomFields.update(this.data()._id, {$set: data}); } Popup.back(); }, 'click .js-delete-custom-field': Popup.afterConfirm('deleteCustomField', function() { - const customFieldId = this._id; - CustomFields.remove(customFieldId); + const customField = CustomFields.findOne(this._id); + if (customField.boardIds.length > 1) { + CustomFields.update(customField._id, { + $pull: { + boardIds: Session.get('currentBoard') + } + }); + } else { + CustomFields.remove(customField._id); + } Popup.close(); }), }]; -- cgit v1.2.3-1-g7c22 From 777d9ac35320cbfdd8d90136b176d4a3e69e74be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Manelli?= Date: Sat, 16 Mar 2019 23:15:30 +0100 Subject: Lint fix --- client/components/activities/activities.js | 2 +- client/components/sidebar/sidebarCustomFields.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'client') diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index cbdd776e..0476897f 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -75,7 +75,7 @@ BlazeComponent.extendComponent({ lastLabel(){ const lastLabelId = this.currentData().labelId; if (!lastLabelId) - return; + return null; const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(lastLabelId); if(lastLabel.name === undefined || lastLabel.name === ''){ return lastLabel.color; diff --git a/client/components/sidebar/sidebarCustomFields.js b/client/components/sidebar/sidebarCustomFields.js index 81147ce5..28af973b 100644 --- a/client/components/sidebar/sidebarCustomFields.js +++ b/client/components/sidebar/sidebarCustomFields.js @@ -126,8 +126,8 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({ if (customField.boardIds.length > 1) { CustomFields.update(customField._id, { $pull: { - boardIds: Session.get('currentBoard') - } + boardIds: Session.get('currentBoard'), + }, }); } else { CustomFields.remove(customField._id); -- cgit v1.2.3-1-g7c22 From 9651d62b967358f3eac6ae1c92ce5e03a0ddb7ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Manelli?= Date: Mon, 18 Mar 2019 22:55:56 +0100 Subject: Fix #2266 --- client/components/lists/list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'client') diff --git a/client/components/lists/list.js b/client/components/lists/list.js index 868be2ce..fb1c0128 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -70,7 +70,7 @@ BlazeComponent.extendComponent({ const currentBoard = Boards.findOne(Session.get('currentBoard')); let swimlaneId = ''; const boardView = Meteor.user().profile.boardView; - if (boardView === 'board-view-swimlanes') + if (boardView === 'board-view-swimlanes' || currentBoard.isTemplatesBoard()) swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id; else if ((boardView === 'board-view-lists') || (boardView === 'board-view-cal')) swimlaneId = currentBoard.getDefaultSwimline()._id; -- cgit v1.2.3-1-g7c22