Handle colours a bit better.
authorCMDR furrycat <elite@furrycat.net>
Sun, 7 Feb 2016 14:57:38 +0000 (09:57 -0500)
committerCMDR furrycat <elite@furrycat.net>
Sun, 7 Feb 2016 14:57:38 +0000 (09:57 -0500)
lib/race.php

index 8abe313..6af77c8 100644 (file)
     return null;
   }
 
-  function entry_bgcolor($row, $column, $prize_name = null) {
+  function entry_bgcolor($row, $column, $blue_count = 0, $white_count = 0, $orange_count = 0, $prize_name = null) {
     $blue = colour('blue');
     $white = colour('white');
     $orange = colour('orange');
+    $headers = array();
+    $offset = 0;
+    for ($i = 0; $i < $blue_count; $i++) $headers[] = $blue[$i % 2];
+    $offset = count($headers);
+    for ($i = 0; $i < $white_count; $i++) $headers[] = $white[($offset + $i) % 2];
+    $offset = count($headers);
+    for ($i = 0; $i < $orange_count; $i++) $headers[] = $orange[($offset + $i) % 2];
     $colours = array(
       /* Header. */
-      array_merge($blue, $blue, $blue, $blue, $blue, $white, $white, $white, $orange, $orange, $orange),
+      $headers,
       /* Rows. */
       colour('row1'),
       colour('row2'),
     return $colours[$row_index][$column_index];
   }
 
-  function entry_fgcolor($row, $column, $prize_name = null) {
+  function entry_fgcolor($row, $column, $blue_count = 0, $white_count = 0, $orange_count = 0, $prize_name = null) {
     $white = array('#ffffff');
     $blue = array_splice(colour('blue'), 1);
     $orange = array_splice(colour('orange'), 0, 1);
+    $headers = array();
+    for ($i = 0; $i < $blue_count; $i++) $headers[] = $white[0];
+    for ($i = 0; $i < $white_count; $i++) $headers[] = $blue[0];
+    for ($i = 0; $i < $orange_count; $i++) $headers[] = $white[0];
     $colours = array(
       /* Header. */
-      array_merge($white, $white, $white, $white, $white, $white, $white, $white, $white, $white, $blue, $blue, $blue,$blue, $blue,  $blue, $white, $white, $white, $white),
+      $headers,
       /* Rows. */
       $blue,
       $orange,
     return sprintf("%s%s%s", open_tags($formatting, $tags), $text, close_tags($formatting, $tags));
   }
 
-  function entry_header($sort, $format, $type) {
-    $fields = array('R', 'S', 'E', 'CMDR name', 'Forum name', 'Ship name', 'Ship type', 'Distance', 'Penalty', 'Lap distance', 'Laps', 'Total distance', 'Allotted', 'Bonus', 'Raced', 'Total', 'Best speed', 'Average speed', 'Fastest lap', 'Average lap', 'Award');
-    if ($format == "full") array_unshift($fields, 'P');
+  function entry_header($sort, $format, $type, $blue_fields, $white_fields, $orange_fields) {
+    $fields = array_merge($blue_fields, $white_fields, $orange_fields);
     $small_fields = array('Distance', 'Penalty', 'Lap distance', 'Total distance', 'Fastest lap', 'Average lap', 'Average speed');
+    $column = 0;
     if ($type == 'html') {
       echo "<table class=\"entries\">\n";
       echo "<tr>\n";
-      $column = 0;
       foreach ($fields as $field) {
-        if ($field == 'Total distance' && $sort != 'penalty_distance') continue;
-        $bgcolor = entry_bgcolor(0, $column);
-        $fgcolor = entry_fgcolor(0, $column);
+        $bgcolor = entry_bgcolor(0, $column, count($blue_fields), count($white_fields), count($orange_fields));
+        $fgcolor = entry_fgcolor(0, $column, count($blue_fields), count($white_fields), count($orange_fields));
         echo "<th style=\"background-color: $bgcolor; color: $fgcolor\">$field</th>\n";
         $column++;
       }
       echo "<pre>\n";
       echo "[table=\"class: outer_border\"]\n";
       echo "[tr]\n";
-      $column = 0;
       foreach ($fields as $field) {
-        if ($field == 'Total distance' && $sort != 'penalty_distance') continue;
-        $bgcolor = entry_bgcolor(0, $column);
-        $fgcolor = entry_fgcolor(0, $column);
+        $bgcolor = entry_bgcolor(0, $column, count($blue_fields), count($white_fields), count($orange_fields));
+        $fgcolor = entry_fgcolor(0, $column, count($blue_fields), count($white_fields), count($orange_fields));
         echo "[td=\"bgcolor: $bgcolor\"][color=$fgcolor]";
         if (in_array($field, $small_fields)) {
           echo "[size=-2]";
     return (array_key_exists($condition, $formats) && $formats[$condition][0] >= $formats[$format][0]);
   }
 
-  function show_entry($sort, $format, $entry, $allotted_time, $position, $rank, $ship_rank, $row, $type, $prize_name) {
+  function show_entry($sort, $format, $entry, $allotted_time, $position, $rank, $ship_rank, $row, $type, $prize_name, $blue_count = 0, $white_count = 0) {
     $fields = array();
     if ($format == "full") $fields[] = $position;
     $fields[] = $position ? $rank : '';
       echo "<tr>\n";
       $column = 0;
       foreach ($fields as $field) {
-        $bgcolor = entry_bgcolor($row, $column, $prize_name);
-        $fgcolor = entry_fgcolor($foreground, $column, $prize_name);
+        $bgcolor = entry_bgcolor($row, $column, $blue_count, $white_count, $orange_count, $prize_name);
+        $fgcolor = entry_fgcolor($foreground, $column, $blue_count, $white_count, $orange_count, $prize_name);
         if (is_array($field)) $display = $field[1];
         else $display = $field;
         $text = entry_formatting($display, $formatting, $type);
       echo "[tr]\n";
       $column = 0;
       foreach ($fields as $field) {
-        $bgcolor = entry_bgcolor($row, $column, $prize_name);
-        $fgcolor = entry_fgcolor($foreground, $column, $prize_name);
+        $bgcolor = entry_bgcolor($row, $column, $blue_count, $white_count, $orange_count, $prize_name);
+        $fgcolor = entry_fgcolor($foreground, $column, $blue_count, $white_count, $orange_count, $prize_name);
         $display = (is_array($field)) ? $field[0] : $field;
         $text = entry_formatting($display, $formatting, $type);
         echo "[td=\"bgcolor: $bgcolor\"][color=$fgcolor]";
       $filtered_entries = array();
       foreach (array('html', 'bbcode') as $type) {
         echo "<div class=\"$type\">\n";
-        entry_header($sort, $format, $type);
+        $blue_fields = array('R', 'S', 'E', 'CMDR name', 'Forum name', 'Ship name', 'Ship type', 'Distance', 'Penalty');
+        if ($format == "full") array_unshift($blue_fields, 'P');
+        $white_fields = array('Lap distance', 'Laps');
+        if ($sort == 'penalty_distance') $white_fields[] = 'Total distance';
+        $white_fields = array_merge($white_fields, array('Allotted', 'Bonus', 'Raced', 'Total'));
+        $orange_fields = array('Best speed', 'Average speed', 'Fastest lap', 'Average lap', 'Award');
+        entry_header($sort, $format, $type, $blue_fields, $white_fields, $orange_fields);
         $n = $position = $rank = 1;
         $ship_entries = array();
         $competitor_entries = array();
             $r = (array_key_exists($name, $excluded_competitors)) ? 2 : 1;
             $excluded_competitors[$name] = 1;
           }
-          show_entry($sort, $format, $entry, $allotted_time, $p, $r, $s, $n++, $type, $prize_name);
+          show_entry($sort, $format, $entry, $allotted_time, $p, $r, $s, $n++, $type, $prize_name, count($blue_fields), count($white_fields));
           if ($filter) $filtered_entries[] = $entry;
         }
         entry_footer($race, $type);