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