mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-02-28 01:00:59 +01:00
feat(about): admin, oper, group owner all can remove member of group
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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'
|
||||
// }
|
||||
//}
|
||||
});
|
||||
}
|
||||
}());
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
<li><span class="data-founder">{{'ABOUT.GROUP_FOUNDER' | translate}}{{vm.maker.user.displayName}}</span></li>
|
||||
<li><i class="fa fa-user-circle-o"> {{vm.maker.members.length}}</i></li>
|
||||
<li><i class="fa fa-upload"> {{vm.maker.torrent_count}}</i></li>
|
||||
<li><i class="fa fa-star-half-o"> {{vm.maker.vote_average}}/{{vm.maker.vote_count}}{{ 'TMDB_FIELDS.VOTE_UNIT' | translate}}</i></li>
|
||||
<li>
|
||||
<i class="fa fa-star-half-o"> {{vm.maker.vote_average}}/{{vm.maker.vote_count}}{{ 'TMDB_FIELDS.VOTE_UNIT' | translate}}</i>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
@@ -45,11 +47,16 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row margin-bottom-20">
|
||||
<div class="row maker-members margin-bottom-40 margin-top-30">
|
||||
<div class="col-xs-6 col-sm-3 col-md-2" ng-repeat="u in vm.maker.members">
|
||||
<div>
|
||||
<div class="margin-top-10">
|
||||
<span user-info="u" info-class="maker-avatar" info-avatar></span>
|
||||
<span user-info="u" info-name></span>
|
||||
<i class="fa fa-remove"
|
||||
ng-click="vm.removeMember(vm.maker, u);"
|
||||
title="{{'ABOUT.REMOVE_MEMBER_TITLE' | translate}}"
|
||||
ng-if="(vm.user.isOper || vm.isOwner(vm.maker)) && (!vm.isFounder(u, vm.maker))">
|
||||
</i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -58,7 +65,15 @@
|
||||
<div class="col-sm-12">
|
||||
<div class="maker-button text-right">
|
||||
<button class="btn btn-width-80" mouse-enter-toggle-class="btn-success" base-class="btn-mt-o"
|
||||
ng-if="vm.user.isOper || vm.isOwner(vm.maker)" ng-click="vm.beginAddUser(vm.maker)">
|
||||
ng-if="vm.user.isOper || vm.isOwner(vm.maker)"
|
||||
uib-popover-template="vm.addMemberPopover.templateUrl"
|
||||
popover-append-to-body="true"
|
||||
popover-title="{{vm.addMemberPopover.title | translate}}"
|
||||
popover-trigger="'outsideClick'"
|
||||
popover-placement="top"
|
||||
popover-is-open="vm.addMemberPopover.isOpen"
|
||||
popover-class="add-member-popover"
|
||||
ng-click="vm.addMemberPopover.isOpen=true; vm.addMemberPopover.username='';">
|
||||
{{'ABOUT.BTN_ADD_USER' | translate}}
|
||||
</button>
|
||||
<button class="btn btn-width-80" mouse-enter-toggle-class="btn-default" base-class="btn-mt-o"
|
||||
@@ -240,4 +255,19 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/ng-template" id="add-member.html">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<input type="text" ng-model="vm.addMemberPopover.username" class="form-control"
|
||||
placeholder="{{ 'STATUS_FIELD.USERNAME' | translate }}" autofocus>
|
||||
</div>
|
||||
<div class="margin-top-10">
|
||||
<button class="btn btn-default btn-width-80" ng-disabled="!vm.addMemberPopover.username"
|
||||
ng-click="vm.addMember();">{{ 'FORUMS.BTN_ADD' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</script>
|
||||
</div>
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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'],
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user