3 class mw_xml extends mw_sgbd{
7 public $last_data_handler;
9 public function name(){
13 public function default_params(){
15 "host" => "content/data/xml",
22 public function authentication_required(){
26 public function prepare_params($params){
27 if(isset($params["host"])){
28 $params["host"] .= $params["host"] && substr($params["host"], -1) != "/" ? "/" : "";
30 if(isset($params["base"])){
31 $params["base"] .= $params["base"] && substr($params["base"], -1) != "/" ? "/" : "";
33 $this->data_handlers = array();
34 $this->last_data_handler = 0;
38 public function validate_extention(){
40 !file_exists($this->env->app_file("data/impl/xml/mw_xml_data.php"))
41 || !file_exists($this->env->app_file("data/impl/xml/mw_xml_data_handler.php"))
45 if(!class_exists("mw_xml_data")) require_once $this->env->app_file("data/impl/xml/mw_xml_data.php");
46 if(!class_exists("mw_xml_data_handler")) require_once $this->env->app_file("data/impl/xml/mw_xml_data_handler.php");
48 !class_exists("mw_xml_data")
49 || !class_exists("mw_xml_data_handler")
53 $this->xml_data = new mw_xml_data($this->host, $this->base);
57 public function connect($host, $base, $user, $password){
58 if($host.$base && is_dir($host.$base) && is_writable($host.$base)){
59 $this->xml_data = new mw_xml_data($this->host, $this->base);
65 public function select_db($base){
66 $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
67 return $this->connect($this->host, $this->base, $this->user, $this->password);
70 public function data_exists($data_path){
71 return is_dir($this->host.$this->base.$data_path);
74 public function create_data($data_path){
75 if(!is_dir($this->host.$this->base.$data_path)) @mkdir($this->host.$this->base.$data_path);
76 if(is_dir($this->host.$this->base.$data_path)){
77 if($dh = $this->open_data($data_path, false)){
78 $this->close_data($dh);
85 public function get_data($data_path, $data_id){
86 $dh = ++$this->last_data_handler;
87 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
88 if($this->data_handlers[$dh]->open_data(false)){
89 $res = $this->data_handlers[$dh]->get_data($data_id);
90 $this->close_data($dh);
96 public function open_data($data_path, $FETCH = true){
97 $dh = ++$this->last_data_handler;
98 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
99 if($this->data_handlers[$dh]->open_data($FETCH)){
102 $this->close_data($dh);
106 public function fetch_data($dh){
107 if(isset($this->data_handlers[$dh])){
108 return $this->data_handlers[$dh]->fetch_assoc();
113 public function add_data($data_path, $data, $index = null){
114 $dh = ++$this->last_data_handler;
115 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
116 if($this->data_handlers[$dh]->open_data(false)){
117 $res = $this->data_handlers[$dh]->add_data($data, $index);
118 if($res) $res = $this->last_index($dh);
119 $this->close_data($dh);
125 public function last_index($dh){
126 if(isset($this->data_handlers[$dh])){
127 return $this->data_handlers[$dh]->last_index;
132 public function set_data($data_path, $data_id, $data){
133 $dh = ++$this->last_data_handler;
134 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
135 if($this->data_handlers[$dh]->open_data(false)){
136 $res = $this->data_handlers[$dh]->set_data($data_id.".xml", $data);
137 $this->close_data($dh);
143 public function del_data($data_path, $data_id){
144 $dh = ++$this->last_data_handler;
145 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
146 if($this->data_handlers[$dh]->open_data(false)){
147 $res = $this->data_handlers[$dh]->del_data($data_id.".xml");
148 $this->close_data($dh);
154 public function close_data($dh){
155 if(isset($this->data_handlers[$dh])){
156 $this->data_handlers[$dh]->close_data();
157 unset($this->data_handlers[$dh]);
161 public function remove_data($data_path){
162 $OK = strlen($data_path) > 0;
163 if($OK && is_dir($this->host.$this->base.$data_path) && is_writable($this->host.$this->base.$data_path)){
164 $data_path .= substr($data_path, -1) == "/" ? "" : "/";
165 if($dh = opendir($this->host.$this->base.$data_path)){
166 while($OK && ($file = readdir($dh)) !== false){
167 if(is_dir($this->host.$this->base.$data_path.$file)){
168 if($file != "." && $file != "..") $OK = $this->remove_data($data_path.$file);
170 else $OK = @unlink($this->host.$this->base.$data_path.$file);
177 if($OK) @rmdir($this->host.$this->base.$data_path);