3 class mw_xml extends mw_sgbd{
7 public $last_data_handler;
9 public function name(){
13 public function default_params(){
15 "host" => "content/data/xml",
22 public function authentication_required(){
26 public function prepare_params($params){
27 if(isset($params["host"])){
28 $params["host"] .= $params["host"] && substr($params["host"], -1) != "/" ? "/" : "";
30 if(isset($params["base"])){
31 $params["base"] .= $params["base"] && substr($params["base"], -1) != "/" ? "/" : "";
33 $this->data_handlers = array();
34 $this->last_data_handler = 0;
38 public function validate_extention(){
39 $mw_xml_data_file = $this->env->path("mw_dir")."env/sgbd/xml/mw_xml_data.php";
40 $mw_xml_data_handler_file = $this->env->path("mw_dir")."env/sgbd/xml/mw_xml_data_handler.php";
42 !file_exists($mw_xml_data_file)
43 || !file_exists($mw_xml_data_handler_file)
47 if(!class_exists("mw_xml_data")) require_once $mw_xml_data_file;
48 if(!class_exists("mw_xml_data_handler")) require_once $mw_xml_data_handler_file;
50 !class_exists("mw_xml_data")
51 || !class_exists("mw_xml_data_handler")
55 $this->xml_data = new mw_xml_data($this->host, $this->base);
59 public function connect($host, $base, $user, $password){
60 if($host.$base && is_dir($host.$base) && is_writable($host.$base)){
61 $this->xml_data = new mw_xml_data($this->host, $this->base);
67 public function select_db($base){
68 $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
69 return $this->connect($this->host, $this->base, $this->user, $this->password);
72 public function data_exists($data_path){
73 return is_dir($this->host.$this->base.$data_path);
76 public function create_data($data_path){
77 if(!is_dir($this->host.$this->base.$data_path)) @mkdir($this->host.$this->base.$data_path);
78 if(is_dir($this->host.$this->base.$data_path)){
79 if($dh = $this->open_data($data_path, false)){
80 $this->close_data($dh);
87 public function get_data($data_path, $data_id){
88 $dh = ++$this->last_data_handler;
89 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
90 if($this->data_handlers[$dh]->open_data(false)){
91 $res = $this->data_handlers[$dh]->get_data($data_id);
92 $this->close_data($dh);
98 public function open_data($data_path, $FETCH = true){
99 $dh = ++$this->last_data_handler;
100 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
101 if($this->data_handlers[$dh]->open_data($FETCH)){
104 $this->close_data($dh);
108 public function fetch_data($dh){
109 if(isset($this->data_handlers[$dh])){
110 return $this->data_handlers[$dh]->fetch_assoc();
115 public function add_data($data_path, $data, $index = null){
116 $dh = ++$this->last_data_handler;
117 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
118 if($this->data_handlers[$dh]->open_data(false)){
119 $res = $this->data_handlers[$dh]->add_data($data, $index);
120 if($res) $res = $this->last_index($dh);
121 $this->close_data($dh);
127 public function last_index($dh){
128 if(isset($this->data_handlers[$dh])){
129 return $this->data_handlers[$dh]->last_index;
134 public function set_data($data_path, $data_id, $data){
135 $dh = ++$this->last_data_handler;
136 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
137 if($this->data_handlers[$dh]->open_data(false)){
138 $res = $this->data_handlers[$dh]->set_data($data_id.".xml", $data);
139 $this->close_data($dh);
145 public function del_data($data_path, $data_id){
146 $dh = ++$this->last_data_handler;
147 $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
148 if($this->data_handlers[$dh]->open_data(false)){
149 $res = $this->data_handlers[$dh]->del_data($data_id.".xml");
150 $this->close_data($dh);
156 public function close_data($dh){
157 if(isset($this->data_handlers[$dh])){
158 $this->data_handlers[$dh]->close_data();
159 unset($this->data_handlers[$dh]);
163 public function remove_data($data_path){
164 $OK = strlen($data_path) > 0;
165 if($OK && is_dir($this->host.$this->base.$data_path) && is_writable($this->host.$this->base.$data_path)){
166 $data_path .= substr($data_path, -1) == "/" ? "" : "/";
167 if($dh = opendir($this->host.$this->base.$data_path)){
168 while($OK && ($file = readdir($dh)) !== false){
169 if(is_dir($this->host.$this->base.$data_path.$file)){
170 if($file != "." && $file != "..") $OK = $this->remove_data($data_path.$file);
172 else $OK = @unlink($this->host.$this->base.$data_path.$file);
179 if($OK) @rmdir($this->host.$this->base.$data_path);