rulesHelper.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. RulesHelper = {
  2. executeRules(activity){
  3. const matchingRules = this.findMatchingRules(activity);
  4. console.log("Matching rules:")
  5. console.log(matchingRules);
  6. for(let i = 0;i< matchingRules.length;i++){
  7. console.log(matchingRules[i]);
  8. const action = matchingRules[i].getAction();
  9. this.performAction(activity,action);
  10. }
  11. },
  12. findMatchingRules(activity){
  13. const activityType = activity.activityType;
  14. if(TriggersDef[activityType] == undefined){
  15. return [];
  16. }
  17. const matchingFields = TriggersDef[activityType].matchingFields;
  18. const matchingMap = this.buildMatchingFieldsMap(activity,matchingFields);
  19. let matchingTriggers = Triggers.find(matchingMap);
  20. let matchingRules = [];
  21. matchingTriggers.forEach(function(trigger){
  22. matchingRules.push(trigger.getRule());
  23. });
  24. return matchingRules;
  25. },
  26. buildMatchingFieldsMap(activity, matchingFields){
  27. let matchingMap = {"activityType":activity.activityType};
  28. for(let i = 0;i< matchingFields.length;i++){
  29. // Creating a matching map with the actual field of the activity
  30. // and with the wildcard (for example: trigger when a card is added
  31. // in any [*] board
  32. matchingMap[matchingFields[i]] = { $in: [activity[matchingFields[i]],"*"]};
  33. }
  34. return matchingMap;
  35. },
  36. performAction(activity,action){
  37. console.log("Performing action - Activity");
  38. console.log(activity);
  39. console.log("Performing action - Action");
  40. console.log(action);
  41. const card = Cards.findOne({_id:activity.cardId});
  42. if(action.actionType == "moveCardToTop"){
  43. let listId;
  44. let list;
  45. if(activity.listTitle == "*"){
  46. listId = card.swimlaneId;
  47. list = card.list();
  48. }else{
  49. list = Lists.findOne({title: action.listTitle});
  50. listId = list._id;
  51. }
  52. const minOrder = _.min(list.cards(card.swimlaneId).map((c) => c.sort));
  53. card.move(card.swimlaneId, listId, minOrder - 1);
  54. }
  55. if(action.actionType == "moveCardToBottom"){
  56. let listId;
  57. let list;
  58. if(activity.listTitle == "*"){
  59. listId = card.swimlaneId;
  60. list = card.list();
  61. }else{
  62. list = Lists.findOne({title: action.listTitle});
  63. listId = list._id;
  64. }
  65. const maxOrder = _.max(list.cards(card.swimlaneId).map((c) => c.sort));
  66. card.move(card.swimlaneId, listId, maxOrder + 1);
  67. }
  68. if(action.actionType == "sendEmail"){
  69. const emailTo = action.emailTo;
  70. const emailMsg = action.emailMsg;
  71. const emailSubject = action.emailSubject;
  72. try {
  73. Email.send({
  74. to: to,
  75. from: Accounts.emailTemplates.from,
  76. subject: subject,
  77. text,
  78. });
  79. } catch (e) {
  80. return;
  81. }
  82. }
  83. if(action.actionType == "archive"){
  84. card.archive();
  85. }
  86. if(action.actionType == "unarchive"){
  87. card.restore();
  88. }
  89. if(action.actionType == "addLabel"){
  90. card.addLabel(action.labelId);
  91. }
  92. if(action.actionType == "removeLabel"){
  93. card.removeLabel(action.labelId);
  94. }
  95. if(action.actionType == "addMember"){
  96. const memberId = Users.findOne({username:action.memberName})._id;
  97. console.log(memberId);
  98. card.assignMember(memberId);
  99. }
  100. if(action.actionType == "removeMember"){
  101. if(action.memberName == "*"){
  102. console.log(card);
  103. const members = card.members;
  104. console.log(members);
  105. for(let i = 0;i< members.length;i++){
  106. card.unassignMember(members[i]);
  107. }
  108. }else{
  109. const memberId = Users.findOne({username:action.memberName})._id;
  110. card.unassignMember(memberId);
  111. }
  112. }
  113. if(action.actionType == "checkAll"){
  114. const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id});
  115. checkList.checkAllItems();
  116. }
  117. if(action.actionType == "uncheckAll"){
  118. const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id});
  119. checkList.uncheckAllItems();
  120. }
  121. if(action.actionType == "checkItem"){
  122. const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id});
  123. const checkItem = ChecklistItems.findOne({"title":action.checkItemName,"checkListId":checkList._id})
  124. checkItem.check();
  125. }
  126. if(action.actionType == "uncheckItem"){
  127. const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id});
  128. const checkItem = ChecklistItems.findOne({"title":action.checkItemName,"checkListId":checkList._id})
  129. checkItem.uncheck();
  130. }
  131. if(action.actionType == "addChecklist"){
  132. Checklists.insert({"title":action.checklistName,"cardId":card._id,"sort":0});
  133. }
  134. if(action.actionType == "removeChecklist"){
  135. Checklists.remove({"title":action.checklistName,"cardId":card._id,"sort":0});
  136. }
  137. },
  138. }