7af65dbed99db472d93a90f7b8576fb13ae07050
[mtweb] / web / app / data / modules / share / mw_data_links.php
1 <?php
2
3   class mw_data_links extends mw_data
4   {
5     var $links;
6
7     function init_links()
8     { $this->links = array();
9       return true;
10     }
11
12     function load_link(&$links, $v_path, $url, $intitule = "", $position = 0)
13     { if($path_item = array_shift($v_path))
14       { if(!isset($links[$path_item])) $links[$path_item] = array
15         ( "nom" => $path_item,
16           "url" => $v_path ? null : $url,
17           "intitule" => $v_path ? null : $intitule,
18           "subs" => array(),
19           "position" => 0
20         );
21         if($v_path) $this->load_link($links[$path_item]["subs"], $v_path, $url, $intitule, $position);
22         else
23         { $links[$path_item]["nom"] = $path_item;
24           $links[$path_item]["url"] = $url;
25           $links[$path_item]["intitule"] = $intitule;
26           $links[$path_item]["position"] = $position;
27         }
28       }
29     }
30
31     function valid_link_path($path)
32     { $v_path = explode("/", $path);
33       $SYNTAX_OK = true;
34       foreach($v_path as $i => $path_item)
35       { if($path_item)
36         { if(!preg_match("/^[a-zA-Z]+[a-zA-Z0-9\-_\.]*$/", $path_item))
37           { $SYNTAX_OK = false;
38             break;
39           }
40         }
41         else unset($v_path[$i]);
42       }
43       return $v_path && $SYNTAX_OK ? $v_path : false;
44     }
45
46     function get_link($path = null)
47     { if(!isset($this->links)) $this->init_links();
48       if($this->links !== false)
49       { if(!isset($path)) return $this->links;
50         if($v_path = $this->valid_link_path($path))
51         { return $this->_get_link($this->links, $v_path);
52         }
53       }
54       return false;
55     }
56
57     function _get_link($links, $v_path)
58     { if($path_item = array_shift($v_path))
59       { if(isset($links[$path_item]))
60         { if($v_path) return $this->_get_link($links[$path_item]["subs"], $v_path);
61           else return $links[$path_item];
62         }
63         else return false;
64       }
65     }
66
67     function set_link($path, $url, $intitule = "", $position = 0)
68     { if(!isset($this->links)) $this->init_links();
69       if($v_path = $this->valid_link_path($path))
70       { $this->load_link($this->links, $v_path, $url, $intitule, $position);
71         $this->links = $this->ordonne_links($this->links);
72       }
73     }
74
75     function ordonne_links($links)
76     { if(!is_array($links)) return false;
77       $values = array_values($links);
78       $maximum = count($values);
79       while($maximum > 0)
80       { $maximumTemporaire = 0;
81         for($i = 0; $i < $maximum - 1; $i++)
82         { if($values[$i]["position"] > $values[$i + 1]["position"])
83           { $tmp = $values[$i];
84             $values[$i] = $values[$i + 1];
85             $values[$i + 1] = $tmp;
86             $maximumTemporaire = $i + 1;
87           }
88         }
89         $maximum = $maximumTemporaire;
90       }
91       $res = array();
92       foreach($values as $value) { if($value["nom"]) $res[$value["nom"]] = $value; }
93       foreach($res as $nom => $sub) { if($sub["subs"]) $res[$nom]["subs"] = $this->ordonne_links($res[$nom]["subs"]); }
94       return $res;
95     }
96
97   }
98
99 ?>