verification de la version
[mtweb] / mw / app / controllers / install / index.php
1 <?php
2
3   class mw_install_index extends mw_controller{
4
5     var $config_file;
6
7     function validate(){
8       $env = $this->env();
9       $this->config_file = $env->path("content")."config/config.php";
10       if(file_exists($this->config_file)) return "le site est deja installé";
11       return true;
12     }
13
14     function index(){
15       $env = $this->env();
16       $data = $env->data();
17       $admin = array(
18         "login" => "",
19         "email" => "",
20         "password" => ""
21       );
22       if(($sgbds = $data->sgbds()) === false){
23         $env->erreur("impossible de lister les sgbds disponibles");
24         return;
25       }
26       $table_prefix = isset($_POST["table_prefix"]) ? $_POST["table_prefix"] : "mw_";
27       $env->add_table_prefix(
28         array(
29           "#--" => $table_prefix
30         )
31       );
32       $current_sgbd = isset($sgbds["mw_pdo_sqlite"]) ? "mw_pdo_sqlite" : "mw_xml";
33       if($_POST){
34         if(!isset($_POST["sgbd"])){
35           $env->erreur("Parametre de SGBD manquant");
36           return;
37         }
38         $current_sgbd = $_POST["sgbd"];
39         $SGBD_FOUND = false;
40         foreach($sgbds as $class_name => $sgbd){
41           if($current_sgbd == $class_name){
42             $SGBD_FOUND = true;
43             break;
44           }
45         }
46         if(!$SGBD_FOUND){
47           $env->erreur("SGBD inconnu: ".$current_sgbd);
48           return;
49         }
50         if(!file_exists($template_file = $env->path("content")."config/templates/".$current_sgbd.".php")){
51           $env->erreur("le fichier de template pour la configuration avec ".$current_sgbd." n'existe pas");
52           return;
53         }
54         $params = array(
55           "host" => isset($_POST[$current_sgbd."_host"]) ? $_POST[$current_sgbd."_host"] : "",
56           "base" => isset($_POST[$current_sgbd."_base"]) ? $_POST[$current_sgbd."_base"] : "",
57           "user" => isset($_POST[$current_sgbd."_user"]) ? $_POST[$current_sgbd."_user"] : "",
58           "password" => isset($_POST[$current_sgbd."_password"]) ? $_POST[$current_sgbd."_password"] : ""
59         );
60         $sgbds[$current_sgbd]->user = $params["user"];
61         $admin = array(
62           "login" => trim($_POST["admin_login"]),
63           "email" => trim($_POST["admin_email"]),
64           "password" => $_POST["admin_password"]
65         );
66         if(!$admin["login"]){
67           $env->message("merci de choisir un login pour l'administrateur");
68         }
69         if(!$admin["email"]){
70           $env->message("merci de préciser l'email de l'administrateur");
71         }
72         if($admin["password"]){
73           if($admin["password"] != $_POST["admin_password_confirm"]){
74             $env->message("la confirmation du mot de passe est incorrecte");
75           }
76         }
77         else $env->message("merci de choisir un mot de passe pour l'administrateur");
78         if(!$env->messages()){
79           $sgbds[$current_sgbd] = null;
80           $impl = new $current_sgbd($params);
81           $sgbds[$current_sgbd] = $impl;
82           $data->set_sgbd(
83             new mw_sgbd(
84               $sgbds[$current_sgbd],
85               $env
86             )
87           );
88           $data->load_modules($env->path("mw_dir")."app/", "data/modules/".($current_sgbd == "mw_xml" ? "xml" : "sql")."/");
89           if(
90                 $current_sgbd == "mw_xml"
91           ){
92             if(($res = $data->install_xml($params)) !== true){
93               $env->message($res);
94             }
95           }
96           elseif(
97                 $current_sgbd == "mw_mysql"
98             ||  $current_sgbd == "mw_pdo_mysql"
99           ){
100             if(($res = $data->install_sql($params)) !== true){
101               $env->message($res);
102             }
103           }
104           elseif(
105                 $current_sgbd == "mw_pdo_sqlite"
106           ){
107             if(($res = $data->install_sqlite($params)) !== true){
108               $env->message($res);
109             }
110           }
111         }
112         if(!$env->messages()){
113           if(($roles = $data->init_roles()) === false){
114             $env->erreur("la base de données a été installée mais impossible de lire la liste des roles");
115             return;
116           }
117           $admin_roles = array();
118           foreach($roles as $id_role => $role){
119             if(
120                   ($role["nom"] == "admin")
121               ||  ($role["nom"] == "membre")
122               ||  ($role["nom"] == "webmaster")
123             ){
124               $admin_roles[] = $id_role;
125             }
126           }
127           if(!$data->add_user($admin["login"], md5($admin["password"]), $admin["email"], $admin_roles)){
128             $env->erreur("la base de données a été installée mais impossible d'ajouter l'administrateur");
129             return;
130           }
131         }
132         if(!$env->messages()){
133           if(!$content = @file_get_contents($template_file)){
134             $env->erreur("impossible de lire le fichier de template pour la configuration avec ".$current_sgbd);
135             return;
136           }
137           if(
138             @file_put_contents(
139               $this->config_file,
140               str_replace(
141                 array(
142                   "[bdd_host]",
143                   "[bdd_base]",
144                   "[bdd_prefix]",
145                   "[bdd_user]",
146                   "[bdd_password]"
147                 ),
148                 array(
149                   $params["host"],
150                   $params["base"],
151                   $table_prefix,
152                   $params["user"],
153                   $params["password"]
154                 ),
155                 $content
156               )
157             ) === false
158           ){
159             $env->erreur("impossible de créer le fichier de configuration");
160             return;
161           }
162           $env->redirect(
163             $env->url(),
164             "le site a été installé"
165           );
166         }
167       }
168       $env->set_out("sgbds", $sgbds);
169       $env->set_out("current_sgbd", $current_sgbd);
170       $env->set_out("table_prefix", $table_prefix);
171       $env->set_out("admin", $admin);
172     }
173
174   }
175
176 ?>