diff --git a/modules/about/client/controllers/about.client.controller.js b/modules/about/client/controllers/about.client.controller.js index d5d68895..bf5f672b 100644 --- a/modules/about/client/controllers/about.client.controller.js +++ b/modules/about/client/controllers/about.client.controller.js @@ -29,6 +29,12 @@ uibButtonConfig.activeClass = 'btn-success'; + vm.addMemberPopover = { + title: 'ABOUT.ADD_MEMBER_TITLE', + templateUrl: 'add-member.html', + isOpen: false + }; + vm.init = function () { }; @@ -149,6 +155,24 @@ } }; + /** + * isFounder + * @param u + * @param m + * @returns {boolean} + */ + vm.isFounder = function (u, m) { + if (m && u) { + if (m.user._id === u._id) { + return true; + } else { + return false; + } + } else { + return false; + } + }; + /** * getMakerDescContent * @param m @@ -158,6 +182,50 @@ return m ? marked(m.desc, {sanitize: true}) : 'NULL'; }; + /** + * addMember + */ + vm.addMember = function () { + MakerGroupService.addMember({ + _id: vm.maker._id, + _username: vm.addMemberPopover.username + }, function (res) { + vm.maker = res; + NotifycationService.showSuccessNotify('ABOUT.ADD_MEMBER_SUCCESSFULLY'); + vm.addMemberPopover.isOpen = false; + }, function (res) { + NotifycationService.showErrorNotify(res.data.message, 'ABOUT.ADD_MEMBER_FAILED'); + vm.addMemberPopover.isOpen = false; + }); + }; + + /** + * removeMember + * @param f forum + * @param m moderator + */ + vm.removeMember = function (m, u) { + var modalOptions = { + closeButtonText: $translate.instant('ABOUT.DELETE_CONFIRM_CANCEL'), + actionButtonText: $translate.instant('ABOUT.DELETE_CONFIRM_OK'), + headerText: $translate.instant('ABOUT.DELETE_CONFIRM_HEADER_TEXT'), + bodyText: $translate.instant('ABOUT.DELETE_MEMBER_CONFIRM_BODY_TEXT') + }; + + ModalConfirmService.showModal({}, modalOptions) + .then(function (result) { + MakerGroupService.removeMember({ + _id: m._id, + _username: u.username + }, function (res) { + vm.maker = res; + NotifycationService.showSuccessNotify('ABOUT.REMOVE_MEMBER_SUCCESSFULLY'); + }, function (res) { + NotifycationService.showErrorNotify(res.data.message, 'ABOUT.REMOVE_MEMBER_FAILED'); + }); + }); + }; + /** * beginEditMakerDesc * @param m diff --git a/modules/about/client/less/about.less b/modules/about/client/less/about.less index a3b0182c..1648ba35 100644 --- a/modules/about/client/less/about.less +++ b/modules/about/client/less/about.less @@ -226,9 +226,26 @@ width: 24px; } } + .maker-members { + .fa-remove { + cursor: pointer; + color: #888; + &:hover { + color: #fff; + } + } + } .maker-button { @media (max-width: @screen-xs-max) { text-align: left !important; } } } + +.add-member-popover { + max-width: 250px; + max-height: 150px; + width: 250px; + height: auto; +} + diff --git a/modules/about/client/services/makers.client.service.js b/modules/about/client/services/makers.client.service.js index 834e56d3..4147d9f3 100644 --- a/modules/about/client/services/makers.client.service.js +++ b/modules/about/client/services/makers.client.service.js @@ -27,16 +27,23 @@ params: { makerId: '@_id' } + }, + addMember: { + method: 'PUT', + url: '/api/makers/:makerId/addMember/:username', + params: { + makerId: '@_id', + username: '@_username' + } + }, + removeMember: { + method: 'PUT', + url: '/api/makers/:makerId/removeMember/:username', + params: { + makerId: '@_id', + username: '@_username' + } } - //, - //addModerator: { - // method: 'PUT', - // url: '/api/admin/forums/:forumId/addModerator/:username', - // params: { - // forumId: '@_id', - // username: '@_username' - // } - //} }); } }()); diff --git a/modules/about/client/views/maker-view.client.view.html b/modules/about/client/views/maker-view.client.view.html index e95af061..d50ee191 100644 --- a/modules/about/client/views/maker-view.client.view.html +++ b/modules/about/client/views/maker-view.client.view.html @@ -14,7 +14,9 @@
  • {{'ABOUT.GROUP_FOUNDER' | translate}}{{vm.maker.user.displayName}}
  • {{vm.maker.members.length}}
  • {{vm.maker.torrent_count}}
  • -
  • {{vm.maker.vote_average}}/{{vm.maker.vote_count}}{{ 'TMDB_FIELDS.VOTE_UNIT' | translate}}
  • +
  • + {{vm.maker.vote_average}}/{{vm.maker.vote_count}}{{ 'TMDB_FIELDS.VOTE_UNIT' | translate}} +
  • @@ -45,11 +47,16 @@
    -
    +
    -
    +
    + +
    @@ -58,7 +65,15 @@
    + + +
    \ No newline at end of file diff --git a/modules/about/server/controllers/makers.server.controller.js b/modules/about/server/controllers/makers.server.controller.js index 8560f060..98db5d71 100644 --- a/modules/about/server/controllers/makers.server.controller.js +++ b/modules/about/server/controllers/makers.server.controller.js @@ -171,6 +171,71 @@ exports.rating = function (req, res) { } }; +/** + * addMember + * @param req + * @param res + */ +exports.addMember = function (req, res) { + var maker = req.maker; + var mu = req.nameuser; + + var om = []; + maker.members.forEach(function (m) { + om.push(m._id.toString()); + }); + + if (om.indexOf(mu._id.toString()) >= 0) { + return res.status(422).send({ + message: 'username "' + mu.username + '" already exist!' + }); + } else { + maker.members.push(mu); + maker.save(function (err) { + if (err) { + return res.status(422).send({ + message: errorHandler.getErrorMessage(err) + }); + } else { + res.json(maker); + } + }); + } +}; + +/** + * removeMember + * @param req + * @param res + * @returns {*} + */ +exports.removeMember = function (req, res) { + var maker = req.maker; + var mu = req.nameuser; + + var om = []; + maker.members.forEach(function (m) { + om.push(m._id.toString()); + }); + + if (om.indexOf(mu._id.toString()) < 0) { + return res.status(422).send({ + message: 'username "' + mu.username + '" not exist!' + }); + } else { + maker.members.splice(om.indexOf(mu._id.toString()), 1); + maker.save(function (err) { + if (err) { + return res.status(422).send({ + message: errorHandler.getErrorMessage(err) + }); + } else { + res.json(maker); + } + }); + } +}; + /** * Maker middleware */ diff --git a/modules/about/server/policies/about.server.policy.js b/modules/about/server/policies/about.server.policy.js index 7c03c801..7bdcd10d 100644 --- a/modules/about/server/policies/about.server.policy.js +++ b/modules/about/server/policies/about.server.policy.js @@ -18,7 +18,9 @@ exports.invokeRolesPolicies = function () { {resources: '/api/makers', permissions: '*'}, {resources: '/api/makers/create/:userId', permissions: '*'}, {resources: '/api/makers/:makerId', permissions: '*'}, - {resources: '/api/makers/:makerId/rating', permissions: '*'} + {resources: '/api/makers/:makerId/rating', permissions: '*'}, + {resources: '/api/makers/:makerId/addMember/:username', permissions: '*'}, + {resources: '/api/makers/:makerId/removeMember/:username', permissions: '*'} ] }, { roles: ['user'], diff --git a/modules/about/server/routes/about.server.routes.js b/modules/about/server/routes/about.server.routes.js index e9b6f6b5..60ef3b67 100644 --- a/modules/about/server/routes/about.server.routes.js +++ b/modules/about/server/routes/about.server.routes.js @@ -21,5 +21,10 @@ module.exports = function (app) { app.route('/api/makers/:makerId/rating').all(aboutPolicy.isAllowed) .put(maker.rating); + app.route('/api/makers/:makerId/addMember/:username').all(aboutPolicy.isAllowed) + .put(maker.addMember); + app.route('/api/makers/:makerId/removeMember/:username').all(aboutPolicy.isAllowed) + .put(maker.removeMember); + app.param('makerId', maker.makerByID); }; diff --git a/modules/core/client/app/trans-string-en.js b/modules/core/client/app/trans-string-en.js index 2f5ed1bf..340b9e7b 100644 --- a/modules/core/client/app/trans-string-en.js +++ b/modules/core/client/app/trans-string-en.js @@ -487,10 +487,17 @@ DELETE_CONFIRM_CANCEL: 'Cancel', DELETE_CONFIRM_HEADER_TEXT: 'Delete Confirm', DELETE_CONFIRM_BODY_TEXT: 'Are you sure want to delete this maker group?', + DELETE_MEMBER_CONFIRM_BODY_TEXT: 'Are you sure want to delete the member from this group?', DELETE_SUCCESSFULLY: 'Maker group deleted successfully', DELETE_FAILED: 'Maker group deleted failed', RATING_SUCCESSFULLY: 'Rating for maker group successfully', - RATING_FAILED: 'Rating for maker group failed' + RATING_FAILED: 'Rating for maker group failed', + ADD_MEMBER_TITLE: 'Add Member', + ADD_MEMBER_SUCCESSFULLY: 'Add group member successfully', + ADD_MEMBER_FAILED: 'Add group member failed', + REMOVE_MEMBER_SUCCESSFULLY: 'Remove group member successfully', + REMOVE_MEMBER_FAILED: 'Remove group member failed', + REMOVE_MEMBER_TITLE: 'Remove this member' }, //collections views diff --git a/modules/core/client/app/trans-string-zh.js b/modules/core/client/app/trans-string-zh.js index 9430e1c6..7b534f59 100644 --- a/modules/core/client/app/trans-string-zh.js +++ b/modules/core/client/app/trans-string-zh.js @@ -487,10 +487,17 @@ DELETE_CONFIRM_CANCEL: '取消', DELETE_CONFIRM_HEADER_TEXT: '删除确认', DELETE_CONFIRM_BODY_TEXT: '您确定要删除这个资源压制小组?', + DELETE_MEMBER_CONFIRM_BODY_TEXT: '您确定要从小组删除这个成员?', DELETE_SUCCESSFULLY: '资源压制小组删除成功', DELETE_FAILED: '资源压制小组删除失败', RATING_SUCCESSFULLY: '为资源压制小组评分成功', - RATING_FAILED: '为资源压制小组评分失败' + RATING_FAILED: '为资源压制小组评分失败', + ADD_MEMBER_TITLE: '添加小组成员', + ADD_MEMBER_SUCCESSFULLY: '添加小组成员成功', + ADD_MEMBER_FAILED: '添加小组成员失败', + REMOVE_MEMBER_SUCCESSFULLY: '删除小组成员成功', + REMOVE_MEMBER_FAILED: '删除小组成员失败', + REMOVE_MEMBER_TITLE: '删除小组成员' }, //collections views diff --git a/modules/forums/server/controllers/forums.admin.server.controller.js b/modules/forums/server/controllers/forums.admin.server.controller.js index 1885854d..f7da7a8e 100644 --- a/modules/forums/server/controllers/forums.admin.server.controller.js +++ b/modules/forums/server/controllers/forums.admin.server.controller.js @@ -196,7 +196,7 @@ exports.userByUsername = function (req, res, next, uname) { if (err) { return next(err); } else if (!user) { - return res.status(404).send({ + return res.status(422).send({ message: 'No user with that username has been found' }); }