.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 ($profile = mysql_fetch_object($result)) {
- $user = lookup_user_id($profile->userid);
- if ($user->country) {
- $countryMembers[$user->country][] = $user->id;
- $numIds++;
- } else if ($user) {
- $countryMembers['Other'][] = $user->id;
- }
- }
-
- mysql_free_result($result);
-
- //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 = PROFILE_PATH;
- build_profile_pages(
- $countryMembers[$country],
- "User Profiles from $country", $country, 5, 2,
- $filePath, $baseFileName, "../html/"
- );
- }
-
- // 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() {
- global $alphabet;
-
- $query = "select * from profile";
- $result = mysql_query($query);
- $numIds = 0;
-
- while ($profile = mysql_fetch_object($result)) {
- $user = lookup_user_id($profile->userid);
-
- if ($user->name) {
- $name = ltrim($user->name);
- $members[strtoupper($name[0])][] = $user->id;
- $numIds++;
- }
- }
-
- mysql_free_result($result);
-
- //echo "$numIds users have profiles AND non-null country entries.
";
-
- $letters = array_keys($members);
-
- foreach ($letters as $letter) {
- // NOTE: Array indexing is case sensitive.
- $filePath = PROFILE_PATH;
- if (in_array($letter, $alphabet)) {
- build_profile_pages(
- $members[$letter],
- "User Profiles - Names beginning with $letter",
- "Names beginning with $letter", 5, 2, $filePath,
- "profile_$letter"
- );
- } else {
- build_profile_pages(
- $members[$letter],
- "User Profiles - Names beginning with other characters",
- "Names beginning with other characters", 5, 2, $filePath,
- "profile_other"
- );
- }
- $letters_used[$letter] = 1;
- }
-
- build_alpha_summary_page($letters_used);
-}
-
-// 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";
- open_output_buffer();
-
- $head = $pageHead . ": Page $page of $numPages";
- page_head($pageTitle, null, null, "../");
-
- echo "Last updated ", pretty_time_str(time()), "\n";
-
- $offset = (($page-1) * $rowsPerPage * $colsPerPage);
-
- show_user_table($members, $offset, $numPerPage, $colsPerPage);
-
- write_page_links($baseFileName, $page, $numPages);
-
- page_tail(false, "../");
-
- close_output_buffer($filename);
- }
-
-}
-
-function build_country_summary_page($countryMembers) {
- $countries = array_keys($countryMembers);
-
- $filename = PROFILE_PATH . "profile_country.html";
- open_output_buffer();
-
- page_head("User Profiles by Country", null, null, "../");
- echo "Last updated " . pretty_time_str(time()) . "
";
-
- echo "
\n";
- echo "Country | Profiles |
\n";
-
- foreach ($countries as $country) {
- $numMembers = count($countryMembers[$country]);
- $name = get_legal_filename($country);
-
- echo "\n$country | $numMembers | \n";
- }
-
- echo "
";
- page_tail(false, "../");
-
- close_output_buffer($filename);
-}
-
-function build_alpha_summary_page($characters_used) {
- global $alphabet;
-
- $filename = PROFILE_PATH."profile_alpha.html";
- open_output_buffer();
-
- foreach ($alphabet as $character) {
- if (isset($characters_used[$character])) {
- echo "$character ";
- unset($characters_used[$character]);
- } else {
- echo "$character ";
- }
- }
-
- // Link to the 'Other' page if necessary.
- if (!empty($characters_used)) {
- echo "Other ";
- }
- close_output_buffer($filename);
-}
-
-?>
diff --git a/html/inc/profile.inc b/html/inc/profile.inc
index c78136f9d9..8bd643d9ee 100644
--- a/html/inc/profile.inc
+++ b/html/inc/profile.inc
@@ -22,8 +22,12 @@ define('GALLERY_WIDTH', 7);
define('GALLERY_HEIGHT', 4);
function profile_screening() {
- $config = get_config();
- return parse_bool($config, "profile_screening");
+ static $val;
+ if (!isset($val)) {
+ $config = get_config();
+ $val = parse_bool($config, "profile_screening");
+ }
+ return $val;
}
function get_profile($userid) {
diff --git a/html/inc/uotd.inc b/html/inc/uotd.inc
index b3ec85a80e..b78344a77a 100644
--- a/html/inc/uotd.inc
+++ b/html/inc/uotd.inc
@@ -19,7 +19,7 @@ function uotd_thumbnail($profile, $user) {
function show_uotd($profile) {
$user = lookup_user_id($profile->userid);
echo user_links($user, true)."
";
- echo sub_sentence(strip_tags(output_transform($profile->response1)), ' ', 150, true);
+ echo sub_sentence(output_transform(strip_tags($profile->response1)), ' ', 150, true);
}
// return the last UOTD profile, or null
diff --git a/html/ops/update_profile_pages.php b/html/ops/update_profile_pages.php
index e46a50ffae..c3d14551cc 100755
--- a/html/ops/update_profile_pages.php
+++ b/html/ops/update_profile_pages.php
@@ -1,19 +1,392 @@
#!/usr/bin/env php
\n";
+
+ $rows = ceil($numToDisplay / $cols);
+ $count = $offset;
+ $numMembers = count($members);
+
+ for ($row = 0; $row < $rows; $row++) {
+ if ($count >= $numMembers) {
+ break;
+ }
+
+ echo "\n";
+
+ for ($col = 0; $col < $cols; $col++) {
+ if ($count < $numMembers) {
+ $profile = get_profile($members[$count]);
+ if (!$profile) {
+ $numMembers--;
+ continue;
+ }
+
+ echo "";
+
+ $show_picture = $profile->has_picture;
+ if (profile_screening() && $profile->verification != 1) {
+ $show_picture = false;
+ }
+ if ($show_picture) {
+ echo "";
+ } else {
+ echo " ";
+ }
+
+ echo " | \n", get_profile_summary($profile), " | ";
+ $count++;
+ } else {
+ echo " | | ";
+ }
+ }
+ echo "
\n";
+ }
+ echo "\n";
+
+}
+
+// Generates a standard set of links between associated multi-page documents.
+// All linked files must be of the form "$filename_.html".
+
+function write_page_links($filename, $currPageNum, $numPages) {
+ echo "Page $currPageNum of $numPages
";
+
+ $nextPageNum = $currPageNum + 1;
+ $prevPageNum = $currPageNum - 1;
+
+ // Make the 'previous' and 'next' page links as appropriate.
+ if ($currPageNum > 1) {
+ echo "Previous page";
+
+ if ($currPageNum != $numPages) {
+ echo " | ";
+ }
+ }
+ if ($currPageNum != $numPages) {
+ echo "Next page";
+ }
+
+ echo "Jump to Page:\n";
+
+ // Make the individual page links (or a bold non-link for the current page).
+ //
+ for ($i = 1; $i <= $numPages; $i++) {
+ if ($i != $currPageNum) {
+ echo "$i\n";
+ } else {
+ echo "$i\n";
+ }
+ }
+
+}
+
+// Generates the html files which comprise the photo gallery.
+// $room: which gallery to generate (user, computer).
+// $width: the width of the table of images.
+// $height: the height of the table of images.
+//
+function build_picture_pages($width, $height) {
+
+ // TODO: Add support for a computer image gallery.
+
+ // TODO: Standardize "Last modified" string to a function call (util.inc).
+
+ if (profile_screening()) {
+ $query = "SELECT userid FROM profile WHERE has_picture = 1 AND verification=1";
+ } else {
+ $query = "SELECT userid FROM profile WHERE has_picture = 1";
+ }
+ $result = mysql_query($query);
+ $numIds = mysql_num_rows($result);
+
+ //echo "Result has $numIds rows.
";
+
+ // 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++) {
+ $filename = PROFILE_PATH . "user_gallery_" . $page . ".html";
+ open_output_buffer();
+
+ page_head("Profile gallery: page $page of $numPages", null, null, "../");
+
+ echo "Last updated ", pretty_time_str(time()),
+ "\n
Browse the user profiles by picture.
+ Only user profiles with pictures are listed here.";
+
+
+ echo "
";
+ for ($col = 0; $col < $width; $col++) {
+ if ($count < $numIds) {
+ echo "
+
+ | ";
+ $count++;
+ }
+ }
+ echo "\n";
+ if ($count == $numIds) {
+ break;
+ }
+ }
+
+ echo "
\n";
+
+ // Previous and Next links
+
+ write_page_links("user_gallery", $page, $numPages);
+
+ page_tail(false, "../");
+
+ close_output_buffer($filename);
+ }
+
+ //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 userid 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 ($profile = mysql_fetch_object($result)) {
+ $user = lookup_user_id($profile->userid);
+ if (!$user) continue;
+ if ($user->country) {
+ $countryMembers[$user->country][] = $user->id;
+ $numIds++;
+ } else {
+ $countryMembers['Other'][] = $user->id;
+ }
+ }
+
+ mysql_free_result($result);
+
+ //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 = PROFILE_PATH;
+ build_profile_pages(
+ $countryMembers[$country],
+ "User Profiles from $country", $country, 5, 2,
+ $filePath, $baseFileName, "../html/"
+ );
+ }
+
+ // 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() {
+ global $alphabet;
+
+ $query = "select userid from profile";
+ $result = mysql_query($query);
+ $numIds = 0;
+
+ while ($profile = mysql_fetch_object($result)) {
+ $user = lookup_user_id($profile->userid);
+ if (!$user) continue;
+ if ($user->name) {
+ $name = ltrim($user->name);
+ $members[strtoupper($name[0])][] = $user->id;
+ $numIds++;
+ }
+ }
+
+ mysql_free_result($result);
+
+ //echo "$numIds users have profiles AND non-null country entries.
";
+
+ $letters = array_keys($members);
+
+ foreach ($letters as $letter) {
+ // NOTE: Array indexing is case sensitive.
+ $filePath = PROFILE_PATH;
+ if (in_array($letter, $alphabet)) {
+ build_profile_pages(
+ $members[$letter],
+ "User Profiles - Names beginning with $letter",
+ "Names beginning with $letter", 5, 2, $filePath,
+ "profile_$letter"
+ );
+ } else {
+ build_profile_pages(
+ $members[$letter],
+ "User Profiles - Names beginning with other characters",
+ "Names beginning with other characters", 5, 2, $filePath,
+ "profile_other"
+ );
+ }
+ $letters_used[$letter] = 1;
+ }
+
+ build_alpha_summary_page($letters_used);
+}
+
+// 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";
+ open_output_buffer();
+
+ $head = $pageHead . ": Page $page of $numPages";
+ page_head($pageTitle, null, null, "../");
+
+ echo "Last updated ", pretty_time_str(time()), "\n";
+
+ $offset = (($page-1) * $rowsPerPage * $colsPerPage);
+
+ show_user_table($members, $offset, $numPerPage, $colsPerPage);
+
+ write_page_links($baseFileName, $page, $numPages);
+
+ page_tail(false, "../");
+
+ close_output_buffer($filename);
+ }
+
+}
+
+function build_country_summary_page($countryMembers) {
+ $countries = array_keys($countryMembers);
+
+ $filename = PROFILE_PATH . "profile_country.html";
+ open_output_buffer();
+
+ page_head("User Profiles by Country", null, null, "../");
+ echo "Last updated " . pretty_time_str(time()) . "
";
+
+ echo "
\n";
+ echo "Country | Profiles |
\n";
+
+ foreach ($countries as $country) {
+ $numMembers = count($countryMembers[$country]);
+ $name = get_legal_filename($country);
+
+ echo "\n$country | $numMembers | \n";
+ }
+
+ echo "
";
+ page_tail(false, "../");
+
+ close_output_buffer($filename);
+}
+
+function build_alpha_summary_page($characters_used) {
+ global $alphabet;
+
+ $filename = PROFILE_PATH."profile_alpha.html";
+ open_output_buffer();
+
+ foreach ($alphabet as $character) {
+ if (isset($characters_used[$character])) {
+ echo "$character ";
+ unset($characters_used[$character]);
+ } else {
+ echo "$character ";
+ }
+ }
+
+ // Link to the 'Other' page if necessary.
+ if (!empty($characters_used)) {
+ echo "Other ";
+ }
+ close_output_buffer($filename);
+}
+
build_country_pages();
build_alpha_pages();
build_picture_pages(GALLERY_WIDTH, GALLERY_HEIGHT);
-echo date(DATE_RFC822), ": Finished\n";
+//echo date(DATE_RFC822), ": Finished\n";
?>
diff --git a/tools/make_project b/tools/make_project
index 020b1970c7..76c8ee063f 100755
--- a/tools/make_project
+++ b/tools/make_project
@@ -236,12 +236,12 @@ t.cmd = 'db_dump -d 2 -dump_spec ../db_dump_spec.xml'
t = project.config.tasks.make_node_and_append("task")
t.period = '1 days'
t.output = 'update_uotd.out'
-t.cmd = 'run_in_ops update_uotd.php'
+t.cmd = 'run_in_ops ./update_uotd.php'
t = project.config.tasks.make_node_and_append("task")
t.period = '1 hour'
t.output = 'update_forum_activities.out'
-t.cmd = 'run_in_ops update_forum_activities.php'
+t.cmd = 'run_in_ops ./update_forum_activities.php'
t = project.config.tasks.make_node_and_append("task")
t.period = '7 days'
@@ -251,17 +251,17 @@ t.cmd = 'update_stats -update_users -update_teams -update_hosts'
t = project.config.tasks.make_node_and_append("task")
t.period = '24 hours'
t.output = 'update_profile_pages.out'
-t.cmd = 'run_in_ops update_profile_pages.php'
+t.cmd = 'run_in_ops ./update_profile_pages.php'
t = project.config.tasks.make_node_and_append("task")
t.period = '24 hours'
t.output = 'team_import.out'
-t.cmd = 'run_in_ops team_import.php'
+t.cmd = 'run_in_ops ./team_import.php'
t = project.config.tasks.make_node_and_append("task")
t.period = '24 hours'
t.output = 'notify.out'
-t.cmd = 'run_in_ops notify.php'
+t.cmd = 'run_in_ops ./notify.php'
project.config.write()