maj syntaxe accolades, maj jQuery, correction layout contact
[mtweb] / web / app / data / impl / xml / mw_xml_data_handler.php
1 <?php
2
3   class mw_xml_data_handler{
4
5     var $xml_data;
6     var $data_path;
7     var $data_path_handler;
8     var $last_index;
9
10     function mw_xml_data_handler($xml_data, $data_path){
11       $this->xml_data = $xml_data;
12       $this->data_path = $data_path.(substr($data_path, -1) != "/" ? "/" : "");
13     }
14
15     function get_data($data_id){
16       if(file_exists($this->xml_data->host().$this->xml_data->base().$this->data_path.$data_id.".xml")){
17         return $this->xml_data->get_data($this->data_path, $data_id);
18       }
19       return false;
20     }
21
22     function open_data($FETCH = true){
23       clearstatcache();
24       $INDEX_OK = false;
25       if($this->xml_data->host() && $this->xml_data->base() && $this->data_path){
26         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)){
27           if(!file_exists($this->xml_data->host().$this->xml_data->base().$this->data_path.".index")){
28             if($fh = @fopen($this->xml_data->host().$this->xml_data->base().$this->data_path.".index", "w+")){
29               if(@fwrite($fh, "0")){
30                 $this->last_index = 0;
31                 @fclose($fh);
32                 $INDEX_OK = true;
33               }
34               else @fclose($fh);
35             }
36           }
37           else{
38             if(($this->buffer = @file_get_contents($this->xml_data->host().$this->xml_data->base().$this->data_path.".index")) !== false){
39               if(preg_match("/^[0-9]+$/", $this->buffer)){
40                 $this->last_index = (int)$this->buffer;
41                 $INDEX_OK = true;
42               }
43             }
44           }
45         }
46       }
47       if($INDEX_OK){
48         if($FETCH){
49           if($this->data_path_handler = @opendir($this->xml_data->host().$this->xml_data->base().$this->data_path)){
50             return true;
51           }
52           else{
53             $this->close_data();
54             return null;
55           }
56         }
57         else return true;
58       }
59       else{
60         $this->close_data();
61         return null;
62       }
63     }
64
65     function fetch_assoc(){
66       if($this->data_path_handler){
67         $FORMAT_OK = false;
68         while(!$FORMAT_OK && ($data_file = @readdir($this->data_path_handler)) !== false){
69           if(substr($data_file, 0, 1) != "." && substr($data_file, -4) == ".xml") $FORMAT_OK = true;
70         }
71         if($FORMAT_OK) return $this->xml_data->get_data($this->data_path, substr($data_file, 0, -4));
72       }
73       return false;
74     }
75
76     function add_data($data){
77       $index = $this->inc_index();
78       if(isset($index)){
79         if(is_array($data)) return $this->xml_data->add_data($this->data_path, $index, $data);
80       }
81       return null;
82     }
83
84     function inc_index(){
85       clearstatcache();
86       if(isset($this->last_index)){
87         $index = $this->last_index + 1;
88         if($fh = @fopen($this->xml_data->host().$this->xml_data->base().$this->data_path.".index", "w+")){
89           if(@fwrite($fh, (string)$index)){
90             $this->last_index = $index;
91             @fclose($fh);
92             return $index;
93           }
94           else @fclose($fh);
95         }
96       }
97       return null;
98     }
99
100     function set_data($data_file, $data){
101       if(preg_match("/^[0-9]+\.xml$/", $data_file)){
102         if(is_writable($this->xml_data->host().$this->xml_data->base().$this->data_path.$data_file)){
103           if(is_array($data)){
104             return $this->xml_data->set_data($this->data_path, substr($data_file, 0, -4), $data);
105           }
106         }
107       }
108       return null;
109     }
110
111     function del_data($data_file){
112       if(preg_match("/^[0-9]+\.xml$/", $data_file)){
113         if(is_file($this->xml_data->host().$this->xml_data->base().$this->data_path.$data_file)){
114           return $this->xml_data->del_data($this->data_path, substr($data_file, 0, -4));
115         }
116       }
117       return null;
118     }
119
120     function close_data(){
121       $this->data_path= null;
122       if($this->data_path_handler) @closedir($this->data_path_handler);
123       $this->last_index = null;
124     }
125
126   }
127
128 ?>