From b9755091f6b76a98f09c8847176b8f7b4a2a5001 Mon Sep 17 00:00:00 2001 From: fisharebest Date: Tue, 8 Feb 2011 23:30:54 +0000 Subject: User list - use AJAX to generate data. --- admin_users.php | 382 ++++++++++++++++++++++---------------------------------- 1 file changed, 151 insertions(+), 231 deletions(-) (limited to 'admin_users.php') diff --git a/admin_users.php b/admin_users.php index 7971a15f8e..287c4a6509 100644 --- a/admin_users.php +++ b/admin_users.php @@ -34,7 +34,7 @@ if (!WT_USER_IS_ADMIN) { } // Valid values for form variables -$ALL_ACTIONS=array('cleanup', 'cleanup2', 'createform', 'createuser', 'deleteuser', 'edituser', 'edituser2', 'listusers'); +$ALL_ACTIONS=array('cleanup', 'cleanup2', 'createform', 'createuser', 'deleteuser', 'edituser', 'edituser2', 'listusers', 'loadrows', 'load1row'); $ALL_THEMES_DIRS=array(); foreach (get_theme_names() as $themename=>$themedir) { $ALL_THEME_DIRS[]=$themedir; @@ -89,16 +89,120 @@ $all_gedcoms = get_all_gedcoms(); //-- sorting by gedcom filename asort($all_gedcoms); -// Delete a user -if ($action=='deleteuser') { - // don't delete ourselves +switch ($action) { +case 'deleteuser': + // Delete a user - but don't delete ourselves! $user_id=get_user_id($username); if ($user_id!=WT_USER_ID) { delete_user($user_id); AddToLog("deleted user ->{$username}<-", 'auth'); } - // User data is cached, so reload the page to ensure we're up to date - header('Location: '.WT_SERVER_NAME.WT_SCRIPT_PATH.WT_SCRIPT_NAME.'?action=listusers'); + break; +case 'loadrows': + // Generate an AJAX/JSON response for datatables to load a block of rows + $sSearch=safe_GET('sSearch'); + if ($sSearch) { + $WHERE= + " WHERE". + " user_name LIKE CONCAT('%', ?, '%') OR " . + " real_name LIKE CONCAT('%', ?, '%') OR " . + " email LIKE CONCAT('%', ?, '%')"; + $ARGS=array($sSearch, $sSearch, $sSearch); + } else { + $WHERE=""; + $ARGS=array(); + } + $iDisplayStart =(int)safe_GET('iDisplayStart'); + $iDisplayLength=(int)safe_GET('iDisplayLength'); + if ($iDisplayLength>0) { + $LIMIT=" LIMIT " . $iDisplayStart . ',' . $iDisplayLength; + } else { + $LIMIT=""; + } + $iSortingCols=(int)safe_GET('iSortingCols'); + if ($iSortingCols) { + $ORDER_BY=' ORDER BY '; + for ($i=0; $i<$iSortingCols; ++$i) { + // Datatables numbers columns 0, 1, 2, ... + // MySQL numbers columns 1, 2, 3, ... + switch (safe_GET('sSortDir_'.$i)) { + case 'asc': + $ORDER_BY.=(1+(int)safe_GET('iSortCol_'.$i)).' ASC '; + break; + case 'desc': + $ORDER_BY.=(1+(int)safe_GET('iSortCol_'.$i)).' DESC '; + break; + } + if ($i<$iSortingCols-1) { + $ORDER_BY.=','; + } + } + } else { + $ORDER_BY=''; + } + + $sql= + "SELECT SQL_CACHE SQL_CALC_FOUND_ROWS '', u.user_id, user_name, real_name, email, us1.setting_value, us2.setting_value, us2.setting_value, us3.setting_value, us3.setting_value, us4.setting_value, us5.setting_value". + " FROM `##user` u". + " LEFT JOIN `##user_setting` us1 ON (u.user_id=us1.user_id AND us1.setting_name='language')". + " LEFT JOIN `##user_setting` us2 ON (u.user_id=us2.user_id AND us2.setting_name='reg_timestamp')". + " LEFT JOIN `##user_setting` us3 ON (u.user_id=us3.user_id AND us3.setting_name='sessiontime')". + " LEFT JOIN `##user_setting` us4 ON (u.user_id=us4.user_id AND us4.setting_name='verified')". + " LEFT JOIN `##user_setting` us5 ON (u.user_id=us5.user_id AND us5.setting_name='verified_by_admin')". + $WHERE. + $ORDER_BY. + $LIMIT; + + // This becomes a JSON list, not array, so need to fetch with numeric keys. + $aaData=WT_DB::prepare($sql)->execute($ARGS)->fetchAll(PDO::FETCH_NUM); + + // Reformat various columns for display + foreach ($aaData as &$aData) { + // $aData[0] is a dummy column for the expand-details icon + // $aData[1] is the user ID + $aData[2]=edit_field_inline('user-user_name-'.$aData[1], $aData[2]); + $aData[3]=edit_field_inline('user-real_name-'.$aData[1], $aData[3]); + $aData[4]=edit_field_inline('user-email-'. $aData[1], $aData[4]); + $aData[5]=edit_field_language_inline('user_setting-langugage-'.$aData[1], $aData[5]); + // $aData[6] is the sortable registration timestamp + $aData[7]=format_timestamp($aData[7]); + if (date("U") - $aData[6] > 604800 && !$aData[10]) { + $aData[7]=''.$aData[7].''; + } + // $aData[8] is the sortable last-login timestamp + if ($aData[8]) { + $aData[9]=format_timestamp($aData[8]).'
'.WT_I18N::time_ago(time() - $aData[8]); + } else { + $aData[9]=WT_I18N::translate('Never'); + } + $aData[10]=edit_field_yes_no_inline('user_setting-verified-'. $aData[1], $aData[10]); + $aData[11]=edit_field_yes_no_inline('user_setting-verified_by_admin-'.$aData[1], $aData[11]); + } + + // Total filtered/unfiltered rows + $iTotalDisplayRecords=WT_DB::prepare("SELECT FOUND_ROWS()")->fetchOne(); + $iTotalRecords=WT_DB::prepare("SELECT COUNT(*) FROM `##user`")->fetchOne(); + + header('Content-type: application/json'); + echo json_encode(array( // See http://www.datatables.net/usage/server-side + 'sEcho' =>(int)safe_GET('sEcho'), + 'iTotalRecords' =>$iTotalRecords, + 'iTotalDisplayRecords'=>$iTotalDisplayRecords, + 'aaData' =>$aaData + )); + exit; +case 'load1row': + // Generate an AJAX response for datatables to load expanded row + $user_id=(int)safe_GET('user_id'); + header('Content-type: text/html; charset=UTF-8'); + echo '
'; + echo '
', WT_I18N::translate('Administrator'), '
'; + echo '
', edit_field_yes_no_inline('user_setting-canadmin-'.$user_id, get_user_setting($user_id, 'canadmin')), '
'; + echo '
', WT_I18N::translate('Preferred contact method'), '
'; + echo '
', get_user_setting($user_id, 'canadmin'), '
'; + echo '
TODO ...
'; + echo '
... the rest of the settings
'; + echo ''; exit; } @@ -434,24 +538,9 @@ if ($action=="edituser") { exit; } +echo WT_JS_START; ?> - ', - '', - '', - 'User ID', - '', WT_I18N::translate('Real name'), '', - '', WT_I18N::translate('User name'), '', - '', WT_I18N::translate('Email'), '', - '', WT_I18N::translate('Language'), '', - '', WT_I18N::translate('Date registered'), '', - '', WT_I18N::translate('Last logged in'), '', - '', WT_I18N::translate('Verified'), '', - '', WT_I18N::translate('Approved'), '', - '', - '', - '', - '', - '', - WT_JS_START, - 'jQuery(document).ready(function() {', - ' jQuery("#user-list").dataTable( {', - ' "oLanguage": {', - ' "sLengthMenu": "Display records"', - ' },', - ' "bAutoWidth":false,', - ' "aaSorting": [[ 1, "asc" ]],', - ' "bProcessing": true,', - ' "bServerSide": true,', - ' "sAjaxSource": "', WT_SERVER_NAME, WT_SCRIPT_PATH, 'load.php?src=user_list",', - ' "aaSorting": [[ 1, "asc" ]],', - ' "bJQueryUI": true,', - ' "sPaginationType": "full_numbers"', - ' } );', - '} );', - WT_JS_END; -*/ +echo WT_JS_END; //-- echo out a list of the current users if ($action == "listusers") { -ob_start(); - $users = get_all_users(); - - // Then show the users echo '', '', '', - '', - '', + '', + '', '', + '', + '', '', - '', - '', - '', - '', + '', '', - '', + '', '', - '', '', '', - '', '', '', - ''; - foreach($users as $user_id=>$user_name) { - echo "'; - $userName = getUserFullName($user_id); - echo ""; - if (get_user_setting($user_id, "comment_exp")) { - if ((strtotime(get_user_setting($user_id, "comment_exp")) != "-1") && (strtotime(get_user_setting($user_id, "comment_exp")) < time("U"))) - echo '\n"; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - if (((date("U") - (int)get_user_setting($user_id, 'reg_timestamp')) > 604800) && !get_user_setting($user_id, 'verified')) - echo ''; - echo ''; //for sorting only - echo ''; - echo ''; //for sorting only - echo '', - '', - '', - ''; - } - echo '', + '', + '', '
', WT_I18N::translate('Message'), '', WT_I18N::translate('Real name'), '', WT_I18N::translate('Details'), ' user-id', WT_I18N::translate('User name'), '', WT_I18N::translate('Real name'), '', WT_I18N::translate('Email'), '', WT_I18N::translate('Language'), '', WT_I18N::translate('Role'), '', WT_I18N::translate('Automatically approve changes made by this user'), '', WT_I18N::translate('Theme'), '', WT_I18N::translate('Default tab to show on individual page'), ' date_registered ', WT_I18N::translate('Date registered'), ' REG_DATE last_login ', WT_I18N::translate('Last logged in'), ' LOG_DATE ', WT_I18N::translate('Verified'), '', WT_I18N::translate('Approved'), '', WT_I18N::translate('Delete'), '
"; - if ($user_id!=WT_USER_ID && get_user_setting($user_id, 'contactmethod')!='none') { - echo "
 
"; - } else { - echo ' '; - } - echo '
", $userName, ''; - if (get_user_setting($user_id, 'canadmin')) { - echo '
', WT_I18N::translate('Administrator'), '
'; - } - echo "
', $user_name; - else echo '', $user_name; - } - else echo '', $user_name; - if (get_user_setting($user_id, "comment")) { - $tempTitle = PrintReady(get_user_setting($user_id, "comment")); - echo '', $tempTitle, ''; - } - echo "', Zend_Locale::getTranslation(get_user_setting($user_id, 'language'), 'language', WT_LOCALE), ''; - echo "
    "; - foreach ($all_gedcoms as $ged_id=>$ged_name) { - $role=get_user_gedcom_setting($user_id, $ged_id, 'canedit'); - switch ($role) { - case 'admin': - case 'accept': - echo '
  • ', $ALL_EDIT_OPTIONS[$role]; - break; - case 'edit': - case 'access': - case 'none': - echo '
  • ', $ALL_EDIT_OPTIONS[$role]; - break; - default: - echo '
  • ', $ALL_EDIT_OPTIONS['none']; - break; - } - $uged = get_user_gedcom_setting($user_id, $ged_id, 'gedcomid'); - if ($uged) { - echo ' ', WT_I18N::translate('%s', get_gedcom_setting($ged_id, 'title')), '
  • '; - } else { - echo ' ', $ged_name, ''; - } - } - echo "
"; - echo '
'; - if (get_user_setting($user_id, 'auto_accept')) echo WT_I18N::translate('Yes'); - else echo WT_I18N::translate('No'); - echo ''; - if (get_user_setting($user_id, 'theme')) { - foreach (get_theme_names() as $themename=>$themedir) { - if ($themedir == get_user_setting($user_id, 'theme')) echo $themename; - } - } else { echo WT_I18N::translate('<default theme>');} - echo ''; - $tab = get_user_setting($user_id, 'defaulttab'); - if ($tab===0) { - echo WT_I18N::translate('<default tab>'); - } else { - foreach (WT_Module::getActiveTabs() as $module) { - if ($tab == $module->getName()) { - echo $module->getTitle(); - break; - } - } - } - echo ''; - else echo ''; - echo format_timestamp((int)get_user_setting($user_id, 'reg_timestamp')); - echo '', get_user_setting($user_id, 'reg_timestamp'), ''; - if ((int)get_user_setting($user_id, 'reg_timestamp') > (int)get_user_setting($user_id, 'sessiontime')) { - echo WT_I18N::translate('Never'), '
', WT_I18N::time_ago(time() - (int)get_user_setting($user_id, 'reg_timestamp')); - } else { - echo format_timestamp((int)get_user_setting($user_id, 'sessiontime')), '
', WT_I18N::time_ago(time() - (int)get_user_setting($user_id, 'sessiontime')); - } - echo '
', get_user_setting($user_id, 'sessiontime'), ''; - if (get_user_setting($user_id, 'verified')) echo WT_I18N::translate('Yes'); - else echo WT_I18N::translate('No'); - echo ''; - if (get_user_setting($user_id, 'verified_by_admin')) echo WT_I18N::translate('Yes'); - else echo WT_I18N::translate('No'); - echo ''; - if (WT_USER_ID!=$user_id) - echo "
 
"; - echo '
'; print_footer(); -ob_flush(); exit; } -- cgit v1.3