+<?php
+
+ class mw_install_index extends mw_controller{
+
+ var $config_file;
+
+ function validate(){
+ $env = $this->env();
+ $this->config_file = $env->path("content")."config/config.php";
+ if(file_exists($this->config_file)) return "le site est deja installé";
+ return true;
+ }
+
+ function index(){
+ $env = $this->env();
+ $data = $env->data();
+ $admin = array(
+ "login" => "",
+ "email" => "",
+ "password" => ""
+ );
+ if(($sgbds = $data->sgbds()) === false){
+ $env->erreur("impossible de lister les sgbds disponibles");
+ return;
+ }
+ $table_prefix = isset($_POST["table_prefix"]) ? $_POST["table_prefix"] : "mw_";
+ $env->add_table_prefix(
+ array(
+ "#--" => $table_prefix
+ )
+ );
+ $current_sgbd = "mw_pdo_sqlite";
+ if($_POST){
+ if(!isset($_POST["sgbd"])){
+ $env->erreur("Parametre de SGBD manquant");
+ return;
+ }
+ $current_sgbd = $_POST["sgbd"];
+ $SGBD_FOUND = false;
+ foreach($sgbds as $class_name => $sgbd){
+ if($current_sgbd == $class_name){
+ $SGBD_FOUND = true;
+ break;
+ }
+ }
+ if(!$SGBD_FOUND){
+ $env->erreur("SGBD inconnu: ".$current_sgbd);
+ return;
+ }
+ if(!file_exists($template_file = $env->path("content")."config/templates/".$current_sgbd.".php")){
+ $env->erreur("le fichier de template pour la configuration avec ".$current_sgbd." n'existe pas");
+ return;
+ }
+ $params = array(
+ "host" => isset($_POST[$current_sgbd."_host"]) ? $_POST[$current_sgbd."_host"] : "",
+ "base" => isset($_POST[$current_sgbd."_base"]) ? $_POST[$current_sgbd."_base"] : "",
+ "user" => isset($_POST[$current_sgbd."_user"]) ? $_POST[$current_sgbd."_user"] : "",
+ "password" => isset($_POST[$current_sgbd."_password"]) ? $_POST[$current_sgbd."_password"] : ""
+ );
+ $admin = array(
+ "login" => trim($_POST["admin_login"]),
+ "email" => trim($_POST["admin_email"]),
+ "password" => $_POST["admin_password"]
+ );
+ if(!$admin["login"]){
+ $env->message("merci de choisir un login pour l'administrateur");
+ }
+ if(!$admin["email"]){
+ $env->message("merci de préciser l'email de l'administrateur");
+ }
+ if($admin["password"]){
+ if($admin["password"] != $_POST["admin_password_confirm"]){
+ $env->message("la confirmation du mot de passe est incorrecte");
+ }
+ }
+ else $env->message("merci de choisir un mot de passe pour l'administrateur");
+ if(!$env->messages()){
+ $sgbds[$current_sgbd] = null;
+ $impl = new $current_sgbd($params);
+ $sgbds[$current_sgbd] = $impl;
+ $data->set_sgbd(
+ new mw_sgbd(
+ $sgbds[$current_sgbd],
+ $env
+ )
+ );
+ $data->load_modules($env->path("mw_dir")."app/", "data/modules/".($current_sgbd == "mw_xml" ? "xml" : "sql")."/");
+ if(
+ $current_sgbd == "mw_xml"
+ ){
+ if(($res = $data->install_xml($params)) !== true){
+ $env->message($res);
+ }
+ }
+ elseif(
+ $current_sgbd == "mw_mysql"
+ || $current_sgbd == "mw_pdo_mysql"
+ ){
+ if(($res = $data->install_sql($params)) !== true){
+ $env->message($res);
+ }
+ }
+ elseif(
+ $current_sgbd == "mw_pdo_sqlite"
+ ){
+ if(($res = $data->install_sqlite($params)) !== true){
+ $env->message($res);
+ }
+ }
+ }
+ if(!$env->messages()){
+ if(($roles = $data->init_roles()) === false){
+ $env->erreur("la base de données a été installée mais impossible de lire la liste des roles");
+ return;
+ }
+ $admin_roles = array();
+ foreach($roles as $id_role => $role){
+ if(
+ ($role["nom"] == "admin")
+ || ($role["nom"] == "membre")
+ || ($role["nom"] == "webmaster")
+ ){
+ $admin_roles[] = $id_role;
+ }
+ }
+ if(!$data->add_user($admin["login"], md5($admin["password"]), $admin["email"], $admin_roles)){
+ $env->erreur("la base de données a été installée mais impossible d'ajouter l'administrateur");
+ return;
+ }
+ }
+ if(!$env->messages()){
+ if(!$content = @file_get_contents($template_file)){
+ $env->erreur("impossible de lire le fichier de template pour la configuration avec ".$current_sgbd);
+ return;
+ }
+ if(
+ @file_put_contents(
+ $this->config_file,
+ str_replace(
+ array(
+ "[bdd_host]",
+ "[bdd_base]",
+ "[bdd_prefix]",
+ "[bdd_user]",
+ "[bdd_password]"
+ ),
+ array(
+ $params["host"],
+ $params["base"],
+ $table_prefix,
+ $params["user"],
+ $params["password"]
+ ),
+ $content
+ )
+ ) === false
+ ){
+ $env->erreur("impossible de créer le fichier de configuration");
+ return;
+ }
+ $env->redirect(
+ $env->url(),
+ "le site a été installé"
+ );
+ }
+ }
+ $env->set_out("sgbds", $sgbds);
+ $env->set_out("current_sgbd", $current_sgbd);
+ $env->set_out("table_prefix", $table_prefix);
+ $env->set_out("admin", $admin);
+ }
+
+ }
+
+?>
\ No newline at end of file