84075384f33101a39ba6f33f05276349c2975b51
[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 = "mw_pdo_sqlite";
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         $admin = array(
61           "login" => trim($_POST["admin_login"]),
62           "email" => trim($_POST["admin_email"]),
63           "password" => $_POST["admin_password"]
64         );
65         if(!$admin["login"]){
66           $env->message("merci de choisir un login pour l'administrateur");
67         }
68         if(!$admin["email"]){
69           $env->message("merci de préciser l'email de l'administrateur");
70         }
71         if($admin["password"]){
72           if($admin["password"] != $_POST["admin_password_confirm"]){
73             $env->message("la confirmation du mot de passe est incorrecte");
74           }
75         }
76         else $env->message("merci de choisir un mot de passe pour l'administrateur");
77         if(!$env->messages()){
78           $sgbds[$current_sgbd] = null;
79           $impl = new $current_sgbd($params);
80           $sgbds[$current_sgbd] = $impl;
81           $data->set_sgbd(
82             new mw_sgbd(
83               $sgbds[$current_sgbd],
84               $env
85             )
86           );
87           $data->load_modules($env->path("mw_dir")."app/", "data/modules/".($current_sgbd == "mw_xml" ? "xml" : "sql")."/");
88           if(
89                 $current_sgbd == "mw_xml"
90           ){
91             if(($res = $data->install_xml($params)) !== true){
92               $env->message($res);
93             }
94           }
95           elseif(
96                 $current_sgbd == "mw_mysql"
97             ||  $current_sgbd == "mw_pdo_mysql"
98           ){
99             if(($res = $data->install_sql($params)) !== true){
100               $env->message($res);
101             }
102           }
103           elseif(
104                 $current_sgbd == "mw_pdo_sqlite"
105           ){
106             if(($res = $data->install_sqlite($params)) !== true){
107               $env->message($res);
108             }
109           }
110         }
111         if(!$env->messages()){
112           if(($roles = $data->init_roles()) === false){
113             $env->erreur("la base de données a été installée mais impossible de lire la liste des roles");
114             return;
115           }
116           $admin_roles = array();
117           foreach($roles as $id_role => $role){
118             if(
119                   ($role["nom"] == "admin")
120               ||  ($role["nom"] == "membre")
121               ||  ($role["nom"] == "webmaster")
122             ){
123               $admin_roles[] = $id_role;
124             }
125           }
126           if(!$data->add_user($admin["login"], md5($admin["password"]), $admin["email"], $admin_roles)){
127             $env->erreur("la base de données a été installée mais impossible d'ajouter l'administrateur");
128             return;
129           }
130         }
131         if(!$env->messages()){
132           if(!$content = @file_get_contents($template_file)){
133             $env->erreur("impossible de lire le fichier de template pour la configuration avec ".$current_sgbd);
134             return;
135           }
136           if(
137             @file_put_contents(
138               $this->config_file,
139               str_replace(
140                 array(
141                   "[bdd_host]",
142                   "[bdd_base]",
143                   "[bdd_prefix]",
144                   "[bdd_user]",
145                   "[bdd_password]"
146                 ),
147                 array(
148                   $params["host"],
149                   $params["base"],
150                   $table_prefix,
151                   $params["user"],
152                   $params["password"]
153                 ),
154                 $content
155               )
156             ) === false
157           ){
158             $env->erreur("impossible de créer le fichier de configuration");
159             return;
160           }
161           $env->redirect(
162             $env->url(),
163             "le site a été installé"
164           );
165         }
166       }
167       $env->set_out("sgbds", $sgbds);
168       $env->set_out("current_sgbd", $current_sgbd);
169       $env->set_out("table_prefix", $table_prefix);
170       $env->set_out("admin", $admin);
171     }
172
173   }
174
175 ?>