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,188 @@
<div
piwik-content-block
content-title="{{ $ctrl.getFormTitle() }}"
class="userEditForm"
ng-class="{ loading: $ctrl.isSavingUserInfo }"
>
<div class="row" piwik-form>
<div class="col m2 entityList" ng-if="!$ctrl.isAdd">
<ul class="listCircle">
<li ng-class="{active: $ctrl.activeTab === 'basic'}" class="menuBasicInfo">
<a href="" ng-click="$ctrl.activeTab = 'basic'">{{:: 'UsersManager_BasicInformation'|translate }}</a>
</li>
<li ng-class="{active: $ctrl.activeTab === 'permissions'}" class="menuPermissions">
<a href="" ng-click="$ctrl.activeTab = 'permissions'">
{{:: 'UsersManager_Permissions'|translate }}
</a>
<span class="icon-warning" ng-if="!$ctrl.userHasAccess && !$ctrl.user.superuser_access"></span>
</li>
<li ng-class="{active: $ctrl.activeTab === 'superuser'}" class="menuSuperuser" ng-if="$ctrl.currentUserRole == 'superuser'">
<a href="" ng-click="$ctrl.activeTab = 'superuser'">{{:: 'UsersManager_SuperUserAccess'|translate }}</a>
</li>
<li ng-class="{active: $ctrl.activeTab === '2fa'}" class="menuUserTwoFa" ng-if="$ctrl.currentUserRole == 'superuser' && $ctrl.user.uses_2fa && !$ctrl.isAdd">
<a href="" ng-click="$ctrl.activeTab = '2fa'">{{:: 'UsersManager_TwoFactorAuthentication'|translate }}</a>
</li>
</ul>
<div class="save-button-spacer hide-on-small-only">
</div>
<div class='entityCancel' ng-click="$ctrl.onDoneEditing({ isUserModified: $ctrl.isUserModified })">
<a href="" class="entityCancelLink">{{:: 'Mobile_NavigationBack'|translate }}</a>
</div>
</div>
<div class="visibleTab col m10">
<div ng-if="$ctrl.activeTab === 'basic'" class="basic-info-tab">
<div
piwik-field
uicontrol="text"
name="user_login"
ng-model="$ctrl.user.login"
title="Username"
maxlength="100"
data-disabled="$ctrl.isSavingUserInfo || !$ctrl.isAdd"
>
</div>
<div
piwik-field
uicontrol="password"
name="user_password"
ng-model="$ctrl.user.password"
title="Password"
data-disabled="$ctrl.isSavingUserInfo || ($ctrl.currentUserRole != 'superuser' && !$ctrl.isAdd)"
>
</div>
<div
piwik-field
uicontrol="text"
name="user_email"
ng-model="$ctrl.user.email"
title="Email"
maxlength="100"
data-disabled="$ctrl.isSavingUserInfo || ($ctrl.currentUserRole != 'superuser' && !$ctrl.isAdd)"
ng-if="$ctrl.currentUserRole == 'superuser' || $ctrl.isAdd"
>
</div>
<div
piwik-field
uicontrol="site"
name="user_site"
ng-model="$ctrl.firstSiteAccess"
title="First website permission"
data-disabled="$ctrl.isSavingUserInfo"
ng-if="$ctrl.isAdd"
ui-control-attributes="{ onlySitesWithAdminAccess: true }"
ng-attr-inline-help="{{:: 'UsersManager_FirstSiteInlineHelp'|translate }}"
>
</div>
<div piwik-save-button
saving="$ctrl.isSavingUserInfo"
onconfirm="$ctrl.saveUserInfo()"
ng-value="$ctrl.getSaveButtonLabel()"
data-disabled="$ctrl.isAdd && (!$ctrl.firstSiteAccess || !$ctrl.firstSiteAccess.id)"
ng-if="$ctrl.currentUserRole == 'superuser' || $ctrl.isAdd"
></div>
<div class='entityCancel' ng-if="$ctrl.isAdd">
<a href="" class="entityCancelLink" ng-click="$ctrl.onDoneEditing({ isUserModified: $ctrl.isUserModified })">{{:: 'General_Cancel'|translate }}</a>
</div>
</div>
<div ng-if="!$ctrl.isAdd" ng-show="$ctrl.activeTab === 'permissions'" class="user-permissions">
<piwik-user-permissions-edit
user-login="$ctrl.user.login"
ng-if="!$ctrl.user.superuser_access"
on-user-has-access-detected="$ctrl.userHasAccess = hasAccess"
on-access-change="$ctrl.isUserModified = true"
access-levels="$ctrl.accessLevels"
filter-access-levels="$ctrl.filterAccessLevels"
>
</piwik-user-permissions-edit>
<div ng-if="$ctrl.user.superuser_access" class="alert alert-info">
{{:: 'UsersManager_SuperUsersPermissionsNotice'|translate }}
</div>
</div>
<div ng-if="$ctrl.activeTab === 'superuser' && $ctrl.currentUserRole == 'superuser' && !$ctrl.isAdd" class="superuser-access">
<p>{{:: 'UsersManager_SuperUserIntro1'|translate }}</p>
<p><strong>{{:: 'UsersManager_SuperUserIntro2'|translate }}</strong></p>
<div
piwik-field
uicontrol="checkbox"
name="superuser_access"
ng-model="$ctrl.user.superuser_access"
ng-attr-title="{{:: 'UsersManager_HasSuperUserAccess'|translate }}"
ng-click="$ctrl.confirmSuperUserChange()"
data-disabled="$ctrl.isSavingUserInfo"
>
</div>
<div class="superuser-confirm-modal modal">
<div class="modal-content">
<h2>{{:: 'UsersManager_AreYouSure'|translate }}</h2>
<p ng-if="!$ctrl.user.superuser_access">
{{:: 'UsersManager_RemoveSuperuserAccessConfirm'|translate }}
</p>
<p ng-if="$ctrl.user.superuser_access">
{{:: 'UsersManager_AddSuperuserAccessConfirm'|translate }}
</p>
</div>
<div class="modal-footer">
<a href="" class="modal-action modal-close btn" ng-click="$ctrl.toggleSuperuserAccess()">{{:: 'General_Yes'|translate }}</a>
<a href="" class="modal-action modal-close modal-no" ng-click="$ctrl.user.superuser_access = !$ctrl.user.superuser_access">{{:: 'General_No'|translate }}</a>
</div>
</div>
</div>
<div ng-if="$ctrl.activeTab === '2fa' && $ctrl.currentUserRole == 'superuser' && !$ctrl.isAdd" class="twofa-reset">
<p>{{:: 'UsersManager_ResetTwoFactorAuthenticationInfo'|translate }}</p>
<div piwik-save-button
class="resetTwoFa"
saving="$ctrl.isResetting2FA"
onconfirm="$ctrl.confirmReset2FA()"
value="{{ 'UsersManager_ResetTwoFactorAuthentication'|translate }}"
></div>
<div class="twofa-confirm-modal modal">
<div class="modal-content">
<h2>{{:: 'UsersManager_AreYouSure'|translate }}</h2>
</div>
<div class="modal-footer">
<a href="" class="modal-action modal-close btn" ng-click="$ctrl.reset2FA()">{{:: 'General_Yes'|translate }}</a>
<a href="" class="modal-action modal-close modal-no">{{:: 'General_No'|translate }}</a>
</div>
</div>
</div>
</div>
</div>
<div class="change-password-modal modal">
<div class="modal-content">
<h2 piwik-translate="UsersManager_AreYouSureChangeDetails"><strong>{{ $ctrl.user.login }}</strong></h2>
<p>{{:: 'UsersManager_ConfirmWithPassword'|translate }}</p>
<div piwik-field uicontrol="password" name="currentUserPassword" autocomplete="off"
ng-model="$ctrl.passwordConfirmation"
full-width="true"
title="{{ 'UsersManager_YourCurrentPassword'|translate }}"
value="">
</div>
</div>
<div class="modal-footer">
<a href="" class="modal-action modal-close btn" ng-click="$ctrl.updateUser()">{{:: 'General_Yes'|translate }}</a>
<a href="" class="modal-action modal-close modal-no">{{:: 'General_No'|translate }}</a>
</div>
</div>
</div>

View File

@ -0,0 +1,195 @@
/*!
* 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-user-edit-form>
*/
(function () {
angular.module('piwikApp').component('piwikUserEditForm', {
templateUrl: 'plugins/UsersManager/angularjs/user-edit-form/user-edit-form.component.html?cb=' + piwik.cacheBuster,
bindings: {
user: '<',
onDoneEditing: '&',
currentUserRole: '<',
accessLevels: '<',
filterAccessLevels: '<',
initialSiteId: '<',
initialSiteName: '<'
},
controller: UserEditFormController
});
UserEditFormController.$inject = ['$element', 'piwikApi', '$q'];
function UserEditFormController($element, piwikApi, $q) {
var vm = this;
vm.activeTab = 'basic';
vm.permissionsForIdSite = 1;
vm.isSavingUserInfo = false;
vm.userHasAccess = true;
vm.firstSiteAccess = null;
vm.isUserModified = false;
vm.passwordConfirmation = '';
vm.$onInit = $onInit;
vm.$onChanges = $onChanges;
vm.confirmSuperUserChange = confirmSuperUserChange;
vm.confirmReset2FA = confirmReset2FA;
vm.getFormTitle = getFormTitle;
vm.getSaveButtonLabel = getSaveButtonLabel;
vm.toggleSuperuserAccess = toggleSuperuserAccess;
vm.saveUserInfo = saveUserInfo;
vm.reset2FA = reset2FA;
vm.updateUser = updateUser;
function $onInit() {
vm.firstSiteAccess = {
id: vm.initialSiteId,
name: vm.initialSiteName
};
}
function $onChanges() {
if (vm.user) {
vm.isAdd = false;
} else {
vm.isAdd = true;
vm.user = {};
}
if (!vm.isAdd) {
vm.user.password = 'XXXXXXXX'; // make sure password is not stored in the client after update/save
}
}
function getFormTitle() {
return vm.isAdd ? _pk_translate('UsersManager_AddNewUser') : _pk_translate('UsersManager_EditUser');
}
function getSaveButtonLabel() {
return vm.isAdd ? _pk_translate('UsersManager_CreateUser') : _pk_translate('UsersManager_SaveBasicInfo');
}
function confirmSuperUserChange() {
$element.find('.superuser-confirm-modal').openModal({ dismissible: false });
}
function confirmReset2FA() {
$element.find('.twofa-confirm-modal').openModal({ dismissible: false });
}
function confirmUserChange() {
vm.passwordConfirmation = '';
function onEnter(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if (keycode == '13'){
$element.find('.change-password-modal').closeModal();
vm.updateUser();
}
}
$element.find('.change-password-modal').openModal({ dismissible: false, ready: function () {
$('.modal.open #currentUserPassword').focus();
$('.modal.open #currentUserPassword').off('keypress').keypress(onEnter);
}});
}
function toggleSuperuserAccess() {
vm.isSavingUserInfo = true;
piwikApi.post({
method: 'UsersManager.setSuperUserAccess'
}, {
userLogin: vm.user.login,
hasSuperUserAccess: vm.user.superuser_access ? '1' : '0'
}).catch(function () {
// ignore error (still displayed to user)
}).then(function () {
vm.isSavingUserInfo = false;
vm.isUserModified = true;
});
}
function saveUserInfo() {
if (vm.isAdd) {
createUser();
} else {
confirmUserChange();
}
}
function reset2FA() {
vm.isResetting2FA = true;
return piwikApi.post({
method: 'TwoFactorAuth.resetTwoFactorAuth',
userLogin: vm.user.login
}).catch(function (e) {
vm.isResetting2FA = false;
throw e;
}).then(function () {
vm.isResetting2FA = false;
vm.user.uses_2fa = false;
vm.activeTab = 'basic';
showUserSavedNotification();
});
}
function showUserSavedNotification() {
var UI = require('piwik/UI');
var notification = new UI.Notification();
notification.show(_pk_translate('General_YourChangesHaveBeenSaved'), { context: 'success', type: 'toast' });
}
function createUser() {
vm.isSavingUserInfo = true;
return piwikApi.post({
method: 'UsersManager.addUser'
}, {
userLogin: vm.user.login,
password: vm.user.password,
email: vm.user.email,
alias: vm.user.alias,
initialIdSite: vm.firstSiteAccess ? vm.firstSiteAccess.id : undefined
}).catch(function (e) {
vm.isSavingUserInfo = false;
throw e;
}).then(function () {
vm.firstSiteAccess = null;
vm.isSavingUserInfo = false;
vm.isAdd = false;
vm.isEmailChanged = false;
vm.isUserModified = true;
showUserSavedNotification();
});
}
function updateUser() {
vm.isSavingUserInfo = true;
return piwikApi.post({
method: 'UsersManager.updateUser'
}, {
userLogin: vm.user.login,
password: vm.user.password ? vm.user.password : undefined,
passwordConfirmation: vm.passwordConfirmation ? vm.passwordConfirmation : undefined,
email: vm.user.email,
alias: vm.user.alias
}).catch(function (e) {
vm.isSavingUserInfo = false;
vm.passwordConfirmation = false;
throw e;
}).then(function () {
vm.isSavingUserInfo = false;
vm.passwordConfirmation = false;
vm.isUserModified = true;
showUserSavedNotification();
});
}
}
})();

View File

@ -0,0 +1,45 @@
.userEditForm {
.entityList ul li.active a {
font-weight: bold;
}
.entityList ul {
.icon-warning {
.alert-warning;
&:hover {
opacity: 1;
}
}
}
.user-permissions,.superuser-access {
margin-bottom: 32px;
}
.save-button-spacer {
height: 48px;
}
.twofa-confirm-modal, .superuser-confirm-modal,.change-password-modal {
.modal-no {
float: right;
margin-right: 1em;
margin-top: 1em;
}
}
.basic-info-tab {
.siteSelector {
width: calc(~'100% - 25px');
}
[piwik-siteselector] {
margin-bottom: 1rem;
.title {
&,span {
max-width: none;
}
}
}
}
}