maj syntaxe accolades, maj jQuery, correction layout contact
[mtweb] / web / app / data / impl / mw_xml.php
1 <?php
2
3   class mw_xml{
4
5     var $host;
6     var $base;
7     var $user;
8     var $password;
9
10     var $EXTENTION_OK;
11
12     var $xml_data;
13
14     var $data_handlers;
15     var $last_data_handler;
16
17     function mw_xml($host, $base, $user, $password){
18       $this->init_xml_env($host, $base, $user, $password);
19       $this->EXTENTION_OK = true;
20     }
21
22     function extention_ok(&$env){
23       if($this->EXTENTION_OK){
24         if(
25              file_exists($env->app_file("data/impl/xml/mw_xml_data.php"))
26           && file_exists($env->app_file("data/impl/xml/mw_xml_data_handler.php"))
27         ){
28           require $env->app_file("data/impl/xml/mw_xml_data.php");
29           require $env->app_file("data/impl/xml/mw_xml_data_handler.php");
30           if(
31                class_exists("mw_xml_data")
32             && class_exists("mw_xml_data_handler")
33           ){
34             $this->xml_data = new mw_xml_data($this->host, $this->base);
35           }
36           else $this->EXTENTION_OK = false;
37         }
38         else $this->EXTENTION_OK = false;
39       }
40       return $this->EXTENTION_OK;
41     }
42
43     function init_xml_env($host, $base, $user, $password){
44       $this->host = $host.($host && substr($host, -1) != "/" ? "/" : "");
45       $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
46       $this->user = $user;
47       $this->password = $password;
48       $this->data_handlers = array();
49       $this->last_data_handler = 0;
50     }
51
52     function connect($host, $base, $user, $password){
53       if($host.$base && is_dir($host.$base) && is_writable($host.$base)){
54         $this->init_xml_env($host, $base, $user, $password);
55         $this->xml_data = new mw_xml_data($this->host, $this->base);
56         return true;
57       }
58       return null;
59     }
60
61     function select_db($base){
62       $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
63       return $this->connect($this->host, $this->base, $this->user, $this->password);
64     }
65
66     function data_exists($data_path){
67       return is_dir($this->host.$this->base.$data_path);
68     }
69
70     function create_data($data_path){
71       if(!is_dir($this->host.$this->base.$data_path)) @mkdir($this->host.$this->base.$data_path);
72       if(is_dir($this->host.$this->base.$data_path)){
73         if($dh = $this->open_data($data_path, false)){
74           $this->close_data($dh);
75           return true;
76         }
77       }
78       return null;
79     }
80
81     function get_data($data_path, $data_id){
82       $dh = ++$this->last_data_handler;
83       $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
84       if($this->data_handlers[$dh]->open_data(false)){
85         $res = $this->data_handlers[$dh]->get_data($data_id);
86         $this->close_data($dh);
87         return $res;
88       }
89       return null;
90     }
91
92     function open_data($data_path, $FETCH = true){
93       $dh = ++$this->last_data_handler;
94       $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
95       if($this->data_handlers[$dh]->open_data($FETCH)){
96         return $dh;
97       }
98       $this->close_data($dh);
99       return null;
100     }
101
102     function fetch_data($dh){
103       if(isset($this->data_handlers[$dh])){
104         return $this->data_handlers[$dh]->fetch_assoc();
105       }
106       return false;
107     }
108
109     function add_data($data_path, $data){
110       $dh = ++$this->last_data_handler;
111       $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
112       if($this->data_handlers[$dh]->open_data(false)){
113         $res = $this->data_handlers[$dh]->add_data($data);
114         if($res) $res = $this->last_index($dh);
115         $this->close_data($dh);
116         return $res;
117       }
118       return null;
119     }
120
121     function last_index($dh){
122       if(isset($this->data_handlers[$dh])){
123         return $this->data_handlers[$dh]->last_index;
124       }
125       return null;
126     }
127
128     function set_data($data_path, $data_id, $data){
129       $dh = ++$this->last_data_handler;
130       $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
131       if($this->data_handlers[$dh]->open_data(false)){
132         $res = $this->data_handlers[$dh]->set_data($data_id.".xml", $data);
133         $this->close_data($dh);
134         return $res;
135       }
136       return null;
137     }
138
139     function del_data($data_path, $data_id){
140       $dh = ++$this->last_data_handler;
141       $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
142       if($this->data_handlers[$dh]->open_data(false)){
143         $res = $this->data_handlers[$dh]->del_data($data_id.".xml");
144         $this->close_data($dh);
145         return $res;
146       }
147       return null;
148     }
149
150     function close_data($dh){
151       if(isset($this->data_handlers[$dh])){
152         $this->data_handlers[$dh]->close_data();
153         unset($this->data_handlers[$dh]);
154       }
155     }
156
157     function remove_data($data_path){
158       $OK = strlen($data_path) > 0;
159       if($OK && is_dir($this->host.$this->base.$data_path) && is_writable($this->host.$this->base.$data_path)){
160         $data_path .= substr($data_path, -1) == "/" ? "" : "/";
161         if($dh = opendir($this->host.$this->base.$data_path)){
162           while($OK && ($file = readdir($dh)) !== false){
163             if(is_dir($this->host.$this->base.$data_path.$file)){
164               if($file != "." && $file != "..") $OK = $this->remove_data($data_path.$file);
165             }
166             else $OK = @unlink($this->host.$this->base.$data_path.$file);
167           }
168           closedir($dh);
169         }
170         else $OK = null;
171       }
172       else $OK = null;
173       if($OK) @rmdir($this->host.$this->base.$data_path);
174       return $OK;
175     }
176
177   }
178
179 ?>