diff options
Diffstat (limited to 'collections/boards.js')
-rw-r--r-- | collections/boards.js | 136 |
1 files changed, 68 insertions, 68 deletions
diff --git a/collections/boards.js b/collections/boards.js index ade70466..8260fc3d 100644 --- a/collections/boards.js +++ b/collections/boards.js @@ -2,27 +2,27 @@ Boards = new Mongo.Collection('boards'); Boards.attachSchema(new SimpleSchema({ title: { - type: String + type: String, }, slug: { - type: String + type: String, }, archived: { - type: Boolean + type: Boolean, }, createdAt: { type: Date, - denyUpdate: true + denyUpdate: true, }, // XXX Inconsistent field naming modifiedAt: { type: Date, denyInsert: true, - optional: true + optional: true, }, // De-normalized number of users that have starred this board stars: { - type: Number + type: Number, }, // De-normalized label system 'labels.$._id': { @@ -31,46 +31,46 @@ Boards.attachSchema(new SimpleSchema({ // always set on the server. // XXX Actually if we create a new label, the `_id` is set on the client // without being overwritten by the server, could it be a problem? - type: String + type: String, }, 'labels.$.name': { type: String, - optional: true + optional: true, }, 'labels.$.color': { type: String, allowedValues: [ 'green', 'yellow', 'orange', 'red', 'purple', - 'blue', 'sky', 'lime', 'pink', 'black' - ] + 'blue', 'sky', 'lime', 'pink', 'black', + ], }, // XXX We might want to maintain more informations under the member sub- // documents like de-normalized meta-data (the date the member joined the // board, the number of contributions, etc.). 'members.$.userId': { - type: String + type: String, }, 'members.$.isAdmin': { - type: Boolean + type: Boolean, }, 'members.$.isActive': { - type: Boolean + type: Boolean, }, permission: { type: String, - allowedValues: ['public', 'private'] + allowedValues: ['public', 'private'], }, color: { type: String, allowedValues: [ - 'belize', - 'nephritis', - 'pomegranate', - 'pumpkin', - 'wisteria', - 'midnight', - ] - } + 'belize', + 'nephritis', + 'pomegranate', + 'pumpkin', + 'wisteria', + 'midnight', + ], + }, })); if (Meteor.isServer) { @@ -78,30 +78,30 @@ if (Meteor.isServer) { insert: Meteor.userId, update: allowIsBoardAdmin, remove: allowIsBoardAdmin, - fetch: ['members'] + fetch: ['members'], }); // The number of users that have starred this board is managed by trusted code // and the user is not allowed to update it Boards.deny({ - update: function(userId, board, fieldNames) { + update(userId, board, fieldNames) { return _.contains(fieldNames, 'stars'); }, - fetch: [] + fetch: [], }); // We can't remove a member if it is the last administrator Boards.deny({ - update: function(userId, doc, fieldNames, modifier) { - if (! _.contains(fieldNames, 'members')) + update(userId, doc, fieldNames, modifier) { + if (!_.contains(fieldNames, 'members')) return false; // We only care in case of a $pull operation, ie remove a member - if (! _.isObject(modifier.$pull && modifier.$pull.members)) + if (!_.isObject(modifier.$pull && modifier.$pull.members)) return false; // If there is more than one admin, it's ok to remove anyone - var nbAdmins = _.filter(doc.members, function(member) { + const nbAdmins = _.filter(doc.members, (member) => { return member.isAdmin; }).length; if (nbAdmins > 1) @@ -109,36 +109,36 @@ if (Meteor.isServer) { // If all the previous conditions were verified, we can't remove // a user if it's an admin - var removedMemberId = modifier.$pull.members.userId; - return !! _.findWhere(doc.members, { + const removedMemberId = modifier.$pull.members.userId; + return Boolean(_.findWhere(doc.members, { userId: removedMemberId, - isAdmin: true - }); + isAdmin: true, + })); }, - fetch: ['members'] + fetch: ['members'], }); } Boards.helpers({ - isPublic: function() { + isPublic() { return this.permission === 'public'; }, - lists: function() { + lists() { return Lists.find({ boardId: this._id, archived: false }, { sort: { sort: 1 }}); }, - activities: function() { + activities() { return Activities.find({ boardId: this._id }, { sort: { createdAt: -1 }}); }, - absoluteUrl: function() { + absoluteUrl() { return FlowRouter.path('board', { id: this._id, slug: this.slug }); }, - colorClass: function() { - return 'board-color-' + this.color; - } + colorClass() { + return `board-color-${this.color}`; + }, }); -Boards.before.insert(function(userId, doc) { +Boards.before.insert((userId, doc) => { // XXX We need to improve slug management. Only the id should be necessary // to identify a board in the code. // XXX If the board title is updated, the slug should also be updated. @@ -149,87 +149,87 @@ Boards.before.insert(function(userId, doc) { doc.createdAt = new Date(); doc.archived = false; doc.members = [{ - userId: userId, + userId, isAdmin: true, - isActive: true + isActive: true, }]; doc.stars = 0; doc.color = Boards.simpleSchema()._schema.color.allowedValues[0]; // Handle labels - var colors = Boards.simpleSchema()._schema['labels.$.color'].allowedValues; - var defaultLabelsColors = _.clone(colors).splice(0, 6); - doc.labels = _.map(defaultLabelsColors, function(val) { + const colors = Boards.simpleSchema()._schema['labels.$.color'].allowedValues; + const defaultLabelsColors = _.clone(colors).splice(0, 6); + doc.labels = _.map(defaultLabelsColors, (color) => { return { + color, _id: Random.id(6), name: '', - color: val }; }); }); -Boards.before.update(function(userId, doc, fieldNames, modifier) { +Boards.before.update((userId, doc, fieldNames, modifier) => { modifier.$set = modifier.$set || {}; modifier.$set.modifiedAt = new Date(); }); if (Meteor.isServer) { // Let MongoDB ensure that a member is not included twice in the same board - Meteor.startup(function() { + Meteor.startup(() => { Boards._collection._ensureIndex({ _id: 1, - 'members.userId': 1 + 'members.userId': 1, }, { unique: true }); }); // Genesis: the first activity of the newly created board - Boards.after.insert(function(userId, doc) { + Boards.after.insert((userId, doc) => { Activities.insert({ + userId, type: 'board', activityTypeId: doc._id, activityType: 'createBoard', boardId: doc._id, - userId: userId }); }); // If the user remove one label from a board, we cant to remove reference of // this label in any card of this board. - Boards.after.update(function(userId, doc, fieldNames, modifier) { - if (! _.contains(fieldNames, 'labels') || - ! modifier.$pull || - ! modifier.$pull.labels || - ! modifier.$pull.labels._id) + Boards.after.update((userId, doc, fieldNames, modifier) => { + if (!_.contains(fieldNames, 'labels') || + !modifier.$pull || + !modifier.$pull.labels || + !modifier.$pull.labels._id) return; - var removedLabelId = modifier.$pull.labels._id; + const removedLabelId = modifier.$pull.labels._id; Cards.update( { boardId: doc._id }, { $pull: { - labels: removedLabelId - } + labels: removedLabelId, + }, }, { multi: true } ); }); // Add a new activity if we add or remove a member to the board - Boards.after.update(function(userId, doc, fieldNames, modifier) { - if (! _.contains(fieldNames, 'members')) + Boards.after.update((userId, doc, fieldNames, modifier) => { + if (!_.contains(fieldNames, 'members')) return; - var memberId; + let memberId; // Say hello to the new member if (modifier.$push && modifier.$push.members) { memberId = modifier.$push.members.userId; Activities.insert({ + userId, + memberId, type: 'member', activityType: 'addBoardMember', boardId: doc._id, - userId: userId, - memberId: memberId }); } @@ -237,11 +237,11 @@ if (Meteor.isServer) { if (modifier.$pull && modifier.$pull.members) { memberId = modifier.$pull.members.userId; Activities.insert({ + userId, + memberId, type: 'member', activityType: 'removeBoardMember', boardId: doc._id, - userId: userId, - memberId: memberId }); } }); |