ajout d'un installeur en ligne
[mtweb] / mw / env / modules / mw_env_out.php
index 12ab2ed..998f489 100644 (file)
@@ -6,6 +6,11 @@
     var $out_config;
     var $layout;
 
+    var $js_files;
+    var $css_files;
+
+    var $template;
+
     // ---------------------------------------------------------------------------------
     //                                                                          out vars
     //
     //                                                                         templates
     //
 
+    function templates(){
+      if(($out_pathes = $this->out_pathes()) === false) return false;
+      $templates = array();
+      $current_out_path = $this->config("out");
+      foreach($out_pathes as $out_path){
+        $this->set_config(array("out" => $out_path));
+        $templates[$out_path] = $this->_get_template();
+      }
+      $this->set_config(array("out" => $current_out_path));
+      return $templates;
+    }
+
+    function get_template(){
+      if(isset($this->template)) return $this->template;
+      $this->template = $this->_get_template();
+      return $this->template;
+    }
+
+    function _get_template(){
+      $template_class_name = "mw_template";
+      if($this->out_file_exists("template.php")){
+        $template_class_file = $this->out_file("template.php");
+        $template_class_name = "mw_template_".basename(dirname($template_class_file));
+        if(!class_exists($template_class_name)) require_once $template_class_file;
+        if(!class_exists($template_class_name)) $template_class_name = "mw_template";
+      }
+      $template = new $template_class_name(true);
+      $template->set_env($this->root_inst);
+      return $template;
+    }
+
     function out_pathes(){
       $pathes = array();
       if(($plugins = $this->plugins()) !== false){
         foreach($plugins as $plugin_name => $plugin){
-          $out_dir = $this->path("mw_dir")."plugins/".$plugin_name."/out/";
+          $out_dir = $this->path("mw_dir")."plugins/".$plugin_name."/app/out/";
           if(
                $plugin["installed"]
             && $plugin["enabled"]
@@ -42,7 +78,7 @@
           }
         }
         if($pathes !== false){
-          $pathes = $this->_out_pathes($this->path("mw_dir")."out/", $pathes);
+          $pathes = $this->_out_pathes($this->path("mw_dir")."app/out/", $pathes);
         }
       }
       else $pathes = false;
@@ -52,7 +88,7 @@
     function _out_pathes($out_dir, $pathes = array()){
       if($dh = opendir($out_dir)){
         while(($file = readdir($dh)) !== false){
-          if(is_dir($out_dir.$file) && substr($file, 0 ,1) != ".") $pathes[] = $file;
+          if(is_dir($out_dir.$file) && substr($file, 0 ,1) != "." && !in_array($file, $pathes)) $pathes[] = $file;
         }
         closedir($dh);
       }
 
     function out_url($file, $PRIORITE = "DESC"){
       $out_file = $this->_out_file($file, $PRIORITE);
-      return $out_file ? $this->path("mw_path").$out_file : $file;
+      return $out_file ? $this->path("web").$this->path("mw_path").$out_file : $file;
     }
 
     function _out_file($file, $PRIORITE = "DESC"){
       $out_file = false;
       if($PRIORITE == "ASC"){
-        $tmp_out_file = "out/".$this->config("out")."/".$file;
+        $tmp_out_file = "app/out/".$this->config("out")."/".$file;
         if($file && file_exists($this->path("mw_dir").$tmp_out_file)){
           $out_file = $tmp_out_file;
         }
         if(!$out_file){
-          $tmp_out_file = "out/".$this->config("default_out")."/".$file;
+          $tmp_out_file = "app/out/".$this->config("default_out")."/".$file;
           if($file && file_exists($this->path("mw_dir").$tmp_out_file)){
             $out_file = $tmp_out_file;
           }
       if($out_file) return $out_file;
       if(($plugins = $this->plugins($PRIORITE)) !== false){
         foreach($plugins as $plugin_name => $plugin){
-          $tmp_out_file = "plugins/".$plugin_name."/out/".$this->config("out")."/".$file;
+          $tmp_out_file = "plugins/".$plugin_name."/app/out/".$this->config("out")."/".$file;
           if($file && $plugin["installed"] && $plugin["enabled"] && file_exists($this->path("mw_dir").$tmp_out_file)){
             $out_file = $tmp_out_file;
             break;
           }
           if(!$out_file){
-            $tmp_out_file = "plugins/".$plugin_name."/out/".$this->config("default_out")."/".$file;
+            $tmp_out_file = "plugins/".$plugin_name."/app/out/".$this->config("default_out")."/".$file;
             if($file && $plugin["installed"] && $plugin["enabled"] && file_exists($this->path("mw_dir").$tmp_out_file)){
               $out_file = $tmp_out_file;
               break;
           }
         }
         if($PRIORITE == "DESC" && !$out_file){
-          $tmp_out_file = "out/".$this->config("out")."/".$file;
+          $tmp_out_file = "app/out/".$this->config("out")."/".$file;
           if($file && file_exists($this->path("mw_dir").$tmp_out_file)){
             $out_file = $tmp_out_file;
           }
           if(!$out_file){
-            $tmp_out_file = "out/".$this->config("default_out")."/".$file;
+            $tmp_out_file = "app/out/".$this->config("default_out")."/".$file;
             if($file && file_exists($this->path("mw_dir").$tmp_out_file)){
               $out_file = $tmp_out_file;
             }
     }
 
     // ---------------------------------------------------------------------------------
+    //                                                                    js / css files
+    //
+
+    function js_files(){
+      if(!isset($this->js_files)) $this->js_files = array();
+      $files = array();
+      foreach($this->js_files as $url => $enabled){
+        if($enabled) $files[] = $url;
+      }
+      return $files;
+    }
+
+    function add_js_file($url){
+      if(!isset($this->js_files)) $this->js_files = array();
+      $this->js_files[$url] = true;
+    }
+
+    function remove_js_file($url){
+      if(isset($this->js_files) && isset($this->js_files[$url])){
+        unset($this->js_files[$url]);
+      }
+    }
+
+    function css_files(){
+      if(!isset($this->css_files)) $this->css_files = array();
+      $files = array();
+      foreach($this->css_files as $url => $enabled){
+        if($enabled) $files[] = $url;
+      }
+      return $files;
+    }
+
+    function add_css_file($url){
+      if(!isset($this->css_files)) $this->css_files = array();
+      $this->css_files[$url] = true;
+    }
+
+    function remove_css_file($url){
+      if(isset($this->css_files) && isset($this->css_files[$url])){
+        unset($this->css_files[$url]);
+      }
+    }
+
+    // ---------------------------------------------------------------------------------
     //                                                                        out config
     //
 
     function out_config($name){
       if(isset($this->out_config)){
         $CONFIG = $this->get_CONFIG();
-        return isset($CONFIG["out_".$name]) ? $CONFIG["out_".$name] : $this->out_config[$name]["default"];
+        return isset($CONFIG["out_".$name]) ? $CONFIG["out_".$name] : (isset($this->out_config[$name]) ? $this->out_config[$name]["default"] : "");
       }
       return null;
     }
       return $this->layout;
     }
 
-    function render_layout($layout = null){
-      if(!isset($layout)) $layout = $this->init_layout();
-      if(($plugins = $this->plugins("ASC")) !== false){
-        foreach($plugins as $plugin_name => $plugin){
-          if($plugin["installed"] && $plugin["enabled"]){
-            $FOUND = false;
-            $functions_file = $this->path("mw_dir")."plugins/".$plugin_name."/out/".$this->config("out")."/functions.php";
-            if(file_exists($functions_file)){
-              $FOUND = true;
-              require $functions_file;
-            }
-            if(!$FOUND){
-              $functions_file = $this->path("mw_dir")."plugins/".$plugin_name."/out/".$this->config("default_out")."/functions.php";
-              if($plugin["installed"] && $plugin["enabled"] && file_exists($functions_file)){
-                require $functions_file;
-              }
-            }
-          }
-        }
-        $FOUND = false;
-        $functions_file = $this->path("mw_dir")."out/".$this->config("out")."/functions.php";
-        if(file_exists($functions_file)){
-          $FOUND = true;
-          require $functions_file;
-        }
-        if(!$FOUND){
-          $functions_file = $this->path("mw_dir")."out/".$this->config("default_out")."/functions.php";
-          if(file_exists($functions_file)){
-            require $functions_file;
-          }
-        }
-        if($layout["page"]){
-          if($this->out_file_exists($layout["page"])) require $this->out_file($layout["page"]);
-        }
-        elseif($layout["content"]){
-          if($this->out_file_exists($layout["content"])) require $this->out_file($layout["content"]);
-        }
-      }
-    }
-
     function init_layout(){
       $this->layout = array();
       $this->_init_layout("index");
     function _init_layout($mod){
       if(($plugins = $this->plugins("ASC")) !== false){
         $layout_file = false;
-        $tmp_layout_file = $this->path("mw_dir")."out/".$this->config("out")."/layouts/".$mod.".xml";
+        $tmp_layout_file = $this->path("mw_dir")."app/out/".$this->config("out")."/layouts/".$mod.".xml";
         if(file_exists($tmp_layout_file)) $layout_file = $tmp_layout_file;
         if(!$layout_file){
-          $tmp_layout_file = $this->path("mw_dir")."out/".$this->config("default_out")."/layouts/".$mod.".xml";
+          $tmp_layout_file = $this->path("mw_dir")."app/out/".$this->config("default_out")."/layouts/".$mod.".xml";
           if(file_exists($tmp_layout_file)) $layout_file = $tmp_layout_file;
         }
         if($layout_file) $this->load_layout($layout_file);
         foreach($plugins as $plugin_name => $plugin){
           if($plugin["installed"] && $plugin["enabled"]){
             $layout_file = false;
-            $tmp_layout_file = $this->path("mw_dir")."plugins/".$plugin_name."/out/".$this->config("out")."/layouts/".$mod.".xml";
+            $tmp_layout_file = $this->path("mw_dir")."plugins/".$plugin_name."/app/out/".$this->config("out")."/layouts/".$mod.".xml";
             if(file_exists($tmp_layout_file)) $layout_file = $tmp_layout_file;
             if(!$layout_file){
-              $tmp_layout_file = $this->path("mw_dir")."plugins/".$plugin_name."/out/".$this->config("default_out")."/layouts/".$mod.".xml";
+              $tmp_layout_file = $this->path("mw_dir")."plugins/".$plugin_name."/app/out/".$this->config("default_out")."/layouts/".$mod.".xml";
               if(file_exists($tmp_layout_file)) $layout_file = $tmp_layout_file;
             }
             if($layout_file) $this->load_layout($layout_file);
 
   }
 
+  class mw_template extends empty_class{
+
+    var $out;
+    var $ENV_SET;
+    var $template_infos;
+
+    function set_env(&$env){
+      $this->modules = array("env" => $env);
+      $this->ENV_SET = true;
+      $this->set_out_config($this->get_out_config());
+      $this->set_template_infos($this->get_template_infos());
+    }
+
+    function render_layout($layout = null){
+      if(!isset($this->ENV_SET) || !$this->ENV_SET) return false;
+      if(!isset($layout)) $layout = $this->init_layout();
+      $this->out = $this->get_out();
+      $this->init();
+      if(
+            ($init_script = $this->init_script())
+        &&  $this->out_file_exists($init_script)
+      ) require $this->out_file($init_script);
+      $data = $this->data();
+      if($layout["page"]){
+        if($this->out_file_exists($layout["page"])) require $this->out_file($layout["page"]);
+      }
+      elseif($layout["content"]){
+        if($this->out_file_exists($layout["content"])) require $this->out_file($layout["content"]);
+      }
+    }
+
+    function get_template_info($key){
+      return isset($this->template_infos[$key]) ? $this->template_infos[$key] : "";
+    }
+
+    function init(){
+      return true;
+    }
+
+    function init_script(){
+      return false;
+    }
+
+    function get_out_config(){
+      $out_config = array();
+      if($this->ENV_SET){
+        $env = $this->modules["env"];
+        $out_config = $env->get_out_config();
+      }
+      return $out_config;
+    }
+
+    function set_template_infos($template_infos){
+      $this->template_infos = $template_infos;
+    }
+
+    function get_template_infos(){
+      return array();
+    }
+
+  }
+
 ?>
\ No newline at end of file