Merge pull request #1174 from nextcloud/backport-1128
[stable10] Users page lazy multiselect group dropdowns
This commit is contained in:
commit
f8a45b9e08
|
@ -32,7 +32,7 @@
|
||||||
'onuncheck':false,
|
'onuncheck':false,
|
||||||
'minWidth': 'default;'
|
'minWidth': 'default;'
|
||||||
};
|
};
|
||||||
var slideDuration = 200;
|
var slideDuration = 0;
|
||||||
$(this).attr('data-msid', multiSelectId);
|
$(this).attr('data-msid', multiSelectId);
|
||||||
$.extend(settings,options);
|
$.extend(settings,options);
|
||||||
$.each(this.children(),function(i,option) {
|
$.each(this.children(),function(i,option) {
|
||||||
|
@ -75,6 +75,26 @@
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
self.menuDirection = 'down';
|
self.menuDirection = 'down';
|
||||||
|
|
||||||
|
function closeDropDown() {
|
||||||
|
if(!button.parent().data('preventHide')) {
|
||||||
|
// How can I save the effect in a var?
|
||||||
|
if(self.menuDirection === 'down') {
|
||||||
|
button.parent().children('ul').slideUp(slideDuration,function() {
|
||||||
|
button.parent().children('ul').remove();
|
||||||
|
button.removeClass('active down');
|
||||||
|
$(self).trigger($.Event('dropdownclosed', settings));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
button.parent().children('ul').fadeOut(slideDuration,function() {
|
||||||
|
button.parent().children('ul').remove();
|
||||||
|
button.removeClass('active up');
|
||||||
|
$(self).trigger($.Event('dropdownclosed', settings));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
button.click(function(event){
|
button.click(function(event){
|
||||||
|
|
||||||
var button=$(this);
|
var button=$(this);
|
||||||
|
@ -83,21 +103,20 @@
|
||||||
button.parent().children('ul').slideUp(slideDuration,function() {
|
button.parent().children('ul').slideUp(slideDuration,function() {
|
||||||
button.parent().children('ul').remove();
|
button.parent().children('ul').remove();
|
||||||
button.removeClass('active down');
|
button.removeClass('active down');
|
||||||
|
$(self).trigger($.Event('dropdownclosed', settings));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
button.parent().children('ul').fadeOut(slideDuration,function() {
|
button.parent().children('ul').fadeOut(slideDuration,function() {
|
||||||
button.parent().children('ul').remove();
|
button.parent().children('ul').remove();
|
||||||
button.removeClass('active up');
|
button.removeClass('active up');
|
||||||
|
$(self).trigger($.Event('dropdownclosed', settings));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// tell other lists to shut themselves
|
||||||
var lists=$('ul.multiselectoptions');
|
var lists=$('ul.multiselectoptions');
|
||||||
lists.slideUp(slideDuration,function(){
|
lists.trigger($.Event('shut'));
|
||||||
lists.remove();
|
|
||||||
$('div.multiselect').removeClass('active');
|
|
||||||
button.addClass('active');
|
|
||||||
});
|
|
||||||
button.addClass('active');
|
button.addClass('active');
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
var options=$(this).parent().next().children();
|
var options=$(this).parent().next().children();
|
||||||
|
@ -309,29 +328,16 @@
|
||||||
list.detach().insertBefore($(this));
|
list.detach().insertBefore($(this));
|
||||||
list.addClass('up');
|
list.addClass('up');
|
||||||
button.addClass('up');
|
button.addClass('up');
|
||||||
list.fadeIn();
|
list.show();
|
||||||
self.menuDirection = 'up';
|
self.menuDirection = 'up';
|
||||||
}
|
}
|
||||||
list.click(function(event) {
|
list.click(function(event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
});
|
});
|
||||||
|
list.one('shut', closeDropDown);
|
||||||
});
|
});
|
||||||
$(window).click(function() {
|
|
||||||
if(!button.parent().data('preventHide')) {
|
$(window).click(closeDropDown);
|
||||||
// How can I save the effect in a var?
|
|
||||||
if(self.menuDirection === 'down') {
|
|
||||||
button.parent().children('ul').slideUp(slideDuration,function() {
|
|
||||||
button.parent().children('ul').remove();
|
|
||||||
button.removeClass('active down');
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
button.parent().children('ul').fadeOut(slideDuration,function() {
|
|
||||||
button.parent().children('ul').remove();
|
|
||||||
button.removeClass('active up');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return span;
|
return span;
|
||||||
};
|
};
|
||||||
|
|
|
@ -258,6 +258,15 @@ span.usersLastLoginTooltip { white-space: nowrap; }
|
||||||
top: 3px;
|
top: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#newuser .groups {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#newuser .groupsListContainer.hidden,
|
||||||
|
#userlist .groupsListContainer.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
tr:hover>td.password>span, tr:hover>td.displayName>span { margin:0; cursor:pointer; }
|
tr:hover>td.password>span, tr:hover>td.displayName>span { margin:0; cursor:pointer; }
|
||||||
tr:hover>td.remove>a, tr:hover>td.password>img,tr:hover>td.displayName>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; }
|
tr:hover>td.remove>a, tr:hover>td.password>img,tr:hover>td.displayName>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; }
|
||||||
td.remove {
|
td.remove {
|
||||||
|
|
|
@ -136,10 +136,6 @@ GroupList = {
|
||||||
var addedGroup = result.groupname;
|
var addedGroup = result.groupname;
|
||||||
UserList.availableGroups = $.unique($.merge(UserList.availableGroups, [addedGroup]));
|
UserList.availableGroups = $.unique($.merge(UserList.availableGroups, [addedGroup]));
|
||||||
GroupList.addGroup(result.groupname);
|
GroupList.addGroup(result.groupname);
|
||||||
|
|
||||||
$('.groupsselect, .subadminsselect')
|
|
||||||
.append($('<option>', { value: result.groupname })
|
|
||||||
.text(result.groupname));
|
|
||||||
}
|
}
|
||||||
GroupList.toggleAddGroup();
|
GroupList.toggleAddGroup();
|
||||||
}).fail(function(result) {
|
}).fail(function(result) {
|
||||||
|
|
|
@ -57,9 +57,6 @@ var UserList = {
|
||||||
var $tr = $userListBody.find('tr:first-child').clone();
|
var $tr = $userListBody.find('tr:first-child').clone();
|
||||||
// this removes just the `display:none` of the template row
|
// this removes just the `display:none` of the template row
|
||||||
$tr.removeAttr('style');
|
$tr.removeAttr('style');
|
||||||
var subAdminsEl;
|
|
||||||
var subAdminSelect;
|
|
||||||
var groupsSelect;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Avatar or placeholder
|
* Avatar or placeholder
|
||||||
|
@ -86,32 +83,17 @@ var UserList = {
|
||||||
$tr.find('td.mailAddress > .action').tooltip({placement: 'top'});
|
$tr.find('td.mailAddress > .action').tooltip({placement: 'top'});
|
||||||
$tr.find('td.password > .action').tooltip({placement: 'top'});
|
$tr.find('td.password > .action').tooltip({placement: 'top'});
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* groups and subadmins
|
* groups and subadmins
|
||||||
*/
|
*/
|
||||||
// make them look like the multiselect buttons
|
var $tdGroups = $tr.find('td.groups');
|
||||||
// until they get time to really get initialized
|
this._updateGroupListLabel($tdGroups, user.groups);
|
||||||
groupsSelect = $('<select multiple="multiple" class="groupsselect multiselect button" data-placehoder="Groups" title="' + t('settings', 'no group') + '"></select>')
|
$tdGroups.find('.action').tooltip({placement: 'top'});
|
||||||
.data('username', user.name)
|
|
||||||
.data('user-groups', user.groups);
|
var $tdSubadmins = $tr.find('td.subadmins');
|
||||||
if ($tr.find('td.subadmins').length > 0) {
|
this._updateGroupListLabel($tdSubadmins, user.subadmin);
|
||||||
subAdminSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" data-placehoder="subadmins" title="' + t('settings', 'no group') + '">')
|
$tdSubadmins.find('.action').tooltip({placement: 'top'});
|
||||||
.data('username', user.name)
|
|
||||||
.data('user-groups', user.groups)
|
|
||||||
.data('subadmin', user.subadmin);
|
|
||||||
$tr.find('td.subadmins').empty();
|
|
||||||
}
|
|
||||||
$.each(this.availableGroups, function (i, group) {
|
|
||||||
groupsSelect.append($('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>'));
|
|
||||||
if (typeof subAdminSelect !== 'undefined' && group !== 'admin') {
|
|
||||||
subAdminSelect.append($('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$tr.find('td.groups').empty().append(groupsSelect);
|
|
||||||
subAdminsEl = $tr.find('td.subadmins');
|
|
||||||
if (subAdminsEl.length > 0) {
|
|
||||||
subAdminsEl.append(subAdminSelect);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* remove action
|
* remove action
|
||||||
|
@ -198,10 +180,6 @@ var UserList = {
|
||||||
// defer init so the user first sees the list appear more quickly
|
// defer init so the user first sees the list appear more quickly
|
||||||
window.setTimeout(function(){
|
window.setTimeout(function(){
|
||||||
$quotaSelect.singleSelect();
|
$quotaSelect.singleSelect();
|
||||||
UserList.applyGroupSelect(groupsSelect);
|
|
||||||
if (subAdminSelect) {
|
|
||||||
UserList.applySubadminSelect(subAdminSelect);
|
|
||||||
}
|
|
||||||
}, 0);
|
}, 0);
|
||||||
return $tr;
|
return $tr;
|
||||||
},
|
},
|
||||||
|
@ -322,7 +300,7 @@ var UserList = {
|
||||||
},
|
},
|
||||||
markRemove: function(uid) {
|
markRemove: function(uid) {
|
||||||
var $tr = UserList.getRow(uid);
|
var $tr = UserList.getRow(uid);
|
||||||
var groups = $tr.find('.groups .groupsselect').val();
|
var groups = $tr.find('.groups').data('groups');
|
||||||
for(var i in groups) {
|
for(var i in groups) {
|
||||||
var gid = groups[i];
|
var gid = groups[i];
|
||||||
var $li = GroupList.getGroupLI(gid);
|
var $li = GroupList.getGroupLI(gid);
|
||||||
|
@ -337,7 +315,7 @@ var UserList = {
|
||||||
},
|
},
|
||||||
undoRemove: function(uid) {
|
undoRemove: function(uid) {
|
||||||
var $tr = UserList.getRow(uid);
|
var $tr = UserList.getRow(uid);
|
||||||
var groups = $tr.find('.groups .groupsselect').val();
|
var groups = $tr.find('.groups').data('groups');
|
||||||
for(var i in groups) {
|
for(var i in groups) {
|
||||||
var gid = groups[i];
|
var gid = groups[i];
|
||||||
var $li = GroupList.getGroupLI(gid);
|
var $li = GroupList.getGroupLI(gid);
|
||||||
|
@ -438,19 +416,9 @@ var UserList = {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
applyGroupSelect: function (element) {
|
applyGroupSelect: function (element, user, checked) {
|
||||||
var checked = [];
|
|
||||||
var $element = $(element);
|
var $element = $(element);
|
||||||
var user = UserList.getUID($element);
|
|
||||||
|
|
||||||
if ($element.data('user-groups')) {
|
|
||||||
if (typeof $element.data('user-groups') === 'string') {
|
|
||||||
checked = $element.data('user-groups').split(", ");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
checked = $element.data('user-groups');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var checkHandler = null;
|
var checkHandler = null;
|
||||||
if(user) { // Only if in a user row, and not the #newusergroups select
|
if(user) { // Only if in a user row, and not the #newusergroups select
|
||||||
checkHandler = function (group) {
|
checkHandler = function (group) {
|
||||||
|
@ -490,13 +458,6 @@ var UserList = {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
var addGroup = function (select, group) {
|
var addGroup = function (select, group) {
|
||||||
$('select[multiple]').each(function (index, element) {
|
|
||||||
$element = $(element);
|
|
||||||
if ($element.find('option').filterAttr('value', group).length === 0 &&
|
|
||||||
select.data('msid') !== $element.data('msid')) {
|
|
||||||
$element.append('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
GroupList.addGroup(escapeHTML(group));
|
GroupList.addGroup(escapeHTML(group));
|
||||||
};
|
};
|
||||||
var label;
|
var label;
|
||||||
|
@ -517,19 +478,8 @@ var UserList = {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
applySubadminSelect: function (element) {
|
applySubadminSelect: function (element, user, checked) {
|
||||||
var checked = [];
|
|
||||||
var $element = $(element);
|
var $element = $(element);
|
||||||
var user = UserList.getUID($element);
|
|
||||||
|
|
||||||
if ($element.data('subadmin')) {
|
|
||||||
if (typeof $element.data('subadmin') === 'string') {
|
|
||||||
checked = $element.data('subadmin').split(", ");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
checked = $element.data('subadmin');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var checkHandler = function (group) {
|
var checkHandler = function (group) {
|
||||||
if (group === 'admin') {
|
if (group === 'admin') {
|
||||||
return false;
|
return false;
|
||||||
|
@ -545,15 +495,7 @@ var UserList = {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
var addSubAdmin = function (group) {
|
|
||||||
$('select[multiple]').each(function (index, element) {
|
|
||||||
if ($(element).find('option').filterAttr('value', group).length === 0) {
|
|
||||||
$(element).append('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
$element.multiSelect({
|
$element.multiSelect({
|
||||||
createCallback: addSubAdmin,
|
|
||||||
createText: null,
|
createText: null,
|
||||||
checked: checked,
|
checked: checked,
|
||||||
oncheck: checkHandler,
|
oncheck: checkHandler,
|
||||||
|
@ -611,6 +553,76 @@ var UserList = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a temporary jquery.multiselect selector on the given group field
|
||||||
|
*/
|
||||||
|
_triggerGroupEdit: function($td, isSubadminSelect) {
|
||||||
|
var $groupsListContainer = $td.find('.groupsListContainer');
|
||||||
|
var placeholder = $groupsListContainer.attr('data-placeholder') || t('settings', 'no group');
|
||||||
|
var user = UserList.getUID($td);
|
||||||
|
var checked = $td.data('groups') || [];
|
||||||
|
var extraGroups = [].concat(checked);
|
||||||
|
|
||||||
|
$td.find('.multiselectoptions').remove();
|
||||||
|
|
||||||
|
// jquery.multiselect can only work with select+options in DOM ? We'll give jquery.multiselect what it wants...
|
||||||
|
var $groupsSelect;
|
||||||
|
if (isSubadminSelect) {
|
||||||
|
$groupsSelect = $('<select multiple="multiple" class="groupsselect multiselect button" title="' + placeholder + '"></select>');
|
||||||
|
} else {
|
||||||
|
$groupsSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" title="' + placeholder + '"></select>')
|
||||||
|
}
|
||||||
|
|
||||||
|
function createItem(group) {
|
||||||
|
if (isSubadminSelect && group === 'admin') {
|
||||||
|
// can't become subadmin of "admin" group
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$groupsSelect.append($('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$.each(this.availableGroups, function (i, group) {
|
||||||
|
// some new groups might be selected but not in the available groups list yet
|
||||||
|
var extraIndex = extraGroups.indexOf(group);
|
||||||
|
if (extraIndex >= 0) {
|
||||||
|
// remove extra group as it was found
|
||||||
|
extraGroups.splice(extraIndex, 1);
|
||||||
|
}
|
||||||
|
createItem(group);
|
||||||
|
});
|
||||||
|
$.each(extraGroups, function (i, group) {
|
||||||
|
createItem(group);
|
||||||
|
});
|
||||||
|
|
||||||
|
$td.append($groupsSelect);
|
||||||
|
|
||||||
|
if (isSubadminSelect) {
|
||||||
|
UserList.applySubadminSelect($groupsSelect, user, checked);
|
||||||
|
} else {
|
||||||
|
UserList.applyGroupSelect($groupsSelect, user, checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
$groupsListContainer.addClass('hidden');
|
||||||
|
$td.find('.multiselect:not(.groupsListContainer):first').click();
|
||||||
|
$groupsSelect.on('dropdownclosed', function(e) {
|
||||||
|
$groupsSelect.remove();
|
||||||
|
$td.find('.multiselect:not(.groupsListContainer)').parent().remove();
|
||||||
|
$td.find('.multiselectoptions').remove();
|
||||||
|
$groupsListContainer.removeClass('hidden');
|
||||||
|
UserList._updateGroupListLabel($td, e.checked);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the groups list td with the given groups selection
|
||||||
|
*/
|
||||||
|
_updateGroupListLabel: function($td, groups) {
|
||||||
|
var placeholder = $td.find('.groupsListContainer').attr('data-placeholder');
|
||||||
|
var $groupsEl = $td.find('.groupsList');
|
||||||
|
$groupsEl.text(groups.join(', ') || placeholder || t('settings', 'no group'));
|
||||||
|
$td.data('groups', groups);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -635,13 +647,6 @@ $(document).ready(function () {
|
||||||
// TODO: move other init calls inside of initialize
|
// TODO: move other init calls inside of initialize
|
||||||
UserList.initialize($('#userlist'));
|
UserList.initialize($('#userlist'));
|
||||||
|
|
||||||
$('.groupsselect').each(function (index, element) {
|
|
||||||
UserList.applyGroupSelect(element);
|
|
||||||
});
|
|
||||||
$('.subadminsselect').each(function (index, element) {
|
|
||||||
UserList.applySubadminSelect(element);
|
|
||||||
});
|
|
||||||
|
|
||||||
$userListBody.on('click', '.password', function (event) {
|
$userListBody.on('click', '.password', function (event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
||||||
|
@ -785,11 +790,24 @@ $(document).ready(function () {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#newuser .groupsListContainer').on('click', function (event) {
|
||||||
|
event.stopPropagation();
|
||||||
|
var $div = $(this).closest('.groups');
|
||||||
|
UserList._triggerGroupEdit($div);
|
||||||
|
});
|
||||||
|
$userListBody.on('click', '.groups .groupsListContainer, .subadmins .groupsListContainer', function (event) {
|
||||||
|
event.stopPropagation();
|
||||||
|
var $td = $(this).closest('td');
|
||||||
|
var isSubadminSelect = $td.hasClass('subadmins');
|
||||||
|
UserList._triggerGroupEdit($td, isSubadminSelect);
|
||||||
|
});
|
||||||
|
|
||||||
// init the quota field select box after it is shown the first time
|
// init the quota field select box after it is shown the first time
|
||||||
$('#app-settings').one('show', function() {
|
$('#app-settings').one('show', function() {
|
||||||
$(this).find('#default_quota').singleSelect().on('change', UserList.onQuotaSelect);
|
$(this).find('#default_quota').singleSelect().on('change', UserList.onQuotaSelect);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
UserList._updateGroupListLabel($('#newuser .groups'), []);
|
||||||
$('#newuser').submit(function (event) {
|
$('#newuser').submit(function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
var username = $('#newusername').val();
|
var username = $('#newusername').val();
|
||||||
|
@ -825,7 +843,7 @@ $(document).ready(function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
promise.then(function() {
|
promise.then(function() {
|
||||||
var groups = $('#newusergroups').val() || [];
|
var groups = $('#newuser .groups').data('groups') || [];
|
||||||
$.post(
|
$.post(
|
||||||
OC.generateUrl('/settings/users/users'),
|
OC.generateUrl('/settings/users/users'),
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,10 +19,10 @@ style('settings', 'settings');
|
||||||
|
|
||||||
$userlistParams = array();
|
$userlistParams = array();
|
||||||
$allGroups=array();
|
$allGroups=array();
|
||||||
foreach($_["groups"] as $group) {
|
foreach($_["adminGroup"] as $group) {
|
||||||
$allGroups[] = $group['name'];
|
$allGroups[] = $group['name'];
|
||||||
}
|
}
|
||||||
foreach($_["adminGroup"] as $group) {
|
foreach($_["groups"] as $group) {
|
||||||
$allGroups[] = $group['name'];
|
$allGroups[] = $group['name'];
|
||||||
}
|
}
|
||||||
$userlistParams['subadmingroups'] = $allGroups;
|
$userlistParams['subadmingroups'] = $allGroups;
|
||||||
|
|
|
@ -10,16 +10,7 @@
|
||||||
<input id="newemail" type="text" style="display:none"
|
<input id="newemail" type="text" style="display:none"
|
||||||
placeholder="<?php p($l->t('E-Mail'))?>"
|
placeholder="<?php p($l->t('E-Mail'))?>"
|
||||||
autocomplete="off" autocapitalize="off" autocorrect="off" />
|
autocomplete="off" autocapitalize="off" autocorrect="off" />
|
||||||
<select
|
<div class="groups"><div class="groupsListContainer multiselect button" data-placeholder="<?php p($l->t('Groups'))?>"><span class="title groupsList"></span><span class="icon-triangle-s"></span></div></div>
|
||||||
class="groupsselect" id="newusergroups" data-placeholder="groups"
|
|
||||||
title="<?php p($l->t('Groups'))?>" multiple="multiple">
|
|
||||||
<?php foreach($_["adminGroup"] as $adminGroup): ?>
|
|
||||||
<option value="<?php p($adminGroup['name']);?>"><?php p($adminGroup['name']); ?></option>
|
|
||||||
<?php endforeach; ?>
|
|
||||||
<?php foreach($_["groups"] as $group): ?>
|
|
||||||
<option value="<?php p($group['name']);?>"><?php p($group['name']);?></option>
|
|
||||||
<?php endforeach;?>
|
|
||||||
</select>
|
|
||||||
<input type="submit" class="button" value="<?php p($l->t('Create'))?>" />
|
<input type="submit" class="button" value="<?php p($l->t('Create'))?>" />
|
||||||
</form>
|
</form>
|
||||||
<?php if((bool)$_['recoveryAdminEnabled']): ?>
|
<?php if((bool)$_['recoveryAdminEnabled']): ?>
|
||||||
|
|
|
@ -38,9 +38,13 @@
|
||||||
src="<?php p(image_path('core', 'actions/rename.svg'))?>"
|
src="<?php p(image_path('core', 'actions/rename.svg'))?>"
|
||||||
alt="<?php p($l->t('change email address'))?>" title="<?php p($l->t('change email address'))?>"/>
|
alt="<?php p($l->t('change email address'))?>" title="<?php p($l->t('change email address'))?>"/>
|
||||||
</td>
|
</td>
|
||||||
<td class="groups"></td>
|
<td class="groups"><div class="groupsListContainer multiselect button"
|
||||||
|
><span class="title groupsList"></span><span class="icon-triangle-s"></span></div>
|
||||||
|
</td>
|
||||||
<?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
|
<?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
|
||||||
<td class="subadmins"></td>
|
<td class="subadmins"><div class="groupsListContainer multiselect button"
|
||||||
|
><span class="title groupsList"></span><span class="icon-triangle-s"></span></div>
|
||||||
|
</td>
|
||||||
<?php endif;?>
|
<?php endif;?>
|
||||||
<td class="quota">
|
<td class="quota">
|
||||||
<select class="quota-user" data-inputtitle="<?php p($l->t('Please enter storage quota (ex: "512 MB" or "12 GB")')) ?>">
|
<select class="quota-user" data-inputtitle="<?php p($l->t('Please enter storage quota (ex: "512 MB" or "12 GB")')) ?>">
|
||||||
|
|
Loading…
Reference in New Issue