"; // Build an array of IDs of all users with pictures in their profiles. while ($row = mysql_fetch_array($result, MYSQL_NUM)) { $userIds[] = $row[0]; } mysql_free_result($result); if (count($userIds) > 0) { // Randomize the ordering of users. shuffle($userIds); } $numPages = ceil(count($userIds)/($width * $height)); // Make sure that a page is generated even when no profiles with pictures // exist in order to avoid 404 errors from the profile_menu page. if ($numPages == 0) { $numPages = 1; } //echo "Generating $numPages pages.
"; $count = 0; for ($page = 1; $page <= $numPages; $page++) { $file = "../html_user/" . PROFILE_PATH . "user_gallery_" . $page . ".html"; $descriptor = fopen($file, "w"); page_head("User Picture Gallery: Page $page of $numPages", null, $descriptor); fwrite($descriptor, "

User Profile Pictures

Last updated " . gmdate("r") . " UTC\n

Browse the user profiles by picture. Only user profiles with pictures are listed here."); fwrite($descriptor, "\n"); for ($row = 0; $row < $height; $row++) { fwrite($descriptor, ""); for ($col = 0; $col < $width; $col++) { if ($count < $numIds) { fwrite($descriptor, ""); $count++; } } fwrite($descriptor, "\n"); if ($count == $numIds) { break; } } fwrite($descriptor, "
\n"); // Previous and Next links write_page_links("user_gallery", $page, $numPages, $descriptor); page_tail($descriptor); fclose($descriptor); } //echo "

Go to the first generated page."; } // Creates pages grouping user profiles by country. Filenames are of the // format "profile_country__.html" // Also creates a summary page listing all countries which have profiled // members, the number of such members, and links to the created pages for // each country. function build_country_pages() { $query = "SELECT * FROM profile"; $result = mysql_query($query); $numIds = 0; // Build a multi-dimensional array of countries, each element of which contains an array // of the userids who belong to those countries. Format: array[country][index] = userid. while ($row = mysql_fetch_assoc($result)) { $query2 = "SELECT * FROM user WHERE id = " . $row['userid']; $result2 = mysql_query($query2); $row2 = mysql_fetch_assoc($result2); if ($row2['country']) { $countryMembers[$row2['country']][] = $row2['id']; $numIds++; } else { $countryMembers['Other'][] = $row2['id']; } } mysql_free_result($result); mysql_free_result($result2); //echo "$numIds users have profiles AND non-null country entries.
"; $countries = array_keys($countryMembers); sort($countries); // Build the pages. // TODO: Define a constant for the desired number of rows per page. foreach ($countries as $country) { $baseFileName = "profile_country_" . get_legal_filename($country); $filePath = "../html_user/" . PROFILE_PATH; build_profile_pages($countryMembers[$country], "User Profiles from $country", $country, 5, 2, $filePath, $baseFileName, "../html_user/"); } // Build the summary page linking to the individual country pages. build_country_summary_page($countryMembers); //echo "
View Summary Page"; //echo "

Done"; } // Creates pages grouping users by the first letter of their names. function build_alpha_pages() { $query = "SELECT * FROM profile"; $result = mysql_query($query); $numIds = 0; while ($row = mysql_fetch_assoc($result)) { $query2 = "SELECT * FROM user WHERE id = " . $row['userid']; $result2 = mysql_query($query2); $row2 = mysql_fetch_assoc($result2); if ($row2['name']) { $members[$row2['name'][0]][] = $row2['id']; $numIds++; } } mysql_free_result($result); mysql_free_result($result2); //echo "$numIds users have profiles AND non-null country entries.
"; $letters = array_keys($members); foreach ($letters as $letter) { // TODO: Make sure array indexing is not case sensitive. $letter = strtoupper($letter); $filePath = "../html_user/" . PROFILE_PATH; build_profile_pages($members[$letter], "User Profiles - Names beginning with $letter", "Names beginning with $letter", 5, 2, $filePath, "profile_$letter"); } build_alpha_summary_page($letters); } // A generalized function to produce some number of pages summarizing a // set of user profiles. function build_profile_pages($members, $pageHead, $pageTitle, $rowsPerPage, $colsPerPage, $filePath, $baseFileName) { $numMembers = count($members); $numPerPage = $rowsPerPage * $colsPerPage; $numPages = ceil(count($members) / $numPerPage); $count = 0; for ($page = 1; $page <= $numPages; $page++) { $filename = $filePath . $baseFileName . "_" . $page . ".html"; $descriptor = fopen($filename, "w"); $head = $pageHead . ": Page $page of $numPages"; page_head($pageHead, null, $descriptor); fwrite($descriptor, "

$pageTitle

\n"); fwrite($descriptor, "Last updated " . gmdate("r") . " UTC

\n"); $offset = (($page-1) * $rowsPerPage * $colsPerPage); show_user_table($members, $offset, $numPerPage, $colsPerPage, $descriptor); write_page_links($baseFileName, $page, $numPages, $descriptor); page_tail($descriptor); fclose($descriptor); } } function build_country_summary_page($countryMembers) { $countries = array_keys($countryMembers); $filename = "../html_user/" . PROFILE_PATH . "profile_country.html"; $descriptor = fopen($filename, "w"); page_head("User Profiles by Country", null, $descriptor); fwrite($descriptor, "

User Profiles by Country

Last updated " . gmdate("r") . " UTC

"); fwrite($descriptor, "\n"); fwrite($descriptor, "\n"); foreach ($countries as $country) { $numMembers = count($countryMembers[$country]); $name = get_legal_filename($country); fwrite($descriptor, "\n\n"); } fwrite($descriptor, "
CountryProfiles
$country$numMembers
"); page_tail($descriptor); fclose($descriptor); } function build_alpha_summary_page($characters) { // OK, so it's not quite the alphabet- alphanumerabet is a bad variable name. $alphabet = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'); $filename = "../html_user/profile_alpha.html"; $descriptor = fopen($filename, "w"); // TODO: Add "Other" to handle non-alphanumeric first characters. Will involve removing elements from $characters as we finish them. foreach ($alphabet as $character) { if (in_array($character, $characters)) { fwrite($descriptor, "$character "); } else { fwrite($descriptor, "$character "); } } fclose($descriptor); } function build_uotd_page() { // Check if the current UOTD has had their 24 hours of fame - if so, pick a new one. $result = mysql_query("SELECT * FROM profile ORDER BY uotd_time DESC LIMIT 1"); if (mysql_num_rows($result) > 0) { $current_uotd = mysql_fetch_assoc($result); $assigned = getdate($current_uotd['uotd_time']); $now = getdate(time()); if ($assigned['mday'] == $now['mday']) { exit(); } } // TODO: Verify that adding RAND() didn't screw this up. $result = mysql_query("SELECT * FROM profile WHERE verification = 1 AND uotd_time IS NULL ORDER BY RAND()"); // If the number of approved profiles dips below a threshold, email the sys admin every time we pick a new one. if ($result && mysql_num_rows($result) < UOTD_THRESHOLD) { mail(SYS_ADMIN_EMAIL, PROJECT . ": User of the Day pool is running low!", "The pool of approved candidates for User of the Day has reached your assigned threshold: there are now only " . mysql_num_rows($result) . " approved users.\n\nTo approve more candidates for User of the Day, direct your web browser to the " . PROJECT . " administration page and click \"Unrated profile\""); } if ($result && mysql_num_rows($result) == 0) { // If all verified profiles have been selected as UOTD, reshow the one that was shown least recently. $result = mysql_query("SELECT * FROM profile WHERE verification = 1 ORDER BY uotd_time ASC LIMIT 1"); } if (!$result || mysql_num_rows($result) == 0) { // No valid users of the day - do something. exit(); } $profile = mysql_fetch_assoc($result); $sql = "SELECT * FROM user where id = " . $profile['userid']; $result2 = mysql_query($sql); $user = mysql_fetch_assoc($result2); $filename = "../html_user/uotd.html"; $descriptor = fopen($filename, "w"); if ($profile['has_picture']) { fwrite($descriptor, ""); } fwrite($descriptor, "The " . PROJECT . " User of the Day is " . $user['name'] . "!"); fclose($descriptor); $sql = "UPDATE profile SET uotd_time = " . time() . " WHERE userid = " . $user['id']; mysql_query($sql); mail($user['email_addr'], "You're the " . PROJECT . " user of the day!", "Congratulations!\n\nYou've been chosen as the " . PROJECT . " user of the day! Your profile will be featured on the " . PROJECT . " website for the next 24 hours. Thanks again for supporting us- it's members like you that make distributed computing projects like ours such a success.\n\nBest regards and much thanks,\n\nThe " . PROJECT . " team."); } ?>