mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-05-07 14:07:00 +02:00
feat(maker): admin oper can create maker group for user now, in user manager page
This commit is contained in:
@@ -6,10 +6,10 @@
|
||||
.controller('UserController', UserController);
|
||||
|
||||
UserController.$inject = ['$scope', '$state', '$window', 'Authentication', 'userResolve', 'Notification', 'NotifycationService', 'MeanTorrentConfig',
|
||||
'AdminService', 'ScoreLevelService', 'DebugConsoleService', 'TorrentGetInfoServices'];
|
||||
'AdminService', 'ScoreLevelService', 'DebugConsoleService', 'TorrentGetInfoServices', 'SideOverlay', 'MakerGroupService'];
|
||||
|
||||
function UserController($scope, $state, $window, Authentication, user, Notification, NotifycationService, MeanTorrentConfig,
|
||||
AdminService, ScoreLevelService, mtDebug, TorrentGetInfoServices) {
|
||||
AdminService, ScoreLevelService, mtDebug, TorrentGetInfoServices, SideOverlay, MakerGroupService) {
|
||||
var vm = this;
|
||||
vm.TGI = TorrentGetInfoServices;
|
||||
vm.authentication = Authentication;
|
||||
@@ -26,6 +26,7 @@
|
||||
vm.scoreLevelData = ScoreLevelService.getScoreLevelJson(vm.user.score);
|
||||
|
||||
vm.searchTags = [];
|
||||
vm.maker = {};
|
||||
|
||||
vm.setUserScorePopover = {
|
||||
title: 'SCORE_TITLE',
|
||||
@@ -45,6 +46,7 @@
|
||||
isOpen: false
|
||||
};
|
||||
|
||||
mtDebug.info(vm.user);
|
||||
/**
|
||||
* remove
|
||||
* @param user
|
||||
@@ -151,6 +153,51 @@
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* showMakerGroup
|
||||
* @param evt
|
||||
*/
|
||||
vm.showMakerGroup = function (evt) {
|
||||
vm.maker = {};
|
||||
SideOverlay.open(evt, 'makerSlide');
|
||||
};
|
||||
|
||||
/**
|
||||
* hideTagsPopup
|
||||
*/
|
||||
vm.hideMakerPopup = function () {
|
||||
SideOverlay.close(null, 'makerSlide');
|
||||
};
|
||||
|
||||
/**
|
||||
* createMakerGroup
|
||||
*/
|
||||
vm.createMakerGroup = function () {
|
||||
vm.maker.userId = vm.user._id;
|
||||
var maker = new MakerGroupService(vm.maker);
|
||||
|
||||
mtDebug.info(maker);
|
||||
|
||||
maker.$save(function (response) {
|
||||
successCallback(response);
|
||||
}, function (errorResponse) {
|
||||
errorCallback(errorResponse);
|
||||
});
|
||||
|
||||
function successCallback(res) {
|
||||
vm.maker = {};
|
||||
vm.user = res;
|
||||
NotifycationService.showSuccessNotify('ABOUT.MAKER_CREATE_SUCCESSFULLY');
|
||||
SideOverlay.close(null, 'makerSlide');
|
||||
}
|
||||
|
||||
function errorCallback(res) {
|
||||
vm.maker = {};
|
||||
NotifycationService.showErrorNotify(res.data.message, 'ABOUT.MAKER_CREATE_FAILED');
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* onUserRoleChanged
|
||||
* admin set user`s role
|
||||
|
||||
@@ -72,13 +72,26 @@
|
||||
<dd class="h-line">
|
||||
<mark>{{ vm.user.roles[0] }}</mark>
|
||||
<div class="pull-right" ng-if="vm.authentication.user.username != vm.user.username && vm.authentication.user.isAdmin">
|
||||
<select ng-model="vm.selectedRole" ng-change="vm.onUserRoleChanged();">
|
||||
<select class="width-100" ng-model="vm.selectedRole" ng-change="vm.onUserRoleChanged();">
|
||||
<option ng-repeat="r in vm.userRolesConfig" value="{{r}}">{{ r }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</dd>
|
||||
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.MAKER' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<span ng-class="maker-list" ng-repeat="m in vm.user.makers">{{m.name}}</span>
|
||||
<span ng-if="vm.user.makers.length==0">-</span>
|
||||
|
||||
<div class="pull-right"
|
||||
ng-if="vm.authentication.user.isOper && vm.user.makers.length==0">
|
||||
<button class="btn btn-default btn-xs btn-width-100" ng-click="vm.showMakerGroup($event);">
|
||||
{{'STATUS_FIELD.BTN_CREATE_MAKER' | translate}}
|
||||
</button>
|
||||
</div>
|
||||
</dd>
|
||||
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.STATUS' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<span ng-class="{'span-banned': vm.user.status == 'banned'}">{{ 'STATUS_FIELD.' + vm.user.status.toUpperCase() | translate }}</span>
|
||||
@@ -233,6 +246,25 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="makerSlide" side-overlay="right" side-class="maker-side-overlay" side-close-on-esc side-modal>
|
||||
<h4 translate="ABOUT.FORM_MAKER_FOR" translate-values="{name: vm.user.displayName}"></h4>
|
||||
<div class="maker-form">
|
||||
<input type="text" class="form-control" id="name" placeholder="{{'ABOUT.FORM_MAKER_NAME' | translate}}"
|
||||
ng-model="vm.maker.name" autofocus>
|
||||
|
||||
<textarea class="form-control" id="desc" placeholder="{{'ABOUT.FORM_MAKER_DESC' | translate}}"
|
||||
ng-model="vm.maker.desc"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="bottom-control">
|
||||
<button class="btn btn-success btn-width-100"
|
||||
ng-disabled="!vm.maker.name || !vm.maker.desc"
|
||||
ng-click="vm.createMakerGroup();">{{ 'BUTTON_SAVE' | translate }}
|
||||
</button>
|
||||
<button class="btn btn-default btn-width-100" ng-click="vm.hideMakerPopup();">{{ 'BUTTON_CANCEL' | translate }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/ng-template" id="set-user-score.html">
|
||||
<form class="form-inline set-score-popover-form text-center">
|
||||
<div class="form-group">
|
||||
|
||||
@@ -56,6 +56,12 @@
|
||||
<mark>{{ vm.user.roles[0] }}</mark>
|
||||
</dd>
|
||||
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.MAKER' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<span ng-class="maker-list" ng-repeat="m in vm.user.makers">{{m.name}}</span>
|
||||
<span ng-if="vm.user.makers.length==0">-</span>
|
||||
</dd>
|
||||
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.SCORE' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<span class="text-score">{{ vm.user.score }}</span> <span score-level="vm.scoreLevelData.currLevel"></span> <a
|
||||
|
||||
@@ -54,6 +54,12 @@
|
||||
<mark>{{ vm.user.roles[0] }}</mark>
|
||||
</dd>
|
||||
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.MAKER' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<span ng-class="maker-list" ng-repeat="m in vm.user.makers">{{m.name}}</span>
|
||||
<span ng-if="vm.user.makers.length==0">-</span>
|
||||
</dd>
|
||||
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.STATUS' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<span ng-class="{'span-banned': vm.user.status == 'banned'}">{{ 'STATUS_FIELD.' + vm.user.status.toUpperCase() | translate }}</span>
|
||||
|
||||
@@ -22,6 +22,7 @@ module.exports = function () {
|
||||
email: usernameOrEmail.toLowerCase()
|
||||
}]
|
||||
}).populate('invited_by', 'username displayName profileImageURL')
|
||||
.populate('makers', 'name')
|
||||
.exec(function (err, user) {
|
||||
console.log(user);
|
||||
if (err) {
|
||||
|
||||
@@ -22,9 +22,11 @@ module.exports = function (app) {
|
||||
passport.deserializeUser(function (id, done) {
|
||||
User.findOne({
|
||||
_id: id
|
||||
}, '-salt -password').populate('invited_by', 'username displayName profileImageURL').exec(function (err, user) {
|
||||
done(err, user);
|
||||
});
|
||||
}, '-salt -password')
|
||||
.populate('invited_by', 'username displayName profileImageURL')
|
||||
.populate('makers', 'name').exec(function (err, user) {
|
||||
done(err, user);
|
||||
});
|
||||
});
|
||||
|
||||
// Initialize strategies
|
||||
|
||||
@@ -155,6 +155,7 @@ exports.list = function (req, res) {
|
||||
User.find(condition, '-salt -password -providerData')
|
||||
.sort('-created')
|
||||
.populate('invited_by', 'username displayName profileImageURL isVip uploaded downloaded')
|
||||
.populate('makers', 'name')
|
||||
.skip(skip)
|
||||
.limit(limit)
|
||||
.exec(function (err, users) {
|
||||
@@ -508,14 +509,17 @@ exports.userByID = function (req, res, next, id) {
|
||||
});
|
||||
}
|
||||
|
||||
User.findById(id, '-salt -password -providerData').populate('invited_by', 'username displayName profileImageURL').exec(function (err, user) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
} else if (!user) {
|
||||
return next(new Error('Failed to load user ' + id));
|
||||
}
|
||||
User.findById(id, '-salt -password -providerData')
|
||||
.populate('invited_by', 'username displayName profileImageURL')
|
||||
.populate('makers', 'name')
|
||||
.exec(function (err, user) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
} else if (!user) {
|
||||
return next(new Error('Failed to load user ' + id));
|
||||
}
|
||||
|
||||
req.model = user;
|
||||
next();
|
||||
});
|
||||
req.model = user;
|
||||
next();
|
||||
});
|
||||
};
|
||||
|
||||
@@ -19,14 +19,17 @@ exports.userByID = function (req, res, next, id) {
|
||||
|
||||
User.findOne({
|
||||
_id: id
|
||||
}).populate('invited_by', 'username displayName profileImageURL').exec(function (err, user) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
} else if (!user) {
|
||||
return next(new Error('Failed to load User ' + id));
|
||||
}
|
||||
})
|
||||
.populate('invited_by', 'username displayName profileImageURL')
|
||||
.populate('makers', 'name')
|
||||
.exec(function (err, user) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
} else if (!user) {
|
||||
return next(new Error('Failed to load User ' + id));
|
||||
}
|
||||
|
||||
req.profile = user;
|
||||
next();
|
||||
});
|
||||
req.profile = user;
|
||||
next();
|
||||
});
|
||||
};
|
||||
|
||||
@@ -200,6 +200,11 @@ var UserSchema = new Schema({
|
||||
type: Schema.Types.ObjectId,
|
||||
ref: 'User'
|
||||
},
|
||||
makers: [{
|
||||
type: Schema.Types.ObjectId,
|
||||
ref: 'Maker'
|
||||
}],
|
||||
|
||||
created: {
|
||||
type: Date,
|
||||
default: Date.now
|
||||
|
||||
Reference in New Issue
Block a user