628c0d26ad7149bce051321c9761a1eb9bdf9121
[mtweb] / web / 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() { return $this->host; }
20     function base() { return $this->base; }
21
22     function use_cache() { return true; }
23
24     function set_cache($data_name, $data, $data_id)
25     { if($this->use_cache())
26       { $this->cache[$data_name] = $data;
27         $this->cache[$data_name]["id"] = $data_id;
28       }
29     }
30
31     function get_data($data_path, $data_id)
32     { $data_name = $this->data_name($data_path, $data_id);
33       if(isset($this->cache[$data_name])) return $this->cache[$data_name];
34       if($this->buffer = @file_get_contents($data_name))
35       { if(($data = $this->parse_data()) !== false)
36         { $this->set_cache($data_name, $data, $data_id);
37           $data["id"] = $data_id;
38           return $data;
39         }
40       }
41       return false;
42     }
43
44     function add_data($data_path, $data_id, $data)
45     { return $this->_set_data($data_path, $data_id, $data);
46     }
47
48     function set_data($data_path, $data_id, $data)
49     { return $this->_set_data($data_path, $data_id, $data);
50     }
51
52     function _set_data($data_path, $data_id, $data)
53     { if($fh = @fopen($this->data_name($data_path, $data_id), "w"))
54       { $this->buffer = $this->serialize_data($data);
55         if(@fwrite($fh, $this->buffer) !== false)
56         { @fclose($fh);
57           $this->buffer = null;
58           $data_name = $this->data_name($data_path, $data_id);
59           $this->set_cache($data_name, $data, $data_id);
60           return $data_id;
61         }
62         else
63         { @fclose($fh);
64           $this->buffer = null;
65         }
66       }
67       return null;
68     }
69
70     function del_data($data_path, $data_id)
71     { $data_name = $this->data_name($data_path, $data_id);
72       if(isset($this->cache[$data_name])) unset($this->cache[$data_name]);
73       return @unlink($this->data_name($data_path, $data_id));
74     }
75
76     function data_name($data_path, $data_id)
77     { return $this->host.$this->base.$data_path.$data_id.".xml";
78     }
79
80     function parse_data()
81     { if(!isset($this->sxml)) $this->sxml = new sxml();
82       $this->sxml->parse($this->buffer);
83       if(isset($this->sxml->data["tuple"][0]))
84       { $this->buffer = $this->sxml->data["tuple"][0];
85         $v_rst = array();
86         foreach($this->buffer["subs"] as $key => $value)
87         { $v_rst[$key] = $value[0]["data"];
88         }
89         return $v_rst;
90       }
91       return false;
92     }
93
94     function serialize_data($data)
95     { $this->buffer = "<tuple>\n";
96       foreach($data as $key => $value)
97       { if(isset($value)) $this->buffer .= "  <".$key."><![CDATA[".$value."]]></".$key.">\n";
98       }
99       $this->buffer .= "</tuple>\n";
100       return $this->buffer;
101     }
102
103   }
104
105 ?>