| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- RulesHelper = {
- executeRules(activity){
- const matchingRules = this.findMatchingRules(activity);
- for(let i = 0;i< matchingRules.length;i++){
- const action = matchingRules[i].getAction();
- this.performAction(activity,action);
- }
- },
- findMatchingRules(activity){
- const activityType = activity.activityType;
- if(TriggersDef[activityType] == undefined){
- return [];
- }
- const matchingFields = TriggersDef[activityType].matchingFields;
- const matchingMap = this.buildMatchingFieldsMap(activity,matchingFields);
- let matchingTriggers = Triggers.find(matchingMap);
- let matchingRules = [];
- matchingTriggers.forEach(function(trigger){
- matchingRules.push(trigger.getRule());
- });
- return matchingRules;
- },
- buildMatchingFieldsMap(activity, matchingFields){
- let matchingMap = {"activityType":activity.activityType};
- for(let i = 0;i< matchingFields.length;i++){
- // Creating a matching map with the actual field of the activity
- // and with the wildcard (for example: trigger when a card is added
- // in any [*] board
- matchingMap[matchingFields[i]] = { $in: [activity[matchingFields[i]],"*"]};
- }
- return matchingMap;
- },
- performAction(activity,action){
- const card = Cards.findOne({_id:activity.cardId});
- const boardId = activity.boardId;
- if(action.actionType == "moveCardToTop"){
- let listId;
- let list;
- if(activity.listTitle == "*"){
- listId = card.swimlaneId;
- list = card.list();
- }else{
- list = Lists.findOne({title: action.listTitle, boardId:boardId });;
- listId = list._id;
- }
- const minOrder = _.min(list.cards(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;
- list = card.list();
- }else{
- list = Lists.findOne({title: action.listTitle, boardId:boardId});
- listId = list._id;
- }
- const maxOrder = _.max(list.cards(card.swimlaneId).map((c) => c.sort));
- card.move(card.swimlaneId, listId, maxOrder + 1);
- }
- if(action.actionType == "sendEmail"){
- const emailTo = action.emailTo;
- const emailMsg = action.emailMsg;
- const emailSubject = action.emailSubject;
- try {
- Email.send({
- to: to,
- from: Accounts.emailTemplates.from,
- subject: subject,
- text,
- });
- } catch (e) {
- return;
- }
- }
- if(action.actionType == "archive"){
- card.archive();
- }
- if(action.actionType == "unarchive"){
- card.restore();
- }
- if(action.actionType == "addLabel"){
- card.addLabel(action.labelId);
- }
- if(action.actionType == "removeLabel"){
- card.removeLabel(action.labelId);
- }
- if(action.actionType == "addMember"){
- const memberId = Users.findOne({username:action.memberName})._id;
- card.assignMember(memberId);
- }
- if(action.actionType == "removeMember"){
- if(action.memberName == "*"){
- const members = card.members;
- for(let i = 0;i< members.length;i++){
- card.unassignMember(members[i]);
- }
- }else{
- const memberId = Users.findOne({username:action.memberName})._id;
- card.unassignMember(memberId);
- }
- }
- if(action.actionType == "checkAll"){
- const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id});
- checkList.checkAllItems();
- }
- if(action.actionType == "uncheckAll"){
- const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id});
- checkList.uncheckAllItems();
- }
- if(action.actionType == "checkItem"){
- const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id});
- const checkItem = ChecklistItems.findOne({"title":action.checkItemName,"checkListId":checkList._id})
- checkItem.check();
- }
- if(action.actionType == "uncheckItem"){
- const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id});
- const checkItem = ChecklistItems.findOne({"title":action.checkItemName,"checkListId":checkList._id})
- checkItem.uncheck();
- }
- if(action.actionType == "addChecklist"){
- Checklists.insert({"title":action.checklistName,"cardId":card._id,"sort":0});
- }
- if(action.actionType == "removeChecklist"){
- Checklists.remove({"title":action.checklistName,"cardId":card._id,"sort":0});
- }
- },
- }
|