diff options
author | Lauri Ojansivu <x@xet7.org> | 2018-05-18 16:19:48 +0300 |
---|---|---|
committer | Lauri Ojansivu <x@xet7.org> | 2018-05-18 16:19:48 +0300 |
commit | 1984a6b1c80dbd8b4eff89aa92913f943bacc63b (patch) | |
tree | 5ab5ade69721a03896ba1bfa6e19879dffee59b7 /models/customFields.js | |
parent | c0c7b269a794fb28ddf5ffc17744f6724041de96 (diff) | |
parent | 1d904adc610afa3106acc00886a0a848e26e1cb1 (diff) | |
download | wekan-1984a6b1c80dbd8b4eff89aa92913f943bacc63b.tar.gz wekan-1984a6b1c80dbd8b4eff89aa92913f943bacc63b.tar.bz2 wekan-1984a6b1c80dbd8b4eff89aa92913f943bacc63b.zip |
Merge branch 'feuerball11-feature-custom-fields' into devel
Diffstat (limited to 'models/customFields.js')
-rw-r--r-- | models/customFields.js | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/models/customFields.js b/models/customFields.js new file mode 100644 index 00000000..6c5fe7c4 --- /dev/null +++ b/models/customFields.js @@ -0,0 +1,132 @@ +CustomFields = new Mongo.Collection('customFields'); + +CustomFields.attachSchema(new SimpleSchema({ + boardId: { + type: String, + }, + name: { + type: String, + }, + type: { + type: String, + allowedValues: ['text', 'number', 'date', 'dropdown'], + }, + settings: { + type: Object, + }, + 'settings.dropdownItems': { + type: [Object], + optional: true, + }, + 'settings.dropdownItems.$': { + type: new SimpleSchema({ + _id: { + type: String, + }, + name: { + type: String, + }, + }), + }, + showOnCard: { + type: Boolean, + }, +})); + +CustomFields.allow({ + insert(userId, doc) { + return allowIsBoardMember(userId, Boards.findOne(doc.boardId)); + }, + update(userId, doc) { + return allowIsBoardMember(userId, Boards.findOne(doc.boardId)); + }, + remove(userId, doc) { + return allowIsBoardMember(userId, Boards.findOne(doc.boardId)); + }, + fetch: ['userId', 'boardId'], +}); + +// not sure if we need this? +//CustomFields.hookOptions.after.update = { fetchPrevious: false }; + +function customFieldCreation(userId, doc){ + Activities.insert({ + userId, + activityType: 'createCustomField', + boardId: doc.boardId, + customFieldId: doc._id, + }); +} + +if (Meteor.isServer) { + /*Meteor.startup(() => { + CustomFields._collection._ensureIndex({ boardId: 1}); + });*/ + + CustomFields.after.insert((userId, doc) => { + customFieldCreation(userId, doc); + }); + + CustomFields.after.remove((userId, doc) => { + Activities.remove({ + customFieldId: doc._id, + }); + }); +} + +//CUSTOM FIELD REST API +if (Meteor.isServer) { + JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields', function (req, res) { + Authentication.checkUserId( req.userId); + const paramBoardId = req.params.boardId; + JsonRoutes.sendResult(res, { + code: 200, + data: CustomFields.find({ boardId: paramBoardId }), + }); + }); + + JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res) { + Authentication.checkUserId( req.userId); + const paramBoardId = req.params.boardId; + const paramCustomFieldId = req.params.customFieldId; + JsonRoutes.sendResult(res, { + code: 200, + data: CustomFields.findOne({ _id: paramCustomFieldId, boardId: paramBoardId }), + }); + }); + + JsonRoutes.add('POST', '/api/boards/:boardId/custom-fields', function (req, res) { + Authentication.checkUserId( req.userId); + const paramBoardId = req.params.boardId; + const id = CustomFields.direct.insert({ + name: req.body.name, + type: req.body.type, + settings: req.body.settings, + showOnCard: req.body.showOnCard, + boardId: paramBoardId, + }); + + const customField = CustomFields.findOne({_id: id, boardId: paramBoardId }); + customFieldCreation(req.body.authorId, customField); + + JsonRoutes.sendResult(res, { + code: 200, + data: { + _id: id, + }, + }); + }); + + JsonRoutes.add('DELETE', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res) { + Authentication.checkUserId( req.userId); + const paramBoardId = req.params.boardId; + const id = req.params.customFieldId; + CustomFields.remove({ _id: id, boardId: paramBoardId }); + JsonRoutes.sendResult(res, { + code: 200, + data: { + _id: id, + }, + }); + }); +} |