Allow hiding specific prizes, so we can produce a raw table.
authorCMDR furrycat <elite@furrycat.net>
Mon, 15 Feb 2016 11:32:56 +0000 (06:32 -0500)
committerCMDR furrycat <elite@furrycat.net>
Mon, 15 Feb 2016 11:32:56 +0000 (06:32 -0500)
lib/race.php
style.css

index 4c35b4a..83fd87d 100644 (file)
     else return $n . array('th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th')[$n % 10];
   }
 
-  function find_prizewinners($race, $entries) {
+  function find_prizewinners($race, $entries, $prize_filter = null) {
     $competitors = array();
     $prizes = array();
     $last_sort_method = null;
     foreach ($race->getPrizeKeys() as $p) {
+      if (! is_null($prize_filter) && ! ($race->PrizeValue($p) & $prize_filter)) continue;
       $sort_method = $race->PrizeSortMethod($p);
       if ($sort_method != $last_sort_method) uasort($entries, "Entry::$sort_method");
       $last_sort_method = $sort_method;
     $eq->filterById($filtered_entry_ids);
     $entry_objects = $eq->find();
     foreach ($entry_objects as $entry) $entries[] = $entry;
-    $prizewinners = find_prizewinners($race, $entries);
+    $prizewinners = find_prizewinners($race, $entries, $prize_filter);
     uasort($entries, "Entry::StandardSort");
     $ranked_entries = array();
     $competitor_entries = array();
     echo "</pre></div>\n";
   }
 
-  function build_args($params, $key, $value, $description) {
+  function build_args($params, $key, $value, $description, $class = null) {
     $uri = preg_replace('/&args=[^&]+/', '', $_SERVER['REQUEST_URI']);
-    $uri = " <a href=\"$uri&args=";
+    if (! is_null($class)) $class = " class=\"$class\"";
+    $uri = " <a$class href=\"$uri&args=";
     $args = array();
     foreach ($params as $k => $v) {
       if ($k == $key) $args[] = "$key:$value";
     if (! in_array($sort, array_keys($methods))) $sort = 'distance';
     $sort_method = $methods[$sort];
     $format = (array_key_exists("format", $params)) ? $params["format"] : "ships";
+    $prize_filter = (array_key_exists("prizes", $params)) ? (int) $params["prizes"] : null;
 
     $rq = new RaceQuery;
     if ($action) $rq->filterById($action);
           $entries[] = $entry;
           $entries_by_id[$entry->getId()] = $entry;
         }
-        $prizewinners = find_prizewinners($race, $entries);
+        $prizewinners = find_prizewinners($race, $entries, $prize_filter);
         uasort($entries, "Entry::$sort_method");
       }
       else {
         continue;
       }
 
+      echo "<div class=\"classification\">\n";
       echo "<h3>$name</h3>\n";
+
+      /* Prize filtering.  */
       if ($race->getPrizes()) {
-        $prizes = array();
-        foreach ($race->getPrizeKeys() as $p) $prizes[] = $race->PrizeDescription($p);
-        echo "<p>Prizes for " . implode(", ", $prizes) . ".</p>\n";
+        $uri_list = array();
+        foreach ($race->getPrizeKeys() as $p) {
+          $Prize = ucfirst($race->PrizeDescription($p));
+          $v = $race->PrizeValue($p);
+          if (is_null($prize_filter) || ($prize_filter & $v)) $uri = build_args($params, "prizes", (is_null($prize_filter)) ? $race->getPrizes() & ~$v : $prize_filter & ~$v, $Prize, "disabled");
+          else $uri = build_args($params, "prizes", $prize_filter | $v, $Prize);
+          $uri_list[] = $uri;
+        }
+        echo "<p class=\"header\">Show prizes: " . implode(" // ", $uri_list) . ".</p>\n";
       }
-      echo "<div class=\"classification\">\n";
 
       /* Sort options. */
       $uri_list = array();
index 05b57a0..08c1e41 100644 (file)
--- a/style.css
+++ b/style.css
@@ -1,7 +1,11 @@
 body { font-family: 'Sintony'; font-weight: 400; }
 #header { clear: both; overflow: auto; vertical-align: center; }
 #header { font-weight: 500; }
-#header a { text-decoration: none; }
+#header a { text-decoration: none; color: #005195; }
+.header a { text-decoration: none; }
+a { color: #005195; }
+a:visited { color: inherit; }
+a.disabled { text-decoration: line-through; color: #ff6418; }
 #header, .header, h1,h2,h3,h4 { font-family: 'Orbitron'; }
 #header strong { font-weight: 700; }
 #laps { overflow-x: auto; }