Added cascading deletions
This commit is contained in:
@@ -29,3 +29,13 @@ Containers.helpers({
|
||||
return weight;
|
||||
}
|
||||
});
|
||||
|
||||
Containers.before.remove(function (userId, container) {
|
||||
if(Meteor.isServer){
|
||||
Items.remove({container: container._id});
|
||||
} else {
|
||||
Items.find({container: container._id}).forEach(function(item){
|
||||
Items.remove(item._id);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -36,35 +36,16 @@ Items.helpers({
|
||||
}
|
||||
});
|
||||
|
||||
//keep effects sycned with items
|
||||
//if an item's equipped state changes, update related effects' enabled state
|
||||
Items.find({}, {fields: {equipped: 1}}).observeChanges({
|
||||
added: function(id, fields){
|
||||
Effects.find({ type: "equipment", sourceId: id, enabled: {$ne: fields.equipped} },
|
||||
{fields: {enabled: 1} }).forEach(function(effect){
|
||||
Effects.update(effect._id, {$set: {enabled: fields.equipped}})
|
||||
});
|
||||
},
|
||||
changed: function(id, fields){
|
||||
Effects.find({type: "equipment", sourceId: id, enabled: {$ne: fields.equipped} },
|
||||
{fields: {enabled: 1} }).forEach(function(effect){
|
||||
Effects.update(effect._id, {$set: {enabled: fields.equipped}})
|
||||
});
|
||||
}
|
||||
//remove effects if their item source is removed
|
||||
Items.before.remove(function (userId, item) {
|
||||
Effects.find({sourceId: item._id, type: "equipment"}).forEach(function(effect){
|
||||
Effects.remove(effect._id);
|
||||
});
|
||||
});
|
||||
|
||||
//if an effect's type, source or enabled state change, keep the enabled state up to date with the item's equipped state
|
||||
Effects.find({type: "equipment"}, {fields: {type: 1, enabled: 1, sourceId: 1}}).observe({
|
||||
added: function(newEffect){
|
||||
var item = Items.findOne(newEffect.sourceId, {fields: {equipped: 1}});
|
||||
if(item && item.equipped !== newEffect.enabled){
|
||||
Effects.update(newEffect._id, {$set: {enabled: item.equipped}})
|
||||
}
|
||||
},
|
||||
changed: function(newEffect, oldEffect){
|
||||
var item = Items.findOne(newEffect.sourceId, {fields: {equipped: 1}});
|
||||
if(item && item.equipped !== newEffect.enabled){
|
||||
Effects.update(newEffect._id, {$set: {enabled: item.equipped}})
|
||||
}
|
||||
}
|
||||
})
|
||||
//keep the effects on the correct character and enabled when equipped
|
||||
Items.after.update(function (userId, item, fieldNames, modifier, options) {
|
||||
Effects.find({sourceId: item._id, type: "equipment"}).forEach(function(effect){
|
||||
Effects.update(effect._id, { $set: {charId: item.charId, enabled: item.equipped} });
|
||||
}, {fetchPrevious: false});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user