15 var $last_data_handler;
17 function mw_xml($params = array()){
19 isset($params["host"]) ? $params["host"] : "content/data/xml",
20 isset($params["base"]) ? $params["base"] : "mw",
21 isset($params["user"]) ? $params["user"] : "",
22 isset($params["password"]) ? $params["password"] : ""
24 $this->EXTENTION_OK = true;
27 function extention_ok(&$env){
28 if($this->EXTENTION_OK){
30 file_exists($env->app_file("data/impl/xml/mw_xml_data.php"))
31 && file_exists($env->app_file("data/impl/xml/mw_xml_data_handler.php"))
33 if(!class_exists("mw_xml_data")) require_once $env->app_file("data/impl/xml/mw_xml_data.php");
34 if(!class_exists("mw_xml_data_handler")) require_once $env->app_file("data/impl/xml/mw_xml_data_handler.php");
36 class_exists("mw_xml_data")
37 && class_exists("mw_xml_data_handler")
39 $this->xml_data = new mw_xml_data($this->host, $this->base);
41 else $this->EXTENTION_OK = false;
43 else $this->EXTENTION_OK = false;
45 return $this->EXTENTION_OK;
48 function authentication_required() { return false; }
50 function sgbd_name() { return "XML"; }
52 function init_xml_env($host, $base, $user, $password){
53 $this->host = $host.($host && substr($host, -1) != "/" ? "/" : "");
54 $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
56 $this->password = $password;
57 $this->data_handlers = array();
58 $this->last_data_handler = 0;
61 function connect($host, $base, $user, $password){
62 if($host.$base && is_dir($host.$base) && is_writable($host.$base)){
63 $this->init_xml_env($host, $base, $user, $password);
64 $this->xml_data = new mw_xml_data($this->host, $this->base);
70 function select_db($base){
71 $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
72 return $this->connect($this->host, $this->base, $this->user, $this->password);
75 function data_exists($data_path){
76 return is_dir($this->host.$this->base.$data_path);
79 function create_data($data_path){
80 if(!is_dir($this->host.$this->base.$data_path)) @mkdir($this->host.$this->base.$data_path);
81 if(is_dir($this->host.$this->base.$data_path)){
82 if($dh = $this->open_data($data_path, false)){
83 $this->close_data($dh);
90 function get_data($data_path, $data_id){
91 $dh = ++$this->last_data_handler;
92 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
93 if($this->data_handlers[$dh]->open_data(false)){
94 $res = $this->data_handlers[$dh]->get_data($data_id);
95 $this->close_data($dh);
101 function open_data($data_path, $FETCH = true){
102 $dh = ++$this->last_data_handler;
103 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
104 if($this->data_handlers[$dh]->open_data($FETCH)){
107 $this->close_data($dh);
111 function fetch_data($dh){
112 if(isset($this->data_handlers[$dh])){
113 return $this->data_handlers[$dh]->fetch_assoc();
118 function add_data($data_path, $data, $index = null){
119 $dh = ++$this->last_data_handler;
120 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
121 if($this->data_handlers[$dh]->open_data(false)){
122 $res = $this->data_handlers[$dh]->add_data($data, $index);
123 if($res) $res = $this->last_index($dh);
124 $this->close_data($dh);
130 function last_index($dh){
131 if(isset($this->data_handlers[$dh])){
132 return $this->data_handlers[$dh]->last_index;
137 function set_data($data_path, $data_id, $data){
138 $dh = ++$this->last_data_handler;
139 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
140 if($this->data_handlers[$dh]->open_data(false)){
141 $res = $this->data_handlers[$dh]->set_data($data_id.".xml", $data);
142 $this->close_data($dh);
148 function del_data($data_path, $data_id){
149 $dh = ++$this->last_data_handler;
150 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
151 if($this->data_handlers[$dh]->open_data(false)){
152 $res = $this->data_handlers[$dh]->del_data($data_id.".xml");
153 $this->close_data($dh);
159 function close_data($dh){
160 if(isset($this->data_handlers[$dh])){
161 $this->data_handlers[$dh]->close_data();
162 unset($this->data_handlers[$dh]);
166 function remove_data($data_path){
167 $OK = strlen($data_path) > 0;
168 if($OK && is_dir($this->host.$this->base.$data_path) && is_writable($this->host.$this->base.$data_path)){
169 $data_path .= substr($data_path, -1) == "/" ? "" : "/";
170 if($dh = opendir($this->host.$this->base.$data_path)){
171 while($OK && ($file = readdir($dh)) !== false){
172 if(is_dir($this->host.$this->base.$data_path.$file)){
173 if($file != "." && $file != "..") $OK = $this->remove_data($data_path.$file);
175 else $OK = @unlink($this->host.$this->base.$data_path.$file);
182 if($OK) @rmdir($this->host.$this->base.$data_path);