mirror of
https://github.com/wekan/wekan.git
synced 2025-09-22 01:50:48 +02:00
142 lines
No EOL
4.5 KiB
JavaScript
142 lines
No EOL
4.5 KiB
JavaScript
RulesHelper = {
|
|
executeRules(activity){
|
|
const matchingRules = this.findMatchingRules(activity);
|
|
console.log("Matching rules:")
|
|
console.log(matchingRules);
|
|
for(let i = 0;i< matchingRules.length;i++){
|
|
console.log(matchingRules[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){
|
|
|
|
console.log("Performing action - Activity");
|
|
console.log(activity);
|
|
console.log("Performing action - Action");
|
|
console.log(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;
|
|
console.log(memberId);
|
|
card.assignMember(memberId);
|
|
}
|
|
if(action.actionType == "removeMember"){
|
|
if(action.memberName == "*"){
|
|
console.log(card);
|
|
const members = card.members;
|
|
console.log(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});
|
|
}
|
|
|
|
},
|
|
|
|
} |