11 public $data_handlers;
12 public $last_data_handler;
14 public function __construct($params = array()){
16 isset($params["host"]) ? $params["host"] : "content/data/xml",
17 isset($params["base"]) ? $params["base"] : "mw",
18 isset($params["user"]) ? $params["user"] : "",
19 isset($params["password"]) ? $params["password"] : ""
21 $this->EXTENTION_OK = true;
24 public function extention_ok(&$env){
25 if($this->EXTENTION_OK){
27 file_exists($env->app_file("data/impl/xml/mw_xml_data.php"))
28 && file_exists($env->app_file("data/impl/xml/mw_xml_data_handler.php"))
30 if(!class_exists("mw_xml_data")) require_once $env->app_file("data/impl/xml/mw_xml_data.php");
31 if(!class_exists("mw_xml_data_handler")) require_once $env->app_file("data/impl/xml/mw_xml_data_handler.php");
33 class_exists("mw_xml_data")
34 && class_exists("mw_xml_data_handler")
36 $this->xml_data = new mw_xml_data($this->host, $this->base);
38 else $this->EXTENTION_OK = false;
40 else $this->EXTENTION_OK = false;
42 return $this->EXTENTION_OK;
45 public function authentication_required(){
49 public function sgbd_name(){
53 public function init_xml_env($host, $base, $user, $password){
54 $this->host = $host.($host && substr($host, -1) != "/" ? "/" : "");
55 $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
57 $this->password = $password;
58 $this->data_handlers = array();
59 $this->last_data_handler = 0;
62 public function connect($host, $base, $user, $password){
63 if($host.$base && is_dir($host.$base) && is_writable($host.$base)){
64 $this->init_xml_env($host, $base, $user, $password);
65 $this->xml_data = new mw_xml_data($this->host, $this->base);
71 public function select_db($base){
72 $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
73 return $this->connect($this->host, $this->base, $this->user, $this->password);
76 public function data_exists($data_path){
77 return is_dir($this->host.$this->base.$data_path);
80 public function create_data($data_path){
81 if(!is_dir($this->host.$this->base.$data_path)) @mkdir($this->host.$this->base.$data_path);
82 if(is_dir($this->host.$this->base.$data_path)){
83 if($dh = $this->open_data($data_path, false)){
84 $this->close_data($dh);
91 public function get_data($data_path, $data_id){
92 $dh = ++$this->last_data_handler;
93 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
94 if($this->data_handlers[$dh]->open_data(false)){
95 $res = $this->data_handlers[$dh]->get_data($data_id);
96 $this->close_data($dh);
102 public function open_data($data_path, $FETCH = true){
103 $dh = ++$this->last_data_handler;
104 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
105 if($this->data_handlers[$dh]->open_data($FETCH)){
108 $this->close_data($dh);
112 public function fetch_data($dh){
113 if(isset($this->data_handlers[$dh])){
114 return $this->data_handlers[$dh]->fetch_assoc();
119 public function add_data($data_path, $data, $index = null){
120 $dh = ++$this->last_data_handler;
121 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
122 if($this->data_handlers[$dh]->open_data(false)){
123 $res = $this->data_handlers[$dh]->add_data($data, $index);
124 if($res) $res = $this->last_index($dh);
125 $this->close_data($dh);
131 public function last_index($dh){
132 if(isset($this->data_handlers[$dh])){
133 return $this->data_handlers[$dh]->last_index;
138 public function set_data($data_path, $data_id, $data){
139 $dh = ++$this->last_data_handler;
140 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
141 if($this->data_handlers[$dh]->open_data(false)){
142 $res = $this->data_handlers[$dh]->set_data($data_id.".xml", $data);
143 $this->close_data($dh);
149 public function del_data($data_path, $data_id){
150 $dh = ++$this->last_data_handler;
151 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
152 if($this->data_handlers[$dh]->open_data(false)){
153 $res = $this->data_handlers[$dh]->del_data($data_id.".xml");
154 $this->close_data($dh);
160 public function close_data($dh){
161 if(isset($this->data_handlers[$dh])){
162 $this->data_handlers[$dh]->close_data();
163 unset($this->data_handlers[$dh]);
167 public function remove_data($data_path){
168 $OK = strlen($data_path) > 0;
169 if($OK && is_dir($this->host.$this->base.$data_path) && is_writable($this->host.$this->base.$data_path)){
170 $data_path .= substr($data_path, -1) == "/" ? "" : "/";
171 if($dh = opendir($this->host.$this->base.$data_path)){
172 while($OK && ($file = readdir($dh)) !== false){
173 if(is_dir($this->host.$this->base.$data_path.$file)){
174 if($file != "." && $file != "..") $OK = $this->remove_data($data_path.$file);
176 else $OK = @unlink($this->host.$this->base.$data_path.$file);
183 if($OK) @rmdir($this->host.$this->base.$data_path);