PDF rausgenommen
This commit is contained in:
@ -0,0 +1,80 @@
|
||||
<div class="usersManager">
|
||||
<div ng-show="!$ctrl.isEditing">
|
||||
<div piwik-content-intro>
|
||||
<h2
|
||||
piwik-enriched-headline
|
||||
help-url="https://matomo.org/docs/manage-users/"
|
||||
feature-name="Users Management"
|
||||
>
|
||||
{{:: 'UsersManager_ManageUsers'|translate }}
|
||||
</h2>
|
||||
|
||||
<p>
|
||||
{{:: 'UsersManager_ManageUsersDesc'|translate }}
|
||||
</p>
|
||||
|
||||
<div class="row add-user-container">
|
||||
<div class="col s12">
|
||||
<div class="input-field">
|
||||
<a class="btn add-new-user" ng-click="$ctrl.isEditing = true; $ctrl.userBeingEdited = null;">
|
||||
{{:: 'UsersManager_AddUser'|translate }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="input-field" ng-if="$ctrl.currentUserRole !== 'superuser'">
|
||||
<a class="btn add-existing-user" ng-click="$ctrl.showAddExistingUserModal();">
|
||||
{{:: 'UsersManager_AddExistingUser'|translate }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<piwik-paged-users-list
|
||||
on-edit-user="$ctrl.onEditUser(user)"
|
||||
on-change-user-role="$ctrl.onChangeUserRole(users, role)"
|
||||
on-delete-user="$ctrl.onDeleteUser(users)"
|
||||
on-search-change="$ctrl.searchParams = params; $ctrl.fetchUsers();"
|
||||
initial-site-id="$ctrl.initialSiteId"
|
||||
initial-site-name="$ctrl.initialSiteName"
|
||||
is-loading-users="$ctrl.isLoadingUsers"
|
||||
current-user-role="$ctrl.currentUserRole"
|
||||
access-levels="$ctrl.accessLevels"
|
||||
filter-access-levels="$ctrl.filterAccessLevels"
|
||||
search-params="$ctrl.searchParams"
|
||||
users="$ctrl.users"
|
||||
total-entries="$ctrl.totalEntries"
|
||||
></piwik-paged-users-list>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- TODO: whether a user is being edited should be part of the URL -->
|
||||
<div ng-if="$ctrl.isEditing">
|
||||
<piwik-user-edit-form
|
||||
on-done-editing="$ctrl.onDoneEditing(isUserModified);"
|
||||
user="$ctrl.userBeingEdited"
|
||||
current-user-role="$ctrl.currentUserRole"
|
||||
allow-superuser-edit="$ctrl.isCurrentUserSuperUser"
|
||||
access-levels="$ctrl.accessLevels"
|
||||
filter-access-levels="$ctrl.filterAccessLevels"
|
||||
initial-site-id="$ctrl.initialSiteId"
|
||||
initial-site-name="$ctrl.initialSiteName"
|
||||
></piwik-user-edit-form>
|
||||
</div>
|
||||
|
||||
<div class="add-existing-user-modal modal">
|
||||
<div class="modal-content">
|
||||
<h3>{{:: 'UsersManager_AddExistingUser'|translate }}</h3>
|
||||
<p>{{:: 'UsersManager_EnterUsernameOrEmail'|translate }}:</p>
|
||||
<div
|
||||
piwik-field
|
||||
name="add-existing-user-email"
|
||||
uicontrol="text"
|
||||
ng-model="$ctrl.addNewUserLoginEmail"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="" class="modal-action modal-close btn" ng-click="$ctrl.addExistingUser()">{{:: 'General_Add'|translate }}</a>
|
||||
<a href="" class="modal-action modal-close modal-no" ng-click="$ctrl.addNewUserLoginEmail = null;">{{:: 'General_Cancel'|translate }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,220 @@
|
||||
/*!
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*/
|
||||
|
||||
/**
|
||||
* Usage:
|
||||
* <piwik-users-manager>
|
||||
*/
|
||||
(function () {
|
||||
angular.module('piwikApp').component('piwikUsersManager', {
|
||||
templateUrl: 'plugins/UsersManager/angularjs/users-manager/users-manager.component.html?cb=' + piwik.cacheBuster,
|
||||
bindings: {
|
||||
currentUserRole: '<',
|
||||
initialSiteName: '@',
|
||||
initialSiteId: '@',
|
||||
accessLevels: '<',
|
||||
filterAccessLevels: '<'
|
||||
},
|
||||
controller: UsersManagerController
|
||||
});
|
||||
|
||||
UsersManagerController.$inject = ['$element', 'piwik', 'piwikApi', '$q', '$timeout'];
|
||||
|
||||
function UsersManagerController($element, piwik, piwikApi, $q, $timeout) {
|
||||
var vm = this;
|
||||
vm.isEditing = false;
|
||||
vm.isCurrentUserSuperUser = true;
|
||||
|
||||
// search state
|
||||
vm.users = [];
|
||||
vm.totalEntries = null;
|
||||
vm.searchParams = {};
|
||||
vm.isLoadingUsers = false;
|
||||
|
||||
vm.$onInit = $onInit;
|
||||
vm.$onChanges = $onChanges;
|
||||
vm.$onDestroy = $onDestroy;
|
||||
vm.onEditUser = onEditUser;
|
||||
vm.onDoneEditing = onDoneEditing;
|
||||
vm.showAddExistingUserModal = showAddExistingUserModal;
|
||||
vm.onChangeUserRole = onChangeUserRole;
|
||||
vm.onDeleteUser = onDeleteUser;
|
||||
vm.fetchUsers = fetchUsers;
|
||||
vm.addExistingUser = addExistingUser;
|
||||
|
||||
function onChangeUserRole(users, role) {
|
||||
vm.isLoadingUsers = true;
|
||||
|
||||
$q.resolve().then(function () {
|
||||
if (users === 'all') {
|
||||
return getAllUsersInSearch();
|
||||
}
|
||||
return users;
|
||||
}).then(function (users) {
|
||||
return users.filter(function (user) {
|
||||
return user.role !== 'superuser';
|
||||
}).map(function (user) {
|
||||
return user.login;
|
||||
});
|
||||
}).then(function (userLogins) {
|
||||
var requests = userLogins.map(function (login) {
|
||||
return {
|
||||
method: 'UsersManager.setUserAccess',
|
||||
userLogin: login,
|
||||
access: role,
|
||||
idSites: vm.searchParams.idSite,
|
||||
ignoreSuperusers: 1
|
||||
};
|
||||
});
|
||||
return piwikApi.bulkFetch(requests, { createErrorNotification: true });
|
||||
}).catch(function (e) {
|
||||
// ignore (errors will still be displayed to the user)
|
||||
}).then(function () {
|
||||
return fetchUsers();
|
||||
});
|
||||
}
|
||||
|
||||
function onDeleteUser(users) {
|
||||
vm.isLoadingUsers = true;
|
||||
|
||||
$q.resolve().then(function () {
|
||||
if (users === 'all') {
|
||||
return getAllUsersInSearch();
|
||||
}
|
||||
return users;
|
||||
}).then(function (users) {
|
||||
return users.map(function (user) { return user.login; });
|
||||
}).then(function (userLogins) {
|
||||
var requests = userLogins.map(function (login) {
|
||||
return {
|
||||
method: 'UsersManager.deleteUser',
|
||||
userLogin: login
|
||||
};
|
||||
});
|
||||
return piwikApi.bulkFetch(requests, { createErrorNotification: true });
|
||||
}).catch(function () {
|
||||
// ignore (errors will still be displayed to the user)
|
||||
}).then(function () {
|
||||
return fetchUsers();
|
||||
});
|
||||
}
|
||||
|
||||
function $onInit() {
|
||||
// TODO: maybe this should go in another directive...
|
||||
$element.tooltip({
|
||||
track: true,
|
||||
content: function() {
|
||||
var title = $(this).attr('title');
|
||||
return piwikHelper.escape(title.replace(/\n/g, '<br />'));
|
||||
},
|
||||
show: false,
|
||||
hide: false
|
||||
});
|
||||
|
||||
if (vm.currentUserRole === 'superuser') {
|
||||
vm.filterAccessLevels.push({ key: 'superuser', value: 'Superuser' });
|
||||
}
|
||||
|
||||
vm.searchParams = {
|
||||
offset: 0,
|
||||
limit: 20,
|
||||
filter_search: '',
|
||||
filter_access: '',
|
||||
idSite: vm.initialSiteId
|
||||
};
|
||||
|
||||
fetchUsers();
|
||||
}
|
||||
|
||||
function $onChanges(changes) {
|
||||
if (changes.limit) {
|
||||
fetchUsers();
|
||||
}
|
||||
}
|
||||
|
||||
function $onDestroy() {
|
||||
try {
|
||||
$element.tooltip('destroy');
|
||||
} catch (e) {
|
||||
// empty
|
||||
}
|
||||
}
|
||||
|
||||
function fetchUsers() {
|
||||
vm.isLoadingUsers = true;
|
||||
return piwikApi.fetch($.extend({}, vm.searchParams, {
|
||||
method: 'UsersManager.getUsersPlusRole'
|
||||
}), { includeHeaders: true }).then(function (result) {
|
||||
vm.totalEntries = parseInt(result.headers('x-matomo-total-results')) || 0;
|
||||
vm.users = result.response;
|
||||
|
||||
vm.isLoadingUsers = false;
|
||||
}).catch(function () {
|
||||
vm.isLoadingUsers = false;
|
||||
});
|
||||
}
|
||||
|
||||
function getAllUsersInSearch() {
|
||||
return piwikApi.fetch({
|
||||
method: 'UsersManager.getUsersPlusRole',
|
||||
filter_search: vm.searchParams.filter_search,
|
||||
filter_access: vm.searchParams.filter_access,
|
||||
idSite: vm.searchParams.idSite,
|
||||
filter_limit: '-1'
|
||||
});
|
||||
}
|
||||
|
||||
function onEditUser(user) {
|
||||
piwik.helper.lazyScrollToContent();
|
||||
vm.isEditing = true;
|
||||
vm.userBeingEdited = user;
|
||||
}
|
||||
|
||||
function onDoneEditing(isUserModified) {
|
||||
vm.isEditing = false;
|
||||
if (isUserModified) { // if a user was modified, we must reload the users list
|
||||
fetchUsers();
|
||||
}
|
||||
}
|
||||
|
||||
function showAddExistingUserModal() {
|
||||
$element.find('.add-existing-user-modal').openModal({ dismissible: false });
|
||||
}
|
||||
|
||||
function addExistingUser() {
|
||||
vm.isLoadingUsers = true;
|
||||
return piwikApi.fetch({
|
||||
method: 'UsersManager.userExists',
|
||||
userLogin: vm.addNewUserLoginEmail
|
||||
}).then(function (response) {
|
||||
if (response && response.value) {
|
||||
return vm.addNewUserLoginEmail;
|
||||
}
|
||||
|
||||
return piwikApi.fetch({
|
||||
method: 'UsersManager.getUserLoginFromUserEmail',
|
||||
userEmail: vm.addNewUserLoginEmail
|
||||
}).then(function (response) {
|
||||
return response.value;
|
||||
});
|
||||
}).then(function (login) {
|
||||
return piwikApi.post({
|
||||
method: 'UsersManager.setUserAccess'
|
||||
}, {
|
||||
userLogin: login,
|
||||
access: 'view',
|
||||
idSites: vm.searchParams.idSite
|
||||
});
|
||||
}).catch(function (error) {
|
||||
vm.isLoadingUsers = false;
|
||||
throw error;
|
||||
}).then(function () {
|
||||
return fetchUsers();
|
||||
});
|
||||
}
|
||||
}
|
||||
})();
|
@ -0,0 +1,28 @@
|
||||
.usersManager {
|
||||
.card .card-content .card-title {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.add-user-container {
|
||||
&.row {
|
||||
margin-left: -0.75rem;
|
||||
margin-right: -0.75rem;
|
||||
}
|
||||
|
||||
> .col > .input-field {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.add-existing-user-modal {
|
||||
.form-group,.input-field,input.control_text {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.modal-no {
|
||||
float: right;
|
||||
margin-right: 1em;
|
||||
margin-top: 1em;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user