PDF rausgenommen
This commit is contained in:
@ -0,0 +1,48 @@
|
||||
<div class="capabilitiesEdit" ng-class="{ busy: $ctrl.isBusy }">
|
||||
<div
|
||||
class="chip"
|
||||
ng-repeat="capability in $ctrl.availableCapabilities"
|
||||
ng-if="$ctrl.capabilitiesSet[capability.id]"
|
||||
>
|
||||
<span
|
||||
class="capability-name"
|
||||
title="{{ capability.description }} {{ ($ctrl.isIncludedInRole(capability) ? ('<br/><br/>' + ('UsersManager_IncludedInUsersRole'|translate)): '') }}"
|
||||
>
|
||||
{{ capability.category }}: {{ capability.name }}
|
||||
</span>
|
||||
<span
|
||||
class="icon-close"
|
||||
ng-if="!$ctrl.isIncludedInRole(capability)"
|
||||
ng-click="$ctrl.capabilityToAddOrRemove = capability; $ctrl.onToggleCapability(fakse)"
|
||||
></span>
|
||||
</div>
|
||||
|
||||
<div piwik-field uicontrol="expandable-select"
|
||||
name="add_capability"
|
||||
full-width="true"
|
||||
ng-change="$ctrl.onToggleCapability(true)"
|
||||
ng-model="$ctrl.capabilityToAddOrRemoveId"
|
||||
options="$ctrl.availableCapabilitiesGrouped"
|
||||
data-disabled="$ctrl.isBusy"
|
||||
ng-if="$ctrl.availableCapabilitiesGrouped.length"
|
||||
class="addCapability"
|
||||
>
|
||||
</div>
|
||||
|
||||
<div class="ui-confirm confirmCapabilityToggle modal">
|
||||
<div class="modal-content">
|
||||
<h2 ng-if="$ctrl.isAddingCapability" piwik-translate="UsersManager_AreYouSureAddCapability">
|
||||
<strong>{{ $ctrl.userLogin }}</strong>::<strong>{{ $ctrl.capabilityToAddOrRemove.name }}</strong>::<strong>{{ $ctrl.siteName }}</strong>
|
||||
</h2>
|
||||
<h2 ng-if="!$ctrl.isAddingCapability" piwik-translate="UsersManager_AreYouSureRemoveCapability">
|
||||
<strong>{{ $ctrl.capabilityToAddOrRemove.name }}</strong>::<strong>{{ $ctrl.userLogin }}</strong>::<strong>{{ $ctrl.siteName }}</strong>
|
||||
</h2>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="" class="modal-action modal-close btn" ng-click="$ctrl.toggleCapability()">{{:: 'General_Yes'|translate }}</a>
|
||||
<a href="" class="modal-action modal-close modal-no" ng-click="$ctrl.capabilityToAddOrRemove = null; $ctrl.capabilityToAddOrRemoveId = null">
|
||||
{{:: 'General_No'|translate }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,213 @@
|
||||
/*!
|
||||
* 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-capabilities-edit>
|
||||
*/
|
||||
(function () {
|
||||
angular.module('piwikApp').component('piwikCapabilitiesEdit', {
|
||||
templateUrl: 'plugins/UsersManager/angularjs/capabilities-edit/capabilities-edit.component.html?cb=' + piwik.cacheBuster,
|
||||
bindings: {
|
||||
idsite: '<',
|
||||
siteName: '<',
|
||||
userLogin: '<',
|
||||
userRole: '<',
|
||||
capabilities: '<',
|
||||
onCapabilitiesChange: '&',
|
||||
},
|
||||
controller: CapabilitiesEditController
|
||||
});
|
||||
|
||||
CapabilitiesEditController.$inject = ['piwikApi', 'permissionsMetadataService', 'piwik', '$element'];
|
||||
|
||||
function CapabilitiesEditController(piwikApi, permissionsMetadataService, piwik, $element) {
|
||||
var vm = this;
|
||||
|
||||
vm.isBusy = false;
|
||||
vm.availableCapabilities = [];
|
||||
vm.availableCapabilitiesGrouped = [];
|
||||
vm.capabilitiesSet = {};
|
||||
|
||||
// intermediate state
|
||||
vm.isAddingCapability = false;
|
||||
vm.capabilityToAddOrRemoveId = null;
|
||||
vm.capabilityToAddOrRemove = null;
|
||||
|
||||
vm.$onInit = $onInit;
|
||||
vm.$onChanges = $onChanges;
|
||||
vm.onToggleCapability = onToggleCapability;
|
||||
vm.toggleCapability = toggleCapability;
|
||||
vm.isIncludedInRole = isIncludedInRole;
|
||||
|
||||
function $onInit() {
|
||||
fetchAvailableCapabilities();
|
||||
|
||||
if (typeof vm.capabilities === 'undefined') {
|
||||
fetchCapabilities();
|
||||
}
|
||||
}
|
||||
|
||||
function $onChanges() {
|
||||
setCapabilitiesSet();
|
||||
}
|
||||
|
||||
function isIncludedInRole(capability) {
|
||||
return capability.includedInRoles.indexOf(vm.userRole) !== -1;
|
||||
}
|
||||
|
||||
function fetchAvailableCapabilities() {
|
||||
permissionsMetadataService.getAllCapabilities()
|
||||
.then(function (capabilities) {
|
||||
vm.availableCapabilities = capabilities;
|
||||
setCapabilitiesSet();
|
||||
setAvailableCapabilitiesDropdown();
|
||||
});
|
||||
}
|
||||
|
||||
function fetchCapabilities() {
|
||||
vm.isBusy = true;
|
||||
piwikApi.fetch({
|
||||
method: 'UsersManager.getUsersPlusRole',
|
||||
limit: '1',
|
||||
filter_search: vm.userLogin,
|
||||
}).then(function (user) {
|
||||
if (!user || !user.capabilities) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return user.capabilities;
|
||||
}).then(function (capabilities) {
|
||||
vm.capabilities = capabilities;
|
||||
setCapabilitiesSet();
|
||||
setAvailableCapabilitiesDropdown();
|
||||
})['finally'](function () {
|
||||
vm.isBusy = false;
|
||||
});
|
||||
}
|
||||
|
||||
function setCapabilitiesSet() {
|
||||
vm.capabilitiesSet = {};
|
||||
(vm.capabilities || []).forEach(function (capability) {
|
||||
vm.capabilitiesSet[capability] = true;
|
||||
});
|
||||
(vm.availableCapabilities || []).forEach(function (capability) {
|
||||
if (vm.isIncludedInRole(capability)) {
|
||||
vm.capabilitiesSet[capability.id] = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setAvailableCapabilitiesDropdown() {
|
||||
var availableCapabilitiesGrouped = [];
|
||||
vm.availableCapabilities.forEach(function (capability) {
|
||||
if (vm.capabilitiesSet[capability.id]) {
|
||||
return;
|
||||
}
|
||||
|
||||
availableCapabilitiesGrouped.push({
|
||||
group: capability.category,
|
||||
key: capability.id,
|
||||
value: capability.name,
|
||||
tooltip: capability.description,
|
||||
});
|
||||
});
|
||||
vm.availableCapabilitiesGrouped = availableCapabilitiesGrouped;
|
||||
vm.availableCapabilitiesGrouped.sort(function (lhs, rhs) {
|
||||
if (lhs.group === rhs.group) {
|
||||
if (lhs.value === rhs.value) {
|
||||
return 0;
|
||||
}
|
||||
return lhs.value < rhs.value ? -1 : 1;
|
||||
}
|
||||
return lhs.group < rhs.group ? -1 : 1;
|
||||
});
|
||||
}
|
||||
|
||||
function onToggleCapability(isAdd) {
|
||||
vm.isAddingCapability = isAdd;
|
||||
|
||||
vm.availableCapabilities.forEach(function (capability) {
|
||||
if (capability.id === vm.capabilityToAddOrRemoveId) {
|
||||
vm.capabilityToAddOrRemove = capability;
|
||||
}
|
||||
});
|
||||
|
||||
$element.find('.confirmCapabilityToggle').openModal({
|
||||
dismissible: false,
|
||||
yes: function () {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function toggleCapability() {
|
||||
if (vm.isAddingCapability) {
|
||||
addCapability(vm.capabilityToAddOrRemove);
|
||||
} else {
|
||||
removeCapability(vm.capabilityToAddOrRemove);
|
||||
}
|
||||
}
|
||||
|
||||
function addCapability(capability) {
|
||||
vm.isBusy = true;
|
||||
piwikApi.post({
|
||||
method: 'UsersManager.addCapabilities',
|
||||
}, {
|
||||
userLogin: vm.userLogin,
|
||||
capabilities: capability.id,
|
||||
idSites: vm.idsite
|
||||
}).then(function () {
|
||||
vm.onCapabilitiesChange.call({
|
||||
capabilities: getCapabilitiesList(),
|
||||
});
|
||||
|
||||
setCapabilitiesSet();
|
||||
setAvailableCapabilitiesDropdown();
|
||||
})['finally'](function () {
|
||||
vm.isBusy = false;
|
||||
vm.capabilityToAddOrRemove = null;
|
||||
vm.capabilityToAddOrRemoveId = null;
|
||||
});
|
||||
}
|
||||
|
||||
function removeCapability(capability) {
|
||||
vm.isBusy = true;
|
||||
piwikApi.post({
|
||||
method: 'UsersManager.removeCapabilities',
|
||||
}, {
|
||||
userLogin: vm.userLogin,
|
||||
capabilities: capability.id,
|
||||
idSites: vm.idsite
|
||||
}).then(function () {
|
||||
vm.onCapabilitiesChange.call({
|
||||
capabilities: getCapabilitiesList(),
|
||||
});
|
||||
|
||||
setCapabilitiesSet();
|
||||
setAvailableCapabilitiesDropdown();
|
||||
})['finally'](function () {
|
||||
vm.isBusy = false;
|
||||
vm.capabilityToAddOrRemove = null;
|
||||
vm.capabilityToAddOrRemoveId = null;
|
||||
});
|
||||
}
|
||||
|
||||
function getCapabilitiesList() {
|
||||
var result = [];
|
||||
vm.availableCapabilities.forEach(function (capability) {
|
||||
if (vm.isIncludedInRole(capability)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (vm.capabilitiesSet[capability.id]) {
|
||||
result.push(capability.id);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
}
|
||||
})();
|
@ -0,0 +1,76 @@
|
||||
.capabilitiesEdit {
|
||||
display: inline-block;
|
||||
margin-bottom: -8px;
|
||||
|
||||
> div.chip {
|
||||
margin-right: 8px;
|
||||
display: inline-block;
|
||||
margin-bottom: 8px;
|
||||
|
||||
span.capability-name {
|
||||
padding-right: .4rem;
|
||||
}
|
||||
|
||||
> span.icon-close {
|
||||
font-size: .6rem;
|
||||
float: right;
|
||||
margin-top: 1.4em;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.addCapability {
|
||||
display: inline-block;
|
||||
margin-bottom: 8px;
|
||||
vertical-align: bottom;
|
||||
|
||||
.input-field {
|
||||
margin-top: 0;
|
||||
.caret {
|
||||
right: -25px;
|
||||
top: 16px;
|
||||
z-index: 9;
|
||||
cursor: pointer;
|
||||
}
|
||||
.select-dropdown {
|
||||
margin-top: 8px;
|
||||
margin-bottom: 0;
|
||||
border: 0;
|
||||
background: #e4e4e4;
|
||||
display: inline-block;
|
||||
height: 32px;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
color: rgba(0,0,0,0.6);
|
||||
line-height: 32px;
|
||||
border-radius: 3em;
|
||||
padding-left: 12px;
|
||||
padding-right: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.select-wrapper {
|
||||
transform: scale(.89) translate(-.6rem);
|
||||
margin-top: -0.55rem;
|
||||
max-width: 160px;
|
||||
|
||||
input {
|
||||
margin-bottom: 0;
|
||||
height: 2rem;
|
||||
line-height: 2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.busy {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.confirmCapabilityToggle {
|
||||
.modal-no {
|
||||
float: right;
|
||||
margin-right: 1em;
|
||||
margin-top: 1em;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user