Source for file class.Install.php
Documentation is available at class.Install.php
* Fichier racine de lodeladmin
* LODEL - Logiciel d'Edition ELectronique.
* Copyright (c) 2001-2002, Ghislain Picard, Marin Dacos
* Copyright (c) 2003, Ghislain Picard, Marin Dacos, Luc Santeramo, Nicolas Nutten, Anne Gentil-Beccot
* Copyright (c) 2004, Ghislain Picard, Marin Dacos, Luc Santeramo, Anne Gentil-Beccot, Bruno Cénou
* Copyright (c) 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
* Copyright (c) 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
* Copyright (c) 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
* Home page: http://www.lodel.org
* E-Mail: lodel@lodel.org
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* @author Ghislain Picard
* @author Sophie Malafosse
* @author Pierre-Alain MIGNOT
* @copyright 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
* @copyright 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
* @copyright 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
* @licence http://www.gnu.org/copyleft/gpl.html
* Suffixe de la version de Lodel
* Fichier de configuration Lodel
* Répertoire de la plateforme
* Tableau des répertoires à protéger avec un htaccess
* Instancie un objet de la classe
* @param string $lodelconfig chemin vers fichier lodelconfig temporaire
* @param array $context le contexte passé par référence
function Install($lodelconfig, $have_chmod, $plateformdir)
* Cette fonction renvoit la variable $var passée en paramètre
* @param var $var variable à renvoyer
* Cette fonction alloue la valeur $valeur à la variable $var
* @param var $var variable à modifier
* @param var $valeur valeur à allouer
function set($var, $valeur)
* Test connexion à la base de données
* Cette fonction tente de se connecter à la base de données, met le charset par defaut et identifie l'utilisateur
* comme administrateur si jamais il existe un enregistrement dans la table username
require_once "../lodel". $this->versionsuffix. "/scripts/auth.php";
if (@mysql_connect($dbhost,$dbusername,$dbpasswd)) {
@mysql_select_db($database);
// test whether we access to a DB and whether the table users exists or not and whether it is empty or not.
$result= mysql_query("SELECT username FROM `". $tableprefix. "users` LIMIT 0,1");
if ($result && mysql_num_rows($result)> 0)
// well, no access to the DB but a lodelconfig ?
// ask for erasing the lodelconfig.php ?
$this->problem("lodelconfig_but_no_database");
if ($_REQUEST['installoption']) $installoption= $_REQUEST['installoption']; // overwrite the lodelconfig
* Installation de la configuration
* Cette fonction copie le fichier de configuration dans le CACHE, chmod et MAJ de celui-ci
* @param int $installoptions option d'installation (1 = monosite, 2 = multisite)
* @param string $testfile fichier sur lequel deviner filemask
// essai de copier ce fichier dans le CACHE
// the installer has been use, let's chmod safely
$chmod= 0600; // c'est plus sur, surtout a cause du mot de passe sur la DB qui apparaitra dans ce fichier.
die("ERROR: ". $this->lodelconfigplatform. " does not exist. Internal error, please report this bug.");
$arr['installoption']= intval($installoptions);
$me= $_SERVER['PHP_SELF'];
if ($urlroot== $me) die("ERROR: the install.php script is not at the right place, please report this bug.");
if (LODELROOT!= "../") die("ERROR: the lodeladmin directory has been moved, please report this bug.");
$arr['urlroot']= $urlroot. "/";
if ($_REQUEST['filemask']) {
$arr['filemask']= "0". $_REQUEST['filemask'];
// was in the previous lodelconfig.php
$arr['filemask']= $GLOBALS['filemask'];
if (preg_match("/^\w{2}(-\w{2})?$/",$_REQUEST['lang'])) {
$arr['installlang']= $this->installlang= $_REQUEST['lang'];
if ($installoptions== 1) {
// try to guess the options.
$arr['unzipcmd']= $arr['zipcmd']= "pclzip";
$arr['unzipcmd']= $arr['zipcmd']= "";
if ($installoptions== 1) $arr['extensionscripts']= "php";
$arr['chooseoptions']= $needoptions && $installoptions== 1 ? "oui" : "non";
* Mise à jour configuration base de données
* Cette fonction met à jour les informations de connexion au serveur de base de données dans le fichier de configuration
* @param string $newdbusername identifiant
* @param string $newdbpasswd mot de passe
* @param string $newdbhost adresse du serveur
function majConfDB($newdbusername, $newdbpasswd, $newdbhost)
$this->maj_lodelconfig(array("dbusername"=> $newdbusername, "dbpasswd"=> $newdbpasswd, "dbhost"=> $newdbhost));
* Installation base de données
* Cette fonction s'occupe de l'installation de la base de données
* @param string $erasetables on efface les tables d'une base de données existante ?
* @param string $singledatabase est-on en mode base de données unique ?
* @param string $newdatabase nom de la base de données
* @param string $newsingledatabase
* @param string $newtableprefix prefixe des tables pour installation multi site
* @param string $createdatabase on crée la base de données ou pas ?
* @param string $existingdatabase on utilise une base existante ?
function manageDB($erasetables, $singledatabase, $newdatabase, $newsingledatabase, $newtableprefix, $createdatabase, $existingdatabase)
@include($this->lodelconfig); // insert the lodelconfig. Should not be a problem.
@mysql_connect($dbhost,$dbusername,$dbpasswd); // connect
/*$version_mysql_num = explode(".", substr(mysql_get_server_info(), 0, 3));
if ($version_mysql_num[0].$version_mysql_num[1] > 40)
{ mysql_query('SET NAMES UTF8'); }*/
@mysql_select_db($database); // selectionne la database
// erase the table of each site
$result= mysql_query("SELECT name FROM ". $tableprefix. "sites") or die (mysql_error());
// currently singledatabase implies single site ! That's shame but...
// Let's destroyed everything in the database with the prefix !
// we can't destroy... too dangerous. Should find another solution.
die("Sans tableprefix les tables ne peuvent pas etre efface en toute securite. Veuillez effacer vous-même les tables de Lodel. Merci.");
$result= mysql_list_tables($database);
while ($row = mysql_fetch_row($result)) {
mysql_query("DROP TABLE $row[0]");
die(utf8_encode("<p>L'effacement des tables avec plusieurs bases de données n'est pas implementé. Veuillez effacer les bases de données vous même. Merci.</p>"));
// erase the main tables below.
@include($this->lodelconfig); // insert the lodelconfig. Should not be a problem.
$set['singledatabase']= $newsingledatabase ? "on" : "";
$set['tableprefix']= $newtableprefix;
if ($newdatabase==- 1) $newdatabase= $existingdatabase;
$newdatabase= $createdatabase;
$set['database']= $newdatabase;
if ($createdatabase) { // il faut creer la database
@include($this->lodelconfig); // insere lodelconfig, normalement pas de probleme
@mysql_connect($dbhost,$dbusername,$dbpasswd); // connect
$version_mysql_num = explode(".", substr(mysql_get_server_info(), 0, 3));
if ($version_mysql_num[0]. $version_mysql_num[1] > 40) {
mysql_query('SET NAMES UTF8');
$db_charset = 'CHARACTER SET utf8 COLLATE utf8_general_ci';
if (!@mysql_query("CREATE DATABASE $createdatabase $db_charset")) {
// check whether the database contains something. If so, we just ask what to do
// @mysql_connect($dbhost,$dbusername,$dbpasswd); // connect
// if(@mysql_select_db($newdatabase)){
* Création administrateur
* Cette fonction permet de créer le premier utilisateur (administrateur)
* @param string $adminusername login
* @param string $adminpasswd mot de passe premier input du formulaire
* @param string $adminpasswd2 mot de passe deuxieme input du formulaire
* @param string $lang langue par défaut pour l'utilisateur créé
* @param string $site site lié à l'utilisation en cours de création
function manageAdmin($adminusername, $adminpasswd, $adminpasswd2, $lang, $site)
@include($this->lodelconfig); // insere lodelconfig, normalement pas de probleme
if(empty($adminusername) || empty($adminpasswd)) {
if (strlen($adminpasswd) < 3 || strlen($adminpasswd) > 255 || !preg_match("/^[0-9A-Za-z_;.?!@:,&]+$/", $adminpasswd)) {
if ($adminpasswd2 != $adminpasswd) {
return "error_confirmpasswd";
if (!$home) die("ERROR: \$home is not defined");
@mysql_connect($dbhost,$dbusername,$dbpasswd); // connect
/*$version_mysql_num = explode(".", substr(mysql_get_server_info(), 0, 3));
if ($version_mysql_num[0].$version_mysql_num[1] > 40) {
mysql_query('SET NAMES UTF8');
@mysql_select_db($database); // selectionne la database
$pass= md5($adminpasswd. $adminusername);
if (!preg_match("/^\w{2}(-\w{2})?/",$lang)) die("ERROR: invalid lang");
if (!@mysql_query("REPLACE INTO ". $tableprefix. "users (username,passwd,email,userrights,lang) VALUES ('$adminusername','$pass','',128,'$lang')")) {
* Cette fonction installe les .htaccess dans les répertoires contenus dans la variable privée protecteddir
* @param string $write Lodel installe lui même les htaccess ?
* @param string $nohtaccess pas de htaccess ?
fputs($file,"deny from all\n");
return $erreur_htaccesswrite;
* Mise à jour des informations du site
* Cette fonction met à jour le fichier de configuration du site en cours d'installation
* @param string $newurlroot url vers répertoire racine de lodel
* @param string $permission permissions
* @param string $pclzip utilisation de pclzip ?
* @param string $newimportdir chemin vers répertoire 'import'
* @param string $newextensionscripts extension du script à afficher (.php ou .html ?)
* @param string $newusesymlink utilisation des liens symboliques ?
* @param string $newcontactbug adresse mail à contacter en cas de bug
* @param string $newunzipcmd commande unzip spécifiée par l'utilisateur
* @param string $newzipcmd commande zip spécifiée par l'utilisateur
* @param string $newuri type d'url affichée
function maj_options($newurlroot, $permission, $pclzip, $newimportdir, $newextensionscripts, $newusesymlink, $newcontactbug, $newunzipcmd, $newzipcmd, $newuri)
$newurlroot = $newurlroot. "/"; // ensure their is a / at the end
$newurlroot = preg_replace("/\/\/+/","/",$newurlroot); // ensure there is no double slashes because it causes problem with the cookies
$filemask = "07" . (5* ($permission[group][read]!= "")+ 2* ($permission[group][write]!= "")) . (5* ($permission[all][read]!= "")+ 2* ($permission[all][write]!= ""));
if ($pclzip== "pclzip") { $newunzipcmd= $newzipcmd= "pclzip"; }
"importdir"=> $newimportdir,
"extensionscripts"=> $newextensionscripts,
"usesymlink"=> $newusesymlink,
"contactbug"=> $newcontactbug,
"unzipcmd"=> $newunzipcmd,
* Téléchargement de lodelconfig.php
* Cette fonction lance le téléchargement du fichier de configuration du site
* @param string $logversion version navigateur
header("Content-type: application/force-download");
|