mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-03-06 12:11:02 +01:00
feat(uses): admin list pagination
This commit is contained in:
4
config/env/torrents.js
vendored
4
config/env/torrents.js
vendored
@@ -705,6 +705,7 @@ module.exports = {
|
||||
* @torrentsPerPage: torrents list page settings
|
||||
* @torrentsCommentsPerPage: torrent comments list settings
|
||||
* @tracesPerPage: system traces log list page settings
|
||||
* @adminUserListPerPage: admin manage users list page settings
|
||||
*/
|
||||
itemsPerPage: {
|
||||
topicsPerPage: 10,
|
||||
@@ -712,7 +713,8 @@ module.exports = {
|
||||
topicsSearchPerPage: 10,
|
||||
torrentsPerPage: 15,
|
||||
torrentsCommentsPerPage: 10,
|
||||
tracesPerPage: 30
|
||||
tracesPerPage: 30,
|
||||
adminUserListPerPage: 15
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,10 +5,12 @@
|
||||
.module('users.admin')
|
||||
.controller('UserListController', UserListController);
|
||||
|
||||
UserListController.$inject = ['$scope', '$filter', 'AdminService', 'DebugConsoleService'];
|
||||
UserListController.$inject = ['$scope', '$filter', 'AdminService', 'DebugConsoleService', 'MeanTorrentConfig', '$timeout'];
|
||||
|
||||
function UserListController($scope, $filter, AdminService, mtDebug) {
|
||||
function UserListController($scope, $filter, AdminService, mtDebug, MeanTorrentConfig, $timeout) {
|
||||
var vm = this;
|
||||
vm.itemsPerPageConfig = MeanTorrentConfig.meanTorrentConfig.itemsPerPage;
|
||||
|
||||
vm.buildPager = buildPager;
|
||||
vm.figureOutItemsToDisplay = figureOutItemsToDisplay;
|
||||
vm.pageChanged = pageChanged;
|
||||
@@ -16,56 +18,61 @@
|
||||
vm.searchAdmin = false;
|
||||
vm.searchOper = false;
|
||||
|
||||
AdminService.query(function (data) {
|
||||
vm.users = data;
|
||||
mtDebug.info(data);
|
||||
vm.buildPager();
|
||||
});
|
||||
|
||||
/**
|
||||
* buildPager
|
||||
*/
|
||||
function buildPager() {
|
||||
vm.pagedItems = [];
|
||||
vm.itemsPerPage = 15;
|
||||
vm.itemsPerPage = vm.itemsPerPageConfig.adminUserListPerPage;
|
||||
vm.currentPage = 1;
|
||||
vm.figureOutItemsToDisplay();
|
||||
}
|
||||
|
||||
/**
|
||||
* figureOutItemsToDisplay
|
||||
* @param callback
|
||||
*/
|
||||
function figureOutItemsToDisplay() {
|
||||
vm.resultUsers = vm.users;
|
||||
if (vm.searchVip) {
|
||||
vm.resultUsers = $filter('filter')(vm.resultUsers, {
|
||||
isVip: true
|
||||
});
|
||||
}
|
||||
if (vm.searchAdmin) {
|
||||
vm.resultUsers = $filter('filter')(vm.resultUsers, {
|
||||
isAdmin: true
|
||||
});
|
||||
}
|
||||
if (vm.searchOper) {
|
||||
vm.resultUsers = $filter('filter')(vm.resultUsers, {
|
||||
isOper: true
|
||||
});
|
||||
}
|
||||
vm.filteredItems = $filter('filter')(vm.resultUsers, {
|
||||
$: vm.search
|
||||
function figureOutItemsToDisplay(callback) {
|
||||
vm.getUsers(vm.currentPage, function (items) {
|
||||
vm.filterLength = items.total;
|
||||
vm.pagedItems = items.rows;
|
||||
|
||||
if (callback) callback();
|
||||
});
|
||||
vm.filterLength = vm.filteredItems.length;
|
||||
var begin = ((vm.currentPage - 1) * vm.itemsPerPage);
|
||||
var end = begin + vm.itemsPerPage;
|
||||
vm.pagedItems = vm.filteredItems.slice(begin, end);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* getUsers
|
||||
* @param p
|
||||
* @param callback
|
||||
*/
|
||||
vm.getUsers = function (p, callback) {
|
||||
AdminService.get({
|
||||
skip: (p - 1) * vm.itemsPerPage,
|
||||
limit: vm.itemsPerPage,
|
||||
isVip: vm.searchVip || undefined,
|
||||
isOper: vm.searchOper || undefined,
|
||||
isAdmin: vm.searchAdmin || undefined,
|
||||
keys: vm.search
|
||||
}, function (data) {
|
||||
mtDebug.info(data);
|
||||
callback(data);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* pageChanged
|
||||
*/
|
||||
function pageChanged() {
|
||||
vm.figureOutItemsToDisplay();
|
||||
var element = angular.element('#top_of_users_list');
|
||||
|
||||
vm.figureOutItemsToDisplay(function () {
|
||||
$timeout(function () {
|
||||
$('html,body').animate({scrollTop: element[0].offsetTop + 15}, 200);
|
||||
}, 10);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
<section class="container">
|
||||
<div class="page-header">
|
||||
<section class="container" ng-init="vm.buildPager();">
|
||||
<div class="page-header" id="top_of_users_list">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<h3>{{ 'USERS_LIST' | translate}}</h3>
|
||||
</div>
|
||||
<div class="col-md-4 checkbox-inline" style="margin-top: 1em">
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" ng-model="vm.searchVip" ng-change="vm.figureOutItemsToDisplay()"> isVip
|
||||
<input type="checkbox" ng-model="vm.searchVip" ng-change="vm.currentPage = 1; vm.figureOutItemsToDisplay()"> isVip
|
||||
</label>
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" ng-model="vm.searchAdmin" ng-change="vm.figureOutItemsToDisplay()"> isAdmin
|
||||
<input type="checkbox" ng-model="vm.searchAdmin" ng-change="vm.currentPage = 1; vm.figureOutItemsToDisplay()"> isAdmin
|
||||
</label>
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" ng-model="vm.searchOper" ng-change="vm.figureOutItemsToDisplay()"> isOper
|
||||
<input type="checkbox" ng-model="vm.searchOper" ng-change="vm.currentPage = 1; vm.figureOutItemsToDisplay()"> isOper
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-md-4" style="margin-top: 1em">
|
||||
<input class="form-control col-md-4" type="text" ng-model="vm.search" placeholder="Search" ng-change="vm.figureOutItemsToDisplay()"/>
|
||||
<input class="form-control col-md-4" type="text" ng-model="vm.search" placeholder="Search" ng-change="vm.currentPage = 1; vm.figureOutItemsToDisplay()"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -10,6 +10,7 @@ var path = require('path'),
|
||||
Peer = mongoose.model('Peer'),
|
||||
Torrent = mongoose.model('Torrent'),
|
||||
Complete = mongoose.model('Complete'),
|
||||
async = require('async'),
|
||||
errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')),
|
||||
traceLogCreate = require(path.resolve('./config/lib/tracelog')).create;
|
||||
|
||||
@@ -17,6 +18,8 @@ const PEERSTATE_SEEDER = 'seeder';
|
||||
const PEERSTATE_LEECHER = 'leecher';
|
||||
|
||||
var traceConfig = config.meanTorrentConfig.trace;
|
||||
var mtDebug = require(path.resolve('./config/lib/debug'));
|
||||
|
||||
/**
|
||||
* Show the current user
|
||||
*/
|
||||
@@ -81,14 +84,94 @@ exports.delete = function (req, res) {
|
||||
* List of Users
|
||||
*/
|
||||
exports.list = function (req, res) {
|
||||
User.find({}, '-salt -password -providerData').sort('-created').populate('user', 'displayName').exec(function (err, users) {
|
||||
if (err) {
|
||||
return res.status(422).send({
|
||||
message: errorHandler.getErrorMessage(err)
|
||||
});
|
||||
}
|
||||
var condition = {};
|
||||
var keysA = [];
|
||||
var skip = 0;
|
||||
var limit = 0;
|
||||
var isVip = false;
|
||||
var isOper = false;
|
||||
var isAdmin = false;
|
||||
|
||||
res.json(users);
|
||||
if (req.query.skip !== undefined) {
|
||||
skip = parseInt(req.query.skip, 10);
|
||||
}
|
||||
if (req.query.limit !== undefined) {
|
||||
limit = parseInt(req.query.limit, 10);
|
||||
}
|
||||
if (req.query.isVip !== undefined) {
|
||||
isVip = req.query.isVip;
|
||||
}
|
||||
if (req.query.isOper !== undefined) {
|
||||
isOper = req.query.isOper;
|
||||
}
|
||||
if (req.query.isAdmin !== undefined) {
|
||||
isAdmin = req.query.isAdmin;
|
||||
}
|
||||
|
||||
if (req.query.keys && req.query.keys.length > 0) {
|
||||
var keysS = req.query.keys + '';
|
||||
var keysT = keysS.split(' ');
|
||||
|
||||
keysT.forEach(function (it) {
|
||||
var ti = new RegExp(it, 'i');
|
||||
keysA.push(ti);
|
||||
});
|
||||
}
|
||||
if (isVip === 'true') {
|
||||
condition.isVip = true;
|
||||
}
|
||||
if (isOper === 'true') {
|
||||
condition.roles = {$in: ['oper']};
|
||||
}
|
||||
if (isAdmin === 'true') {
|
||||
condition.roles = {$in: ['admin']};
|
||||
}
|
||||
if (isOper === 'true' && isAdmin === 'true') {
|
||||
condition.roles = {$in: ['oper', 'admin']};
|
||||
}
|
||||
|
||||
if (keysA.length > 0) {
|
||||
condition.$or = [
|
||||
{displayName: {'$all': keysA}},
|
||||
{email: {'$all': keysA}},
|
||||
{username: {'$all': keysA}}
|
||||
];
|
||||
}
|
||||
|
||||
mtDebug.debugBlue(condition);
|
||||
|
||||
var countQuery = function (callback) {
|
||||
User.count(condition, function (err, count) {
|
||||
if (err) {
|
||||
callback(err, null);
|
||||
} else {
|
||||
callback(null, count);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var findQuery = function (callback) {
|
||||
User.find(condition, '-salt -password -providerData')
|
||||
.sort('-created')
|
||||
.populate('invited_by', 'username displayName profileImageURL isVip uploaded downloaded')
|
||||
.skip(skip)
|
||||
.limit(limit)
|
||||
.exec(function (err, users) {
|
||||
if (err) {
|
||||
callback(err, null);
|
||||
} else {
|
||||
callback(null, users);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
async.parallel([countQuery, findQuery], function (err, results) {
|
||||
if (err) {
|
||||
mtDebug.debugRed(err);
|
||||
return res.status(422).send(err);
|
||||
} else {
|
||||
res.json({rows: results[1], total: results[0]});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user