X-Git-Url: http://git.dj3c1t.com/index.cgi?a=blobdiff_plain;f=mw%2Fenv%2Fsgbd%2Fxml%2Fmw_xml_data_handler.php;fp=mw%2Fenv%2Fsgbd%2Fxml%2Fmw_xml_data_handler.php;h=606dceeb4f83266ae2ce48c2d8cc969725c36c7e;hb=ad9756b0b72852c82165e824570f21b039fcb359;hp=0000000000000000000000000000000000000000;hpb=8da84cf3aa4d10d91f19b6df06ce4c5e9fcb79da;p=mtweb diff --git a/mw/env/sgbd/xml/mw_xml_data_handler.php b/mw/env/sgbd/xml/mw_xml_data_handler.php new file mode 100644 index 0000000..606dcee --- /dev/null +++ b/mw/env/sgbd/xml/mw_xml_data_handler.php @@ -0,0 +1,126 @@ +xml_data = $xml_data; + $this->data_path = $data_path.(substr($data_path, -1) != "/" ? "/" : ""); + } + + public function get_data($data_id){ + if(file_exists($this->xml_data->host().$this->xml_data->base().$this->data_path.$data_id.".xml")){ + return $this->xml_data->get_data($this->data_path, $data_id); + } + return false; + } + + public function open_data($FETCH = true){ + clearstatcache(); + $INDEX_OK = false; + if($this->xml_data->host() && $this->xml_data->base() && $this->data_path){ + if(is_dir($this->xml_data->host().$this->xml_data->base().$this->data_path) && is_writable($this->xml_data->host().$this->xml_data->base().$this->data_path)){ + if(!file_exists($this->xml_data->host().$this->xml_data->base().$this->data_path.".index")){ + if($fh = @fopen($this->xml_data->host().$this->xml_data->base().$this->data_path.".index", "w+")){ + if(@fwrite($fh, "0")){ + $this->last_index = 0; + @fclose($fh); + $INDEX_OK = true; + } + else @fclose($fh); + } + } + else{ + if(($this->buffer = @file_get_contents($this->xml_data->host().$this->xml_data->base().$this->data_path.".index")) !== false){ + if(preg_match("/^[0-9]+$/", $this->buffer)){ + $this->last_index = (int)$this->buffer; + $INDEX_OK = true; + } + } + } + } + } + if($INDEX_OK){ + if($FETCH){ + if($this->data_path_handler = @opendir($this->xml_data->host().$this->xml_data->base().$this->data_path)){ + return true; + } + else{ + $this->close_data(); + return null; + } + } + else return true; + } + else{ + $this->close_data(); + return null; + } + } + + public function fetch_assoc(){ + if($this->data_path_handler){ + $FORMAT_OK = false; + while(!$FORMAT_OK && ($data_file = @readdir($this->data_path_handler)) !== false){ + if(substr($data_file, 0, 1) != "." && substr($data_file, -4) == ".xml") $FORMAT_OK = true; + } + if($FORMAT_OK) return $this->xml_data->get_data($this->data_path, substr($data_file, 0, -4)); + } + return false; + } + + public function add_data($data, $index = null){ + if(!isset($index)) $index = $this->inc_index(); + if(isset($index)){ + if(is_array($data)) return $this->xml_data->add_data($this->data_path, $index, $data); + } + return null; + } + + public function inc_index(){ + clearstatcache(); + if(isset($this->last_index)){ + $index = $this->last_index + 1; + if($fh = @fopen($this->xml_data->host().$this->xml_data->base().$this->data_path.".index", "w+")){ + if(@fwrite($fh, (string)$index)){ + $this->last_index = $index; + @fclose($fh); + return $index; + } + else @fclose($fh); + } + } + return null; + } + + public function set_data($data_file, $data){ + if(preg_match("/^[0-9]+\.xml$/", $data_file)){ + if(is_writable($this->xml_data->host().$this->xml_data->base().$this->data_path.$data_file)){ + if(is_array($data)){ + return $this->xml_data->set_data($this->data_path, substr($data_file, 0, -4), $data); + } + } + } + return null; + } + + public function del_data($data_file){ + if(preg_match("/^[0-9]+\.xml$/", $data_file)){ + if(is_file($this->xml_data->host().$this->xml_data->base().$this->data_path.$data_file)){ + return $this->xml_data->del_data($this->data_path, substr($data_file, 0, -4)); + } + } + return null; + } + + public function close_data(){ + $this->data_path= null; + if($this->data_path_handler) @closedir($this->data_path_handler); + $this->last_index = null; + } + + }