PDF rausgenommen

This commit is contained in:
aschwarz
2023-01-23 11:03:31 +01:00
parent 82d562a322
commit a6523903eb
28078 changed files with 4247552 additions and 2 deletions

View File

@ -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>

View File

@ -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();
});
}
}
})();

View File

@ -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;
}
}
}