+++ /dev/null
-<?php
-
- class mw_xml_data_handler{
-
- public $xml_data;
- public $data_path;
- public $data_path_handler;
- public $last_index;
-
- public function mw_xml_data_handler($xml_data, $data_path){
- $this->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;
- }
-
- }