view herbs/index.php @ 89:eb5b6db2b250 default tip

Fixes.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 19 Oct 2017 17:42:05 +0300
parents 95781f84cbe7
children
line wrap: on
line source

<?php
$pageTitle = "Some stupid plants (original by Jeskko, improved by Ggr)";

$terrainData = array(
  array("light forests"   , "lf", "f"),
  array("heavy forests"   , "hf", "F"),
  array("plains"          , "pl", "."),
  array("valleys"         , "va", "v"),
  array("fields"          , "fi", "y"),
  array("highlands"       , "hg", "H"),
  array("hills"           , "hi", "h"),
  array("desert"          , "de", "d"),
  array("swamps"          , "sw", "s"),
  array("abandoned ruins" , "ru", "#"),
  array("shores"          , "sh", "z"),
  array("beaches"         , "be", "b"),
  array("jungles"         , "ju", "j"),
  array("tundra"          , "tu", "t"),
  array("shallow water"   , "wa", "S"),
  array("mountains"       , "mo", "^"),
  array("badlands"        , "ba", "x"),
);

$seasonData = array(
  "spring" => 0x01,
  "summer" => 0x02,
  "autumn" => 0x04,
  "winter" => 0x08,
);


function tlGetTerrainDataByName($name)
{
  global $terrainData;
  foreach ($terrainData as $rkey => $rdata)
  {
    if ($rdata[0] == $name)
      return $rkey;
  }

  die("Unsupported terrain type '".$name."'.\n");
}


function tlGetTerrainDataByCode($val)
{
  global $terrainData;
  foreach ($terrainData as $rkey => $rdata)
  {
    if ($rdata[1] == $val)
      return $rkey;
  }

  return -1;
}


function tlGetSeasonFromName($name, $fail = FALSE)
{
  global $seasonData;
  foreach ($seasonData as $rkey => $rval)
  {
    if ($rkey == $name)
      return $rval;
  }

  if ($fail)
    die("Invalid season name '".$name."'.\n");
  else
    return 0;
}


function tlGetSeasonsFromFlags($val)
{
  $res = array();
  global $seasonData;
  foreach ($seasonData as $rkey => $rval)
  {
    if ($val & $rval)
      $res[] = $rkey;
  }

  return $res;
}


//
// Parse data from CSV input
//
$herbData = array();
if (($fh = @fopen("herbs.csv", "r")) !== FALSE)
{
  while ($data = fgetcsv($fh, 1000, ";"))
  {
    // Fix undefined columns
    for ($n = 0; $n <= 4; $n++)
      if (!isset($data[$n])) $data[$n] = "";

    // Parse seasons
    $sdata = 0;
    foreach (preg_split("/, */", $data[1]) as $value)
    {
      if ($value != "")
        $sdata |= tlGetSeasonFromName($value, TRUE);
    }

    // Parse terrains
    $rdata = array();
    foreach (preg_split("/, */", $data[2]) as $value)
    {
      if ($value != "")
        $rdata[] = tlGetTerrainDataByName($value);
    }
    
    // Put it all into an array
    $herbData[] = array(
      "name"    => $data[0],
      "seasons" => $sdata,
      "terrains" => $rdata,
      "pair" => $data[3],
      "info" => $data[4],
    );
  }
  fclose($fh);
}


echo
  "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n".
  "<html>\n".
  "  <head>\n".
  "    <title>".$pageTitle."</title>\n".
  "    <link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\">\n".
  "  </head>\n".
  "<body>\n".
  "<table>\n".
  "  <caption>".$pageTitle."</caption>\n".
  "  <tr>\n".
  "    <th>Plant name</th>\n".
  "    <th>Seasons</th>\n".
  "    <th>Terrain types</th>\n".
  "    <th>Herb pair</th>\n".
  "    <th>Information</th>\n".
  "  </tr>\n";


$sefilter = FALSE;
$trfilter = FALSE;
if (isset($_GET["terrain"]))
{
  $data = tlGetTerrainDataByCode(strtolower(trim($_GET["terrain"])));
  if ($data >= 0)
    $trfilter = $data;
}


if (isset($_GET["season"]))
{
  $data = tlGetSeasonFromName(strtolower(trim($_GET["season"])));
  if ($data > 0)
    $sefilter = $data;
}

$row = 0;
foreach ($herbData as $data)
{
  if ($trfilter !== FALSE && array_search($trfilter, $data["terrains"]) === FALSE)
    continue;

  if ($sefilter !== FALSE && ($data["seasons"] & $sefilter) == 0)
    continue;

  $seasons = array_map(function($x) {
      return "<a href=\"?season=".$x."\">".$x."</a>";
    }, tlGetSeasonsFromFlags($data["seasons"]));

  $row++;
  echo
    "  <tr class=\"".(($row % 2) ? "even" : "odd")."\">".
    "<td>".$data["name"]."</td>".
    "<td>".implode(", ", $seasons)."</td>".
    "<td>";

  foreach ($data["terrains"] as $rkey)
  {
    $rdata = $terrainData[$rkey];
    echo "<a href=\"?terrain=".$rdata[1]."\"><span class=\"".$rdata[1]."\">".$rdata[2]."</span></a>";
  }

  echo
    "</td>".
    "<td>".$data["pair"]."</td>".
    "<td>".$data["info"]."</td>".
    "</tr>\n";
}

?>
</table>
</body>
</html>