"content/data/xml", "base" => "mw", "user" => "", "password" => "" ); } public function authentication_required(){ return false; } public function prepare_params($params){ if(isset($params["host"])){ $params["host"] .= $params["host"] && substr($params["host"], -1) != "/" ? "/" : ""; } if(isset($params["base"])){ $params["base"] .= $params["base"] && substr($params["base"], -1) != "/" ? "/" : ""; } $this->data_handlers = array(); $this->last_data_handler = 0; return $params; } public function validate_extention(){ if( !file_exists($this->env->app_file("data/impl/xml/mw_xml_data.php")) || !file_exists($this->env->app_file("data/impl/xml/mw_xml_data_handler.php")) ){ return false; } if(!class_exists("mw_xml_data")) require_once $this->env->app_file("data/impl/xml/mw_xml_data.php"); if(!class_exists("mw_xml_data_handler")) require_once $this->env->app_file("data/impl/xml/mw_xml_data_handler.php"); if( !class_exists("mw_xml_data") || !class_exists("mw_xml_data_handler") ){ return false; } $this->xml_data = new mw_xml_data($this->host, $this->base); return true; } public function connect($host, $base, $user, $password){ if($host.$base && is_dir($host.$base) && is_writable($host.$base)){ $this->xml_data = new mw_xml_data($this->host, $this->base); return true; } return null; } public function select_db($base){ $this->base = $base.($base && substr($base, -1) != "/" ? "/" : ""); return $this->connect($this->host, $this->base, $this->user, $this->password); } public function data_exists($data_path){ return is_dir($this->host.$this->base.$data_path); } public 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; } public 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; } public 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; } public function fetch_data($dh){ if(isset($this->data_handlers[$dh])){ return $this->data_handlers[$dh]->fetch_assoc(); } return false; } public function add_data($data_path, $data, $index = null){ $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, $index); if($res) $res = $this->last_index($dh); $this->close_data($dh); return $res; } return null; } public function last_index($dh){ if(isset($this->data_handlers[$dh])){ return $this->data_handlers[$dh]->last_index; } return null; } public 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; } public 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; } public function close_data($dh){ if(isset($this->data_handlers[$dh])){ $this->data_handlers[$dh]->close_data(); unset($this->data_handlers[$dh]); } } public 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; } }