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);