Mercurial > hg > batmud > misc
changeset 290:8ffcb08361bc misc
Various cleanups and improve parameter parsing.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 09 Mar 2015 08:06:03 +0200 |
parents | fb11575b634e |
children | 8720936884bb |
files | materials/index.php |
diffstat | 1 files changed, 118 insertions(+), 71 deletions(-) [+] |
line wrap: on
line diff
--- a/materials/index.php Mon Mar 09 06:17:12 2015 +0200 +++ b/materials/index.php Mon Mar 09 08:06:03 2015 +0200 @@ -13,80 +13,131 @@ exit; } +function stParseList($values, $pair) +{ + $res = array(); + if ($values === FALSE) + return $res; + + // It's an array already + if (is_array($values)) + { + if ($pair) + { + // The data should already be in our desired format .. maybe + foreach ($values as $key => $val) + $res[trim($key)] = trim($val); + } + else + { + // Place values in hash + foreach ($values as $key) + $res[trim($key)] = 1; + } + return $res; + } + + // Assume string, parse it + if (($list = preg_split("/\s*,\s*/", trim($values), -1, PREG_SPLIT_NO_EMPTY)) === FALSE) + return $res; + + if ($pair) + { + // Parse key-value pairs separated by : + foreach ($list as $str) + { + if (($tmp = preg_split("/\s*:\s*/", trim($str), -1, PREG_SPLIT_NO_EMPTY)) !== FALSE) + $res[$tmp[0]] = $tmp[1]; + } + } + else + { + // Should be just values, so place them in hash + foreach ($list as $str) + $res[$str] = 1; + } + return $res; +} + + +function stMakeList($name, $url, $array, $pair) +{ + if (count($array) == 0) + return ""; + + $tmp = array(); + if ($pair) + { + foreach ($array as $key => $val) + $tmp[] = $key.":".$val; + } + else + { + foreach ($array as $key => $val) + $tmp[] = $key; + } + + if ($url) + return "&".$name."=".join(",", $tmp); + else + return stGetFormHiddenInput($name, join(",", $tmp))."\n"; +} + + // Sorting column -$sortColumn = intval(stGetRequestItem("s", 0, TRUE)); -$sortDirection = substr(strtolower(stGetRequestItem("d", "", TRUE)), 0, 1) == "d"; +$setSortColumn = intval(stGetRequestItem("s", 0, TRUE)); +$setSortDirection = substr(strtolower(stGetRequestItem("d", "", TRUE)), 0, 1) == "d"; // Material column hiding -$hideColumns = array(); -if (isset($_GET["h"]) && is_array($_GET["h"])) -{ - foreach ($_GET["h"] as $vval) - $hideColumns[$vval] = 1; -} +$setHideColumns = stParseList(stGetRequestItem("h", FALSE, TRUE), FALSE); // Column filters -if (isset($_GET["f"]) && is_array($_GET["f"])) - $attrFilters = $_GET["f"]; -else - $attrFilters = array(); +$setAttrFilters = stParseList(stGetRequestItem("f", FALSE, TRUE), TRUE); // Material filters -if (isset($_GET["m"]) && is_array($_GET["m"])) - $matFilters = $_GET["m"]; -else - $matFilters = array(); - -$doMatFilter = intval(stGetRequestItem("mf", 0, TRUE)); +$setMatFilters = stParseList(stGetRequestItem("m", FALSE, TRUE), FALSE); +$setEnableMatFilters = intval(stGetRequestItem("mf", 0, TRUE)); function stGetTC($a, $column) { - global $sortColumn; - return "<".$a.($column == $sortColumn ? " class=\"hilite\"" : "").">"; + global $setSortColumn; + return "<".$a.($column == $setSortColumn ? " class=\"hilite\"" : "").">"; } -function stGetURLStr($cfilters, $col, $dir, $domfilter, $mfilters) +function stGetURLStr($cfilters, $col, $dir, $domfilters, $mfilters) { - global $sortDirs, $hideColumns, $doMatFilter; - - $str = "s=".$col."&d=".$sortDirs[$dir]."&mf=".$domfilter; - - foreach ($cfilters as $fkey => $fval) - $str .= "&f%5B".$fkey."%5D=".$fval; - - foreach ($hideColumns as $fkey => $fval) - $str .= "&h%5B%5D=".$fkey; - - foreach ($mfilters as $fkey => $fval) - $str .= "&m%5B".$fkey."%5D=".$fval; - + global $sortDirs, $setHideColumns; + $str = "s=".$col."&d=".$sortDirs[$dir]."&mf=".$domfilters; + $str .= stMakeList("f", TRUE, $cfilters, TRUE); + $str .= stMakeList("h", TRUE, $setHideColumns, FALSE); + $str .= stMakeList("m", TRUE, $mfilters, FALSE); return $str; } function stSortMatFunc($a, $b) { - global $sortDirection, $sortColumn; - $index = $sortColumn - 1; + global $setSortDirection, $setSortColumn; + $index = $setSortColumn - 1; if ($a[$index] == $b[$index]) return 0; $res = $a[$index] < $b[$index]; - if ($sortDirection) + if ($setSortDirection) return $res ? 1 : -1; else return $res ? -1 : 1; } -if ($sortColumn <= 0 || $sortColumn >= 18) +if ($setSortColumn <= 0 || $setSortColumn >= 18) { - $sortColumn = 0; - if ($sortDirection) + $setSortColumn = 0; + if ($setSortDirection) krsort($matTable, SORT_STRING); else ksort($matTable, SORT_STRING); @@ -127,15 +178,11 @@ <form action="<? echo $pageIndex; ?>" method="get"> <? echo - stGetFormHiddenInput("s", $sortColumn)."\n". - stGetFormHiddenInput("d", $sortDirs[$sortDirection]). - stGetFormHiddenInput("mf", $doMatFilter)."\n"; - -foreach ($attrFilters as $fkey => $fval) - echo stGetFormHiddenInput("f[".$fkey."]", $fval)."\n"; - -foreach ($matFilters as $fkey => $fval) - echo stGetFormHiddenInput("m[".$fkey."]", $fval)."\n"; + stGetFormHiddenInput("s", $setSortColumn)."\n". + stGetFormHiddenInput("d", $sortDirs[$setSortDirection])."\n". + stGetFormHiddenInput("mf", $setEnableMatFilters)."\n". + stMakeList("f", FALSE, $setAttrFilters, TRUE). + stMakeList("m", FALSE, $setMatFilters, FALSE); ?> <table class="optionsTable"> <tr> @@ -171,7 +218,7 @@ while (list($key, $value) = each($transNameTable)) { echo " <option". - (isset($hideColumns[$key]) ? " selected=\"selected\"" : ""). + (isset($setHideColumns[$key]) ? " selected=\"selected\"" : ""). " value=\"$key\">".chentities($value)."</option>\n"; } ?> @@ -180,8 +227,8 @@ <td> <select name="f[14]"> <? -$typeFilter = isset($attrFilters[14]) ? $attrFilters[14] : -1; -if ($typeFilter == -1) unset($attrFilters[14]); +$typeFilter = isset($setAttrFilters[14]) ? $setAttrFilters[14] : -1; +if ($typeFilter == -1) unset($setAttrFilters[14]); $typeTable = $transTable[14]; $typeTable[-1] = "EVERYTHING"; ksort($typeTable); @@ -201,22 +248,22 @@ </table> </form> <? -if (count($attrFilters) > 0) +if (count($setAttrFilters) > 0) { $filters = array(); - foreach ($attrFilters as $fkey => $fval) + foreach ($setAttrFilters as $fkey => $fval) if ($fkey >= 0) $filters[] = "<b>".strtolower($transNameTable[$fkey + 1])."</b>=".strtolower($transTable[$fkey][$fval]); echo "<p>Filtering: ".implode(", ", $filters)."</p>\n"; } -if (count($matFilters) > 0) +if (count($setMatFilters) > 0) { echo - "<p>Material filter: ".implode(", ", array_keys($matFilters))." ". - "<a href=\"?".stGetURLStr($attrFilters, $sortColumn, $sortDirection, !$doMatFilter, $matFilters). - "\">[".($doMatFilter ? "Deactivate" : "Activate")."]</a></p>\n"; + "<p>Material filter: ".implode(", ", array_keys($setMatFilters))." ". + "<a href=\"?".stGetURLStr($setAttrFilters, $setSortColumn, $setSortDirection, !$setEnableMatFilters, $setMatFilters). + "\">[".($setEnableMatFilters ? "Deactivate" : "Activate")."]</a></p>\n"; } ?> <div class="matTable"> @@ -225,16 +272,16 @@ <? foreach ($transNameTable as $key => $value) { - if ($key == 0 || !isset($hideColumns[$key])) + if ($key == 0 || !isset($setHideColumns[$key])) { echo " ".stGetTC("th", $key); if ($key < 18) { echo "<a href=\"?". - stGetURLStr($attrFilters, $key, - ($key == $sortColumn) ? !$sortDirection : $sortDirection, - $doMatFilter, $matFilters). + stGetURLStr($setAttrFilters, $key, + ($key == $setSortColumn) ? !$setSortDirection : $setSortDirection, + $setEnableMatFilters, $setMatFilters). "\">".chentities($value)."</a>"; } else @@ -248,14 +295,14 @@ foreach ($matTable as $key => $value) { $doShow = TRUE; - foreach ($attrFilters as $fkey => $fval) + foreach ($setAttrFilters as $fkey => $fval) if ($fval >= 0 && $value[$fkey] != $fval) { $doShow = FALSE; break; } - if ($doMatFilter && !isset($matFilters[$key])) + if ($setEnableMatFilters && !isset($setMatFilters[$key])) $doShow = FALSE; if ($doShow) @@ -263,7 +310,7 @@ $col = 0; // Material filter - $tmpFilters = $matFilters; + $tmpFilters = $setMatFilters; if (isset($tmpFilters[$key])) unset($tmpFilters[$key]); else @@ -271,15 +318,15 @@ echo " <tr>".stGetTC("td", $col++). - "<a class=\"matToggle ".(isset($matFilters[$key]) ? "active" : "inactive"). - "\" href=\"?".stGetURLStr($attrFilters, $sortColumn, $sortDirection, $doMatFilter, $tmpFilters). - "\">".(isset($matFilters[$key]) ? "-" : "+")."</a>". + "<a class=\"matToggle ".(isset($setMatFilters[$key]) ? "active" : "inactive"). + "\" href=\"?".stGetURLStr($setAttrFilters, $setSortColumn, $setSortDirection, $setEnableMatFilters, $tmpFilters). + "\">".(isset($setMatFilters[$key]) ? "-" : "+")."</a>". "<a href=\"/mat/".urlencode($key)."\">".chentities($key)."</a>". "</td>"; foreach ($value as $kkey => $kvalue) { - if (!isset($hideColumns[$kkey + 1])) + if (!isset($setHideColumns[$kkey + 1])) { echo stGetTC("td", $col); if (is_array($kvalue)) @@ -296,14 +343,14 @@ else { // A simple entry, just print it out - $tmpFilters = $attrFilters; + $tmpFilters = $setAttrFilters; if (isset($tmpFilters[$kkey])) unset($tmpFilters[$kkey]); else $tmpFilters[$kkey] = $kvalue; echo "<a href=\"?". - stGetURLStr($tmpFilters, $sortColumn, $sortDirection, $doMatFilter, $matFilters). + stGetURLStr($tmpFilters, $setSortColumn, $setSortDirection, $setEnableMatFilters, $setMatFilters). "\">".chentities($transTable[$kkey][$kvalue])."</a>"; } echo "</td>";