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