diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index dfd281ded..75b2f02b0 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -87,10 +87,10 @@ template(name="boardHeaderBar") if Filter.isActive a.board-header-btn-close.js-filter-reset(title="{{_ 'filter-clear'}}") i.fa.fa-times-thin - - a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}") - i.fa.fa-magic - span {{_ 'rules'}} + if currentUser.isAdmin + a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}") + i.fa.fa-magic + span {{_ 'rules'}} a.board-header-btn.js-open-search-view(title="{{_ 'search'}}") i.fa.fa-search diff --git a/client/components/rules/actions/cardActions.js b/client/components/rules/actions/cardActions.js index a65407c1c..b04440bd0 100644 --- a/client/components/rules/actions/cardActions.js +++ b/client/components/rules/actions/cardActions.js @@ -58,14 +58,14 @@ BlazeComponent.extendComponent({ const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#member-action').value; - const memberName = this.find('#member-name').value; + const username = this.find('#member-name').value; const boardId = Session.get('currentBoard'); const desc = Utils.getTriggerActionDesc(event, this); if (actionSelected === 'add') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ actionType: 'addMember', - memberName, + username, boardId, desc, }); @@ -81,7 +81,7 @@ BlazeComponent.extendComponent({ const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ actionType: 'removeMember', - memberName, + username, boardId, desc, }); @@ -101,7 +101,7 @@ BlazeComponent.extendComponent({ const boardId = Session.get('currentBoard'); const actionId = Actions.insert({ actionType: 'removeMember', - 'memberName': '*', + 'username': '*', boardId, desc, }); diff --git a/client/components/rules/rules.styl b/client/components/rules/rules.styl index 68d74d324..45ce4003a 100644 --- a/client/components/rules/rules.styl +++ b/client/components/rules/rules.styl @@ -116,7 +116,7 @@ .trigger-dropdown display:inline-block select - width:100px + width:auto height:30px margin:0px margin-left:5px diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade index 266f11f8d..48b9345c5 100644 --- a/client/components/rules/triggers/boardTriggers.jade +++ b/client/components/rules/triggers/boardTriggers.jade @@ -27,6 +27,13 @@ template(name="boardTriggers") div.trigger-button.js-add-create-trigger.js-goto-action i.fa.fa-plus + div.trigger-item + div.trigger-content + div.trigger-text + | {{_'r-when-a-card-is-moved'}} + div.trigger-button.js-add-gen-moved-trigger.js-goto-action + i.fa.fa-plus + div.trigger-item div.trigger-content div.trigger-text diff --git a/client/components/rules/triggers/boardTriggers.js b/client/components/rules/triggers/boardTriggers.js index e47536420..40c5b07ea 100644 --- a/client/components/rules/triggers/boardTriggers.js +++ b/client/components/rules/triggers/boardTriggers.js @@ -76,6 +76,19 @@ BlazeComponent.extendComponent({ }); } }, + 'click .js-add-gen-moved-trigger' (event){ + const datas = this.data(); + const desc = Utils.getTriggerActionDesc(event, this); + const boardId = Session.get('currentBoard'); + + datas.triggerVar.set({ + activityType: 'moveCard', + boardId, + 'listName':'*', + 'oldListName': '*', + desc, + }); + }, 'click .js-add-arc-trigger' (event) { const datas = this.data(); const desc = Utils.getTriggerActionDesc(event, this); diff --git a/client/components/rules/triggers/cardTriggers.js b/client/components/rules/triggers/cardTriggers.js index 704c76905..2303a85bd 100644 --- a/client/components/rules/triggers/cardTriggers.js +++ b/client/components/rules/triggers/cardTriggers.js @@ -67,7 +67,7 @@ BlazeComponent.extendComponent({ datas.triggerVar.set({ activityType: 'joinMember', boardId, - 'memberId': '*', + 'username': '*', desc, }); } @@ -75,7 +75,7 @@ BlazeComponent.extendComponent({ datas.triggerVar.set({ activityType: 'unjoinMember', boardId, - 'memberId': '*', + 'username': '*', desc, }); } @@ -84,13 +84,13 @@ BlazeComponent.extendComponent({ const desc = Utils.getTriggerActionDesc(event, this); const datas = this.data(); const actionSelected = this.find('#spec-member-action').value; - const memberId = this.find('#spec-member').value; + const username = this.find('#spec-member').value; const boardId = Session.get('currentBoard'); if (actionSelected === 'added') { datas.triggerVar.set({ activityType: 'joinMember', boardId, - memberId, + username, desc, }); } @@ -98,7 +98,7 @@ BlazeComponent.extendComponent({ datas.triggerVar.set({ activityType: 'unjoinMember', boardId, - memberId, + username, desc, }); } diff --git a/client/components/rules/triggers/checklistTriggers.js b/client/components/rules/triggers/checklistTriggers.js index 01f3effed..2272be298 100644 --- a/client/components/rules/triggers/checklistTriggers.js +++ b/client/components/rules/triggers/checklistTriggers.js @@ -78,7 +78,7 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#spec-comp-check-action').value; const checklistId = this.find('#spec-comp-check-name').value; const boardId = Session.get('currentBoard'); - if (actionSelected === 'added') { + if (actionSelected === 'completed') { datas.triggerVar.set({ activityType: 'completeChecklist', boardId, @@ -86,7 +86,7 @@ BlazeComponent.extendComponent({ desc, }); } - if (actionSelected === 'removed') { + if (actionSelected === 'uncompleted') { datas.triggerVar.set({ activityType: 'uncompleteChecklist', boardId, diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 81206ae33..896c10a3f 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -548,7 +548,7 @@ "r-when-the-label-is": "When the label is", "r-list-name": "List name", "r-when-a-member": "When a member is", - "r-when-the-member": "When the member is", + "r-when-the-member": "When the member", "r-name": "name", "r-is": "is", "r-when-a-attach": "When an attachment", @@ -606,5 +606,6 @@ "r-d-uncheck-one": "Uncheck item", "r-d-check-of-list": "of checklist", "r-d-add-checklist": "Add checklist", - "r-d-remove-checklist": "Remove checklist" + "r-d-remove-checklist": "Remove checklist", + "r-when-a-card-is-moved": "When a card is moved to another list" } diff --git a/models/cards.js b/models/cards.js index 346b4bddc..66bfbcf38 100644 --- a/models/cards.js +++ b/models/cards.js @@ -1165,10 +1165,11 @@ function cardMembers(userId, doc, fieldNames, modifier) { // Say hello to the new member if (modifier.$addToSet && modifier.$addToSet.members) { memberId = modifier.$addToSet.members; + const username = Users.findOne(memberId).username; if (!_.contains(doc.members, memberId)) { Activities.insert({ userId, - memberId, + username, activityType: 'joinMember', boardId: doc.boardId, cardId: doc._id, @@ -1179,11 +1180,12 @@ function cardMembers(userId, doc, fieldNames, modifier) { // Say goodbye to the former member if (modifier.$pull && modifier.$pull.members) { memberId = modifier.$pull.members; + const username = Users.findOne(memberId).username; // Check that the former member is member of the card if (_.contains(doc.members, memberId)) { Activities.insert({ userId, - memberId, + username, activityType: 'unjoinMember', boardId: doc.boardId, cardId: doc._id, diff --git a/models/checklistItems.js b/models/checklistItems.js index 8380bda72..7132bc7cc 100644 --- a/models/checklistItems.js +++ b/models/checklistItems.js @@ -130,7 +130,7 @@ function publishChekListCompleted(userId, doc, fieldNames, modifier){ cardId: doc.cardId, boardId, checklistId: doc.checklistId, - checklistName:doc.title, + checklistName:checkList.title, }; Activities.insert(act); } @@ -148,7 +148,7 @@ function publishChekListUncompleted(userId, doc, fieldNames, modifier){ cardId: doc.cardId, boardId, checklistId: doc.checklistId, - checklistName:doc.title, + checklistName:checkList.title, }; Activities.insert(act); } diff --git a/models/lists.js b/models/lists.js index bf5aae3ca..b99fe8f58 100644 --- a/models/lists.js +++ b/models/lists.js @@ -76,6 +76,17 @@ Lists.allow({ Lists.helpers({ cards(swimlaneId) { + const selector = { + listId: this._id, + archived: false, + }; + if (swimlaneId) + selector.swimlaneId = swimlaneId; + return Cards.find(Filter.mongoSelector(selector), + { sort: ['sort'] }); + }, + + cardsUnfiltered(swimlaneId) { const selector = { listId: this._id, archived: false, diff --git a/server/rulesHelper.js b/server/rulesHelper.js index e7e19b96c..e9139933b 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -36,27 +36,27 @@ RulesHelper = { if(action.actionType === 'moveCardToTop'){ let listId; let list; - if(activity.listTitle === '*'){ - listId = card.swimlaneId; + if(action.listTitle === '*'){ + listId = card.listId; list = card.list(); }else{ list = Lists.findOne({title: action.listTitle, boardId }); listId = list._id; } - const minOrder = _.min(list.cards(card.swimlaneId).map((c) => c.sort)); + const minOrder = _.min(list.cardsUnfiltered(card.swimlaneId).map((c) => c.sort)); card.move(card.swimlaneId, listId, minOrder - 1); } if(action.actionType === 'moveCardToBottom'){ let listId; let list; - if(activity.listTitle === '*'){ - listId = card.swimlaneId; + if(action.listTitle === '*'){ + listId = card.listId; list = card.list(); }else{ list = Lists.findOne({title: action.listTitle, boardId}); listId = list._id; } - const maxOrder = _.max(list.cards(card.swimlaneId).map((c) => c.sort)); + const maxOrder = _.max(list.cardsUnfiltered(card.swimlaneId).map((c) => c.sort)); card.move(card.swimlaneId, listId, maxOrder + 1); } if(action.actionType === 'sendEmail'){ @@ -87,7 +87,7 @@ RulesHelper = { card.removeLabel(action.labelId); } if(action.actionType === 'addMember'){ - const memberId = Users.findOne({username:action.memberName})._id; + const memberId = Users.findOne({username:action.username})._id; card.assignMember(memberId); } if(action.actionType === 'removeMember'){ @@ -97,7 +97,7 @@ RulesHelper = { card.unassignMember(members[i]); } }else{ - const memberId = Users.findOne({username:action.memberName})._id; + const memberId = Users.findOne({username:action.username})._id; card.unassignMember(memberId); } } diff --git a/server/triggersDef.js b/server/triggersDef.js index 81dc946fb..f6d5333bf 100644 --- a/server/triggersDef.js +++ b/server/triggersDef.js @@ -12,10 +12,10 @@ TriggersDef = { matchingFields: ['boardId'], }, joinMember:{ - matchingFields: ['boardId', 'memberId'], + matchingFields: ['boardId', 'username'], }, unjoinMember:{ - matchingFields: ['boardId', 'memberId'], + matchingFields: ['boardId', 'username'], }, addChecklist:{ matchingFields: ['boardId', 'checklistName'],