Users page lazy multiselect group dropdowns
Instead of pre-rendering all multiselects with lots of group entries, the current groups are now displayed as simple labels. Behind the labels there is a pencil icon like for other fields. When clicking the pencil icon, the dropdown will be spawned and will open itself. Upon closing of the dropdown, the label comes back with the updated selection and the dropdown is destroyed.
This commit is contained in:
parent
3647fbe7cd
commit
e8c2d62c6b
6 changed files with 128 additions and 117 deletions
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -267,6 +267,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 {
|
||||||
|
|
|
@ -138,10 +138,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) {
|
||||||
|
|
|
@ -59,9 +59,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
|
||||||
|
@ -88,32 +85,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
|
||||||
|
@ -200,10 +182,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;
|
||||||
},
|
},
|
||||||
|
@ -324,7 +302,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);
|
||||||
|
@ -339,7 +317,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);
|
||||||
|
@ -440,19 +418,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) {
|
||||||
|
@ -492,13 +460,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;
|
||||||
|
@ -519,19 +480,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;
|
||||||
|
@ -547,15 +497,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,
|
||||||
|
@ -613,6 +555,62 @@ 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') || [];
|
||||||
|
|
||||||
|
$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>')
|
||||||
|
}
|
||||||
|
|
||||||
|
$.each(this.availableGroups, function (i, group) {
|
||||||
|
if (isSubadminSelect && group === 'admin') {
|
||||||
|
// can't become subadmin of "admin" group
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$groupsSelect.append($('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>'));
|
||||||
|
});
|
||||||
|
|
||||||
|
$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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -637,13 +635,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();
|
||||||
|
|
||||||
|
@ -787,11 +778,25 @@ $(document).ready(function () {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#newuser .groupsListContainer').on('click', function (event) {
|
||||||
|
var $target = $(event.target);
|
||||||
|
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();
|
||||||
|
@ -827,7 +832,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'),
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 a new issue