diff --git a/config/env/torrents.js b/config/env/torrents.js index 2a5ed64a..e1b3f684 100644 --- a/config/env/torrents.js +++ b/config/env/torrents.js @@ -178,7 +178,8 @@ module.exports = { {name: 'AFFAIRS', value: 'affairs'}, {name: 'DISCUSS', value: 'discuss'}, {name: 'BUSINESS', value: 'business'} - ] + ], + thumbs_up_score: 10 }, resourcesTags: { movie: { diff --git a/modules/core/client/app/trans-string-en.js b/modules/core/client/app/trans-string-en.js index 52f2fdf7..e4817731 100644 --- a/modules/core/client/app/trans-string-en.js +++ b/modules/core/client/app/trans-string-en.js @@ -711,7 +711,8 @@ REPLY_EDIT: 'edit reply', REPLY_DELETE: 'delete reply', TOPIC_EDIT: 'edit topic', - TOPIC_DELETE: 'delete topic' + TOPIC_DELETE: 'delete topic', + TOPIC_THUMBS_UP: 'thumbs up and donate score' } }, diff --git a/modules/core/client/app/trans-string-zh.js b/modules/core/client/app/trans-string-zh.js index 56666a6b..edc6de7b 100644 --- a/modules/core/client/app/trans-string-zh.js +++ b/modules/core/client/app/trans-string-zh.js @@ -711,7 +711,8 @@ REPLY_EDIT: '编辑回复', REPLY_DELETE: '删除回复', TOPIC_EDIT: '编辑话题', - TOPIC_DELETE: '删除话题' + TOPIC_DELETE: '删除话题', + TOPIC_THUMBS_UP: '点赞送分' } }, diff --git a/modules/forums/client/controllers/forums-topic.client.controller.js b/modules/forums/client/controllers/forums-topic.client.controller.js index 6baea8da..f2468ff9 100644 --- a/modules/forums/client/controllers/forums-topic.client.controller.js +++ b/modules/forums/client/controllers/forums-topic.client.controller.js @@ -311,15 +311,12 @@ _id: t._id }); - console.log(topic); - topic.$toggleTopicReadonly(function (res) { vm.topic = res; NotifycationService.showSuccessNotify('FORUMS.TOPIC_TOGGLE_READONLY_SUCCESSFULLY'); }, function (res) { NotifycationService.showErrorNotify(res.data.message, 'FORUMS.TOPIC_TOGGLE_READONLY_FAILED'); }); - }; /** @@ -374,5 +371,24 @@ vm.postReplyFields.content = list.join('\n'); vm.beginPostReply(); }; + + /** + * beginThumbsUp + * @param t,topic + * @param r,reply + */ + vm.beginThumbsUp = function (t, r) { + var topic = new TopicsService({ + forum: vm.forum._id, + _id: t._id, + _replyId: r ? r._id : undefined + }); + + topic.$thumbsUp(function (res) { + console.log(res); + vm.topic = res; + NotifycationService.showSuccessNotify('FORUMS.TOPIC_TOGGLE_READONLY_SUCCESSFULLY'); + }); + }; } }()); diff --git a/modules/forums/client/less/forum.less b/modules/forums/client/less/forum.less index 2be8ad86..c63c06f4 100644 --- a/modules/forums/client/less/forum.less +++ b/modules/forums/client/less/forum.less @@ -386,7 +386,13 @@ margin: 0 5px; cursor: pointer; &:hover { - color: @brand-primary + color: @mt-base-color; + } + } + .fa-thumbs-up { + color: @mt-base-color; + &:hover { + color: darken(@mt-base-color, 10%); } } } diff --git a/modules/forums/client/services/topics.client.service.js b/modules/forums/client/services/topics.client.service.js index c0df83c2..bd3244f6 100644 --- a/modules/forums/client/services/topics.client.service.js +++ b/modules/forums/client/services/topics.client.service.js @@ -22,6 +22,15 @@ forumId: '@forum', topicId: '@_id' } + }, + thumbsUp: { + method: 'PUT', + url: '/api/topics/:forumId/:topicId/thumbsUp', + params: { + forumId: '@forum', + topicId: '@_id', + replyId: '@_replyId' + } } }); } diff --git a/modules/forums/client/views/topic.client.view.html b/modules/forums/client/views/topic.client.view.html index 78f12b54..35044917 100644 --- a/modules/forums/client/views/topic.client.view.html +++ b/modules/forums/client/views/topic.client.view.html @@ -114,6 +114,9 @@ title="{{'FORUMS.TITLES.TOPIC_DELETE' | translate}}" ng-show="vm.canEdit(vm.topic);" ng-click="vm.beginDeleteTopic(vm.topic);"> + @@ -152,13 +155,16 @@ title="{{'FORUMS.TITLES.REPLY_QUOTE' | translate}}" ng-click="vm.quoteAndReply(rep);"> + diff --git a/modules/forums/server/controllers/forums.server.controller.js b/modules/forums/server/controllers/forums.server.controller.js index e5761240..22396db2 100644 --- a/modules/forums/server/controllers/forums.server.controller.js +++ b/modules/forums/server/controllers/forums.server.controller.js @@ -12,10 +12,12 @@ var path = require('path'), Forum = mongoose.model('Forum'), Topic = mongoose.model('Topic'), Reply = mongoose.model('Reply'), + Thumb = mongoose.model('Thumb'), async = require('async'), traceLogCreate = require(path.resolve('./config/lib/tracelog')).create; var traceConfig = config.meanTorrentConfig.trace; +var forumsConfig = config.meanTorrentConfig.forumsConfig; /** * list forums @@ -230,6 +232,61 @@ exports.toggleTopicReadonly = function (req, res) { }); }; +/** + * thumbsUp + * @param req + * @param res + */ +exports.thumbsUp = function (req, res) { + var exist = false; + var topic = req.topic; + var thumb = new Thumb(); + thumb.user = req.user; + thumb.score = forumsConfig.thumbs_up_score; + + if (req.query.replyId) { + topic._replies.forEach(function (r) { + if (r._id.equals(req.query.replyId)) { + //check if already exist + exist = false; + r._scoreList.forEach(function (sr) { + if (sr.user._id.equals(req.user._id)) { + exist = true; + } + }); + if (exist) { + return res.json(topic); + } else { + r._scoreList.push(thumb); + } + } + }); + } else { + //check if already exist + exist = false; + topic._scoreList.forEach(function (sr) { + if (sr.user._id.equals(req.user._id)) { + exist = true; + } + }); + if (exist) { + return res.json(topic); + } else { + topic._scoreList.push(thumb); + } + } + + topic.save(function (err) { + if (err) { + return res.status(422).send({ + message: errorHandler.getErrorMessage(err) + }); + } else { + res.json(topic); + } + }); +}; + /** * deleteTopic * @param req @@ -385,6 +442,7 @@ exports.topicById = function (req, res, next, id) { .populate('_scoreList.user', 'username displayName profileImageURL uploaded downloaded') .populate('_replies.user', 'username displayName profileImageURL uploaded downloaded') .populate('_replies.updatedBy', 'username displayName profileImageURL uploaded downloaded') + .populate('_replies._scoreList.user', 'username displayName profileImageURL uploaded downloaded') .exec(function (err, topic) { if (err) { return next(err); diff --git a/modules/forums/server/models/topic.server.model.js b/modules/forums/server/models/topic.server.model.js index 4162e77a..52aef3ca 100644 --- a/modules/forums/server/models/topic.server.model.js +++ b/modules/forums/server/models/topic.server.model.js @@ -26,9 +26,9 @@ var AttachSchema = new Schema({ }); /** - * Sub Score Schema + * Sub Thumb Schema */ -var ScoreSchema = new Schema({ +var ThumbSchema = new Schema({ user: { type: Schema.Types.ObjectId, ref: 'User' @@ -58,7 +58,7 @@ var ReplySchema = new Schema({ }, _attach: [AttachSchema], - _scoreList: [ScoreSchema], + _scoreList: [ThumbSchema], updatedAt: { type: Date @@ -111,7 +111,7 @@ var TopicSchema = new Schema({ }, _replies: [ReplySchema], _attach: [AttachSchema], - _scoreList: [ScoreSchema], + _scoreList: [ThumbSchema], isTop: { type: Number, @@ -141,5 +141,5 @@ var TopicSchema = new Schema({ mongoose.model('Topic', TopicSchema); mongoose.model('Attach', AttachSchema); -mongoose.model('Score', ScoreSchema); +mongoose.model('Thumb', ThumbSchema); mongoose.model('Reply', ReplySchema); diff --git a/modules/forums/server/policies/forums.server.policy.js b/modules/forums/server/policies/forums.server.policy.js index 97e8ea5d..38a905c9 100644 --- a/modules/forums/server/policies/forums.server.policy.js +++ b/modules/forums/server/policies/forums.server.policy.js @@ -22,7 +22,8 @@ exports.invokeRolesPolicies = function () { {resources: '/api/topics/:forumId', permissions: '*'}, {resources: '/api/topics/:forumId/:topicId', permissions: '*'}, {resources: '/api/topics/:forumId/:topicId/:replyId', permissions: '*'}, - {resources: '/api/topics/:forumId/:topicId/toggleTopicReadonly', permissions: '*'} + {resources: '/api/topics/:forumId/:topicId/toggleTopicReadonly', permissions: '*'}, + {resources: '/api/topics/:forumId/:topicId/thumbsUp', permissions: '*'} ] }, { diff --git a/modules/forums/server/routes/forums.server.routes.js b/modules/forums/server/routes/forums.server.routes.js index 6b8c6489..67b37494 100644 --- a/modules/forums/server/routes/forums.server.routes.js +++ b/modules/forums/server/routes/forums.server.routes.js @@ -26,6 +26,9 @@ module.exports = function (app) { app.route('/api/topics/:forumId/:topicId/toggleTopicReadonly').all(forumsPolicy.isAllowed) .put(forums.toggleTopicReadonly); + app.route('/api/topics/:forumId/:topicId/thumbsUp').all(forumsPolicy.isAllowed) + .put(forums.thumbsUp); + app.route('/api/topics/:forumId/:topicId/:replyId').all(forumsPolicy.isAllowed) .put(forums.updateReply) .delete(forums.deleteReply);