From 0d602b8f5fe4fc8cd42dc61a442d14f32bb19056 Mon Sep 17 00:00:00 2001 From: x2003bruneau Date: Wed, 6 Dec 2006 22:49:26 +0000 Subject: [PATCH] Code cleaning: * limit the size of the strings given to levenshtein * do not propose administration link to non-admin * cleverer tests for xnet git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1251 839d8a87-29fc-0310-9880-83ba4fa771e5 --- classes/platal.php | 29 +++++++++++++++++++---------- classes/xnet.php | 13 ++++--------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/classes/platal.php b/classes/platal.php index ee6fcd1..31bbe83 100644 --- a/classes/platal.php +++ b/classes/platal.php @@ -89,20 +89,27 @@ class Platal function find_nearest_key($key, &$array) { - $keys = array_keys($array); + $keys = array_keys($array); if (in_array($key, $keys)) { return $key; } - $val = null; - $best = null; + + $has_end = in_array("#final#", $keys); + if (strlen($key) > 24 && $has_end) { + return "#final#"; + } + foreach ($keys as $k) { + if ($k == "#final#") { + continue; + } $lev = levenshtein($key, $k); - if ((is_null($val) || $lev < $val) && $lev < strlen($k)/2) { + if ((!isset($val) || $lev < $val) && $lev <= (strlen($k)*2)/3) { $val = $lev; $best = $k; } } - if (is_null($best) && in_array("#final#", $keys)) { + if (!isset($best) && $has_end) { return "#final#"; } else { return $best; @@ -114,6 +121,9 @@ class Platal { $hooks = array(); foreach ($this->__hooks as $hook=>$handler) { + if (!empty($handler['perms']) && $handler['perms'] != S::v('perms')) { + continue; + } $parts = split('/', $hook); $place =& $hooks; foreach ($parts as $part) { @@ -128,19 +138,18 @@ class Platal $p = split('/', $this->path); $place =& $hooks; $link = ''; - $ended = false; foreach ($p as $k) { - if (!$ended) { + if (!isset($ended)) { $key = $this->find_nearest_key($k, $place); } else { $key = $k; } if ($key == "#final#") { - $key = $k; - $ended = true; if (!array_key_exists($link, $this->__hooks)) { return null; } + $key = $k; + $ended = true; } if (!is_null($key)) { if (!empty($link)) { @@ -165,7 +174,7 @@ class Platal $args = $this->argv; $args[0] = &$page; - if (strlen($hook['perms']) && $hook['perms'] != Session::v('perms')) { + if (!empty($hook['perms']) && $hook['perms'] != S::v('perms')) { return PL_FORBIDDEN; } diff --git a/classes/xnet.php b/classes/xnet.php index c88a8c7..1e76f67 100644 --- a/classes/xnet.php +++ b/classes/xnet.php @@ -41,21 +41,16 @@ class Xnet extends Platal function find_nearest_key($key, &$array) { global $globals; - $k = parent::find_nearest_key($key, $array); - if (is_null($k) && in_array('%grp', array_keys($array)) && $globals->asso()) { + if (in_array('%grp', array_keys($array)) && $key == $globals->asso('diminutif')) { return '%grp'; } - return $k; + return parent::find_nearest_key($key, $array); } function near_hook() { - $link = parent::near_hook(); - if (strpos($link, '%grp') !== false) { - global $globals; - return str_replace('%grp', $globals->asso('diminutif'), $link); - } - return $link; + global $globals; + return str_replace('%grp', $globals->asso('diminutif'), parent::near_hook()); } function find_hook() -- 2.1.4