function update_user_posts() { $users = BoincUser::enum(); foreach ($users as $user) { BoincForumPrefs::lookup($user); $num = BoincPost::count("user={$user->id}"); if ($num != $user->prefs->posts) { echo "user {$user->id}: {$user->posts} {$num}\n"; $user->prefs->update("posts={$num}"); } } }
break; case CREATE_TIME_OLD: $query .= ' ORDER by post.timestamp asc'; break; case POST_SCORE: $query .= ' ORDER by post.score desc'; break; default: $query .= ' ORDER BY post.timestamp DESC'; break; } $query .= " limit {$limit}"; return BoincPost::enum_general($query); } $logged_in_user = get_logged_in_user(false); BoincForumPrefs::lookup($logged_in_user); if ($logged_in_user && $logged_in_user->prefs->privilege(S_MODERATOR)) { $show_hidden_posts = true; } else { $show_hidden_posts = false; } page_head(tra("Forum search results")); $search_keywords = post_str("search_keywords", true); $search_author = post_int("search_author", true); $search_max_time = post_int("search_max_time"); $search_forum = post_int("search_forum"); $search_sort = post_int("search_sort"); $search_list = explode(" ", $search_keywords); if ($search_max_time) { $min_timestamp = time() - $search_max_time * 3600 * 24; } else {
// need to do this in any case, // since show_user_summary_public() etc. accesses DB // The page may be presented in many different languages, // so here we cache the data instead // $cache_args = "userid=" . $id; $cached_data = get_cached_data(USER_PAGE_TTL, $cache_args); if ($cached_data) { // We found some old but non-stale data, let's use it $data = unserialize($cached_data); $user = $data->user; $community_links = $data->clo; } else { // No data was found, generate new data for the cache and store it $user = lookup_user_id($id); BoincForumPrefs::lookup($user); $user = @get_other_projects($user); $community_links = get_community_links_object($user); $data->user = $user; $data->clo = $community_links; set_cached_data(USER_PAGE_TTL, serialize($data), $cache_args); } if (!$user->id) { error_page("No such user"); } $logged_in_user = get_logged_in_user(false); page_head($user->name); start_table(); echo "<tr><td valign=top>"; start_table(); show_user_summary_public($user);
if (defined("MODERATORS_CAN_BANISH") && $user->prefs->privilege(S_MODERATOR)) { $auth = true; } else { if ($user->prefs->privilege(S_ADMIN)) { $auth = true; } } if (!$auth) { error_page(tra("Not authorized to banish users")); } $userid = post_int('userid'); $bad_user = BoincUser::lookup_id($userid); if (!$bad_user) { error_page("user ID not found"); } BoincForumPrefs::lookup($bad_user); $duration = post_int('duration'); if ($duration == -1) { $t = 2147483647; // Maximum integer value } else { $t = time() + $duration; } $reason = post_str("reason", true); $result = $bad_user->prefs->update("banished_until={$t}"); page_head(tra("Banishment")); if ($result) { echo tra("User %1 has been banished.", $bad_user->name); send_banish_email($forum, $bad_user, $t, $reason); } else { error_page(tra("Action failed: possible database problem"));
function do_send($logged_in_user) { global $replyto, $userid; check_banished($logged_in_user); check_tokens($logged_in_user->authenticator); $to = sanitize_tags(post_str("to", true)); $subject = post_str("subject", true); $content = post_str("content", true); if (post_str("preview", true) == tra("Preview")) { pm_form($replyto, $userid); } if ($to == null || $subject == null || $content == null) { pm_form($replyto, $userid, tra("You need to fill all fields to send a private message")); } else { if (!akismet_check($logged_in_user, $content)) { pm_form($replyto, $userid, tra("Your message was flagged as spam\n by the Akismet anti-spam system.\n Please modify your text and try again.")); } $to = str_replace(", ", ",", $to); // Filter out spaces after separator $users = explode(",", $to); $userlist = array(); $userids = array(); // To prevent from spamming a single user by adding it multiple times foreach ($users as $username) { $user = explode(" ", $username); if (is_numeric($user[0])) { // user ID is gived $userid = $user[0]; $user = BoincUser::lookup_id($userid); if ($user == null) { pm_form($replyto, $userid, tra("Could not find user with id %1", $userid)); } } else { $user = BoincUser::lookup_name($username); if ($user == null) { pm_form($replyto, $userid, tra("Could not find user with username %1", $username)); } elseif ($user == -1) { // Non-unique username pm_form($replyto, $userid, tra("%1 is not a unique username; you will have to use user ID", $username)); } } BoincForumPrefs::lookup($user); if (is_ignoring($user, $logged_in_user)) { pm_form($replyto, $userid, tra("User %1 (ID: %2) is not accepting private messages from you.", $user->name, $user->id)); } if (!isset($userids[$user->id])) { $userlist[] = $user; $userids[$user->id] = true; } } foreach ($userlist as $user) { if (!is_moderator($logged_in_user, null)) { check_pm_count($logged_in_user->id); } pm_send_msg($logged_in_user, $user, $subject, $content, true); } Header("Location: pm.php?action=inbox&sent=1"); } }
echo tra("This action will erase any changes you have made in your community preferences. To cancel, click your browser's Back button.") . "\n <p>\n <form action=edit_forum_preferences_action.php method=post>\n <input type=hidden name=action value=reset>\n <input class=\"btn btn-warning\" type=submit value=\"" . tra("Reset preferences") . "\">\n </form>\n "; page_tail(); exit; } // If the user has requested a reset of preferences; // preserve a few fields. // if (post_str("action", true) == "reset") { $posts = $user->prefs->posts; $last_post = $user->prefs->last_post; $rated_posts = $user->prefs->rated_posts; $banished_until = $user->prefs->banished_until; $special_user = $user->prefs->special_user; $user->prefs->delete(); unset($user->prefs); BoincForumPrefs::lookup($user, true); $user->prefs->update("posts={$posts}, last_post={$last_post}, rated_posts='{$rated_posts}', banished_until={$banished_until}, special_user='******'"); Header("Location: edit_forum_preferences_form.php"); exit; } $pmn = post_int("pm_notification"); if ($pmn != $user->prefs->pm_notification) { $user->prefs->update("pm_notification={$pmn}"); } if (!DISABLE_FORUMS) { $avatar_type = post_int("avatar_select"); $newfile = IMAGE_PATH . $user->id . "_avatar.jpg"; // Update the user avatar if ($avatar_type < 0 or $avatar_type > 3) { $avatar_type = 0; }
function handle_accept($user) { $srcid = get_int('userid'); $srcuser = BoincUser::lookup_id($srcid); if (!$srcuser) { error_page("No such user"); } $friend = BoincFriend::lookup($srcid, $user->id); if (!$friend) { error_page("No request"); } $friend->update("reciprocated=1"); // "accept message" not implemented in interface yet $msg = post_str('message', true); if ($msg) { $msg = sanitize_tags(BoincDb::escape_string($msg)); } $now = time(); $ret = BoincFriend::replace("user_src={$user->id}, user_dest={$srcid}, message='{$msg}', create_time={$now}, reciprocated=1"); if (!$ret) { error_page(tra("Database error")); } $type = NOTIFY_FRIEND_ACCEPT; BoincNotify::replace("userid={$srcid}, create_time={$now}, type={$type}, opaque={$user->id}"); BoincForumPrefs::lookup($srcuser); if ($srcuser->prefs->pm_notification == 1) { send_friend_accept_email($user, $srcuser, $msg); } $notify = BoincNotify::lookup($user->id, NOTIFY_FRIEND_REQ, $srcid); if ($notify) { $notify->delete(); } page_head(tra("Friendship confirmed")); echo tra("Your friendship with %1 has been confirmed.", "<b>" . $srcuser->name . "</b>"); page_tail(); }
function delete_banished() { global $days; $fps = BoincForumPrefs::enum("banished_until>0"); foreach ($fps as $fp) { $user = BoincUser::lookup_id($fp->userid); if (!$user) { continue; } if ($user->create_time < time() - $days * 86400) { continue; } do_delete_user($user); } }