From e1d4537164ce50e996349bcdae30231f16a6d103 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Wed, 6 Jun 2018 00:48:30 +0800 Subject: [PATCH] feat(dataLogs): show user score change history --- config/env/torrents.js | 29 +++++---- config/lib/cron-job.js | 15 ++++- .../announces.server.controller.js | 4 +- modules/core/client/app/trans-string-en.js | 26 ++++++++ modules/core/client/app/trans-string-zh-tw.js | 26 ++++++++ modules/core/client/app/trans-string-zh.js | 26 ++++++++ .../data-logs.client.controller.js | 62 +++++++++++++++++-- .../data-logs/client/less/data-center.less | 40 +++++++++++- .../user-score-logs.client.service.js | 34 ++++++++++ .../data-downloaded-history.client.view.html | 15 +++++ .../views/data-score-history.client.view.html | 33 ++++++++++ .../data-uploaded-history.client.view.html | 15 +++++ .../data-logs.server.controller.js | 13 ++++ .../policies/data-logs.server.policy.js | 3 +- .../server/routes/data-logs.server.routes.js | 3 + .../controllers/forums.server.controller.js | 27 +++++++- .../invitations.client.controller.js | 2 +- .../invitations.server.controller.js | 5 +- .../controllers/requests.server.controller.js | 24 ++++--- .../views/view-torrent.client.view.html | 4 +- .../completes.server.controller.js | 8 ++- .../subtitles.server.controller.js | 16 ++++- .../controllers/torrents.server.controller.js | 44 ++++++++++--- .../controllers/admin.server.controller.js | 6 +- 24 files changed, 430 insertions(+), 50 deletions(-) create mode 100644 modules/data-logs/client/services/user-score-logs.client.service.js create mode 100644 modules/data-logs/client/views/data-downloaded-history.client.view.html create mode 100644 modules/data-logs/client/views/data-score-history.client.view.html create mode 100644 modules/data-logs/client/views/data-uploaded-history.client.view.html diff --git a/config/env/torrents.js b/config/env/torrents.js index f6334361..1da5a0be 100644 --- a/config/env/torrents.js +++ b/config/env/torrents.js @@ -371,8 +371,8 @@ module.exports = { accountIdleForTime: 60 * 60 * 1000 * 24 * 30, //30 days accountIdleForTime_str: '30d', activeIdleAccountBasicScore: 50000, - activeMoreScorePerDay: 1000, - activeMoreScorePerLevel: 10000, + activeMoreScorePerDay: 100, + activeMoreScorePerLevel: 1000, notIdleSafeLevel: 30 } }, @@ -472,18 +472,21 @@ module.exports = { transferScoreIntoInviterFrom: {name: 'transferScoreIntoInviterFrom', content: 'TRANSFER_SCORE_INTO_INVITER_FROM', value: 0, enable: true}, transferScoreIntoInviterTo: {name: 'transferScoreIntoInviterTo', content: 'TRANSFER_SCORE_INTO_INVITER_TO', value: 0, enable: true}, - uploadTorrent: {name: 'uploadTorrent', content: 'UPLOAD_TORRENT', value: 50, enable: true}, - uploadTorrentBeDeleted: {name: 'uploadTorrentBeDeleted', content: 'UPLOAD_TORRENT_BE_DELETED', value: -50, enable: true}, - uploadTorrentBeRecommend: {name: 'uploadTorrentBeRecommend', content: 'UPLOAD_TORRENT_BE_RECOMMEND', value: 10, enable: true}, - uploadSubtitle: {name: 'uploadSubtitle', content: 'UPLOAD_SUBTITLE', value: 20, enable: true}, - uploadSubtitleBeDeleted: {name: 'uploadSubtitleBeDeleted', content: 'UPLOAD_SUBTITLE_BE_DELETED', value: -20, enable: true}, + uploadTorrent: {name: 'uploadTorrent', content: 'UPLOAD_TORRENT', value: 20, enable: true}, + uploadTorrentBeDeleted: {name: 'uploadTorrentBeDeleted', content: 'UPLOAD_TORRENT_BE_DELETED', value: -20, enable: true}, + uploadTorrentBeRecommend: {name: 'uploadTorrentBeRecommend', content: 'UPLOAD_TORRENT_BE_RECOMMEND', value: 5, enable: true}, + uploadSubtitle: {name: 'uploadSubtitle', content: 'UPLOAD_SUBTITLE', value: 10, enable: true}, + uploadSubtitleBeDeleted: {name: 'uploadSubtitleBeDeleted', content: 'UPLOAD_SUBTITLE_BE_DELETED', value: -10, enable: true}, - thumbsUpScoreOfTorrentFrom: {name: 'thumbsUpScoreOfTorrentFrom', content: 'THUMBS_UP_SCORE_OF_TORRENT_FROM', value: -10, enable: true}, - thumbsUpScoreOfTorrentTo: {name: 'thumbsUpScoreOfTorrentTo', content: 'THUMBS_UP_SCORE_OF_TORRENT_TO', value: 10, enable: true}, - thumbsUpScoreOfTopicFrom: {name: 'thumbsUpScoreOfTopicFrom', content: 'THUMBS_UP_SCORE_OF_TOPIC_FROM', value: -10, enable: true}, - thumbsUpScoreOfTopicTo: {name: 'thumbsUpScoreOfTopicTo', content: 'THUMBS_UP_SCORE_OF_TOPIC_TO', value: 10, enable: true}, + thumbsUpScoreOfTorrentFrom: {name: 'thumbsUpScoreOfTorrentFrom', content: 'THUMBS_UP_SCORE_OF_TORRENT_FROM', value: -5, enable: true}, + thumbsUpScoreOfTorrentTo: {name: 'thumbsUpScoreOfTorrentTo', content: 'THUMBS_UP_SCORE_OF_TORRENT_TO', value: 5, enable: true}, + thumbsUpScoreOfTopicFrom: {name: 'thumbsUpScoreOfTopicFrom', content: 'THUMBS_UP_SCORE_OF_TOPIC_FROM', value: -5, enable: true}, + thumbsUpScoreOfTopicTo: {name: 'thumbsUpScoreOfTopicTo', content: 'THUMBS_UP_SCORE_OF_TOPIC_TO', value: 5, enable: true}, + + requestPost: {name: 'requestPost', content: 'REQUEST_POST', value: 0, enable: true}, //value used requests.scoreForAddRequest + requestAcceptFrom: {name: 'requestAcceptFrom', content: 'REQUEST_ACCEPT_FROM', value: 0, enable: true}, //value form user setting + requestAcceptTo: {name: 'requestAcceptTo', content: 'REQUEST_ACCEPT_TO', value: 0, enable: true}, //value form user setting - postRequest: {name: 'postRequest', content: 'POST_REQUEST', value: 0, enable: true}, //value used requests.scoreForAddRequest scoreExchangeInvitation: {name: 'scoreExchangeInvitation', content: 'SCORE_EXCHANGE_INVITATION', value: 0, enable: true}, //value used invite.scoreExchange scoreToRemoveWarning: {name: 'scoreToRemoveWarning', content: 'SCORETO_REMOVE_WARNING', value: 0, enable: true}, //value used hitAndRun.scoreToRemoveWarning activeIdleAccount: {name: 'activeIdleAccount', content: 'ACTIVE_IDLE_ACCOUNT', value: 0, enable: true}, //value used sign.idle.activeIdleAccountBasicScore @@ -1425,6 +1428,7 @@ module.exports = { * @torrentPeersListPerPage: torrent detail seeder & leecher users list page settings * @officialInvitationsListPerPage: official invitations list page settings * @userInvitationsListPerPage: users invitations list page settings + * @userDataLogsListPerPage: users data history logs list page settings * * @uploaderUserListPerPage: admin management uploader access list page settings * @messageBoxListPerPage: message box list page settings @@ -1461,6 +1465,7 @@ module.exports = { torrentPeersListPerPage: 20, officialInvitationsListPerPage: 20, userInvitationsListPerPage: 10, + userDataLogsListPerPage: 20, uploaderUserListPerPage: 20, messageBoxListPerPage: 10, diff --git a/config/lib/cron-job.js b/config/lib/cron-job.js index 4dc197fc..c34e7059 100644 --- a/config/lib/cron-job.js +++ b/config/lib/cron-job.js @@ -414,9 +414,20 @@ function transferUserScoreToInviter() { if (transValue > 0) { if (scoreConfig.transferToInviter.deductFromUser) { - scoreUpdate(undefined, l.user, scoreConfig.action.transferScoreIntoInviterFrom, -(transValue)); + var actFrom = scoreConfig.action.transferScoreIntoInviterFrom; + actFrom.params = { + uid: l.user.invited_by._id, + uname: l.user.invited_by.displayName + }; + scoreUpdate(undefined, l.user, actFrom, -(transValue)); } - scoreUpdate(undefined, l.user.invited_by, scoreConfig.action.transferScoreIntoInviterTo, transValue); + + var actTo = scoreConfig.action.transferScoreIntoInviterTo; + actTo.params = { + uid: l.user._id, + uname: l.user.displayName + }; + scoreUpdate(undefined, l.user.invited_by, actTo, transValue); } } }); diff --git a/modules/announce/server/controllers/announces.server.controller.js b/modules/announce/server/controllers/announces.server.controller.js index b155d8e5..78d84a5c 100644 --- a/modules/announce/server/controllers/announces.server.controller.js +++ b/modules/announce/server/controllers/announces.server.controller.js @@ -660,7 +660,7 @@ exports.announce = function (req, res) { totalScore = Math.round(totalScore * 100) / 100; action.params = { - torrent: req.torrent._id + tid: req.torrent._id }; scoreUpdate(req, req.passkeyuser, action, totalScore, false); mtDebug.debugRed('announce score: ' + totalScore, 'ANNOUNCE', true, req.passkeyuser); @@ -812,7 +812,7 @@ exports.announce = function (req, res) { seedScore = Math.round(seedScore * 100) / 100; action.params = { - torrent: req.torrent._id + tid: req.torrent._id }; scoreUpdate(req, req.passkeyuser, action, seedScore); mtDebug.debugRed('seed timed score: ' + seedScore, 'ANNOUNCE', true, req.passkeyuser); diff --git a/modules/core/client/app/trans-string-en.js b/modules/core/client/app/trans-string-en.js index 3ad343ab..7a62ecc8 100644 --- a/modules/core/client/app/trans-string-en.js +++ b/modules/core/client/app/trans-string-en.js @@ -1476,6 +1476,32 @@ LEGEND_UNIT: ' (unit: GB)' }, + //score log + SCORE_LOG: { + DEFAULT_ACTION: 'Undefined events increased score', + ADMIN_MODIFY: 'Administrator {{uname}} modify score', + TRANSFER_SCORE_INTO_INVITER_FROM: 'Transfer score of last month to your inviter {{uname}}', + TRANSFER_SCORE_INTO_INVITER_TO: 'The system increased the score reward of last month by invited user {{uname}}', + UPLOAD_TORRENT: 'Uploaded torrent was reviewed {{tid}}', + UPLOAD_TORRENT_BE_DELETED: 'Uploaded torrent was deleted {{tid}}', + UPLOAD_TORRENT_BE_RECOMMEND: 'Uploaded torrent was recommended {{tid}}', + UPLOAD_SUBTITLE: 'Upload subtitle file for torrent {{tid}}', + UPLOAD_SUBTITLE_BE_DELETED: 'Uploaded subtitle file was deleted {{tid}}', + THUMBS_UP_SCORE_OF_TORRENT_FROM: 'Thumbs up for torrent {{tid}}', + THUMBS_UP_SCORE_OF_TORRENT_TO: 'Uploaded torrent received a thumbs up {{tid}}', + THUMBS_UP_SCORE_OF_TOPIC_FROM: 'Thumbs up for forum topic or reply {{tid}}', + THUMBS_UP_SCORE_OF_TOPIC_TO: 'Posted forum topic or reply received a thumbs up {{tid}}', + REQUEST_POST: 'Posted a torrent request {{rid}}', + REQUEST_ACCEPT_FROM: 'Accept a response for request {{rid}}', + REQUEST_ACCEPT_TO: 'Your response of request was accepted {{rid}}', + SCORE_EXCHANGE_INVITATION: 'Exchange an invitation', + SCORETO_REMOVE_WARNING: 'Remove a H&R warning {{tid}}', + ACTIVE_IDLE_ACCOUNT: 'Active account idle status', + DAILY_CHECK_IN: 'Daily check in', + SEED_TIMED: 'Torrent seeding timed increased score {{tid}}', + SEED_UP_DOWNLOAD: 'Torrent seeding and leeching data transfer score {{tid}}' + }, + //status pages STATUS_PAGE: { BAD_REQUEST: 'Bad Request', diff --git a/modules/core/client/app/trans-string-zh-tw.js b/modules/core/client/app/trans-string-zh-tw.js index c2fb6f45..bd2659a2 100644 --- a/modules/core/client/app/trans-string-zh-tw.js +++ b/modules/core/client/app/trans-string-zh-tw.js @@ -1476,6 +1476,32 @@ LEGEND_UNIT: ' (單位: GB)' }, + //score log + SCORE_LOG: { + DEFAULT_ACTION: '未知事件獲得的積分', + ADMIN_MODIFY: '管理員 {{uname}} 修改積分', + TRANSFER_SCORE_INTO_INVITER_FROM: '結算上個月的積分給您的邀請人 {{uname}}', + TRANSFER_SCORE_INTO_INVITER_TO: '系統發放被邀請用戶 {{uname}} 上個月的積分獎勵', + UPLOAD_TORRENT: '上傳的種子被審核通過 {{tid}}', + UPLOAD_TORRENT_BE_DELETED: '上傳的種子被刪除 {{tid}}', + UPLOAD_TORRENT_BE_RECOMMEND: '上傳的種子被推薦 {{tid}}', + UPLOAD_SUBTITLE: '為種子上傳字幕文件 {{tid}}', + UPLOAD_SUBTITLE_BE_DELETED: '上傳的字幕文件被刪除 {{tid}}', + THUMBS_UP_SCORE_OF_TORRENT_FROM: '為種子點贊 {{tid}}', + THUMBS_UP_SCORE_OF_TORRENT_TO: '上傳的種子收到一個贊 {{tid}}', + THUMBS_UP_SCORE_OF_TOPIC_FROM: '為論壇主題或回复點贊 {{tid}}', + THUMBS_UP_SCORE_OF_TOPIC_TO: '發表的論壇主題或回複收到一個贊 {{tid}}', + REQUEST_POST: '發布了一條求種請求 {{rid}}', + REQUEST_ACCEPT_FROM: '接受了求種響應 {{rid}}', + REQUEST_ACCEPT_TO: '您的響應被求種請求者接受 {{rid}}', + SCORE_EXCHANGE_INVITATION: '兌換了一張邀請函', + SCORETO_REMOVE_WARNING: '移除了一個 H&R 警告 {{tid}}', + ACTIVE_IDLE_ACCOUNT: '重新激活帳戶狀態', + DAILY_CHECK_IN: '每日簽到', + SEED_TIMED: '做種時間獲得的積分 {{tid}}', + SEED_UP_DOWNLOAD: '上傳或下載數據交換積分 {{tid}}' + }, + //status pages STATUS_PAGE: { BAD_REQUEST: '請求錯誤', diff --git a/modules/core/client/app/trans-string-zh.js b/modules/core/client/app/trans-string-zh.js index 2be61cd9..c518387f 100644 --- a/modules/core/client/app/trans-string-zh.js +++ b/modules/core/client/app/trans-string-zh.js @@ -1476,6 +1476,32 @@ LEGEND_UNIT: ' (单位: GB)' }, + //score log + SCORE_LOG: { + DEFAULT_ACTION: '未知事件获得的积分', + ADMIN_MODIFY: '管理员 {{uname}} 修改积分', + TRANSFER_SCORE_INTO_INVITER_FROM: '结算上个月的积分给您的邀请人 {{uname}}', + TRANSFER_SCORE_INTO_INVITER_TO: '系统发放被邀请用户 {{uname}} 上个月的积分奖励', + UPLOAD_TORRENT: '上传的种子被审核通过 {{tid}}', + UPLOAD_TORRENT_BE_DELETED: '上传的种子被删除 {{tid}}', + UPLOAD_TORRENT_BE_RECOMMEND: '上传的种子被推荐 {{tid}}', + UPLOAD_SUBTITLE: '为种子上传字幕文件 {{tid}}', + UPLOAD_SUBTITLE_BE_DELETED: '上传的字幕文件被删除 {{tid}}', + THUMBS_UP_SCORE_OF_TORRENT_FROM: '为种子点赞 {{tid}}', + THUMBS_UP_SCORE_OF_TORRENT_TO: '上传的种子收到一个赞 {{tid}}', + THUMBS_UP_SCORE_OF_TOPIC_FROM: '为论坛主题或回复点赞 {{tid}}', + THUMBS_UP_SCORE_OF_TOPIC_TO: '发表的论坛主题或回复收到一个赞 {{tid}}', + REQUEST_POST: '发布了一条求种请求 {{rid}}', + REQUEST_ACCEPT_FROM: '接受了求种响应 {{rid}}', + REQUEST_ACCEPT_TO: '您的响应被求种请求者接受 {{rid}}', + SCORE_EXCHANGE_INVITATION: '兑换了一张邀请函', + SCORETO_REMOVE_WARNING: '移除了一个 H&R 警告 {{tid}}', + ACTIVE_IDLE_ACCOUNT: '重新激活帐户状态', + DAILY_CHECK_IN: '每日签到', + SEED_TIMED: '做种时间获得的积分 {{tid}}', + SEED_UP_DOWNLOAD: '上传或下载数据交换积分 {{tid}}' + }, + //status pages STATUS_PAGE: { BAD_REQUEST: '请求错误', diff --git a/modules/data-logs/client/controllers/data-logs.client.controller.js b/modules/data-logs/client/controllers/data-logs.client.controller.js index d5ab9aaa..a516c396 100644 --- a/modules/data-logs/client/controllers/data-logs.client.controller.js +++ b/modules/data-logs/client/controllers/data-logs.client.controller.js @@ -6,10 +6,10 @@ .controller('DataCenterController', DataCenterController); DataCenterController.$inject = ['$scope', '$state', '$translate', '$timeout', 'Authentication', '$window', 'MeanTorrentConfig', 'NotifycationService', - 'UserDaysLogsService', 'UserMonthsLogsService', '$rootScope', 'moment', 'DebugConsoleService', '$filter']; + 'UserDaysLogsService', 'UserMonthsLogsService', '$rootScope', 'moment', 'DebugConsoleService', '$filter', 'UserScoreLogsService']; function DataCenterController($scope, $state, $translate, $timeout, Authentication, $window, MeanTorrentConfig, NotifycationService, - UserDaysLogsService, UserMonthsLogsService, $rootScope, moment, mtDebug, $filter) { + UserDaysLogsService, UserMonthsLogsService, $rootScope, moment, mtDebug, $filter, UserScoreLogsService) { var vm = this; vm.user = Authentication.user; vm.itemsPerPageConfig = MeanTorrentConfig.meanTorrentConfig.itemsPerPage; @@ -69,7 +69,7 @@ }); }, legend: { - display: true, + display: true }, tooltips: { intersect: false @@ -162,7 +162,7 @@ }); }, legend: { - display: true, + display: true }, tooltips: { intersect: false @@ -213,7 +213,61 @@ * getUserScoreHistory */ vm.getUserScoreHistory = function () { + UserScoreLogsService.query({ + userId: vm.user._id + }, function (items) { + vm.userScoreLogsData = items; + vm.buildPager(); + }, function (res) { + NotifycationService.showErrorNotify(res.data.message, 'DATA_CENTER.GET_USER_LOGS_ERROR'); + }); }; + + + /** + * buildLogsPager + */ + vm.buildPager = function () { + vm.pagedItems = []; + vm.itemsPerPage = vm.itemsPerPageConfig.userDataLogsListPerPage; + vm.currentPage = 1; + vm.figureOutItemsToDisplay(); + }; + + /** + * figureOutItemsToDisplay + */ + vm.figureOutItemsToDisplay = function (callback) { + vm.filteredItems = vm.userScoreLogsData; + vm.filterLength = vm.filteredItems.length; + var begin = ((vm.currentPage - 1) * vm.itemsPerPage); + var end = begin + vm.itemsPerPage; + vm.pagedItems = vm.filteredItems.slice(begin, end); + + $('.use-logs-list-ol').prop('start', begin + 1); + mtDebug.info(vm.pagedItems); + + if (callback) callback(); + }; + + /** + * pageChanged + */ + vm.pageChanged = function () { + var element = angular.element('#top_of_logs_list'); + + $('.use-logs-list').fadeTo(100, 0.01, function () { + vm.figureOutItemsToDisplay(function () { + $timeout(function () { + $('.use-logs-list').fadeTo(400, 1, function () { + //window.scrollTo(0, element[0].offsetTop - 60); + $('html,body').animate({scrollTop: element[0].offsetTop - 60}, 200); + }); + }, 100); + }); + }); + }; + } }()); diff --git a/modules/data-logs/client/less/data-center.less b/modules/data-logs/client/less/data-center.less index b05a424a..74f58c80 100644 --- a/modules/data-logs/client/less/data-center.less +++ b/modules/data-logs/client/less/data-center.less @@ -5,6 +5,44 @@ font-size: 16px; } .chart-logs { - padding: 16px; + padding: 20px; + } + .use-logs-list { + padding: 0 20px; + .score-value { + min-width: 80px; + text-align: center; + display: inline-block; + position: relative; + color: @brand-success; + &:before { + content: '['; + display: inline-block; + position: absolute; + left: 0; + color: #333; + } + &:after { + content: ']'; + display: inline-block; + position: absolute; + right: 0; + color: #333; + } + &.subtract { + color: @brand-danger; + } + } + .use-logs-list-ol { + line-height: 2.2; + li { + &:hover { + background-color: #f7f7f7; + } + &:not(:last-child) { + border-bottom: dotted 1px #dedede; + } + } + } } } \ No newline at end of file diff --git a/modules/data-logs/client/services/user-score-logs.client.service.js b/modules/data-logs/client/services/user-score-logs.client.service.js new file mode 100644 index 00000000..5a3ace4f --- /dev/null +++ b/modules/data-logs/client/services/user-score-logs.client.service.js @@ -0,0 +1,34 @@ +(function () { + 'use strict'; + + // Users service used for communicating with the users REST endpoint + angular + .module('dataLogs.services') + .factory('UserScoreLogsService', UserScoreLogsService); + + UserScoreLogsService.$inject = ['$resource', 'CacheFactory']; + + function UserScoreLogsService($resource, CacheFactory) { + var userDataLogsCache = CacheFactory.get('userDataLogsCache') || CacheFactory.createCache('userDataLogsCache'); + var removeCache = function (res) { + userDataLogsCache.removeAll(); + return res.resource; + }; + + var logs = $resource('/api/userScoreLogs/:userId', { + userId: '@userId' + }, { + get: { + method: 'GET', + cache: userDataLogsCache + }, + query: { + method: 'GET', + isArray: true, + cache: userDataLogsCache + } + }); + + return logs; + } +}()); diff --git a/modules/data-logs/client/views/data-downloaded-history.client.view.html b/modules/data-logs/client/views/data-downloaded-history.client.view.html new file mode 100644 index 00000000..260f760a --- /dev/null +++ b/modules/data-logs/client/views/data-downloaded-history.client.view.html @@ -0,0 +1,15 @@ +
+
+
+   + +
+
+ +
+ +
+ +
+
+
diff --git a/modules/data-logs/client/views/data-score-history.client.view.html b/modules/data-logs/client/views/data-score-history.client.view.html new file mode 100644 index 00000000..4f849a4b --- /dev/null +++ b/modules/data-logs/client/views/data-score-history.client.view.html @@ -0,0 +1,33 @@ +
+
+
+   + +
+
+ +
+ +
+
    +
  1. +  {{l.createdAt | date: 'yyyy-MM-dd HH:mm:ss'}} + - + {{l.score}} + - + +
  2. +
+ +
+
    +
+
+
+
+
diff --git a/modules/data-logs/client/views/data-uploaded-history.client.view.html b/modules/data-logs/client/views/data-uploaded-history.client.view.html new file mode 100644 index 00000000..a368188b --- /dev/null +++ b/modules/data-logs/client/views/data-uploaded-history.client.view.html @@ -0,0 +1,15 @@ +
+
+
+   + +
+
+ +
+ +
+ +
+
+
diff --git a/modules/data-logs/server/controllers/data-logs.server.controller.js b/modules/data-logs/server/controllers/data-logs.server.controller.js index 8893fa21..49b5effd 100644 --- a/modules/data-logs/server/controllers/data-logs.server.controller.js +++ b/modules/data-logs/server/controllers/data-logs.server.controller.js @@ -9,6 +9,7 @@ var path = require('path'), errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')), UserDaysLog = mongoose.model('UserDaysLog'), UserMonthsLog = mongoose.model('UserMonthsLog'), + ScoreLog = mongoose.model('ScoreLog'), objectId = require('mongodb').ObjectId, async = require('async'); @@ -36,3 +37,15 @@ exports.getUserMonthsLogs = function (req, res) { res.json(logs); }); }; + +/** + * List of getUserScoreLogs + */ +exports.getUserScoreLogs = function (req, res) { + ScoreLog.find({ + user: objectId(req.params.userId) + }).sort('-createdAt') + .exec(function (err, logs) { + res.json(logs); + }); +}; diff --git a/modules/data-logs/server/policies/data-logs.server.policy.js b/modules/data-logs/server/policies/data-logs.server.policy.js index 1de2290c..7c40b7ce 100644 --- a/modules/data-logs/server/policies/data-logs.server.policy.js +++ b/modules/data-logs/server/policies/data-logs.server.policy.js @@ -18,7 +18,8 @@ exports.invokeRolesPolicies = function () { roles: ['user', 'admin', 'oper'], allows: [ {resources: '/api/userDaysLogs/:userId', permissions: ['get']}, - {resources: '/api/userMonthsLogs/:userId', permissions: ['get']} + {resources: '/api/userMonthsLogs/:userId', permissions: ['get']}, + {resources: '/api/userScoreLogs/:userId', permissions: ['get']} ] } ] diff --git a/modules/data-logs/server/routes/data-logs.server.routes.js b/modules/data-logs/server/routes/data-logs.server.routes.js index 9931b889..7f0767d9 100644 --- a/modules/data-logs/server/routes/data-logs.server.routes.js +++ b/modules/data-logs/server/routes/data-logs.server.routes.js @@ -13,4 +13,7 @@ module.exports = function (app) { app.route('/api/userMonthsLogs/:userId').all(dataLogsPolicy.isAllowed) .get(dataLogs.getUserMonthsLogs); + + app.route('/api/userScoreLogs/:userId').all(dataLogsPolicy.isAllowed) + .get(dataLogs.getUserScoreLogs); }; diff --git a/modules/forums/server/controllers/forums.server.controller.js b/modules/forums/server/controllers/forums.server.controller.js index 34e1b74d..1157c2ef 100644 --- a/modules/forums/server/controllers/forums.server.controller.js +++ b/modules/forums/server/controllers/forums.server.controller.js @@ -732,9 +732,17 @@ exports.thumbsUp = function (req, res) { } else { if (req.user.score >= thumb.score) { r._thumbs.push(thumb); - scoreUpdate(req, r.user, scoreConfig.action.thumbsUpScoreOfTopicTo); save(); + //score update + //score update + var act = scoreConfig.action.thumbsUpScoreOfTopicTo; + act.params = { + fid: topic.forum, + tid: topic._id + }; + scoreUpdate(req, r.user, act); + //add server message if (serverNoticeConfig.action.forumReplyThumbsUp.enable) { serverMessage.addMessage(replyUid, serverNoticeConfig.action.forumReplyThumbsUp.title, serverNoticeConfig.action.forumReplyThumbsUp.content, { @@ -769,9 +777,16 @@ exports.thumbsUp = function (req, res) { } else { if (req.user.score >= thumb.score) { topic._thumbs.push(thumb); - scoreUpdate(req, topic.user, scoreConfig.action.thumbsUpScoreOfTopicTo); save(); + //score update + var act = scoreConfig.action.thumbsUpScoreOfTopicTo; + act.params = { + fid: topic.forum, + tid: topic._id + }; + scoreUpdate(req, topic.user, act); + //add server message if (serverNoticeConfig.action.forumTopicThumbsUp.enable) { serverMessage.addMessage(topic.user._id, serverNoticeConfig.action.forumTopicThumbsUp.title, serverNoticeConfig.action.forumTopicThumbsUp.content, { @@ -801,7 +816,13 @@ exports.thumbsUp = function (req, res) { } }); - scoreUpdate(req, user, scoreConfig.action.thumbsUpScoreOfTopicFrom); + //score update + var act = scoreConfig.action.thumbsUpScoreOfTopicFrom; + act.params = { + fid: topic.forum, + tid: topic._id + }; + scoreUpdate(req, user, act); } }; diff --git a/modules/invitations/client/controllers/invitations.client.controller.js b/modules/invitations/client/controllers/invitations.client.controller.js index d1dc759d..b4aed55a 100644 --- a/modules/invitations/client/controllers/invitations.client.controller.js +++ b/modules/invitations/client/controllers/invitations.client.controller.js @@ -109,7 +109,7 @@ */ vm.pageChanged = function () { var element = angular.element('#top_of_invitations_list'); - console.log(element); + $('.tb-official').fadeTo(100, 0.01, function () { vm.figureOutItemsToDisplay(function () { $timeout(function () { diff --git a/modules/invitations/server/controllers/invitations.server.controller.js b/modules/invitations/server/controllers/invitations.server.controller.js index 29174520..c2aeda0b 100644 --- a/modules/invitations/server/controllers/invitations.server.controller.js +++ b/modules/invitations/server/controllers/invitations.server.controller.js @@ -53,10 +53,11 @@ exports.create = function (req, res) { if (user.score >= inviteConfig.scoreExchange) { user.score -= inviteConfig.scoreExchange; - scoreUpdate(req, user, scoreConfig.action.scoreExchangeInvitation, -(inviteConfig.scoreExchange)); - res.json(user); + //score update + scoreUpdate(req, user, scoreConfig.action.scoreExchangeInvitation, -(inviteConfig.scoreExchange)); + //create trace log traceLogCreate(req, traceConfig.action.userInvitationExchange, { user: req.user._id, diff --git a/modules/requests/server/controllers/requests.server.controller.js b/modules/requests/server/controllers/requests.server.controller.js index 64208890..0e46cce4 100644 --- a/modules/requests/server/controllers/requests.server.controller.js +++ b/modules/requests/server/controllers/requests.server.controller.js @@ -42,7 +42,12 @@ exports.create = function (req, res) { } else { res.json(request); - scoreUpdate(req, user, scoreConfig.action.postRequest, -requestsConfig.scoreForAddRequest); + //score update + var act = scoreConfig.action.requestPost; + act.params = { + rid: request._id + }; + scoreUpdate(req, user, act, -requestsConfig.scoreForAddRequest); } }); } else { @@ -166,12 +171,17 @@ exports.accept = function (req, res) { res.json(request); //transfer reward score - request.user.update({ - $inc: {score: -request.rewards} - }).exec(); - torrent.user.update({ - $inc: {score: request.rewards} - }).exec(); + var act = scoreConfig.action.requestAcceptFrom; + act.params = { + rid: request._id + }; + scoreUpdate(req, request.user, act, -request.rewards); + + act = scoreConfig.action.requestAcceptTo; + act.params = { + rid: request._id + }; + scoreUpdate(req, torrent.user, act, request.rewards); //add server message if (serverNoticeConfig.action.requestTorrentRespond.enable) { diff --git a/modules/torrents/client/views/view-torrent.client.view.html b/modules/torrents/client/views/view-torrent.client.view.html index e0372b02..cce04f55 100644 --- a/modules/torrents/client/views/view-torrent.client.view.html +++ b/modules/torrents/client/views/view-torrent.client.view.html @@ -943,7 +943,7 @@ -
+
  1. @@ -956,7 +956,7 @@
diff --git a/modules/torrents/server/controllers/completes.server.controller.js b/modules/torrents/server/controllers/completes.server.controller.js index 700b06bc..0da43f24 100644 --- a/modules/torrents/server/controllers/completes.server.controller.js +++ b/modules/torrents/server/controllers/completes.server.controller.js @@ -71,8 +71,12 @@ exports.removeWarning = function (req, res) { message: 'SERVER.SCORE_NOT_ENOUGH' }); } else { - //update score - scoreUpdate(req, req.user, scoreConfig.action.scoreToRemoveWarning, -(hnrConfig.scoreToRemoveWarning)); + //score update + var act = scoreConfig.action.scoreToRemoveWarning; + act.params = { + tid: comp.torrent + }; + scoreUpdate(req, req.user, act, -(hnrConfig.scoreToRemoveWarning)); comp.hnr_warning = false; comp.remove_warning_at = Date.now(); diff --git a/modules/torrents/server/controllers/subtitles.server.controller.js b/modules/torrents/server/controllers/subtitles.server.controller.js index 146965e0..4fee30b7 100644 --- a/modules/torrents/server/controllers/subtitles.server.controller.js +++ b/modules/torrents/server/controllers/subtitles.server.controller.js @@ -71,7 +71,7 @@ exports.create = function (req, res) { } else { Torrent.populate(torrent._subtitles, { path: 'user', - select: 'displayName profileImageURL uploaded downloaded' + select: 'username displayName profileImageURL isVip score uploaded downloaded' }, function (err, t) { if (err) { return res.status(422).send({ @@ -80,7 +80,12 @@ exports.create = function (req, res) { } else { res.status(200).send(torrent); - scoreUpdate(req, req.user, scoreConfig.action.uploadSubtitle); + //score update + var act = scoreConfig.action.uploadSubtitle; + act.params = { + tid: torrent._id + }; + scoreUpdate(req, req.user, act); //add server message if (serverNoticeConfig.action.torrentSubtitleNew.enable && !torrent.user._id.equals(req.user._id)) { @@ -158,7 +163,12 @@ exports.delete = function (req, res) { res.json(torrent); - scoreUpdate(req, torrent.user, scoreConfig.action.uploadSubtitleBeDeleted); + //score update + var act = scoreConfig.action.uploadSubtitleBeDeleted; + act.params = { + tid: torrent._id + }; + scoreUpdate(req, r.user, act); //add server message if (serverNoticeConfig.action.torrentSubtitleDeleted.enable) { diff --git a/modules/torrents/server/controllers/torrents.server.controller.js b/modules/torrents/server/controllers/torrents.server.controller.js index 814a1ad8..735b631b 100644 --- a/modules/torrents/server/controllers/torrents.server.controller.js +++ b/modules/torrents/server/controllers/torrents.server.controller.js @@ -749,6 +749,11 @@ exports.create = function (req, res) { $inc: {uptotal: 1} }).exec(); //update maker torrent count + var act = scoreConfig.action.uploadTorrent; + act.params = { + tid: torrent._id + }; + if (torrent.maker) { Maker.update({_id: torrent.maker}, { $inc: {torrent_count: 1} @@ -762,7 +767,7 @@ exports.create = function (req, res) { if (!err && m) { torrent.update({torrent_status: 'reviewed'}).exec(); announceTorrentToIRC(torrent, req); - scoreUpdate(req, req.user, scoreConfig.action.uploadTorrent); + scoreUpdate(req, req.user, act); } }); } else { @@ -770,7 +775,7 @@ exports.create = function (req, res) { if (req.user.upload_access === 'pass') { torrent.update({torrent_status: 'reviewed'}).exec(); announceTorrentToIRC(torrent, req); - scoreUpdate(req, req.user, scoreConfig.action.uploadTorrent); + scoreUpdate(req, req.user, act); } } @@ -1151,9 +1156,15 @@ exports.thumbsUp = function (req, res) { } else { if (req.user.score >= thumb.score) { torrent._thumbs.push(thumb); - scoreUpdate(req, torrent.user, scoreConfig.action.thumbsUpScoreOfTorrentTo); save(); + //score update + var act = scoreConfig.action.thumbsUpScoreOfTorrentTo; + act.params = { + tid: torrent._id + }; + scoreUpdate(req, torrent.user, act); + //add server message if (serverNoticeConfig.action.torrentThumbsUp.enable) { serverMessage.addMessage(torrent.user._id, serverNoticeConfig.action.torrentThumbsUp.title, serverNoticeConfig.action.torrentThumbsUp.content, { @@ -1181,7 +1192,12 @@ exports.thumbsUp = function (req, res) { } }); - scoreUpdate(req, user, scoreConfig.action.thumbsUpScoreOfTorrentFrom); + //score update + var act = scoreConfig.action.thumbsUpScoreOfTorrentFrom; + act.params = { + tid: torrent._id + }; + scoreUpdate(req, user, act); } }; @@ -1299,7 +1315,13 @@ exports.setRecommendLevel = function (req, res) { } else { res.json(torrent); - scoreUpdate(req, torrent.user, scoreConfig.action.uploadTorrentBeRecommend); + if (torrent.torrent_recommended !== 'level0') { + var act = scoreConfig.action.uploadTorrentBeRecommend; + act.params = { + tid: torrent._id + }; + scoreUpdate(req, torrent.user, act); + } //create trace log traceLogCreate(req, traceConfig.action.adminTorrentSetRecommendLevel, { @@ -1362,7 +1384,11 @@ exports.setReviewedStatus = function (req, res) { res.json(torrent); announceTorrentToIRC(torrent, req); - scoreUpdate(req, torrent.user, scoreConfig.action.uploadTorrent); + var act = scoreConfig.action.uploadTorrent; + act.params = { + tid: torrent._id + }; + scoreUpdate(req, torrent.user, act); //add server message if (serverNoticeConfig.action.torrentReviewed.enable) { @@ -1496,7 +1522,11 @@ exports.delete = function (req, res) { //only update score when torrent status is reviewed if (torrent.torrent_status === 'reviewed') { - scoreUpdate(req, torrent.user, scoreConfig.action.uploadTorrentBeDeleted); + var act = scoreConfig.action.uploadTorrentBeDeleted; + act.params = { + tid: torrent._id + }; + scoreUpdate(req, torrent.user, act); } //create trace log diff --git a/modules/users/server/controllers/admin.server.controller.js b/modules/users/server/controllers/admin.server.controller.js index 195928af..7616dd18 100644 --- a/modules/users/server/controllers/admin.server.controller.js +++ b/modules/users/server/controllers/admin.server.controller.js @@ -327,7 +327,11 @@ exports.updateUserScore = function (req, res) { score: sv, reason: { event: scoreConfig.action.adminModify.name, - params: undefined + event_str: scoreConfig.action.adminModify.content, + params: { + uid: req.user._id, + uname: req.user.displayName + } } }); sl.save(function (err) {