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);
- const matchingTriggers = Triggers.find(matchingMap);
- const matchingRules = [];
- matchingTriggers.forEach(function(trigger){
- matchingRules.push(trigger.getRule());
- });
- return matchingRules;
- },
- buildMatchingFieldsMap(activity, matchingFields){
- const 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 });
- 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});
- 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,
- from: Accounts.emailTemplates.from,
- 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});
- }
- },
- };
|