reorganisation des dossiers
[mtweb] / mw / app / data / modules / share / mw_data_links.php
diff --git a/mw/app/data/modules/share/mw_data_links.php b/mw/app/data/modules/share/mw_data_links.php
new file mode 100644 (file)
index 0000000..d5f3287
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+  class mw_data_links extends mw_data{
+
+    var $links;
+
+    function init_links(){
+      $this->links = array();
+      return true;
+    }
+
+    function load_link(&$links, $v_path, $url, $intitule = "", $position = 0){
+      if($path_item = array_shift($v_path)){
+        if(!isset($links[$path_item])) $links[$path_item] = array(
+          "nom" => $path_item,
+          "url" => $v_path ? null : $url,
+          "intitule" => $v_path ? null : $intitule,
+          "subs" => array(),
+          "position" => 0
+        );
+        if($v_path) $this->load_link($links[$path_item]["subs"], $v_path, $url, $intitule, $position);
+        else{
+          $links[$path_item]["nom"] = $path_item;
+          $links[$path_item]["url"] = $url;
+          $links[$path_item]["intitule"] = $intitule;
+          $links[$path_item]["position"] = $position;
+        }
+      }
+    }
+
+    function valid_link_path($path){
+      $v_path = explode("/", $path);
+      $SYNTAX_OK = true;
+      foreach($v_path as $i => $path_item){
+        if($path_item){
+          if(!preg_match("/^[a-zA-Z]+[a-zA-Z0-9\-_\.]*$/", $path_item)){
+            $SYNTAX_OK = false;
+            break;
+          }
+        }
+        else unset($v_path[$i]);
+      }
+      return $v_path && $SYNTAX_OK ? $v_path : false;
+    }
+
+    function get_link($path = null){
+      if(!isset($this->links)) $this->init_links();
+      if($this->links !== false){
+        if(!isset($path)) return $this->links;
+        if($v_path = $this->valid_link_path($path)){
+          return $this->_get_link($this->links, $v_path);
+        }
+      }
+      return false;
+    }
+
+    function _get_link($links, $v_path){
+      if($path_item = array_shift($v_path)){
+        if(isset($links[$path_item])){
+          if($v_path) return $this->_get_link($links[$path_item]["subs"], $v_path);
+          else return $links[$path_item];
+        }
+        else return false;
+      }
+    }
+
+    function set_link($path, $url, $intitule = "", $position = 0){
+      if(!isset($this->links)) $this->init_links();
+      if($v_path = $this->valid_link_path($path)){
+        $this->load_link($this->links, $v_path, $url, $intitule, $position);
+        $this->links = $this->ordonne_links($this->links);
+      }
+    }
+
+    function ordonne_links($links){
+      if(!is_array($links)) return false;
+      $values = array_values($links);
+      $maximum = count($values);
+      while($maximum > 0){
+        $maximumTemporaire = 0;
+        for($i = 0; $i < $maximum - 1; $i++){
+          if($values[$i]["position"] > $values[$i + 1]["position"]){
+            $tmp = $values[$i];
+            $values[$i] = $values[$i + 1];
+            $values[$i + 1] = $tmp;
+            $maximumTemporaire = $i + 1;
+          }
+        }
+        $maximum = $maximumTemporaire;
+      }
+      $res = array();
+      foreach($values as $value) { if($value["nom"]) $res[$value["nom"]] = $value; }
+      foreach($res as $nom => $sub) { if($sub["subs"]) $res[$nom]["subs"] = $this->ordonne_links($res[$nom]["subs"]); }
+      return $res;
+    }
+
+  }
+
+?>
\ No newline at end of file