Source for file class.siteManage.php
Documentation is available at class.siteManage.php
* Classe siteManage - Gère un site
* 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 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
* @version CVS:$this->id:
* Version lodel du site en cours de traitement
* Répertoire de la version lodel utilisée
* Variable contenant les différentes versions de lodel installées
* Critere de sélection du site requete SQL ("id=$id")
* Regex permettant de trouver s'il existe plusieurs versions de lodel installées
* Base de donnée unique ?
* Nom de la base de données principale
* Téléchargement du fichier siteconfig.php ?
* Instancie un objet de la classe
* @param int $id identifiant du site
* @param array $context le contexte passé par référence
$this->context['id'] = $context['id'] ? $context['id'] : $id;
* Cette fonction renvoit la variable $_v passée en paramètre
* @param var $_v variable à renvoyer
* Cette fonction alloue la valeur $_a à la variable $_v
* @param var $_v variable à modifier
* @param var $_a valeur à allouer
* Restoration d'un site supprimé
* Cette fonction restaure un site préalablement supprimé
mysql_query(lq("UPDATE #_TP_sites SET status=abs(status) WHERE ". $this->critere)) or dberror();
$view->back(); // on revient
* Cette fonction supprime un site
mysql_query(lq("UPDATE #_TP_sites SET status=-abs(status) WHERE ". $this->critere)) or dberror();
$view->back(); // on revient
* Cette fonction retourne la version de lodel du site en cours de traitement
* @param var $dir répertoire à traiter
die("ERROR: internal error while reinstalling every site. dir is $dir");
include ($dir. 'siteconfig.php');
* Réinstallation d'un site
* Cette fonction lance la procédure de réinstallation d'un site
* @param var $dir répertoire à traiter
require_once 'connect.php';
$result = $db->execute(lq("SELECT path,name FROM #_MTP_sites WHERE status>0")) or dberror();
// on peut installer les fichiers
$row['path'] = '/'. $row['name'];
if ($row['path'] == '/') { // c'est un peu sale ca.
require_once 'cachefunc.php';
* Cette fonction permet d'éditer les informations d'un site
//on extrait les variables contenues dans $_POST
//on les alloue à notre contexte
$this->context = $GLOBALS['context'];
$this->context['title'] = 'Site principal';
$this->context['name'] = 'principal';
$this->context['error_title'] = $err = 1;
require_once 'connect.php';
// verifie qu'on a qu'un site si on est en singledatabase
$result = mysql_query ("SELECT COUNT(*) FROM `$GLOBALS[tp]sites` WHERE status>-32 AND name!='". $this->context['name']. "'") or die (mysql_error());
list ($numsite) = mysql_fetch_row($result);
die("ERROR<br />\nIl n'est pas possible actuellement d'avoir plusieurs sites sur une unique base de données : il faut utiliser plusieurs bases de données.");
// édition d'un site : lit les informations options, status, etc.
$result = mysql_query ("SELECT status,name,path FROM `$GLOBALS[tp]sites` WHERE id='". $this->id. "'") or die (mysql_error());
list ($status,$name,$this->context['path']) = mysql_fetch_row($result);
} else { // création d'un site
// vérifie que le nom (base de données + répertoire du site) n'est pas déjà utilisé
$result = mysql_query ("SELECT name FROM `$GLOBALS[tp]sites`") or die (mysql_error());
while ($row = mysql_fetch_array($result)) {
$this->context['error_unique_name'] = $err = 1;
$status = - 32; // -32 signifie en creation
$this->context['url'] = 'http://'. $_SERVER['SERVER_NAME']. ($_SERVER['SERVER_PORT'] ? ':'. $_SERVER['SERVER_PORT'] : ""). preg_replace("/\blodeladmin-?\d*(\.\d*)?\/.*/", '', $_SERVER['REQUEST_URI']). substr($this->context['path'], 1);
//suppression de l'eventuel / a la fin de l'url
// Ajout de slashes pour autoriser les guillemets dans le titre et le sous-titre du site
mysql_query("REPLACE INTO `$GLOBALS[tp]sites` (id,title,name,path,url,subtitle,status) VALUES ('". $this->id. "','". $this->context['title']. "','". $this->context['name']. "','". $this->context['path']. "','". $this->context['url']. "','". $this->context['subtitle']. "','". $status. "')") or die (mysql_error());
$view->back(); // on revient, le site n'est pas en creation
$this->context['id'] = $this->id = mysql_insert_id();
* Versions installées sur le serveur web
* Cette fonction cherche et alloue à la variable $versions les différentes versions installées sur le serveur web
die ("impossible d'acceder en ecriture sur le repertoire racine");
if (!(@include(LODELROOT. "$file/src/siteconfig.php"))) {
echo "ERROR: Unable to open the file: $file/src/siteconfig.php<br />";
* Sélection de la version de lodel à installer
* Cette fonction affiche les différentes versions installées sur le serveur web
* Et permet de choisir celle que l'on veut installer
foreach ($this->versions as $dir => $ver) {
$selected = $this->versiondir == $dir ? "selected=\"selected\"" : '';
echo "<option value=\"$dir\"$selected>$dir ($ver)</option>\n";
* Sélection de notre version de lodel
* Cette fonction sélectionne la version de lodel du site que l'on veut installer
// ok, maintenant on connait les versions
if ($this->context['countversions'] == 1) {// ok, une seule version, on la choisit
} elseif ($this->context['countversions'] == 0) { // aie, aucune version on crach
die ("Verifiez le package que vous avez, il manque le repertoire lodel/src. L'installation ne peut etre poursuivie !");
} else { // il y en a plusieurs, faut choisir
$view->render($this->context, 'site-version');
* Cette fonction installe lodel
* @param var $root chemin de la racine du serveur web
* @param var $homesite chemin du répertoire du site
* @param var $homelodel chemin du répertoire de lodel
@include 'lodelconfig.php';
$file = "$root$homesite/../install/install-fichier.dat"; // homelodel est necessaire pour choper le bon fichier d'install
die("Fichier $file introuvable. Verifiez votre pactage");
$search = array("/\#.*$/", '/\$homesite/', '/\$homelodel/');
$rpl = array ('', $homesite, $homelodel);
foreach ($lines as $line) {
list ($cmd, $arg1, $arg2) = preg_split ("/\s+/", $line);
$dest1 = "$root$dirdest/$arg1";
if ($cmd == 'dirsource') {
} elseif ($cmd == 'dirdestination') {
} elseif ($cmd == 'mkdir') {
if(!@mkdir($arg1, 0777 & octdec($GLOBALS['filemask']))) {
$this->context['error_mkdir'] = $arg1;
$view->render($this->context, 'site-createdir');
} elseif ($cmd == 'ln' && $usesymlink && $usesymlink != 'non') {
if ($dirdest == '.' && $extensionscripts == 'html' && $arg1 != 'lodelconfig.php') {
|