. require_once("../inc/credit.inc"); require_once("../inc/email.inc"); require_once("../inc/util.inc"); require_once("../inc/team.inc"); require_once("../inc/friend.inc"); require_once("../inc/forum_db.inc"); require_once("../inc/notify.inc"); require_once("../inc/ldap.inc"); if (!defined('REMOTE_PROJECTS_TTL')) { define('REMOTE_PROJECTS_TTL', 86400); } // add an element "projects" to user consisting of array of projects // they've participated in // function get_other_projects($user) { $cpid = md5($user->cross_project_id . $user->email_addr); $url = "http://boinc.netsoft-online.com/get_user.php?cpid=".$cpid; // Check the cache for that URL // $cacheddata = get_cached_data(REMOTE_PROJECTS_TTL, $url); if ($cacheddata) { $remote = unserialize($cacheddata); if (!$remote) $remote = []; } else { // Fetch the XML, use curl if fopen() is disallowed // if (ini_get('allow_url_fopen')) { $timeout = 3; $old_timeout = ini_set('default_socket_timeout', $timeout); $xml_object = null; $f = @file_get_contents($url); if ($f) { $xml_object = @simplexml_load_string($f); } ini_set('default_socket_timeout', $old_timeout); if (!$xml_object) { return $user; } } else { $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 3); curl_setopt($ch, CURLOPT_TIMEOUT, 3); $rawxml = @curl_exec($ch); $xml_object = null; if ($rawxml) { $xml_object = @simplexml_load_string($rawxml); } curl_close($ch); if (!$xml_object) { return $user; } } // auto-cast the project list to an array of stdClass projects // $remote = @json_decode(json_encode((array)$xml_object))->project; if (!$remote) $remote = []; if (!is_array($remote)) { $remote = [$remote]; } // Cache the results set_cached_data(REMOTE_PROJECTS_TTL, serialize($remote), $url); } $user->projects = $remote; return $user; } function show_project($project) { if ($project->url == "http://www.worldcommunitygrid.org/") { $x = $project->name; } else { $x = "url"."show_user.php?userid=$project->id\">$project->name"; } echo " $x ".number_format($project->total_credit, 0)." ".number_format($project->expavg_credit, 0)." ".date_str($project->create_time)." "; } function cmp($a, $b) { if ($a->expavg_credit == $b->expavg_credit) return 0; return ($a->expavg_credit < $b->expavg_credit) ? 1 : -1; } function show_other_projects($user, $personal) { if (!isset($user->projects)) return; if (count($user->projects) < 2) return; usort($user->projects, "cmp"); if ($personal) { echo "

".tra("Projects in which you are participating")."

"; } else { echo "

".tra("Projects in which %1 is participating", $user->name)."

"; } start_table('table-striped'); row_heading_array( array( tra("Project")."
".tra("Click for user page")."", tra("Total credit"), tra("Average credit"), tra("Since") ), array("", ALIGN_RIGHT, ALIGN_RIGHT, ALIGN_RIGHT) ); foreach ($user->projects as $project) { show_project($project); } end_table(); } function total_posts($user) { return BoincPost::count("user=$user->id"); } function show_credit($user) { row2(tra("Total credit"), format_credit_large($user->total_credit)); row2(tra("Recent average credit"), format_credit($user->expavg_credit)); if (function_exists("project_user_credit")) { project_user_credit($user); } } require_once("../inc/stats_sites.inc"); // show dynamic user info (private) // function show_user_stats_private($user) { global $cpid_stats_sites; if (NO_COMPUTING && NO_STATS && NO_HOSTS) { return; } row1(tra("Computing")); if (!NO_STATS) { show_credit($user); } if (!NO_HOSTS) { row2(tra("Computers on this account"), "".tra("View").""); } if (!NO_COMPUTING) { row2(tra("Tasks"), "id\">".tra("View").""); } if (!NO_STATS) { $cpid = md5($user->cross_project_id . $user->email_addr); $x = ""; shuffle($cpid_stats_sites); foreach ($cpid_stats_sites as $site) { $name = $site[0]; $y = sprintf($site[1], $cpid); $x .= "$name
\n"; } $x .= "
".tra("Cross-project ID").": $cpid\n"; row2(tra("Cross-project statistics"), $x); $x = sprintf('%s', cert_filename(), tra("Account")); if ($user->teamid) { $x .= ' · '.tra("Team").''; } $x .= ' · '.tra("Cross-project").''; row2(tra("Certificate"), $x); row2(tra("Stats on your cell phone"), url_base()."userw.php?id=$user->id"); } } function notify_description($notify) { switch ($notify->type) { case NOTIFY_FRIEND_REQ: return friend_notify_req_web_line($notify); case NOTIFY_FRIEND_ACCEPT: return friend_notify_accept_web_line($notify); case NOTIFY_PM: return pm_web_line($notify); case NOTIFY_SUBSCRIBED_POST: return subscribed_post_web_line($notify); } return null; } function weak_auth($user) { $x = md5($user->authenticator.$user->passwd_hash); return "{$user->id}_$x"; } // originally user URLs were assumed to be http://, // and this prefix wasn't stored. // Now the prefix can be http:// or https://. // This function takes a user URL in any form and converts // it to a canonical form, with the protocol prefix. // function normalize_user_url($url) { $x = strtolower($url); if (substr($x, 0, 7) == 'http://') { return 'http://'.substr($url, 7); } if (substr($x, 0, 8) == 'https://') { return 'https://'.substr($url, 8); } return 'http://'.$url; } // show static user info (private) // function show_user_info_private($user) { row2(tra("Name"), $user->name); if (LDAP_HOST && is_ldap_email($user->email_addr)) { row2("LDAP ID", ldap_email_to_uid($user->email_addr)); } else { $email_text = $user->email_addr; if (defined("SHOW_NONVALIDATED_EMAIL_ADDR") && !$user->email_validated) { $email_text .= " (must be validated)"; } row2(tra("Email address"), $email_text); } if (USER_URL) { if ($user->url) { $u = normalize_user_url($user->url); row2(tra("URL"), sprintf('%s', $u, $u)); } } if (USER_COUNTRY) { row2(tra("Country"), $user->country); } if (POSTAL_CODE) { row2(tra("Postal code"), $user->postal_code); } row2(tra("%1 member since", PROJECT), date_str($user->create_time)); $url_tokens = url_tokens($user->authenticator); if (LDAP_HOST && is_ldap_email($user->email_addr)) { // LDAP accounts can't change email or password // row2(tra("Change"), "Account info" ); } else { $delete_account_str = ""; $config = get_config(); if (parse_bool($config, "enable_delete_account")) { $delete_account_str = " · ".tra("delete account").""; } row2(tra("Change"), "".tra("email address")." · ".tra("password")." · ".tra("other account info")."" .$delete_account_str ); } row2(tra("User ID")."

".tra("Used in community functions")."

", $user->id); if (!NO_COMPUTING) { row2( tra("Account keys"), "".tra("View")."" ); require_once("../inc/account_ownership.inc"); if (file_exists($account_ownership_private_key_file_path)) { // If the server has keys configured show the account ownership form row2( tra("Account Ownership"), "Generate ownership proof" ); } } } function show_preference_links() { row1("".tra("Preferences")); if (!NO_GLOBAL_PREFS) { row2( tra("When and how BOINC uses your computer"), "".tra("Computing preferences")."" ); } row2(tra("Message boards and private messages"), "".tra("Community preferences")."" ); if (!NO_COMPUTING) { row2(tra("Preferences for this project"), "".tra("%1 preferences", PROJECT)."" ); } } function friend_links($user) { if (is_banished($user)) { return ""; } $x = "
"; if ($user->has_profile) { $profile = BoincProfile::lookup_fields("has_picture", "userid=$user->id"); if ($profile && $profile->has_picture) { $img_url = profile_thumb_url($user->id); } else { $img_url = url_base()."img/head_20.png"; } $title = tra("View the profile of %1", $user->name); $alt = tra("Profile"); $x .= ' '.$alt.'
'; } $x .= " id."\">".$user->name.""; if (function_exists("project_user_links")) { $x .= project_user_links($user); } $x .= "
\n"; return $x; } // show user name, with links to profile if present. // if $badge_height is > 0, show badges // if $name_limit, limit name to N chars // function user_links($user, $badge_height=0, $name_limit=0) { BoincForumPrefs::lookup($user); if (is_banished($user)) { return "(banished: ID $user->id)"; } $x = ""; if ($user->has_profile) { $img_url = url_base()."img/head_20.png"; $x .= ' Profile'; } $name = $user->name; if ($name_limit && strlen($name) > $name_limit) { $name = substr($name, 0, $name_limit)."..."; } $x .= " id."\">".$name.""; if (function_exists("project_user_links")){ $x .= project_user_links($user); } if ($badge_height) { $x .= badges_string(true, $user, $badge_height); } return $name_limit?"$x":$x; } function show_community_private($user) { show_badges_row(true, $user); if (!DISABLE_PROFILES) { if ($user->has_profile) { $x = "id\">".tra("View")." · ".tra("Delete").""; } else { $x = "".tra("Create").""; } row2(tra("Profile"), $x); } if (!DISABLE_FORUMS) { $tot = total_posts($user); if ($tot) { row2(tra("Message boards"), "id\">".tra("%1 posts", $tot).""); } } row2(tra("Private messages"), pm_notification($user).pm_email_remind($user)); $notifies = BoincNotify::enum("userid=$user->id"); if (count($notifies)) { $x = ""; foreach ($notifies as $notify) { $y = notify_description($notify); if ($y) { $x .= "• $y
"; } else { $notify->delete(); } } $x .= "\"RSS\""; row2(tra("Notifications"), $x); } if (!DISABLE_TEAMS) { if ($user->teamid && ($team = BoincTeam::lookup_id($user->teamid))) { $x = "id\">$team->name · ".tra("Quit team").""; if (is_team_admin($user, $team)) { $x .= " · teamid\">".tra("Administer").""; } // if there's a foundership request, notify the founder // if ($user->id==$team->userid && $team->ping_user >0) { $x .= "

".tra("(foundership change request pending)")."

"; } row2(tra("Member of team"), $x); } else { row2(tra("Team"), tra("None")." · ".tra("find a team").""); } $teams_founded = BoincTeam::enum("userid=$user->id"); foreach ($teams_founded as $team) { if ($team->id != $user->teamid) { $x = "id\">$team->name"; $x .= " | id."\">".tra("Administer").""; if ($team->ping_user > 0) { $x .= "

".tra("(foundership change request pending)").""; } row2(tra("Founder but not member of"), $x); } } } $friends = BoincFriend::enum("user_src=$user->id and reciprocated=1"); $x = "".tra("Find friends")."
\n"; $n = count($friends); if ($n) { foreach($friends as $friend) { $fuser = BoincUser::lookup_id($friend->user_dest); if (!$fuser) continue; $x .= friend_links($fuser); } row2(tra("Friends")." ($n)", $x); } else { row2(tra("Friends"), $x); } } // show summary of dynamic and static info (public) // function show_user_summary_public($user) { global $g_logged_in_user; row2(tra("User ID"), $user->id); row2(tra("%1 member since", PROJECT), date_str($user->create_time)); if (USER_COUNTRY) { row2(tra("Country"), $user->country); } if (USER_URL) { // don't show URL if user has no recent credit (spam suppression) // if ($user->url) { if (!NO_COMPUTING || $user->expavg_credit > 1) { $u = normalize_user_url($user->url); row2(tra("URL"), sprintf('%s', $u, $u)); } } } if (!NO_COMPUTING) { show_credit($user); if ($user->show_hosts) { row2(tra("Computers"), "id\">".tra("View").""); } else { row2(tra("Computers"), tra("hidden")); } } if (function_exists("project_user_summary_public")) { project_user_summary_public($user); } } // Returns a cacheable community links data object // @param user The user to produce a community links object for function get_community_links_object($user){ $cache_object = new StdClass; $cache_object->post_count = total_posts($user); $cache_object->user = $user; $cache_object->team = BoincTeam::lookup_id($user->teamid); $cache_object->friends = array(); $friends = BoincFriend::enum("user_src=$user->id and reciprocated=1"); foreach($friends as $friend) { $fuser = BoincUser::lookup_id($friend->user_dest); if (!$fuser) continue; $cache_object->friends[] = $fuser; } return $cache_object; } function community_links($clo, $logged_in_user){ $user = $clo->user; $team = $clo->team; $friends = $clo->friends; $tot = $clo->post_count; if (!DISABLE_TEAMS) { if ($user->teamid && $team) { row2(tra("Team"), "id\">$team->name"); } else { row2(tra("Team"), tra("None")); } } if (!DISABLE_FORUMS) { if ($tot) { row2(tra("Message boards"), "id\">".tra("%1 posts", $tot).""); } } if ($logged_in_user && $logged_in_user->id != $user->id) { row2(tra("Contact"), "id."\">".tra("Send private message").""); $friend = BoincFriend::lookup($logged_in_user->id, $user->id); if ($friend && $friend->reciprocated) { row2(tra("This person is a friend"), "id\">".tra("Cancel friendship")."" ); } else if ($friend) { row2(tra("Friends"), "id\">".tra("Request pending").""); } else { row2(tra("Friends"), "id\">".tra("Add as friend").""); } } if ($friends) { $x = ""; foreach($friends as $friend) { $x .= friend_links($friend); } row2(tra("Friends")." (".sizeof($friends).")", $x); } } function show_profile_link($user) { if ($user->has_profile) { row2(tra("Profile"), "id\">".tra("View").""); } } function show_account_private($user) { grid( false, function() use ($user) { start_table(); row1(tra("Account information"), 2, 'heading'); show_user_info_private($user); show_preference_links(); show_user_stats_private($user); if (function_exists('show_user_donations_private')) { show_user_donations_private($user); } end_table(); if (!NO_COMPUTING) { show_other_projects($user, true); } if (function_exists("project_user_page_private")) { project_user_page_private($user); } }, function() use ($user) { start_table(); row1(tra("Community")); show_community_private($user); end_table(); } ); } $cvs_version_tracker[]="\$Id$"; //Generated automatically - do not edit ?>