16 var $last_data_handler;
18 function mw_xml($host, $base, $user, $password)
19 { $this->init_xml_env($host, $base, $user, $password);
20 $this->EXTENTION_OK = true;
23 function extention_ok(&$env)
24 { if($this->EXTENTION_OK)
26 ( file_exists($env->app_file("data/impl/xml/mw_xml_data.php"))
27 && file_exists($env->app_file("data/impl/xml/mw_xml_data_handler.php"))
29 { require $env->app_file("data/impl/xml/mw_xml_data.php");
30 require $env->app_file("data/impl/xml/mw_xml_data_handler.php");
32 ( class_exists("mw_xml_data")
33 && class_exists("mw_xml_data_handler")
35 { $this->xml_data = new mw_xml_data($this->host, $this->base);
37 else $this->EXTENTION_OK = false;
39 else $this->EXTENTION_OK = false;
41 return $this->EXTENTION_OK;
44 function init_xml_env($host, $base, $user, $password)
45 { $this->host = $host.($host && substr($host, -1) != "/" ? "/" : "");
46 $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
48 $this->password = $password;
49 $this->data_handlers = array();
50 $this->last_data_handler = 0;
53 function connect($host, $base, $user, $password)
54 { if($host.$base && is_dir($host.$base) && is_writable($host.$base))
55 { $this->init_xml_env($host, $base, $user, $password);
56 $this->xml_data = new mw_xml_data($this->host, $this->base);
62 function select_db($base)
63 { $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
64 return $this->connect($this->host, $this->base, $this->user, $this->password);
67 function data_exists($data_path)
68 { return is_dir($this->host.$this->base.$data_path);
71 function create_data($data_path)
72 { if(!is_dir($this->host.$this->base.$data_path)) @mkdir($this->host.$this->base.$data_path);
73 if(is_dir($this->host.$this->base.$data_path))
74 { if($dh = $this->open_data($data_path, false))
75 { $this->close_data($dh);
82 function get_data($data_path, $data_id)
83 { $dh = ++$this->last_data_handler;
84 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
85 if($this->data_handlers[$dh]->open_data(false))
86 { $res = $this->data_handlers[$dh]->get_data($data_id);
87 $this->close_data($dh);
93 function open_data($data_path, $FETCH = true)
94 { $dh = ++$this->last_data_handler;
95 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
96 if($this->data_handlers[$dh]->open_data($FETCH))
99 $this->close_data($dh);
103 function fetch_data($dh)
104 { if(isset($this->data_handlers[$dh]))
105 { return $this->data_handlers[$dh]->fetch_assoc();
110 function add_data($data_path, $data)
111 { $dh = ++$this->last_data_handler;
112 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
113 if($this->data_handlers[$dh]->open_data(false))
114 { $res = $this->data_handlers[$dh]->add_data($data);
115 if($res) $res = $this->last_index($dh);
116 $this->close_data($dh);
122 function last_index($dh)
123 { if(isset($this->data_handlers[$dh]))
124 { return $this->data_handlers[$dh]->last_index;
129 function set_data($data_path, $data_id, $data)
130 { $dh = ++$this->last_data_handler;
131 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
132 if($this->data_handlers[$dh]->open_data(false))
133 { $res = $this->data_handlers[$dh]->set_data($data_id.".xml", $data);
134 $this->close_data($dh);
140 function del_data($data_path, $data_id)
141 { $dh = ++$this->last_data_handler;
142 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
143 if($this->data_handlers[$dh]->open_data(false))
144 { $res = $this->data_handlers[$dh]->del_data($data_id.".xml");
145 $this->close_data($dh);
151 function close_data($dh)
152 { if(isset($this->data_handlers[$dh]))
153 { $this->data_handlers[$dh]->close_data();
154 unset($this->data_handlers[$dh]);
158 function remove_data($data_path)
159 { $OK = strlen($data_path) > 0;
160 if($OK && is_dir($this->host.$this->base.$data_path) && is_writable($this->host.$this->base.$data_path))
161 { $data_path .= substr($data_path, -1) == "/" ? "" : "/";
162 if($dh = opendir($this->host.$this->base.$data_path))
163 { while($OK && ($file = readdir($dh)) !== false)
164 { if(is_dir($this->host.$this->base.$data_path.$file))
165 { if($file != "." && $file != "..") $OK = $this->remove_data($data_path.$file);
167 else $OK = @unlink($this->host.$this->base.$data_path.$file);
174 if($OK) @rmdir($this->host.$this->base.$data_path);