. /***********************************************************************\ * Manage user settings * * Displays user settings, allows one to control special user status * and forum suspension (banishment). Put this in html/ops, * (or could be used by moderators for bans < 24 hrs). * \***********************************************************************/ require_once("../inc/util.inc"); require_once("../inc/user.inc"); require_once("../inc/team.inc"); require_once("../inc/forum.inc"); require_once("../inc/util_ops.inc"); require_once("../inc/profile.inc"); require_once("../project/project.inc"); db_init(); $is_admin = true; $Nbf = sizeof($special_user_bitfield); // Delete a user (or at least try to) function delete_user($user){ global $delete_problem; if( !empty($user->teamid) ){ user_quit_team($user); #$delete_problem .= "Removed user from team.
"; } if( $user->has_profile ){ mysql_query("DELETE FROM profile WHERE userid = $user->id"); delete_user_pictures($user->id); mysql_query("UPDATE user SET has_profile=0 WHERE id=$user->id"); #$delete_problem .= "Deleted profile.
"; } if( $user->total_credit > 0.0 ){ $delete_problem .= "Cannot delete user: User has credit.
"; return false; } // Don't delete user if they have any outstanding Results // $q = "SELECT COUNT(*) AS count FROM result WHERE userid=".$user->id; $result = mysql_query($q); $c = mysql_fetch_object($result); mysql_free_result($result); if($c->count){ $delete_problem .= "Cannot delete user: User has ". $c->count. " Results in the database.
"; } // Don't delete user if they have posted to the forums // $q = "SELECT COUNT(*) AS count FROM post WHERE user=".$user->id; $result = mysql_query($q); $c = mysql_fetch_object($result); mysql_free_result($result); if($c->count){ $delete_problem .= "Cannot delete user: User has ". $c->count. " forum posts.
"; } if($delete_problem) return false; $q = "DELETE FROM user WHERE id=".$user->id; $result = mysql_query($q); $delete_problem .= "User ".$user->id." deleted."; unset($user); } $delete_problem=""; /** * Process user search form */ $matches=""; if( isset($_POST['search_submit']) ){ $search_name = post_str('search_text'); $search_name = BoincDb::escape_string(strip_tags($search_name)); if( !empty($search_name) ){ $result = mysql_query("SELECT * FROM user WHERE name='$search_name'"); if( mysql_num_rows($result)==1 ) { $user = mysql_fetch_object($result); mysql_free_result($result); } else { $q = "SELECT * FROM user WHERE name LIKE '%".$search_name."%'"; $result = mysql_query($q); if( mysql_num_rows($result)==1 ) { $user = mysql_fetch_object($result); mysql_free_result($result); } if( mysql_num_rows($result)>1 ) { while( $row = mysql_fetch_object($result) ){ if( !empty($matches) ) $matches .= ", "; $matches .= $row->name; } mysql_free_result($result); } } } } /** * Look up the user */ $id = get_int("userid", true); if( empty($id) ) $id = post_int("userid", true); if( !empty($id) ){ $user = lookup_user_id($id); } // but clear if page was reset (forcing search form) if( isset($_POST['reset_page']) ){ unset($user); } /** * Process special user settings */ if( isset($_POST['special_user']) && $user && $is_admin ){ $bits=""; for($i=0;$i<$Nbf;$i++) { $bits .= $_POST['special_user_'.$i] ? "1" : "0" ; } $q = "UPDATE forum_preferences SET special_user=\"$bits\" WHERE userid=$id"; mysql_query($q); } /** * Process a suspension: */ if( isset($_POST['suspend_submit']) && !empty($user) && $is_admin ){ $dt = post_int('suspend_for',true); if( $is_admin || ($is_mod && $dt < 86400) ){ $reason = $_POST['suspend_reason']; if( $dt > 0 && empty($reason) ) { error_page("You must supply a reason for a suspension.

Try again"); } else { if( is_numeric($dt) ) { $t = time()+$dt; $q = "UPDATE forum_preferences SET banished_until=$t WHERE userid=$id"; mysql_query($q); /* put a timestamp in wiki to trigger re-validation of credentials */ if( function_exists('touch_wiki_user') ){ touch_wiki_user($user); } /* Send suspension e-mail to user and administrators */ if( $dt>0 ){ $subject = PROJECT." posting privileges suspended for ". $user->name; $body = " Forum posting privileges for the " .PROJECT. " user \"".$user->name."\" have been suspended for " .time_diff($dt). " by ".$logged_in_user->name.". The reason given was: $reason The suspension will end at " .time_str($t)."\n"; } else { $subject = PROJECT." user ". $user->name. " unsuspended"; $body = " Forum posting privileges for the " .PROJECT. " user \"".$user->name."\" have been restored by ".$logged_in_user->name."\n"; if($reason) $body.="The reason given was:\n\n $reason\n"; } send_email($user, $subject, $body); $emails = explode(",", POST_REPORT_EMAILS); foreach ($emails as $email) { $admin->email_addr = $email; send_email($admin, $subject, $body); } }//numerical($dt) } } }// suspend_submit // Process a delete request. Empty user will trigger search form. // if( isset($_POST['delete_user']) && !empty($user)){ delete_user($user); } // Now update from whatever might have been set above if( !empty($user) ) { BoincForumPrefs::lookup($user); } /******************************** * Output: */ admin_page_head("User Management: $user->name"); echo "

User Management

\n"; if (!defined("POST_REPORT_EMAILS")) { echo "

There is no addministrative e-mail address defined for reporting problems or abuse in the forums. Please define POST_REPORT_EMAILS in project.inc

\n"; } echo "
\n"; start_table(); if( empty($user->id) ) { if( !empty($search_name) ){ echo "No match found. "; if( !empty($matches) ) { echo " Partial matches are:
$matches
\n"; } } echo " Enter user name:
\n"; admin_page_tail(); exit(); } row1("User: ".$user->name. "
Id# ". $user->id . "

"); if($delete_problem){ echo "$delete_problem
\n"; } show_user_summary_public($user); show_profile_link_ops($user); if( $is_admin ) { row2("E-mail:", "$user->email_addr"); } project_user_summary($user); end_table(); project_user_page_private($user); echo "\n"; /********************** * Special User status: */ echo "\n\n

\n"; for($i=0;$i<$Nbf;$i++) { $bit = substr($user->prefs->special_user, $i, 1); echo "\n"; } echo ""; if( $is_admin ) { echo "\n"; } end_table(); echo "\n"; echo "\n\n\n"; end_table(); echo "\n"; echo "
\n"; echo "
\n"; start_table(); row1("Special User Status: $user->name", $Nbf ); echo "
". $special_user_bitfield[$i] ."
\n\n"; /********************** * Suspended posting privileges */ echo "
\n"; start_table(); row1("Suspension: $user->name"); if( $user->banished_until ) { $dt = $user->banished_until - time(); if( $dt > 0 ) { $x = " Suspended until " . time_str($user->banished_until) ."
(Expires in " . time_diff($dt) .")" ; } else { $x = " last suspended " . time_str($user->banished_until); } row1($x); } echo "
Suspend user for:
1 hour
2 hours
6 hours
12 hours
24 hours
"; if( $is_admin ){ // in case we are only a moderator echo " 48 hours
1 week
2 weeks
"; } if($dt>0) { echo " unsuspend
"; } echo "
"; echo "

Reason (required):\n"; echo ""; echo "
The reason will be sent to both the user and to the project administrators.\n"; echo "

\n"; echo "
\n"; if($q) { echo "

Query: $q "; } admin_page_tail(); $cvs_version_tracker[]= //Generated automatically - do not edit "\$Id$"; ?>