Code cleaning:
authorx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Wed, 6 Dec 2006 22:49:26 +0000 (22:49 +0000)
committerx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Wed, 6 Dec 2006 22:49:26 +0000 (22:49 +0000)
* 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
classes/xnet.php

index ee6fcd1..31bbe83 100644 (file)
@@ -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;
         }
 
index c88a8c7..1e76f67 100644 (file)
@@ -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()