15 var $last_data_handler;
17 function mw_xml($host, $base, $user, $password){
18 $this->init_xml_env($host, $base, $user, $password);
19 $this->EXTENTION_OK = true;
22 function extention_ok(&$env){
23 if($this->EXTENTION_OK){
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"))
28 if(!class_exists("mw_xml_data")) require_once $env->app_file("data/impl/xml/mw_xml_data.php");
29 if(!class_exists("mw_xml_data_handler")) require_once $env->app_file("data/impl/xml/mw_xml_data_handler.php");
31 class_exists("mw_xml_data")
32 && class_exists("mw_xml_data_handler")
34 $this->xml_data = new mw_xml_data($this->host, $this->base);
36 else $this->EXTENTION_OK = false;
38 else $this->EXTENTION_OK = false;
40 return $this->EXTENTION_OK;
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) != "/" ? "/" : "");
47 $this->password = $password;
48 $this->data_handlers = array();
49 $this->last_data_handler = 0;
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);
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);
66 function data_exists($data_path){
67 return is_dir($this->host.$this->base.$data_path);
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);
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);
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)){
98 $this->close_data($dh);
102 function fetch_data($dh){
103 if(isset($this->data_handlers[$dh])){
104 return $this->data_handlers[$dh]->fetch_assoc();
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);
121 function last_index($dh){
122 if(isset($this->data_handlers[$dh])){
123 return $this->data_handlers[$dh]->last_index;
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);
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);
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]);
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);
166 else $OK = @unlink($this->host.$this->base.$data_path.$file);
173 if($OK) @rmdir($this->host.$this->base.$data_path);