# HG changeset patch # User Matti Hamalainen # Date 1425881163 -7200 # Node ID 8ffcb08361bc8adad88d2cc24933ebdf61f27a3b # Parent fb11575b634e6e4674376e2f681f48cc222465ff Various cleanups and improve parameter parsing. diff -r fb11575b634e -r 8ffcb08361bc materials/index.php --- 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 @@
$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); ?> @@ -171,7 +218,7 @@ while (list($key, $value) = each($transNameTable)) { echo " ".chentities($value)."\n"; } ?> @@ -180,8 +227,8 @@ ".stGetTC("td", $col++). - "".(isset($matFilters[$key]) ? "-" : "+")."". + "".(isset($setMatFilters[$key]) ? "-" : "+")."". "".chentities($key)."". ""; 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 "".chentities($transTable[$kkey][$kvalue]).""; } echo "";