init_xml_env($host, $base, $user, $password); $this->EXTENTION_OK = true; } function extention_ok(&$env) { if($this->EXTENTION_OK) { if ( file_exists($env->app_file("data/impl/xml/mw_xml_data.php")) && file_exists($env->app_file("data/impl/xml/mw_xml_data_handler.php")) ) { require $env->app_file("data/impl/xml/mw_xml_data.php"); require $env->app_file("data/impl/xml/mw_xml_data_handler.php"); if ( class_exists("mw_xml_data") && class_exists("mw_xml_data_handler") ) { $this->xml_data = new mw_xml_data($this->host, $this->base); } else $this->EXTENTION_OK = false; } else $this->EXTENTION_OK = false; } return $this->EXTENTION_OK; } function init_xml_env($host, $base, $user, $password) { $this->host = $host.($host && substr($host, -1) != "/" ? "/" : ""); $this->base = $base.($base && substr($base, -1) != "/" ? "/" : ""); $this->user = $user; $this->password = $password; $this->data_handlers = array(); $this->last_data_handler = 0; } function connect($host, $base, $user, $password) { if($host.$base && is_dir($host.$base) && is_writable($host.$base)) { $this->init_xml_env($host, $base, $user, $password); $this->xml_data = new mw_xml_data($this->host, $this->base); return true; } return null; } function select_db($base) { $this->base = $base.($base && substr($base, -1) != "/" ? "/" : ""); return $this->connect($this->host, $this->base, $this->user, $this->password); } function data_exists($data_path) { return is_dir($this->host.$this->base.$data_path); } function create_data($data_path) { if(!is_dir($this->host.$this->base.$data_path)) @mkdir($this->host.$this->base.$data_path); if(is_dir($this->host.$this->base.$data_path)) { if($dh = $this->open_data($data_path, false)) { $this->close_data($dh); return true; } } return null; } function get_data($data_path, $data_id) { $dh = ++$this->last_data_handler; $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path); if($this->data_handlers[$dh]->open_data(false)) { $res = $this->data_handlers[$dh]->get_data($data_id); $this->close_data($dh); return $res; } return null; } function open_data($data_path, $FETCH = true) { $dh = ++$this->last_data_handler; $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path); if($this->data_handlers[$dh]->open_data($FETCH)) { return $dh; } $this->close_data($dh); return null; } function fetch_data($dh) { if(isset($this->data_handlers[$dh])) { return $this->data_handlers[$dh]->fetch_assoc(); } return false; } function add_data($data_path, $data) { $dh = ++$this->last_data_handler; $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path); if($this->data_handlers[$dh]->open_data(false)) { $res = $this->data_handlers[$dh]->add_data($data); if($res) $res = $this->last_index($dh); $this->close_data($dh); return $res; } return null; } function last_index($dh) { if(isset($this->data_handlers[$dh])) { return $this->data_handlers[$dh]->last_index; } return null; } function set_data($data_path, $data_id, $data) { $dh = ++$this->last_data_handler; $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path); if($this->data_handlers[$dh]->open_data(false)) { $res = $this->data_handlers[$dh]->set_data($data_id.".xml", $data); $this->close_data($dh); return $res; } return null; } function del_data($data_path, $data_id) { $dh = ++$this->last_data_handler; $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path); if($this->data_handlers[$dh]->open_data(false)) { $res = $this->data_handlers[$dh]->del_data($data_id.".xml"); $this->close_data($dh); return $res; } return null; } function close_data($dh) { if(isset($this->data_handlers[$dh])) { $this->data_handlers[$dh]->close_data(); unset($this->data_handlers[$dh]); } } function remove_data($data_path) { $OK = strlen($data_path) > 0; if($OK && is_dir($this->host.$this->base.$data_path) && is_writable($this->host.$this->base.$data_path)) { $data_path .= substr($data_path, -1) == "/" ? "" : "/"; if($dh = opendir($this->host.$this->base.$data_path)) { while($OK && ($file = readdir($dh)) !== false) { if(is_dir($this->host.$this->base.$data_path.$file)) { if($file != "." && $file != "..") $OK = $this->remove_data($data_path.$file); } else $OK = @unlink($this->host.$this->base.$data_path.$file); } closedir($dh); } else $OK = null; } else $OK = null; if($OK) @rmdir($this->host.$this->base.$data_path); return $OK; } } ?>