PDF rausgenommen
This commit is contained in:
@ -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>
|
@ -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();
|
||||
});
|
||||
}
|
||||
}
|
||||
})();
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user