defr/DualBlog

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 Mar 19 12:08:15 2008 +0100 (2008-03-19)
parents d67a65183100
children 464f4b94ee27
files css/install.css install.php templates/install_form.xml
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/css/install.css	Wed Mar 19 12:08:15 2008 +0100
     1.3 @@ -0,0 +1,46 @@
     1.4 +html   {background: #eee; font-family: sans-serif; }
     1.5 +h1     {font-size: 1.1em; text-align: center; margin:0; padding:10px;}
     1.6 +legend {font-style: italic;}
     1.7 +body  {
     1.8 +	margin: 0 30px;
     1.9 +	background:#fff;
    1.10 +	border:#999 solid;
    1.11 +	border-width: 0 2px;
    1.12 +	padding: 0 5px 5px;
    1.13 +}
    1.14 +
    1.15 +input {
    1.16 +	font-size: 1em;
    1.17 +	border: #dec solid;
    1.18 +	border-width: 1px 1px 1px 4px;
    1.19 +	background: url(Res_Somatic/bg_test.png) repeat 0% 0%;
    1.20 +	width: 100%;
    1.21 +}
    1.22 +
    1.23 +input:not(:focus) {
    1.24 +	opacity: 0.7;
    1.25 +	color: #666;
    1.26 +}
    1.27 +
    1.28 +input:focus {
    1.29 +	opacity: 1;
    1.30 +	background: #fff;
    1.31 +}
    1.32 +
    1.33 +fieldset {
    1.34 +	-moz-border-radius: 1.5em;
    1.35 +	min-width: 10em;
    1.36 +	max-width: 30em;
    1.37 +	width: 90%;
    1.38 +	margin-bottom: 15px;
    1.39 +}
    1.40 +
    1.41 +
    1.42 +#submit {
    1.43 +	opacity: 1;
    1.44 +	margin: 15px auto;
    1.45 +	display: block;
    1.46 +	border-width: 1px 3px;
    1.47 +	font-weight: bold;
    1.48 +	background: #fff;
    1.49 +}
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/install.php	Wed Mar 19 12:08:15 2008 +0100
     2.3 @@ -0,0 +1,149 @@
     2.4 +<?php
     2.5 +	require_once "classes.php";
     2.6 +	$req = new Requete();
     2.7 +	$pB = $req->Get('postBack', 'POST', false);
     2.8 +	$canWrite = is_writable('includes');
     2.9 +	if(file_exists('includes/config.php'))
    2.10 +	{
    2.11 +		$tpl = '<p>Un fichier de configuration a déja été crée. Par mesure
    2.12 +		de sécurité, il est necessaire de supprimer manuellement ce fichier 
    2.13 +		avant de pouvoir tenter une nouvelle installation</p>';
    2.14 +	}
    2.15 +	else if($pB)
    2.16 +	{
    2.17 +		// 1. Vérification des identifiants MySQL, création des tables
    2.18 +		$db_host = $req->Get('db_host');
    2.19 +		$db_user = $req->Get('db_user');
    2.20 +		$db_pass = $req->Get('db_pass');
    2.21 +		$db_db = $req->Get('db_db');
    2.22 +		$myDB = new DataAccess($db_host, $db_user, $db_pass, $db_db);
    2.23 +		if($myDB->isInError())
    2.24 +		{
    2.25 +			if($myDB->link === false)
    2.26 +				$erreur = "Le triplet (hôte, identifiant, mot de passe) est erroné)";
    2.27 +			else
    2.28 +				$erreur = "La base de données mentionné n'existe pas";
    2.29 +				
    2.30 +			$tpl = $erreur;
    2.31 +		}
    2.32 +		else
    2.33 +		{
    2.34 +			// Requete de créations des 5 tables.
    2.35 +			$myDB->Query("CREATE TABLE Brouillons(
    2.36 +					id_brouillon INTEGER NOT NULL auto_increment,
    2.37 +					Titre VARCHAR(70),
    2.38 +					Contenu TEXT,
    2.39 +					PRIMARY KEY (id_brouillon)
    2.40 +			)");
    2.41 +			$myDB->Query("CREATE TABLE `Commentaires` (
    2.42 +					`num_comm` int(11) NOT NULL auto_increment,
    2.43 +					`MessId` int(11) NOT NULL default '0',
    2.44 +					`Auteur` varchar(60) NOT NULL default '',
    2.45 +					`Adresse` varchar(150) NOT NULL default '',
    2.46 +					`AdresseMail` varchar(60) default NULL,
    2.47 +					`Comment` mediumtext NOT NULL,
    2.48 +					`DateComment` datetime default '0000-00-00 00:00:00',
    2.49 +					`isTrackback` tinyint(4) NOT NULL default '0',
    2.50 +					`ip` varchar(25) NOT NULL default '',
    2.51 +					`Visible` tinyint(4) NOT NULL default '1',
    2.52 +					PRIMARY KEY  (`num_comm`),
    2.53 +					KEY `Visible` (`Visible`),
    2.54 +					KEY `Parent` (`MessId`)
    2.55 +			)");
    2.56 +			$myDB->Query("CREATE TABLE `Mess` (
    2.57 +					`num_mess` int(11) NOT NULL auto_increment,
    2.58 +					`Titre` varchar(70) NOT NULL default '',
    2.59 +					`DatePost` datetime NOT NULL default '0000-00-00 00:00:00',
    2.60 +					`num_version` varchar(30) NOT NULL default '0',
    2.61 +					`NbCommentaires` smallint(6) NOT NULL default '0',
    2.62 +					`Message` longtext NOT NULL,
    2.63 +					`CommentOpen` tinyint(1) NOT NULL default '0',
    2.64 +					`Emot` varchar(20) default NULL,
    2.65 +					PRIMARY KEY  (`num_mess`)
    2.66 +			)");
    2.67 +			$myDB->Query("CREATE TABLE `Tags` (
    2.68 +					`idTag` int(11) NOT NULL auto_increment,
    2.69 +					`Tag` varchar(25) NOT NULL default '',
    2.70 +					PRIMARY KEY  (`idTag`),
    2.71 +					KEY `Tag` (`Tag`)
    2.72 +			)");
    2.73 +			$myDB->Query("CREATE TABLE `Lien_Tags_Posts` (
    2.74 +					`idLien` int(11) NOT NULL auto_increment,
    2.75 +					`idTag` int(11) NOT NULL default '0',
    2.76 +					`idMess` int(11) NOT NULL default '0',
    2.77 +					PRIMARY KEY  (`idLien`),
    2.78 +					KEY `idTag` (`idTag`),
    2.79 +					KEY `idMess` (`idMess`)
    2.80 +			)");
    2.81 +			$tpl = "Yoopii tout bon au niveau de la base de données :-)";
    2.82 +			
    2.83 +			// On va maintenant obtenir quelques renseignements supplémentaires
    2.84 +			// pour finaliser le fichier de configuration
    2.85 +			$akismet = $req->Get('akismet');
    2.86 +			$mail = $req->Get('mail');
    2.87 +			$dg = $req->Get('default_gravatar');
    2.88 +			$blog_url = $req->Get('blog_url');
    2.89 +			$conf = 
    2.90 +"<?php
    2.91 +	// Connexion à la base de données
    2.92 +	define('DB_HOST',     '$db_host');
    2.93 +	define('DB_USER',     '$db_user');
    2.94 +	define('DB_PASSWORD', '$db_pass');
    2.95 +	define('DB_NAME',     '$db_db');
    2.96 +	
    2.97 +	// Informations de contact
    2.98 +	define('BLOG_URL',    '$blog_url');
    2.99 +	define('ADMIN_MAIL',  '$mail');
   2.100 +	
   2.101 +	// Image par défaut des auteurs des commentaires
   2.102 +	define('BLOG_DEFAULT_GRAVATAR', '$dg');
   2.103 +	
   2.104 +	// Clé d'authentification pour l'utilisation du service Akismet
   2.105 +	define('AKISMET_API_KEY', '$akismet');
   2.106 +?>
   2.107 +";
   2.108 +		}
   2.109 +		
   2.110 +		if(!isset($erreur))
   2.111 +		{
   2.112 +			if($canWrite)
   2.113 +			{
   2.114 +				file_put_contents('includes/config.php', $conf);
   2.115 +			}
   2.116 +			else
   2.117 +			{
   2.118 +				$tpl = "
   2.119 +				<p>Ce script ne peut pas écrire dans votre dossier includes/.
   2.120 +				Par conséquent, il vous faudra de vous même y créer un fichier
   2.121 +				nommé <strong>config.php</strong> et y copier les lignes
   2.122 +				suivantes:</p>
   2.123 +				<pre>" . $conf . "</pre>";
   2.124 +			}
   2.125 +		}
   2.126 +		
   2.127 +		//3. Génération du fichier .htpass
   2.128 +		$login = $req->Get('login');
   2.129 +		$password = $req->Get('password');
   2.130 +		system("htpasswd -cbm .htpass '$login' '$password'");
   2.131 +	}
   2.132 +	else
   2.133 +	{
   2.134 +		$url = "http://" . $_SERVER['SERVER_NAME'] . dirname($_SERVER['REQUEST_URI']);
   2.135 +		$tpl = new Template('install_form.xml');
   2.136 +		$tpl->setParams(array('#url@value' => $url));
   2.137 +	}
   2.138 +	header('Content-Type: text/html; charset=utf-8');
   2.139 +?>
   2.140 +<!DOCTYPE html>
   2.141 +<html>
   2.142 +  <head>
   2.143 +    <title>Installation</title>
   2.144 +    <link rel='stylesheet' type='text/css' href='css/install.css' />
   2.145 +  </head>
   2.146 +  <body id='Main'>
   2.147 +    <h1>Installation de votre weblog</h1>
   2.148 +<?php
   2.149 +	echo $tpl;
   2.150 +?>
   2.151 +  </body>
   2.152 +</html>
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/templates/install_form.xml	Wed Mar 19 12:08:15 2008 +0100
     3.3 @@ -0,0 +1,54 @@
     3.4 +<?xml version='1.0' encoding='utf-8'?>
     3.5 +<form method='POST'
     3.6 +      action='#'
     3.7 +      xmlns='http://www.w3.org/1999/xhtml'
     3.8 +      xmlns:tpl='http://defr.net/2007/template'>
     3.9 +	<fieldset>
    3.10 +		<legend>Paramètres MySQL</legend>
    3.11 +		<dl>
    3.12 +		  <dt>Nom d'hôte</dt>
    3.13 +		  <dd><input type='text' name='db_host' /></dd>
    3.14 +		  <dt>Base de données</dt>
    3.15 +		  <dd><input type='text' name='db_db' /></dd>
    3.16 +		  <dt>Nom d'utilisateur</dt>
    3.17 +		  <dd><input type='text' name='db_user' /></dd>
    3.18 +		  <dt>Mot de passe</dt>
    3.19 +		  <dd><input type='text' name='db_pass' /></dd>
    3.20 +		</dl>
    3.21 +			</fieldset>
    3.22 +			<fieldset>
    3.23 +			<legend>Compte administrateur</legend>
    3.24 +		<dl>
    3.25 +				<dt>Nom</dt>
    3.26 +		  <dd><input type='text' name='login' /></dd>
    3.27 +		  <dt>Mot de passe</dt>
    3.28 +		  <dd><input type='text' name='password' /></dd>
    3.29 +		</dl>
    3.30 +	</fieldset>
    3.31 +
    3.32 +	<fieldset>
    3.33 +		<legend>Commentaires et anti-spam</legend>
    3.34 +		<dl>
    3.35 +		  <dt>Adresse e-mail</dt>
    3.36 +		  <dd><input type='text' name='mail' /></dd>
    3.37 +		  <dt>Clé <a href='http://akismet/com'>Akismet</a></dt>
    3.38 +		  <dd><input type='text' name='akismet' /></dd>
    3.39 +		  <dt>Avatar par défaut</dt>
    3.40 +		  <dd><input type='text' name='default_gravatar' /></dd>
    3.41 +		</dl>
    3.42 +	</fieldset>
    3.43 +
    3.44 +	<fieldset>
    3.45 +		<legend>Paramètres divers</legend>
    3.46 +		<dl>
    3.47 +		  <dt>Adresse de base du weblog</dt>
    3.48 +		  <dd><input type='text' name='blog_url' tpl:id='url' /></dd>
    3.49 +		</dl>
    3.50 +	</fieldset>
    3.51 +
    3.52 +	<fieldset>
    3.53 +		<legend>Valider ?</legend>
    3.54 +		<input type='submit' id='submit' value='Créer le fichier de configuration' />
    3.55 +	</fieldset>
    3.56 +	<input type='hidden' name='postBack' value='1' />
    3.57 +</form>