changeset 70:e08186e4ed77

Ajout d'un installeur. Il est désormais possible d'utiliser ce script pour créer une installation vierge de Dual Blog, rendant presque facile la création de sa propre instance du blog :-) Une chose à noter cependant: il est encore /impératif/ de modifier le fichier pointant vers le fichier .htpass dans le .htaccess à la main pour le moment.
author Franck Deroche <webmaster@defr.org>
date Wed, 19 Mar 2008 12:08:15 +0100
parents d67a65183100
children 464f4b94ee27
files css/install.css install.php templates/install_form.xml
diffstat 3 files changed, 249 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/install.css	Wed Mar 19 12:08:15 2008 +0100
@@ -0,0 +1,46 @@
+html   {background: #eee; font-family: sans-serif; }
+h1     {font-size: 1.1em; text-align: center; margin:0; padding:10px;}
+legend {font-style: italic;}
+body  {
+	margin: 0 30px;
+	background:#fff;
+	border:#999 solid;
+	border-width: 0 2px;
+	padding: 0 5px 5px;
+}
+
+input {
+	font-size: 1em;
+	border: #dec solid;
+	border-width: 1px 1px 1px 4px;
+	background: url(Res_Somatic/bg_test.png) repeat 0% 0%;
+	width: 100%;
+}
+
+input:not(:focus) {
+	opacity: 0.7;
+	color: #666;
+}
+
+input:focus {
+	opacity: 1;
+	background: #fff;
+}
+
+fieldset {
+	-moz-border-radius: 1.5em;
+	min-width: 10em;
+	max-width: 30em;
+	width: 90%;
+	margin-bottom: 15px;
+}
+
+
+#submit {
+	opacity: 1;
+	margin: 15px auto;
+	display: block;
+	border-width: 1px 3px;
+	font-weight: bold;
+	background: #fff;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/install.php	Wed Mar 19 12:08:15 2008 +0100
@@ -0,0 +1,149 @@
+<?php
+	require_once "classes.php";
+	$req = new Requete();
+	$pB = $req->Get('postBack', 'POST', false);
+	$canWrite = is_writable('includes');
+	if(file_exists('includes/config.php'))
+	{
+		$tpl = '<p>Un fichier de configuration a déja été crée. Par mesure
+		de sécurité, il est necessaire de supprimer manuellement ce fichier 
+		avant de pouvoir tenter une nouvelle installation</p>';
+	}
+	else if($pB)
+	{
+		// 1. Vérification des identifiants MySQL, création des tables
+		$db_host = $req->Get('db_host');
+		$db_user = $req->Get('db_user');
+		$db_pass = $req->Get('db_pass');
+		$db_db = $req->Get('db_db');
+		$myDB = new DataAccess($db_host, $db_user, $db_pass, $db_db);
+		if($myDB->isInError())
+		{
+			if($myDB->link === false)
+				$erreur = "Le triplet (hôte, identifiant, mot de passe) est erroné)";
+			else
+				$erreur = "La base de données mentionné n'existe pas";
+				
+			$tpl = $erreur;
+		}
+		else
+		{
+			// Requete de créations des 5 tables.
+			$myDB->Query("CREATE TABLE Brouillons(
+					id_brouillon INTEGER NOT NULL auto_increment,
+					Titre VARCHAR(70),
+					Contenu TEXT,
+					PRIMARY KEY (id_brouillon)
+			)");
+			$myDB->Query("CREATE TABLE `Commentaires` (
+					`num_comm` int(11) NOT NULL auto_increment,
+					`MessId` int(11) NOT NULL default '0',
+					`Auteur` varchar(60) NOT NULL default '',
+					`Adresse` varchar(150) NOT NULL default '',
+					`AdresseMail` varchar(60) default NULL,
+					`Comment` mediumtext NOT NULL,
+					`DateComment` datetime default '0000-00-00 00:00:00',
+					`isTrackback` tinyint(4) NOT NULL default '0',
+					`ip` varchar(25) NOT NULL default '',
+					`Visible` tinyint(4) NOT NULL default '1',
+					PRIMARY KEY  (`num_comm`),
+					KEY `Visible` (`Visible`),
+					KEY `Parent` (`MessId`)
+			)");
+			$myDB->Query("CREATE TABLE `Mess` (
+					`num_mess` int(11) NOT NULL auto_increment,
+					`Titre` varchar(70) NOT NULL default '',
+					`DatePost` datetime NOT NULL default '0000-00-00 00:00:00',
+					`num_version` varchar(30) NOT NULL default '0',
+					`NbCommentaires` smallint(6) NOT NULL default '0',
+					`Message` longtext NOT NULL,
+					`CommentOpen` tinyint(1) NOT NULL default '0',
+					`Emot` varchar(20) default NULL,
+					PRIMARY KEY  (`num_mess`)
+			)");
+			$myDB->Query("CREATE TABLE `Tags` (
+					`idTag` int(11) NOT NULL auto_increment,
+					`Tag` varchar(25) NOT NULL default '',
+					PRIMARY KEY  (`idTag`),
+					KEY `Tag` (`Tag`)
+			)");
+			$myDB->Query("CREATE TABLE `Lien_Tags_Posts` (
+					`idLien` int(11) NOT NULL auto_increment,
+					`idTag` int(11) NOT NULL default '0',
+					`idMess` int(11) NOT NULL default '0',
+					PRIMARY KEY  (`idLien`),
+					KEY `idTag` (`idTag`),
+					KEY `idMess` (`idMess`)
+			)");
+			$tpl = "Yoopii tout bon au niveau de la base de données :-)";
+			
+			// On va maintenant obtenir quelques renseignements supplémentaires
+			// pour finaliser le fichier de configuration
+			$akismet = $req->Get('akismet');
+			$mail = $req->Get('mail');
+			$dg = $req->Get('default_gravatar');
+			$blog_url = $req->Get('blog_url');
+			$conf = 
+"<?php
+	// Connexion à la base de données
+	define('DB_HOST',     '$db_host');
+	define('DB_USER',     '$db_user');
+	define('DB_PASSWORD', '$db_pass');
+	define('DB_NAME',     '$db_db');
+	
+	// Informations de contact
+	define('BLOG_URL',    '$blog_url');
+	define('ADMIN_MAIL',  '$mail');
+	
+	// Image par défaut des auteurs des commentaires
+	define('BLOG_DEFAULT_GRAVATAR', '$dg');
+	
+	// Clé d'authentification pour l'utilisation du service Akismet
+	define('AKISMET_API_KEY', '$akismet');
+?>
+";
+		}
+		
+		if(!isset($erreur))
+		{
+			if($canWrite)
+			{
+				file_put_contents('includes/config.php', $conf);
+			}
+			else
+			{
+				$tpl = "
+				<p>Ce script ne peut pas écrire dans votre dossier includes/.
+				Par conséquent, il vous faudra de vous même y créer un fichier
+				nommé <strong>config.php</strong> et y copier les lignes
+				suivantes:</p>
+				<pre>" . $conf . "</pre>";
+			}
+		}
+		
+		//3. Génération du fichier .htpass
+		$login = $req->Get('login');
+		$password = $req->Get('password');
+		system("htpasswd -cbm .htpass '$login' '$password'");
+	}
+	else
+	{
+		$url = "http://" . $_SERVER['SERVER_NAME'] . dirname($_SERVER['REQUEST_URI']);
+		$tpl = new Template('install_form.xml');
+		$tpl->setParams(array('#url@value' => $url));
+	}
+	header('Content-Type: text/html; charset=utf-8');
+?>
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Installation</title>
+    <link rel='stylesheet' type='text/css' href='css/install.css' />
+  </head>
+  <body id='Main'>
+    <h1>Installation de votre weblog</h1>
+<?php
+	echo $tpl;
+?>
+  </body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/install_form.xml	Wed Mar 19 12:08:15 2008 +0100
@@ -0,0 +1,54 @@
+<?xml version='1.0' encoding='utf-8'?>
+<form method='POST'
+      action='#'
+      xmlns='http://www.w3.org/1999/xhtml'
+      xmlns:tpl='http://defr.net/2007/template'>
+	<fieldset>
+		<legend>Paramètres MySQL</legend>
+		<dl>
+		  <dt>Nom d'hôte</dt>
+		  <dd><input type='text' name='db_host' /></dd>
+		  <dt>Base de données</dt>
+		  <dd><input type='text' name='db_db' /></dd>
+		  <dt>Nom d'utilisateur</dt>
+		  <dd><input type='text' name='db_user' /></dd>
+		  <dt>Mot de passe</dt>
+		  <dd><input type='text' name='db_pass' /></dd>
+		</dl>
+			</fieldset>
+			<fieldset>
+			<legend>Compte administrateur</legend>
+		<dl>
+				<dt>Nom</dt>
+		  <dd><input type='text' name='login' /></dd>
+		  <dt>Mot de passe</dt>
+		  <dd><input type='text' name='password' /></dd>
+		</dl>
+	</fieldset>
+
+	<fieldset>
+		<legend>Commentaires et anti-spam</legend>
+		<dl>
+		  <dt>Adresse e-mail</dt>
+		  <dd><input type='text' name='mail' /></dd>
+		  <dt>Clé <a href='http://akismet/com'>Akismet</a></dt>
+		  <dd><input type='text' name='akismet' /></dd>
+		  <dt>Avatar par défaut</dt>
+		  <dd><input type='text' name='default_gravatar' /></dd>
+		</dl>
+	</fieldset>
+
+	<fieldset>
+		<legend>Paramètres divers</legend>
+		<dl>
+		  <dt>Adresse de base du weblog</dt>
+		  <dd><input type='text' name='blog_url' tpl:id='url' /></dd>
+		</dl>
+	</fieldset>
+
+	<fieldset>
+		<legend>Valider ?</legend>
+		<input type='submit' id='submit' value='Créer le fichier de configuration' />
+	</fieldset>
+	<input type='hidden' name='postBack' value='1' />
+</form>