// 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
(16, 'start_action_params', ''),\r
(20, 'out_navig_menu_top', 'on'),\r
(22, 'out_colonne', 'on'),\r
-(29, 'default_allow', '1'),\r
-(30, 'cache_actif', '0'),\r
-(31, 'cache_maj_auto', '0'),\r
-(32, 'cache_time', '72');\r
+(29, 'default_allow', '1');\r
\r
-- --------------------------------------------------------\r
\r
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")
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);
}
}
}
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(){
<?php
- class mw_data_crud extends mw_data{
+ class mw_data_sql_crud extends mw_data{
# ----------------------------------------------------------------------------------------
# description
<?php
- class mw_data_users extends mw_data{
+ class mw_data_sql_users extends mw_data{
var $users;
var $user;
<?php
- class mw_data_crud extends mw_data{
+ class mw_data_xml_crud extends mw_data{
# ----------------------------------------------------------------------------------------
# insert
<?php
- class mw_data_users extends mw_data{
+ class mw_data_xml_users extends mw_data{
var $users;
var $user;
<?php
- require $this->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){
-<?php if(!($user = $this->user())) : ?>
+<?php
+
+ if(!($user = $this->user())) :
+ $data = $this->data();
+ $app_session_key = $data->app_session_key();
+
+?>
<form id="login_form"
action="<?php echo $this->url("users/identification/login"); ?>"
method="post">
</li>
<li>
<div class="form_single_button">
- <input type="submit" value="Login" onclick="prepare_password('<?php echo $_SESSION["id"]; ?>')" />
+ <input type="submit" value="Login" onclick="prepare_password('<?php echo $_SESSION[$app_session_key]["id"]; ?>')" />
</div>
</li>
</ul>
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"] : ""
)
);
}
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();
}
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){
$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);
&& ($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(){
<?php
/*
- * Cette classe decrit un plugin "vide", qui peut servir de base
+ * Cette classe decrit un plugin "vide" et peut servir de base
* au developpement d'un nouveau plugin.
*
- * SI VOUS UTILISEZ CE FICHIER COMME BASE POUR UN NOUVEAU PLUGIN :
*
- * Si par exemple vous renommez cette classe en :
+ * pour creer un nouveau plugin (par exemple "mon_plugin") :
*
- * class mon_plugin extends mw_plugin
+ * - creez un dossier "mon_plugin" dans le dossier "mw/plugins"
+ *
+ * - copiez dans ce dossier le fichier "mw_minimal.php" et renommez-le
+ * en "mon_plugin.php"
*
- * - renommez le fichier mw_minimal.php en mon_plugin.php
- * - renommez le dossier mw_minimal en mon_plugin
+ * - dans "mon_plugin.php", renommez la classe en :
+ *
+ * class mon_plugin extends mw_plugin
*
- * Vous aurez alors un nouveau plugin "mon_plugin" pret a accueillir
- * vos nouveaux developpements
+ * vous aurez alors un nouveau plugin, activable dans l'administration
+ * du site.
*
- * Votre plugin peut definir de nouveaux modules d'acces aux donnes,
- * de nouveaux modules d'action et de nouveaux fichiers d'affichage
*
- * d'une maniere generale, l'organisation du code dans un plugin
- * est la meme que celle dans l'application principale.
+ * Votre dossier de plugin peut contenir des dossiers :
*
- * un dossier de plugin peut contenir des dossiers :
* - app/controllers
* - app/data
* - app/out
+ * - app/observers
* - ...
*
- * qui seront traites exactement comme les dossiers de meme nom dans
- * l'application principale
- *
- *
- * plus d'infos en ligne sur le fonctionnement de l'application :
- *
- * http://mtweb.dj3c1t.com
+ * ces dossiers seront traites de le meme facon que ceux de
+ * l'application principale (dans le dossier mw/app)
*
*/
mtweb - base de programmation pour application web
- copyright 2010-2013 by dj3c1t
+ 2010-2013 - dj3c1t - http://www.dj3c1t.com
+ ce programme est publié avec une licence GNU GPL v3
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
installation :
--------------
- installation rapide :
+ # installation rapide (*) :
- l'archive mtweb.<version>.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