Add infinite scrolling to Settings -> Users, still a little buggy

This commit is contained in:
Michael Gapczynski 2012-08-11 16:01:43 -04:00
parent 8d1eb674ec
commit 9d2ae5fa1f
3 changed files with 164 additions and 69 deletions

View File

@ -0,0 +1,45 @@
<?php
/**
* ownCloud
*
* @author Michael Gapczynski
* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
require_once '../../lib/base.php';
OC_JSON::callCheck();
OC_JSON::checkSubAdminUser();
if (isset($_GET['offset'])) {
$offset = $_GET['offset'];
} else {
$offset = 0;
}
$users = array();
if (OC_Group::inGroup(OC_User::getUser(), 'admin')) {
$batch = OC_User::getUsers('', 10, $offset);
foreach ($batch as $user) {
$users[] = array('name' => $user, 'groups' => join(', ', OC_Group::getUserGroups($user)), 'subadmin' => implode(', ',OC_SubAdmin::getSubAdminsGroups($user)), 'quota' => OC_Preferences::getValue($user, 'files', 'quota', 'default'));
}
} else {
$groups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
$batch = OC_Group::usersInGroups($groups);
foreach ($batch as $user) {
$users[] = array('name' => $user, 'groups' => join(', ', OC_Group::getUserGroups($user)), 'quota' => OC_Preferences::getValue($user, 'files', 'quota', 'default'));
}
}
OC_JSON::success(array('data' => $users));

View File

@ -22,10 +22,6 @@ UserList={
// Set undo flag
UserList.deleteCanceled = false;
// Hide user in table to reflect deletion
$(this).parent().parent().hide();
$('tr').filterAttr( 'data-uid', UserList.deleteUid ).hide();
// Provide user with option to undo
$('#notification').html(t('users', 'deleted')+' '+uid+'<span class="undo">'+t('users', 'undo')+'</span>');
$('#notification').data('deleteuser',true);
@ -66,26 +62,92 @@ UserList={
}
});
}
}
}
},
$(document).ready(function(){
function setQuota(uid,quota,ready){
$.post(
OC.filePath('settings','ajax','setquota.php'),
{username:uid,quota:quota},
function(result){
if(ready){
ready(result.data.quota);
}
add:function(username, groups, subadmin, quota, sort) {
var tr = $('tbody tr').first().clone();
tr.data('uid', username);
tr.find('td.name').text(username);
var groupsSelect = $('<select multiple="multiple" class="groupsselect" data-placehoder="Groups" title="Groups">');
groupsSelect.data('username', username);
groupsSelect.data('userGroups', groups);
tr.find('td.groups').empty();
if (tr.find('td.subadmins').length > 0) {
var subadminSelect = $('<select multiple="multiple" class="subadminsselect" data-placehoder="subadmins" title="' + t('files', 'SubAdmin') + '">');
subadminSelect.data('username', username);
subadminSelect.data('userGroups', groups);
subadminSelect.data('subadmin', subadmin);
tr.find('td.subadmins').empty();
}
var allGroups = String($('#content table').data('groups')).split(', ');
$.each(allGroups, function(i, group) {
groupsSelect.append($('<option value="'+group+'">'+group+'</option>'));
if (typeof subadminSelect !== 'undefined' && group != 'admin') {
subadminSelect.append($('<option value="'+group+'">'+group+'</option>'));
}
);
}
function applyMultiplySelect(element){
});
tr.find('td.groups').append(groupsSelect);
UserList.applyMultiplySelect(groupsSelect);
tr.find('td.subadmins').append(subadminSelect);
UserList.applyMultiplySelect(subadminSelect);
if (tr.find('td.remove img').length == 0 && OC.currentUser != username) {
tr.find('td.remove').append($('<img alt="Delete" title="'+t('settings','Delete')+'" class="svg action" src="'+OC.imagePath('core','actions/delete')+'"/>'));
} else if (OC.currentUser == username) {
tr.find('td.remove a').remove();
}
var quotaSelect = tr.find('select.quota-user');
if (quota == 'default') {
quotaSelect.find('option').attr('selected', null);
quotaSelect.find('option').first().attr('selected', 'selected');
quotaSelect.data('previous', 'default');
} else {
if (quotaSelect.find('option[value="'+quota+'"]').length > 0) {
quotaSelect.find('option[value="'+quota+'"]').attr('selected', 'selected');
} else {
quotaSelect.append('<option value="'+quota+'" selected="selected">'+quota+'</option>');
}
}
var added = false;
if (sort) {
username = username.toLowerCase();
$('tbody tr').each(function() {
if (username < $(this).data('uid').toLowerCase()) {
$(tr).insertBefore($(this));
added = true;
return false;
}
});
}
if (!added) {
$(tr).appendTo('tbody');
}
return tr;
},
update:function() {
if (typeof UserList.offset === 'undefined') {
UserList.offset = $('tbody tr').length;
}
$.get(OC.filePath('settings', 'ajax', 'userlist.php'), { offset: UserList.offset }, function(result) {
if (result.status === 'success') {
$.each(result.data, function(index, user) {
var tr = UserList.add(user.name, user.groups, user.subadmin, user.quota, false);
UserList.offset++;
if (index == 9) {
$(tr).bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
$(this).unbind(event);
UserList.update();
});
}
});
}
});
},
applyMultiplySelect:function(element) {
var checked=[];
var user=element.data('username');
if($(element).attr('class') == 'groupsselect'){
if($(element).attr('class') == 'groupsselect'){
if(element.data('userGroups')){
checked=String(element.data('userGroups')).split(', ');
}
@ -131,7 +193,7 @@ $(document).ready(function(){
minWidth: 100,
});
}
if($(element).attr('class') == 'subadminsselect'){
if($(element).attr('class') == 'subadminsselect'){
if(element.data('subadmin')){
checked=String(element.data('subadmin')).split(', ');
}
@ -166,17 +228,37 @@ $(document).ready(function(){
});
}
}
}
$(document).ready(function(){
$('tbody tr:last').bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
UserList.update();
});
function setQuota(uid,quota,ready){
$.post(
OC.filePath('settings','ajax','setquota.php'),
{username:uid,quota:quota},
function(result){
if(ready){
ready(result.data.quota);
}
}
);
}
$('select[multiple]').each(function(index,element){
applyMultiplySelect($(element));
UserList.applyMultiplySelect($(element));
});
$('td.remove>a').live('click',function(event){
var uid = $(this).parent().parent().data('uid');
var row = $(this).parent().parent();
var uid = $(row).data('uid');
$(row).hide();
// Call function for handling delete/undo
UserList.do_delete( uid );
UserList.do_delete(uid);
});
$('td.password>img').live('click',function(event){
@ -297,45 +379,8 @@ $(document).ready(function(){
function(result){
if(result.status!='success'){
OC.dialogs.alert(result.data.message, 'Error creating user');
}
else {
groups = result.data.groups;
var tr=$('#content table tbody tr').first().clone();
tr.attr('data-uid',username);
tr.find('td.name').text(username);
var select=$('<select multiple="multiple" class="groupsselect" data-placehoder="Groups" title="Groups">');
var subadminselect=$('<select multiple="multiple" class="subadminsselect" data-placehoder="subadmins" title="' + t('files', 'SubAdmin') + '">');
select.data('username',username);
select.data('userGroups',groups);
subadminselect.data('username',username);
subadminselect.data('userGroups',groups);
tr.find('td.groups').empty();
tr.find('td.subadmins').empty();
var allGroups=$('#content table').data('groups').split(', ');
for(var i=0;i<groups.length;i++){
if(allGroups.indexOf(groups[i])==-1){
allGroups.push(groups[i]);
}
}
$.each(allGroups,function(i,group){
select.append($('<option value="'+group+'">'+group+'</option>'));
if(group != 'admin'){
subadminselect.append($('<option value="'+group+'">'+group+'</option>'));
}
});
tr.find('td.groups').append(select);
tr.find('td.subadmins').append(subadminselect);
if(tr.find('td.remove img').length==0){
tr.find('td.remove').append($('<img alt="Delete" title="'+t('settings','Delete')+'" class="svg action" src="'+OC.imagePath('core','actions/delete')+'"/>'));
}
applyMultiplySelect(select);
applyMultiplySelect(subadminselect);
$('#content table tbody').last().append(tr);
tr.find('select.quota-user option').attr('selected',null);
tr.find('select.quota-user option').first().attr('selected','selected');
tr.find('select.quota-user').data('previous','default');
} else {
UserList.add(username, result.data.groups, null, 'default', true);
}
}
);
@ -343,9 +388,12 @@ $(document).ready(function(){
// Handle undo notifications
$('#notification').hide();
$('#notification .undo').live('click', function() {
if($('#notification').data('deleteuser'))
{
$( 'tr' ).filterAttr( 'data-uid', UserList.deleteUid ).show();
if($('#notification').data('deleteuser')) {
$('tbody tr').each(function(index, row) {
if ($(row).data('uid') == UserList.deleteUid) {
$(row).show();
}
});
UserList.deleteCanceled=true;
UserList.deleteFiles=null;
}

View File

@ -11,6 +11,8 @@ OC_Util::checkSubAdminUser();
// We have some javascript foo!
OC_Util::addScript( 'settings', 'users' );
OC_Util::addScript( 'core', 'multiselect' );
// TODO Move script to core
OC_Util::addScript('contacts', 'jquery.inview');
OC_Util::addStyle( 'settings', 'settings' );
OC_App::setActiveNavigationEntry( 'core_users' );