#136: page of list of users

This commit is contained in:
Davide Alberani 2016-07-08 22:10:42 +02:00
parent 6aa219f265
commit 1ec1bca6fe
6 changed files with 102 additions and 3 deletions

View file

@ -74,6 +74,7 @@
<ul class="nav navbar-nav">
<li ng-class="{active: isActive('/events') || isActive('/event')}"><a ui-sref="events">{{'Events' | translate}}</a></li>
<li ng-if="hasPermission('admin|all')" ng-class="{active: isActive('/tickets')}"><a ui-sref="tickets">{{'All tickets' | translate}}</a></li>
<li ng-if="hasPermission('admin|all')" ng-class="{active: isActive('/users')}"><a ui-sref="users">{{'Users' | translate}}</a></li>
<li ng-if="hasPermission('admin|all')" ng-class="{active: isActive('/import/persons')}"><a ui-sref="import.persons">{{'Import tickets' | translate}}</a></li>
</ul>
</div>
@ -82,7 +83,7 @@
<li ng-if="info.user.username">
<span class="btn">{{info.user.username}}</span>
<span class="btn btn-link">
<a ng-controller="LoginCtrl" ng-click="logout()"><span class="fa fa-sign-out vcenter"></span>&nbsp;{{'logout' | translate}}</a>
<a ng-controller="UsersCtrl" ng-click="logout()"><span class="fa fa-sign-out vcenter"></span>&nbsp;{{'logout' | translate}}</a>
</span>
</li>
<li ng-if="!info.user.username">

View file

@ -159,10 +159,15 @@ eventManApp.config(['$stateProvider', '$urlRouterProvider',
templateUrl: 'import-persons.html',
controller: 'FileUploadCtrl'
})
.state('users', {
url: '/users',
templateUrl: 'users-list.html',
controller: 'UsersCtrl'
})
.state('login', {
url: '/login',
templateUrl: 'login.html',
controller: 'LoginCtrl'
controller: 'UsersCtrl'
});
}
]);

View file

@ -652,9 +652,22 @@ eventManControllers.controller('PersonDetailsCtrl', ['$scope', '$state', 'Person
);
eventManControllers.controller('LoginCtrl', ['$scope', '$rootScope', '$state', '$log', 'User',
eventManControllers.controller('UsersCtrl', ['$scope', '$rootScope', '$state', '$log', 'User',
function ($scope, $rootScope, $state, $log, User) {
$scope.loginData = {};
$scope.usersOrderProp = ['username'];
$scope.updateUsersList = function() {
if ($state.is('users')) {
$scope.users = User.all();
}
};
$scope.updateUsersList();
$scope.deleteUser = function(user_id) {
User.delete({id: user_id}, $scope.updateUsersList);
};
$scope.register = function() {
User.add($scope.newUser, function(data) {

View file

@ -234,6 +234,19 @@ eventManServices.factory('Info', ['$resource', '$rootScope',
eventManServices.factory('User', ['$resource', '$rootScope',
function($resource, $rootScope) {
return $resource('users/:id', {id: '@_id'}, {
all: {
method: 'GET',
interceptor : {responseError: $rootScope.errorHandler},
isArray: true,
transformResponse: function(data, headers) {
data = angular.fromJson(data);
if (data.error) {
return data;
}
return data.users;
}
},
get: {
method: 'GET',
interceptor : {responseError: $rootScope.errorHandler},
@ -251,6 +264,11 @@ eventManServices.factory('User', ['$resource', '$rootScope',
interceptor : {responseError: $rootScope.errorHandler}
},
update: {
method: 'PUT',
interceptor : {responseError: $rootScope.errorHandler}
},
login: {
method: 'POST',
url: '/login',

View file

@ -0,0 +1,54 @@
<!-- show the list of Users -->
<div class="container">
<h1>{{'Users' | translate}}
<button ng-click="$state.go('login')" class="btn btn-success">
<span class="fa fa-plus-circle vcenter"></span>
{{'Add user' | translate}}
</button>
</h1>
<div class="panel panel-primary table-striped top5">
<div class="panel-heading">{{'Users' | translate}}</div>
<div class="panel-body">
<form class="form-inline">
<div class="form-group">
<label for="query-users">{{'Search:' | translate}}</label>
<input userman-focus type="text" id="query-users" class="form-control" placeholder="{{'Username or email' | translate}}" ng-model="query" ng-model-options="{debounce: 600}">
</div>
<div class="form-group">
<label for="users-order">Sort by:</label>
<select id="users-order" class="form-control" ng-model="usersOrderProp">
<option value="username">{{'Username' | translate}}</option>
<option value="-username">{{'Username (descending)' | translate}}</option>
<option value="email">{{'Email' | translate}}</option>
<option value="-email">{{'Email (descending)' | translate}}</option>
</select>
</div>
</form>
<div ng-include=" 'modal-confirm-action.html' " class="hidden"></div>
<table class="table table-striped">
<thead>
<tr>
<th><strong>{{'User' | translate}}</strong></th>
<th><strong>{{'Actions' | translate}}</strong></th>
</tr>
</thead>
<tbody>
<tr ng-repeat="user in users | splittedFilter:query | orderBy:usersOrderProp">
<td>
<span>
<strong>
<a ui-sref="user.edit({id: user._id})">{{user.username}}</a><span ng-if="user.email && user.email != user.username"> &lt;{{user.email}}&gt;</a>
</strong>
</span>
</td>
<td>
<button ng-if="hasPermission('user|delete')" ng-click="deleteUser(user._id)" type="button" class="btn btn-link fa fa-trash fa-lg" title="{{'Delete' | translate}}"></button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View file

@ -733,6 +733,14 @@ class UsersHandler(CollectionHandler):
document = 'user'
collection = 'users'
def filter_get_all(self, data):
if 'users' not in data:
return data
for user in data['users']:
if 'password' in user:
del user['password']
return data
def filter_input_post_all(self, data):
username = (data.get('username') or '').strip()
password = (data.get('password') or '').strip()