From 0df77b6e0e0eee4060e73ca0d6955bf232aa23cc Mon Sep 17 00:00:00 2001 From: dj3c1t Date: Sun, 16 Jun 2013 15:02:45 +0200 Subject: [PATCH] adaptations pour pludieurs instances d'applications --- config.php | 93 +++++++++++++++------- content/data/mysql/mtweb.sql | 5 +- mw/app/data/impl/mw_xml.php | 4 +- .../data/modules/share/mw_data_users_sessions.php | 52 +++++++----- .../sql/{mw_data_crud.php => mw_data_sql_crud.php} | 2 +- .../{mw_data_users.php => mw_data_sql_users.php} | 2 +- .../xml/{mw_data_crud.php => mw_data_xml_crud.php} | 2 +- .../{mw_data_users.php => mw_data_xml_users.php} | 2 +- mw/app/init/0300_data.php | 9 ++- mw/app/out/default/views/users/identification.php | 10 ++- mw/env/modules/mw_env_config.php | 2 +- mw/env/modules/mw_env_plugins.php | 4 +- mw/env/modules/mw_env_run.php | 17 ++-- mw/libs/empty_class.php | 4 +- mw/mw_app.php | 32 +++++--- mw/plugins/mw_minimal/mw_minimal.php | 35 ++++---- readme.txt | 49 ++++++++---- 17 files changed, 200 insertions(+), 124 deletions(-) rename mw/app/data/modules/sql/{mw_data_crud.php => mw_data_sql_crud.php} (99%) rename mw/app/data/modules/sql/{mw_data_users.php => mw_data_sql_users.php} (99%) rename mw/app/data/modules/xml/{mw_data_crud.php => mw_data_xml_crud.php} (99%) rename mw/app/data/modules/xml/{mw_data_users.php => mw_data_xml_users.php} (99%) diff --git a/config.php b/config.php index 45a5b96..8753498 100644 --- a/config.php +++ b/config.php @@ -4,46 +4,81 @@ // chemins // - $PATHES = array(); + $PATHES = array( - // chemin HTTP de l'installation - // absolu a partir de la racine HTTP du site - $PATHES["web"] = "/"; + // chemin HTTP de l'installation + // (dossier, sur le site, qui contient le fichier index.php) + // absolu a partir de la racine HTTP du site + // + // installation dans un dossier : + // "web" => "/chemin/du/dossier" + // + // installation a la racine : + "web" => "/", - // dossier de l'application - // relatif au dossier de l'installation - // ou absolu dans le systeme de fichiers du serveur - $PATHES["mw_dir"] = "mw"; + // chemin HTTP du dossier "mw" + // absolu a partir de la racine HTTP du site + "mw_path" => "/mw", - // chemin HTTP de l'application - // absolu a partir de la racine HTTP du site - $PATHES["mw_path"] = "/mw"; + // chemin du dossier "mw" sur le systeme d'exploitation + // relatif au dossier de l'installation + // ou absolu dans le systeme de fichiers + "mw_dir" => "mw", - // dossier des contenus editables par l'application - // relatif au dossier de l'installation - $PATHES["content"] = "content"; + // dossier des contenus editables par l'application + // relatif au dossier de l'installation + "content" => "content" + ); // -------------------------------------------------------------- // base de donnees // - $bdd = array(); + // mtweb propose deux modes de stockage des donnees + // + // - dans des fichiers XML + // + // - ou en utilisant un gestionnaire de base de donnees SQL + // + // ci-dessous deux exemples de configurations pour la connexion + // une pour XML (par defaut) et l'autre pour MySql (commentee) - // --------------------------- MYSQL -/* - // remplacez avec vos parametres de connexion - $bdd["sgbd"] = "pdo_mysql"; - $bdd["host"] = "localhost"; - $bdd["base"] = "mtweb"; - $bdd["table_prefix"] = "mw_"; - $bdd["user"] = "mysql_user"; - $bdd["password"] = "mysql_password"; -*/ // --------------------------- XML - $bdd["sgbd"] = "xml"; - $bdd["host"] = "content/data/xml"; - $bdd["base"] = "mw"; - $bdd["table_prefix"] = "mw_"; + $bdd = array( + // on utilise stockage de donnees dans des fichiers XML + "sgbd" => "xml", + // les fichiers XML sont enregistres dans le repertoire : + "host" => "content/data/xml", + // dans ce repertoire, la base de donnees est dans le dossier : + "base" => "mw" + ); + +/* + // --------------------------- MYSQL + // + // pour utiliser MySql, importez la base de donnees : + // + // mysql -u mysql_user -p < content/data/mysql/mtweb.sql + // + // et remplacez avec vos parametres de connexion : + + $bdd = array( + // on utilise MySql avec PDO (driver pdo_mysql) + "sgbd" => "pdo_mysql", + // hote du serveur MySql + "host" => "localhost", + // nom de la base de donnees + "base" => "mtweb", + // prefixe pour les noms des tables (*) + "table_prefix" => "mw_", + // identification pour la connexion sur le serveur MySql + "user" => "mysql_user", + "password" => "mysql_password" + ); + + // (*) le script mtweb.sql cree les tables avec le prefixe mw_ + // adaptez le script si vous utiliez un autre prefix +*/ ?> \ No newline at end of file diff --git a/content/data/mysql/mtweb.sql b/content/data/mysql/mtweb.sql index 982650c..0151c51 100644 --- a/content/data/mysql/mtweb.sql +++ b/content/data/mysql/mtweb.sql @@ -66,10 +66,7 @@ INSERT INTO `mw_config` (`id`, `key`, `value`) VALUES (16, 'start_action_params', ''), (20, 'out_navig_menu_top', 'on'), (22, 'out_colonne', 'on'), -(29, 'default_allow', '1'), -(30, 'cache_actif', '0'), -(31, 'cache_maj_auto', '0'), -(32, 'cache_time', '72'); +(29, 'default_allow', '1'); -- -------------------------------------------------------- diff --git a/mw/app/data/impl/mw_xml.php b/mw/app/data/impl/mw_xml.php index 53fa7f1..2691a99 100644 --- a/mw/app/data/impl/mw_xml.php +++ b/mw/app/data/impl/mw_xml.php @@ -25,8 +25,8 @@ 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")) require_once $env->app_file("data/impl/xml/mw_xml_data.php"); + if(!class_exists("mw_xml_data_handler")) require_once $env->app_file("data/impl/xml/mw_xml_data_handler.php"); if( class_exists("mw_xml_data") && class_exists("mw_xml_data_handler") diff --git a/mw/app/data/modules/share/mw_data_users_sessions.php b/mw/app/data/modules/share/mw_data_users_sessions.php index daabe2b..a82c9a0 100644 --- a/mw/app/data/modules/share/mw_data_users_sessions.php +++ b/mw/app/data/modules/share/mw_data_users_sessions.php @@ -23,31 +23,41 @@ function user_ok($user){ return - strcmp(md5($user["password"].$_SESSION["id"]), $_SESSION["pass"]) == 0 - && $_SESSION["ip"] == $_SERVER["REMOTE_ADDR"]; + (isset($_SESSION[$this->app_session_key()]["id"])) + && (isset($_SESSION[$this->app_session_key()]["pass"])) + && (isset($_SESSION[$this->app_session_key()]["ip"])) + && (strcmp(md5($user["password"].$_SESSION[$this->app_session_key()]["id"]), $_SESSION[$this->app_session_key()]["pass"]) == 0) + && ($_SESSION[$this->app_session_key()]["ip"] == $_SERVER["REMOTE_ADDR"]); } function password_ok($user, $password){ if(!$user) return false; return - strcmp(md5($user["password"].$_SESSION["id"]), $password) == 0 - && $_SESSION["ip"] == $_SERVER["REMOTE_ADDR"]; + (isset($_SESSION[$this->app_session_key()]["id"])) + && (isset($_SESSION[$this->app_session_key()]["ip"])) + && (strcmp(md5($user["password"].$_SESSION[$this->app_session_key()]["id"]), $password) == 0) + && ($_SESSION[$this->app_session_key()]["ip"] == $_SERVER["REMOTE_ADDR"]); } # ---------------------------------------------------------------------------------------- # session # + function app_session_key(){ + $env = $this->env(); + return "mw_".str_replace("/", "_", $env->path("web")); + } + function load_session(){ @session_start(); - if(!isset($_SESSION["id"])) $this->clear_session(); + if(!isset($_SESSION[$this->app_session_key()]["id"])) $this->clear_session(); $user = array(); - if(isset($_SESSION["user"])){ - $user = $this->user($_SESSION["user"]); + if(isset($_SESSION[$this->app_session_key()]["user"])){ + $user = $this->user($_SESSION[$this->app_session_key()]["user"]); } - elseif(isset($_COOKIE["user"]) && isset($_COOKIE["pass"])){ - if($user = $this->user($_COOKIE["user"])){ - $user["password"] = $_COOKIE["pass"]; + elseif(isset($_COOKIE[$this->app_session_key()."_user"]) && isset($_COOKIE[$this->app_session_key()."_pass"])){ + if($user = $this->user($_COOKIE[$this->app_session_key()."_user"])){ + $user["password"] = $_COOKIE[$this->app_session_key()."_pass"]; $this->set_session($user); } } @@ -63,23 +73,25 @@ } function set_session($user){ - $_SESSION["user"] = $user["login"]; - $_SESSION["pass"] = md5($user["password"].$_SESSION["id"]); + if(!isset($_SESSION[$this->app_session_key()])) $this->clear_session(); + $_SESSION[$this->app_session_key()]["user"] = $user["login"]; + $_SESSION[$this->app_session_key()]["pass"] = md5($user["password"].$_SESSION[$this->app_session_key()]["id"]); $env = $this->env(); return - setcookie("user", $user["login"], time() + (60 * 60 * 24 * 7), $env->path("web")) - && setcookie("pass", $user["password"], time() + (60 * 60 * 24 * 7), $env->path("web")); + setcookie($this->app_session_key()."_user", $user["login"], time() + (60 * 60 * 24 * 7), "/") + && setcookie($this->app_session_key()."_pass", $user["password"], time() + (60 * 60 * 24 * 7), "/"); } function clear_session(){ - unset($_SESSION["user"]); - unset($_SESSION["pass"]); - $_SESSION["ip"] = $_SERVER["REMOTE_ADDR"]; - $_SESSION["id"] = md5(rand()); + unset($_SESSION[$this->app_session_key()]); + $_SESSION[$this->app_session_key()] = array( + "ip" => $_SERVER["REMOTE_ADDR"], + "id" => md5(rand()) + ); $env = $this->env(); return - setcookie("user", "", 0, $env->path("web")) - && setcookie("pass", "", 0, $env->path("web")); + setcookie($this->app_session_key()."_user", "", 0, "/") + && setcookie($this->app_session_key()."_pass", "", 0, "/"); } function get_session_user(){ diff --git a/mw/app/data/modules/sql/mw_data_crud.php b/mw/app/data/modules/sql/mw_data_sql_crud.php similarity index 99% rename from mw/app/data/modules/sql/mw_data_crud.php rename to mw/app/data/modules/sql/mw_data_sql_crud.php index f438ef1..0d9abbd 100644 --- a/mw/app/data/modules/sql/mw_data_crud.php +++ b/mw/app/data/modules/sql/mw_data_sql_crud.php @@ -1,6 +1,6 @@ app_file("data/mw_sgbd.php"); - require $this->app_file("data/mw_data.php"); + if(!class_exists("mw_sgbd")) require_once $this->app_file("data/mw_sgbd.php"); + if(!class_exists("mw_data")) require_once $this->app_file("data/mw_data.php"); if($this->app_file_exists("data/impl/mw_".$this->bdd("sgbd").".php")){ - require $this->app_file("data/impl/mw_".$this->bdd("sgbd").".php"); - if(class_exists($sgbd_impl = "mw_".$this->bdd("sgbd"))){ + $sgbd_impl = "mw_".$this->bdd("sgbd"); + if(!class_exists($sgbd_impl)) require_once $this->app_file("data/impl/".$sgbd_impl.".php"); + if(class_exists($sgbd_impl)){ if(($plugins = $this->plugins("DESC")) !== false){ $data = new mw_data(true); foreach($plugins as $plugin_name => $plugin){ diff --git a/mw/app/out/default/views/users/identification.php b/mw/app/out/default/views/users/identification.php index dd81a74..c36b9ba 100644 --- a/mw/app/out/default/views/users/identification.php +++ b/mw/app/out/default/views/users/identification.php @@ -1,4 +1,10 @@ -user())) : ?> +user())) : + $data = $this->data(); + $app_session_key = $data->app_session_key(); + +?>
" method="post"> @@ -20,7 +26,7 @@
  • - ')" /> + ')" />
  • diff --git a/mw/env/modules/mw_env_config.php b/mw/env/modules/mw_env_config.php index a708431..e9b2316 100644 --- a/mw/env/modules/mw_env_config.php +++ b/mw/env/modules/mw_env_config.php @@ -51,7 +51,7 @@ if(isset($app_config["subs"]["bdd"][0]["subs"]["table_prefix_code"])){ $this->add_table_prefix( array( - $app_config["subs"]["bdd"][0]["subs"]["table_prefix_code"][0]["data"] => $bdd["table_prefix"] + $app_config["subs"]["bdd"][0]["subs"]["table_prefix_code"][0]["data"] => isset($bdd["table_prefix"]) ? $bdd["table_prefix"] : "" ) ); } diff --git a/mw/env/modules/mw_env_plugins.php b/mw/env/modules/mw_env_plugins.php index 70a9ec8..153700b 100644 --- a/mw/env/modules/mw_env_plugins.php +++ b/mw/env/modules/mw_env_plugins.php @@ -123,7 +123,9 @@ if(file_exists($this->path("mw_dir")."plugins")){ if(substr($plugin_name, 0 ,1) !== "." && is_dir($this->path("mw_dir")."plugins/".$plugin_name)){ if(file_exists($this->path("mw_dir")."plugins/".$plugin_name."/".$plugin_name.".php")){ - require $this->path("mw_dir")."plugins/".$plugin_name."/".$plugin_name.".php"; + if(!class_exists($plugin_name)){ + require_once $this->path("mw_dir")."plugins/".$plugin_name."/".$plugin_name.".php"; + } if(class_exists($plugin_name)){ $plugin = new $plugin_name(); } diff --git a/mw/env/modules/mw_env_run.php b/mw/env/modules/mw_env_run.php index 5d7a24d..c0a97a2 100644 --- a/mw/env/modules/mw_env_run.php +++ b/mw/env/modules/mw_env_run.php @@ -137,16 +137,21 @@ return $OK; } - function run($etat, $valid_role = true, $params = array(), $method = "GET"){ + function run($etat, $params = array(), $valid_role = true){ if($this->set_etat($etat, $valid_role)){ if($controller = $this->get_controller($this->etat("mod")."/".$this->etat("controller"))){ $action_method = $this->etat("action"); if(method_exists($controller, $action_method)){ - foreach($params as $key => $value){ - switch(strtolower($method)){ - case "get": $_GET[$this->param($key)] = $value; break; - case "post": $_POST[$key] = $value; break; - default: break; + foreach($params as $params_method => $values){ + foreach($values as $key => $value){ + switch(strtolower($params_method)){ + case "get": + $_GET[$this->param($key)] = $value; + break; + case "post": + $_POST[$key] = $value; + break; + } } } if(($controller_validate = $controller->validate()) === true){ diff --git a/mw/libs/empty_class.php b/mw/libs/empty_class.php index 32894ce..38e14cc 100644 --- a/mw/libs/empty_class.php +++ b/mw/libs/empty_class.php @@ -70,8 +70,8 @@ $file = $v_path[count($v_path) - 1]; if(strcasecmp(substr($file, -4), ".php") == 0){ $class_name = substr($file, 0, -4); - if(!class_exists($class_name)){ - require_once $module_file; + if(!isset($this->modules[$class_name])){ + if(!class_exists($class_name)) require_once $module_file; if(version_compare(PHP_VERSION, '5.0.0', '>=')){ if(class_exists($class_name) && !isset($this->modules[$class_name])){ $this->modules[$class_name] = new $class_name($root_inst); diff --git a/mw/mw_app.php b/mw/mw_app.php index 86978c2..044d711 100644 --- a/mw/mw_app.php +++ b/mw/mw_app.php @@ -24,25 +24,31 @@ && ($empty_class_file = (file_exists($PATHES["mw_dir"]."libs/empty_class.php") ? $PATHES["mw_dir"]."libs/empty_class.php" : "")) && ($env_class_file = (file_exists($PATHES["mw_dir"]."env/mw_env.php") ? $PATHES["mw_dir"]."env/mw_env.php" : "")) ){ - require $sxml_class_file; - require $empty_class_file; - require $env_class_file; - $env = new mw_env(true); - $this->set_env($env); - $env->load_modules($PATHES["mw_dir"], "env/modules/"); - $env->set_config_file($config_file); - $env->set_PATHES($PATHES); - $env->init_plugins(); - $env->load_config($bdd, $CONFIG); - $env->init(); + if(!class_exists("sxml")) require_once $sxml_class_file; + if(!class_exists("empty_class")) require_once $empty_class_file; + if(!class_exists("mw_env")) require_once $env_class_file; + if( + class_exists("sxml") + && class_exists("empty_class") + && class_exists("mw_env") + ){ + $env = new mw_env(true); + $this->set_env($env); + $env->load_modules($PATHES["mw_dir"], "env/modules/"); + $env->set_config_file($config_file); + $env->set_PATHES($PATHES); + $env->init_plugins(); + $env->load_config($bdd, $CONFIG); + $env->init(); + } } return $this->env(); } - function run($etat = ""){ + function run($etat = "", $params = array(), $valid_role = true){ $env = $this->env(); $etat = ($etat === false ? false : ($etat ? $etat : (isset($_GET[$env->param("e")]) ? $_GET[$env->param("e")] : ""))); - if($etat !== false) $env->run($etat); + if($etat !== false) $env->run($etat, $params, $valid_role); } function display(){ diff --git a/mw/plugins/mw_minimal/mw_minimal.php b/mw/plugins/mw_minimal/mw_minimal.php index cfa16eb..fd5ad8d 100644 --- a/mw/plugins/mw_minimal/mw_minimal.php +++ b/mw/plugins/mw_minimal/mw_minimal.php @@ -1,40 +1,35 @@ .tar.gz contient un dossier "mtweb" - - uploadez le contenu de ce dossier a la racine de votre site - (pour une installation dans un sous-dossier du site, indiquez - le chemin dans le fichier config.php) - - assurez-vous que Php a le droit d'ecrire dans le dossier "content" - (et dans ses fichiers et sous-dossiers) + - uploadez le contenu de ce dossier "mtweb" sur votre site - Par defaut, mtweb stocke ses donnees dans des fichiers XML. - pour utilisez le stockage des donnees avec MySql : + Si vous faites l'installation ailleurs qu'a la racine du site + (si le fichier index.php n'est pas a la racine du site), adaptez + le fichier config.php pour y renseigner le chemin de l'installation + (plus de détails dans le fichier config.php) - - importez les tables fournies dans le fichier "content/data/mysql/mtweb.sql" - - puis dans le fichier "config.php" : - - commentez la partie relative aux donnees XML - - decommentez la partie relative aux donnees MySql - - adaptez les informations pour MySql avec vos parametres de connexion + - assurez-vous que Php a le droit d'ecrire dans le dossier "content" + (et dans ses fichiers et sous-dossiers) pour une premiere utilisation, vous pouvez vous identifier avec : - login: admin - pass: adminpass - pensez a changer le mot de passe + + (*) avant de rendre votre installation publique : + + - changez le mot de passe de l'utilisateur "admin" + + - ou creez un autre utilisateur avec un role administrateur + puis supprimez l'utilisateur "admin" + + + # utiliser MySql : + + par defaut, mtweb stocke ses donnees dans des fichiers XML, dans le + dossier "content". + + pour utiliser le stockage de donnees MySql : + + - importez les tables avec le script "content/data/mysql/mtweb.sql" + + - dans le fichier "config.php" : + - commentez la partie relative aux donnees XML + - decommentez la partie relative aux donnees MySql + - et adaptez les parametres de connexion pour MySql + (plus de details dans le fichier config.php) documentation : --------------- - Plus d'infos en ligne : http://mtweb.dj3c1t.com -- 2.1.4