out[$key] = $value; return $value; } function get_out(){ return $this->out; } function out($key){ return $this->out[$key]; } function out_pathes(){ $pathes = array(); if($dh = opendir($this->path("out"))){ while(($file = readdir($dh)) !== false){ if(is_dir($this->path("out").$file) && substr($file, 0 ,1) != ".") $pathes[] = $file; } closedir($dh); } else $pathes = false; return $pathes; } function out_file_exists($file, $PRIORITE = "DESC"){ $out_file = $this->_out_file($file, $PRIORITE); return $out_file ? true : false; } function out_file($file, $PRIORITE = "DESC"){ $out_file = $this->_out_file($file, $PRIORITE); return $out_file ? $out_file : $file; } function _out_file($file, $PRIORITE = "DESC"){ $out_file = false; if($PRIORITE == "ASC"){ $tmp_out_file = $this->path("out").$this->config("out").$file; if($file && file_exists($tmp_out_file)){ $out_file = $tmp_out_file; } if(!$out_file){ $tmp_out_file = $this->path("out").$this->path("dist_out").$file; if($file && file_exists($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 = $this->path("plugins").$plugin_name."/out/".$this->config("out").$file; if($file && $plugin["installed"] && $plugin["enabled"] && file_exists($tmp_out_file)){ $out_file = $tmp_out_file; break; } if(!$out_file){ $tmp_out_file = $this->path("plugins").$plugin_name."/out/".$this->path("dist_out").$file; if($file && $plugin["installed"] && $plugin["enabled"] && file_exists($tmp_out_file)){ $out_file = $tmp_out_file; break; } } } if($PRIORITE == "DESC" && !$out_file){ $tmp_out_file = $this->path("out").$this->config("out").$file; if($file && file_exists($tmp_out_file)){ $out_file = $tmp_out_file; } if(!$out_file){ $tmp_out_file = $this->path("out").$this->path("dist_out").$file; if($file && file_exists($tmp_out_file)){ $out_file = $tmp_out_file; } } } } return $out_file; } # --------------------------------------------------------------------------------- # out config # function set_out_config($out_config){ $this->out_config = $out_config; return $this->out_config; } function get_out_config(){ return isset($this->out_config) ? $this->out_config : array(); } 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 null; } # --------------------------------------------------------------------------------- # layouts # function layout(){ 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("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("plugins").$plugin_name."/out/".$this->path("dist_out")."functions.php"; if($plugin["installed"] && $plugin["enabled"] && file_exists($functions_file)){ require $functions_file; } } } } $FOUND = false; $functions_file = $this->path("out").$this->config("out")."functions.php"; if(file_exists($functions_file)){ $FOUND = true; require $functions_file; } if(!$FOUND){ $functions_file = $this->path("out").$this->path("dist_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"); if(($mod = $this->etat("mod")) != "index") $this->_init_layout($mod); return $this->get_layout(); } function _init_layout($mod){ if(($plugins = $this->plugins("ASC")) !== false){ $layout_file = false; $tmp_layout_file = $this->path("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("out").$this->path("dist_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("plugins").$plugin_name."/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("plugins").$plugin_name."/out/".$this->path("dist_out")."layouts/".$mod.".xml"; if(file_exists($tmp_layout_file)) $layout_file = $tmp_layout_file; } if($layout_file) $this->load_layout($layout_file); } } } } function load_layout($layout_file){ if(file_exists($layout_file)){ $xml_parser = new sxml(); $xml_parser->parse(file_get_contents($layout_file)); $layout = $xml_parser->data; if(isset($layout["layout"][0]["subs"])){ foreach($layout["layout"][0]["subs"] as $mod => $mod_node){ if(!isset($this->layout[$mod])){ $this->layout[$mod] = array( "page" => null, "content" => null, "controllers" => array() ); } if(isset($mod_node[0]["attrs"]["page"])) $this->layout[$mod]["page"] = $mod_node[0]["attrs"]["page"]; if(isset($mod_node[0]["attrs"]["content"])) $this->layout[$mod]["content"] = $mod_node[0]["attrs"]["content"]; if(isset($mod_node[0]["subs"])){ foreach($mod_node[0]["subs"] as $controller => $controller_node){ if(!isset($this->layout[$mod]["controllers"][$controller])){ $this->layout[$mod]["controllers"][$controller] = array( "page" => null, "content" => null, "actions" => array() ); } if(isset($controller_node[0]["attrs"]["page"])) $this->layout[$mod]["controllers"][$controller]["page"] = $controller_node[0]["attrs"]["page"]; if(isset($controller_node[0]["attrs"]["content"])) $this->layout[$mod]["controllers"][$controller]["content"] = $controller_node[0]["attrs"]["content"]; if(isset($controller_node[0]["subs"])){ foreach($controller_node[0]["subs"] as $action => $action_node){ if(!isset($this->layout[$mod]["controllers"][$controller]["actions"][$action])){ $this->layout[$mod]["controllers"][$controller]["actions"][$action] = array( "page" => null, "content" => null ); } if(isset($action_node[0]["attrs"]["page"])) $this->layout[$mod]["controllers"][$controller]["actions"][$action]["page"] = $action_node[0]["attrs"]["page"]; if(isset($action_node[0]["attrs"]["content"])) $this->layout[$mod]["controllers"][$controller]["actions"][$action]["content"] = $action_node[0]["attrs"]["content"]; } } } } } } } return false; } function get_layout(){ $mod = $this->etat("mod"); $controller = $this->etat("controller"); $action = $this->etat("action"); $content = ""; if(isset($this->layout[$mod]["controllers"][$controller]["actions"][$action]["content"])){ $content = $this->layout[$mod]["controllers"][$controller]["actions"][$action]["content"]; } else{ if(isset($this->layout[$mod]["controllers"][$controller]["content"])){ $content = $this->layout[$mod]["controllers"][$controller]["content"]; } else{ if(isset($this->layout[$mod]["content"])){ $content = $this->layout[$mod]["content"]; } else{ if(isset($this->layout["index"]["content"])){ $content = $this->layout["index"]["content"]; } } } } $page = ""; if(isset($this->layout[$mod]["controllers"][$controller]["actions"][$action]["page"])){ $page = $this->layout[$mod]["controllers"][$controller]["actions"][$action]["page"]; } else{ if(isset($this->layout[$mod]["controllers"][$controller]["page"])){ $page = $this->layout[$mod]["controllers"][$controller]["page"]; } else{ if(isset($this->layout[$mod]["page"])){ $page = $this->layout[$mod]["page"]; } else{ if(isset($this->layout["index"]["page"])){ $page = $this->layout["index"]["page"]; } } } } return array( "page" => $page, "content" => $content ); } } ?>