public attr / function, constructeurs __construct
[mtweb] / mw / app / data / impl / xml / mw_xml_data.php
1 <?php
2
3   class mw_xml_data{
4
5     public $host;
6     public $base;
7     public $sxml;
8     public $cache;
9     public $buffer;
10
11     public function mw_xml_data($host, $base){
12       $this->host = $host.(substr($host, -1) != "/" ? "/" : "");
13       $this->base = $base.(substr($base, -1) != "/" ? "/" : "");
14       $this->cache = array();
15     }
16
17     public function host(){
18       return $this->host;
19     }
20
21     public function base(){
22       return $this->base;
23     }
24
25     public function use_cache(){
26       return true;
27     }
28
29     public function set_cache($data_name, $data, $data_id){
30       if($this->use_cache()){
31         $this->cache[$data_name] = $data;
32         $this->cache[$data_name]["id"] = $data_id;
33       }
34     }
35
36     public function get_data($data_path, $data_id){
37       $data_name = $this->data_name($data_path, $data_id);
38       if(isset($this->cache[$data_name])) return $this->cache[$data_name];
39       if($this->buffer = @file_get_contents($data_name)){
40         if(($data = $this->parse_data()) !== false){
41           $this->set_cache($data_name, $data, $data_id);
42           $data["id"] = $data_id;
43           return $data;
44         }
45       }
46       return false;
47     }
48
49     public function add_data($data_path, $data_id, $data){
50       return $this->_set_data($data_path, $data_id, $data);
51     }
52
53     public function set_data($data_path, $data_id, $data){
54       return $this->_set_data($data_path, $data_id, $data);
55     }
56
57     public function _set_data($data_path, $data_id, $data){
58       if($fh = @fopen($this->data_name($data_path, $data_id), "w")){
59         $this->buffer = $this->serialize_data($data);
60         if(@fwrite($fh, $this->buffer) !== false){
61           @fclose($fh);
62           $this->buffer = null;
63           $data_name = $this->data_name($data_path, $data_id);
64           $this->set_cache($data_name, $data, $data_id);
65           return $data_id;
66         }
67         else{
68           @fclose($fh);
69           $this->buffer = null;
70         }
71       }
72       return null;
73     }
74
75     public function del_data($data_path, $data_id){
76       $data_name = $this->data_name($data_path, $data_id);
77       if(isset($this->cache[$data_name])) unset($this->cache[$data_name]);
78       return @unlink($this->data_name($data_path, $data_id));
79     }
80
81     public function data_name($data_path, $data_id){
82       return $this->host.$this->base.$data_path.$data_id.".xml";
83     }
84
85     public function parse_data(){
86       if(!isset($this->sxml)) $this->sxml = new sxml();
87       $this->sxml->parse($this->buffer);
88       if(isset($this->sxml->data["tuple"][0])){
89         $this->buffer = $this->sxml->data["tuple"][0];
90         $v_rst = array();
91         foreach($this->buffer["subs"] as $key => $value){
92           $v_rst[$key] = $value[0]["data"];
93         }
94         return $v_rst;
95       }
96       return false;
97     }
98
99     public function serialize_data($data){
100       $this->buffer = "<tuple>\n";
101       foreach($data as $key => $value){
102         if(isset($value)) $this->buffer .= "  <".$key."><![CDATA[".$value."]]></".$key.">\n";
103       }
104       $this->buffer .= "</tuple>\n";
105       return $this->buffer;
106     }
107
108   }