diff --git a/settings/ajax/userlist.php b/settings/ajax/userlist.php new file mode 100644 index 0000000000..a73b699624 --- /dev/null +++ b/settings/ajax/userlist.php @@ -0,0 +1,45 @@ +. + * + */ + +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)); \ No newline at end of file diff --git a/settings/js/users.js b/settings/js/users.js index 91d24adafc..29f70f24df 100644 --- a/settings/js/users.js +++ b/settings/js/users.js @@ -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+''+t('users', 'undo')+''); $('#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 = $(''); + 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($('')); + if (typeof subadminSelect !== 'undefined' && group != 'admin') { + subadminSelect.append($('')); } - ); - } - - 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($('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(''); + } + } + 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.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'+group+'')); - if(group != 'admin'){ - subadminselect.append($('')); - } - }); - 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($('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; } diff --git a/settings/users.php b/settings/users.php index e88c4d1d9c..e5f01bbbfb 100644 --- a/settings/users.php +++ b/settings/users.php @@ -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' );