diff --git a/modules/core/client/app/trans-string-en.js b/modules/core/client/app/trans-string-en.js
index f3454caf..5ac8b7b1 100644
--- a/modules/core/client/app/trans-string-en.js
+++ b/modules/core/client/app/trans-string-en.js
@@ -466,6 +466,8 @@
SET_IMAGE_FAILED: 'set user image failed',
SET_VIP_MONTHS_SUCCESSFULLY: 'update user vip data successfully',
SET_VIP_MONTHS_FAILED: 'update user vip data failed',
+ RESET_VIP_DATA_SUCCESSFULLY: 'reset user vip data successfully',
+ RESET_VIP_DATA_FAILED: 'reset user vip data failed',
SCORE_NUMBER: 'Score number',
SCORE_TITLE: 'Edit user score',
@@ -626,6 +628,7 @@
PICTURE: 'Profile picture',
RESET_DEFAULT_PICTURE: 'Reset to default picture',
ADD_VIP_MONTHS: '+ VIP a month',
+ RESET_VIP_DATA: 'Reset VIP Data',
USERNAME: 'Username',
DISPLAY_NAME: 'Display name',
HIDE_MORE_DETAIL: 'Hide more account detail info',
diff --git a/modules/core/client/app/trans-string-zh.js b/modules/core/client/app/trans-string-zh.js
index 0d47c1e3..b69b18af 100644
--- a/modules/core/client/app/trans-string-zh.js
+++ b/modules/core/client/app/trans-string-zh.js
@@ -466,6 +466,8 @@
SET_IMAGE_FAILED: '用户帐号图片修改失败',
SET_VIP_MONTHS_SUCCESSFULLY: '更新用户vip状态数据成功',
SET_VIP_MONTHS_FAILED: '更新用户vip状态数据失败',
+ RESET_VIP_DATA_SUCCESSFULLY: '重置用户vip状态数据成功',
+ RESET_VIP_DATA_FAILED: '重置用户vip状态数据失败',
SCORE_NUMBER: '积分数',
SCORE_TITLE: '修改积分',
@@ -626,6 +628,7 @@
PICTURE: '头像',
RESET_DEFAULT_PICTURE: '重置为默认图片',
ADD_VIP_MONTHS: '+ VIP一个月',
+ RESET_VIP_DATA: '重置 VIP 数据',
USERNAME: '用户名',
DISPLAY_NAME: '显示昵称',
HIDE_MORE_DETAIL: '隐藏更多的帐户详细信息',
diff --git a/modules/users/client/controllers/admin/user.client.controller.js b/modules/users/client/controllers/admin/user.client.controller.js
index 19106245..c8c8955d 100644
--- a/modules/users/client/controllers/admin/user.client.controller.js
+++ b/modules/users/client/controllers/admin/user.client.controller.js
@@ -154,6 +154,29 @@
}
};
+ /**
+ * resetVIPData
+ */
+ vm.resetVIPData = function () {
+ var user = vm.user;
+ AdminService.resetVIPData({
+ userId: user._id
+ })
+ .then(onSuccess)
+ .catch(onError);
+
+ function onSuccess(response) {
+ vm.user = response;
+ mtDebug.info(response);
+
+ NotifycationService.showSuccessNotify('RESET_VIP_DATA_SUCCESSFULLY');
+ }
+
+ function onError(response) {
+ NotifycationService.showErrorNotify(response.data.message, 'RESET_VIP_DATA_FAILED');
+ }
+ };
+
/**
* showMakerGroup
* @param evt
diff --git a/modules/users/client/services/users.client.service.js b/modules/users/client/services/users.client.service.js
index 4d1059f8..77668eb1 100644
--- a/modules/users/client/services/users.client.service.js
+++ b/modules/users/client/services/users.client.service.js
@@ -166,6 +166,13 @@
userId: '@userId',
months: '@months'
}
+ },
+ resetUserVIPData: {
+ method: 'PUT',
+ url: '/api/users/:userId/VIPMonths/reset',
+ params: {
+ userId: '@userId'
+ }
}
});
@@ -193,6 +200,9 @@
},
addVIPMonths: function (params) {
return this.updateUserVIPMonths(params).$promise;
+ },
+ resetVIPData: function (params) {
+ return this.resetUserVIPData(params).$promise;
}
});
diff --git a/modules/users/client/views/admin/view-user.client.view.html b/modules/users/client/views/admin/view-user.client.view.html
index beeef2a7..8a923937 100644
--- a/modules/users/client/views/admin/view-user.client.view.html
+++ b/modules/users/client/views/admin/view-user.client.view.html
@@ -43,6 +43,9 @@
+
diff --git a/modules/users/server/controllers/admin.server.controller.js b/modules/users/server/controllers/admin.server.controller.js
index aede5f19..f74528c0 100644
--- a/modules/users/server/controllers/admin.server.controller.js
+++ b/modules/users/server/controllers/admin.server.controller.js
@@ -372,6 +372,7 @@ exports.addVIPMonths = function (req, res) {
//create trace log
traceLogCreate(req, traceConfig.action.AdminUpdateUserVIPData, {
user: user._id,
+ reset: false,
months: months
});
});
@@ -382,6 +383,34 @@ exports.addVIPMonths = function (req, res) {
}
};
+/**
+ * resetVIPData
+ * @param req
+ * @param res
+ */
+exports.resetVIPData = function (req, res) {
+ var user = req.model;
+
+ user.vip_start_at = '';
+ user.vip_end_at = '';
+
+ user.save(function (err) {
+ if (err) {
+ return res.status(422).send({
+ message: errorHandler.getErrorMessage(err)
+ });
+ }
+
+ res.json(user);
+
+ //create trace log
+ traceLogCreate(req, traceConfig.action.AdminUpdateUserVIPData, {
+ user: user._id,
+ reset: true
+ });
+ });
+};
+
/**
* list user seeding torrents
* @param req
diff --git a/modules/users/server/policies/admin.server.policy.js b/modules/users/server/policies/admin.server.policy.js
index aff70fe0..b5859830 100644
--- a/modules/users/server/policies/admin.server.policy.js
+++ b/modules/users/server/policies/admin.server.policy.js
@@ -18,7 +18,8 @@ exports.invokeRolesPolicies = function () {
roles: ['admin'],
allows: [
{resources: '/api/users/:userId/role', permissions: '*'},
- {resources: '/api/users/:userId/VIPMonths/:months', permissions: '*'}
+ {resources: '/api/users/:userId/VIPMonths/:months', permissions: '*'},
+ {resources: '/api/users/:userId/VIPMonths/reset', permissions: '*'}
]
},
{
diff --git a/modules/users/server/routes/admin.server.routes.js b/modules/users/server/routes/admin.server.routes.js
index 0ffe7ca5..12c7cb49 100644
--- a/modules/users/server/routes/admin.server.routes.js
+++ b/modules/users/server/routes/admin.server.routes.js
@@ -43,6 +43,8 @@ module.exports = function (app) {
app.route('/api/users/:userId/resetImage').all(adminPolicy.isAllowed)
.put(admin.resetUserProfileImage);
+ app.route('/api/users/:userId/VIPMonths/reset').all(adminPolicy.isAllowed)
+ .put(admin.resetVIPData);
app.route('/api/users/:userId/VIPMonths/:months').all(adminPolicy.isAllowed)
.put(admin.addVIPMonths);