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; } }