implementation sgbd herite de mw_sgbd
[mtweb] / mw / app / data / impl / mw_xml.php
index 53fa7f1..67f2447 100644 (file)
@@ -1,73 +1,77 @@
 <?php
 
-  class mw_xml{
-
-    var $host;
-    var $base;
-    var $user;
-    var $password;
-
-    var $EXTENTION_OK;
-
-    var $xml_data;
-
-    var $data_handlers;
-    var $last_data_handler;
-
-    function mw_xml($host, $base, $user, $password){
-      $this->init_xml_env($host, $base, $user, $password);
-      $this->EXTENTION_OK = true;
-    }
-
-    function extention_ok(&$env){
-      if($this->EXTENTION_OK){
-        if(
-             file_exists($env->app_file("data/impl/xml/mw_xml_data.php"))
-          && file_exists($env->app_file("data/impl/xml/mw_xml_data_handler.php"))
-        ){
-          require $env->app_file("data/impl/xml/mw_xml_data.php");
-          require $env->app_file("data/impl/xml/mw_xml_data_handler.php");
-          if(
-               class_exists("mw_xml_data")
-            && class_exists("mw_xml_data_handler")
-          ){
-            $this->xml_data = new mw_xml_data($this->host, $this->base);
-          }
-          else $this->EXTENTION_OK = false;
-        }
-        else $this->EXTENTION_OK = false;
-      }
-      return $this->EXTENTION_OK;
+  class mw_xml extends mw_sgbd{
+
+    public $xml_data;
+    public $data_handlers;
+    public $last_data_handler;
+
+    public function name(){
+      return "XML";
     }
 
-    function init_xml_env($host, $base, $user, $password){
-      $this->host = $host.($host && substr($host, -1) != "/" ? "/" : "");
-      $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
-      $this->user = $user;
-      $this->password = $password;
+    public function default_params(){
+      return array(
+        "host" => "content/data/xml",
+        "base" => "mw",
+        "user" => "",
+        "password" => ""
+      );
+    }
+
+    public function authentication_required(){
+      return false;
+    }
+
+    public function prepare_params($params){
+      if(isset($params["host"])){
+        $params["host"] .= $params["host"] && substr($params["host"], -1) != "/" ? "/" : "";
+      }
+      if(isset($params["base"])){
+        $params["base"] .= $params["base"] && substr($params["base"], -1) != "/" ? "/" : "";
+      }
       $this->data_handlers = array();
       $this->last_data_handler = 0;
+      return $params;
     }
 
-    function connect($host, $base, $user, $password){
+    public function validate_extention(){
+      if(
+            !file_exists($this->env->app_file("data/impl/xml/mw_xml_data.php"))
+        ||  !file_exists($this->env->app_file("data/impl/xml/mw_xml_data_handler.php"))
+      ){
+        return false;
+      }
+      if(!class_exists("mw_xml_data")) require_once $this->env->app_file("data/impl/xml/mw_xml_data.php");
+      if(!class_exists("mw_xml_data_handler")) require_once $this->env->app_file("data/impl/xml/mw_xml_data_handler.php");
+      if(
+            !class_exists("mw_xml_data")
+        ||  !class_exists("mw_xml_data_handler")
+      ){
+        return false;
+      }
+      $this->xml_data = new mw_xml_data($this->host, $this->base);
+      return true;
+    }
+
+    public function connect($host, $base, $user, $password){
       if($host.$base && is_dir($host.$base) && is_writable($host.$base)){
-        $this->init_xml_env($host, $base, $user, $password);
         $this->xml_data = new mw_xml_data($this->host, $this->base);
         return true;
       }
       return null;
     }
 
-    function select_db($base){
+    public function select_db($base){
       $this->base = $base.($base && substr($base, -1) != "/" ? "/" : "");
       return $this->connect($this->host, $this->base, $this->user, $this->password);
     }
 
-    function data_exists($data_path){
+    public function data_exists($data_path){
       return is_dir($this->host.$this->base.$data_path);
     }
 
-    function create_data($data_path){
+    public function create_data($data_path){
       if(!is_dir($this->host.$this->base.$data_path)) @mkdir($this->host.$this->base.$data_path);
       if(is_dir($this->host.$this->base.$data_path)){
         if($dh = $this->open_data($data_path, false)){
@@ -78,7 +82,7 @@
       return null;
     }
 
-    function get_data($data_path, $data_id){
+    public function get_data($data_path, $data_id){
       $dh = ++$this->last_data_handler;
       $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
       if($this->data_handlers[$dh]->open_data(false)){
@@ -89,7 +93,7 @@
       return null;
     }
 
-    function open_data($data_path, $FETCH = true){
+    public function open_data($data_path, $FETCH = true){
       $dh = ++$this->last_data_handler;
       $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
       if($this->data_handlers[$dh]->open_data($FETCH)){
       return null;
     }
 
-    function fetch_data($dh){
+    public function fetch_data($dh){
       if(isset($this->data_handlers[$dh])){
         return $this->data_handlers[$dh]->fetch_assoc();
       }
       return false;
     }
 
-    function add_data($data_path, $data){
+    public function add_data($data_path, $data, $index = null){
       $dh = ++$this->last_data_handler;
       $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
       if($this->data_handlers[$dh]->open_data(false)){
-        $res = $this->data_handlers[$dh]->add_data($data);
+        $res = $this->data_handlers[$dh]->add_data($data, $index);
         if($res) $res = $this->last_index($dh);
         $this->close_data($dh);
         return $res;
       return null;
     }
 
-    function last_index($dh){
+    public function last_index($dh){
       if(isset($this->data_handlers[$dh])){
         return $this->data_handlers[$dh]->last_index;
       }
       return null;
     }
 
-    function set_data($data_path, $data_id, $data){
+    public function set_data($data_path, $data_id, $data){
       $dh = ++$this->last_data_handler;
       $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
       if($this->data_handlers[$dh]->open_data(false)){
       return null;
     }
 
-    function del_data($data_path, $data_id){
+    public function del_data($data_path, $data_id){
       $dh = ++$this->last_data_handler;
       $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path);
       if($this->data_handlers[$dh]->open_data(false)){
       return null;
     }
 
-    function close_data($dh){
+    public function close_data($dh){
       if(isset($this->data_handlers[$dh])){
         $this->data_handlers[$dh]->close_data();
         unset($this->data_handlers[$dh]);
       }
     }
 
-    function remove_data($data_path){
+    public function remove_data($data_path){
       $OK = strlen($data_path) > 0;
       if($OK && is_dir($this->host.$this->base.$data_path) && is_writable($this->host.$this->base.$data_path)){
         $data_path .= substr($data_path, -1) == "/" ? "" : "/";
     }
 
   }
-
-?>
\ No newline at end of file