5 * Tests : vérification que les conditions pour s'exécuter sont remplies
8 function test_requis($condition, $message)
15 if (PHP_SAPI
!= 'cli')
17 header('Content-Type: text/html; charset=utf-8');
18 echo "<!DOCTYPE html>\n<html>\n<head>\n<title>Erreur</title>\n<meta charset=\"utf-8\" />\n";
19 echo '<style type="text/css">body { font-family: sans-serif; } ';
20 echo '.error { color: darkred; padding: .5em; margin: 1em; border: 3px double red; background: yellow; }</style>';
21 echo "\n</head>\n<body>\n<h2>Erreur</h2>\n<h3>Le problème suivant empêche Garradin de fonctionner :</h3>\n";
22 echo '<p class="error">' . htmlspecialchars($message, ENT_QUOTES
, 'UTF-8') . '</p>';
23 echo '<hr /><p>Pour plus d\'informations consulter ';
24 echo '<a href="http://dev.kd2.org/garradin/Probl%C3%A8mes%20fr%C3%A9quents">l\'aide sur les problèmes à l\'installation</a>.</p>';
25 echo "\n</body>\n</html>";
29 echo "[ERREUR] Le problème suivant empêche Garradin de fonctionner :\n";
31 echo "Pour plus d'informations consulter http://dev.kd2.org/garradin/Probl%C3%A8mes%20fr%C3%A9quents\n";
38 version_compare(phpversion(), '5.4', '>='),
39 'PHP 5.4 ou supérieur requis. PHP version ' . phpversion() . ' installée.'
43 defined('CRYPT_BLOWFISH') && CRYPT_BLOWFISH
,
44 'L\'algorithme de hashage de mot de passe Blowfish n\'est pas présent (pas installé ou pas compilé).'
48 class_exists('SQLite3'),
49 'Le module de base de données SQLite3 n\'est pas disponible.'
52 $v = \SQLite3
::version();
55 version_compare($v['versionString'], '3.7.4', '>='),
56 'SQLite3 version 3.7.4 ou supérieur requise. Version installée : ' . $v['versionString']
60 file_exists(__DIR__
. '/../../include/libs/template_lite/class.template.php'),
61 'Librairie Template_Lite non disponible.'
64 const INSTALL_PROCESS
= true;
66 require_once __DIR__
. '/../../include/init.php';
68 // Vérifier que les répertoires vides existent, sinon les créer
69 $paths = [DATA_ROOT
. '/cache', DATA_ROOT
. '/cache/static', DATA_ROOT
. '/cache/compiled'];
71 foreach ($paths as $path)
73 if (!file_exists($path))
77 file_exists($path) && is_dir($path),
78 'Le répertoire '.$path.' n\'existe pas ou n\'est pas un répertoire.'
81 // On en profite pour vérifier qu'on peut y lire et écrire
83 is_writable($path) && is_readable($path),
84 'Le répertoire '.$path.' n\'est pas accessible en lecture/écriture.'
88 if (!file_exists(DB_FILE
))
90 // Renommage du fichier sqlite à la version 0.5.0
91 $old_file = str_replace('.sqlite', '.db', DB_FILE
);
93 if (file_exists($old_file))
95 rename($old_file, DB_FILE
);
96 utils
::redirect('/admin/upgrade.php');
100 $tpl = Template
::getInstance();
102 $tpl->assign('admin_url', WWW_URL
. 'admin/');
104 if (file_exists(DB_FILE
))
106 $tpl->assign('disabled', true);
110 $tpl->assign('disabled', false);
113 if (!empty($_POST['save']))
115 if (!utils
::CSRF_check('install'))
117 $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
119 elseif (utils
::post('passe_membre') != utils
::post('repasse_membre'))
121 $error = 'La vérification ne correspond pas au mot de passe.';
126 $db = DB
::getInstance(true);
128 // Création de la base de données
130 $db->exec(file_get_contents(DB_SCHEMA
));
133 // Configuration de base
134 $config = Config
::getInstance();
135 $config->set('nom_asso', utils
::post('nom_asso'));
136 $config->set('adresse_asso', utils
::post('adresse_asso'));
137 $config->set('email_asso', utils
::post('email_asso'));
138 $config->set('site_asso', WWW_URL
);
139 $config->set('monnaie', '€');
140 $config->set('pays', 'FR');
141 $config->set('email_envoi_automatique', utils
::post('email_asso'));
142 $config->setVersion(garradin_version());
144 $champs = Champs_Membres
::importInstall();
145 $champs->save(false); // Pas de copie car pas de table membres existante
147 $config->set('champ_identifiant', 'email');
148 $config->set('champ_identite', 'nom');
150 // Création catégories
151 $cats = new Membres_Categories
;
153 'nom' => 'Membres actifs',
155 $config->set('categorie_membres', $id);
158 'nom' => 'Anciens membres',
159 'droit_inscription' => Membres
::DROIT_AUCUN
,
160 'droit_wiki' => Membres
::DROIT_AUCUN
,
161 'droit_membres' => Membres
::DROIT_AUCUN
,
162 'droit_compta' => Membres
::DROIT_AUCUN
,
163 'droit_config' => Membres
::DROIT_AUCUN
,
164 'droit_connexion' => Membres
::DROIT_AUCUN
,
169 'nom' => ucfirst(utils
::post('cat_membre')),
170 'droit_inscription' => Membres
::DROIT_AUCUN
,
171 'droit_wiki' => Membres
::DROIT_ADMIN
,
172 'droit_membres' => Membres
::DROIT_ADMIN
,
173 'droit_compta' => Membres
::DROIT_ADMIN
,
174 'droit_config' => Membres
::DROIT_ADMIN
,
177 // Création premier membre
178 $membres = new Membres
;
179 $id_membre = $membres->add([
180 'id_categorie' => $id,
181 'nom' => utils
::post('nom_membre'),
182 'email' => utils
::post('email_membre'),
183 'passe' => utils
::post('passe_membre'),
188 $page = Wiki
::transformTitleToURI(utils
::post('nom_asso'));
189 $config->set('accueil_wiki', $page);
191 $id_page = $wiki->create([
192 'titre' => utils
::post('nom_asso'),
196 $wiki->editRevision($id_page, 0, [
197 'id_auteur' => $id_membre,
198 'contenu' => "Bienvenue dans le wiki de ".utils
::post('nom_asso')." !\n\nCliquez sur le bouton « éditer » pour modifier cette page.",
201 // Création page wiki connexion
202 $page = Wiki
::transformTitleToURI('Bienvenue');
203 $config->set('accueil_connexion', $page);
204 $id_page = $wiki->create([
205 'titre' => 'Bienvenue',
209 $wiki->editRevision($id_page, 0, [
210 'id_auteur' => $id_membre,
211 'contenu' => "Bienvenue dans l'administration de ".utils
::post('nom_asso')." !\n\n"
212 . "Utilisez le menu à gauche pour accéder aux différentes rubriques.",
215 // Mise en place compta
216 $comptes = new Compta_Comptes
;
217 $comptes->importPlan();
219 $comptes = new Compta_Categories
;
220 $comptes->importCategories();
222 $ex = new Compta_Exercices
;
224 'libelle' => 'Premier exercice',
225 'debut' => date('Y-01-01'),
226 'fin' => date('Y-12-31')
231 utils
::redirect('/admin/login.php');
233 catch (UserException
$e)
237 $error = $e->getMessage();
242 $tpl->assign('error', $error);
245 $tpl->assign('passphrase', utils
::suggestPassword());
246 $tpl->display('admin/install.tpl');