Subversion Repositories Applications.papyrus

Compare Revisions

Ignore whitespace Rev 753 → Rev 754

/trunk/papyrus/applications/admin_site/bibliotheque/adsi_site.fonct.php
19,7 → 19,7
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: adsi_site.fonct.php,v 1.25 2005-10-17 13:48:59 jp_milcent Exp $
// CVS : $Id: adsi_site.fonct.php,v 1.26 2006-03-02 10:49:49 ddelon Exp $
/**
* Bibliothèque de fonctions d'admininistration des projets
*
34,7 → 34,7
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Laurent COUDOUNEAU <lc@gsite.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.25 $ $Date: 2005-10-17 13:48:59 $
*@version $Revision: 1.26 $ $Date: 2006-03-02 10:49:49 $
// +------------------------------------------------------------------------------------------------------+
*/
 
60,17 → 60,132
*/
function ADMIN_afficherFormListeSites(&$db, $url, $message = '')
{
// Liste des sites principaux
$id_langue = $GLOBALS['_GEN_commun']['i18n']; //identifiant de la langue choisie
// Langue en cours : langue choisie ou langue par defaut (principale)
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
 
// Liste des sites principaux :
// Recherche de tous les sites langue en cours
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_site_01 = gs_id_site '.
'AND gsr_id_valeur IN (102, 103) '.
'AND gs_ce_i18n = "'.$langue_test.'" '.
'ORDER BY gsr_ordre';
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$liste_site=array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
if ($langue_test == GEN_I18N_ID_DEFAUT) {
$requete_est_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_02 ' .
'AND gsr_id_site_01 <> gsr_id_site_02 ' .
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_est_traduction = $db->query($requete_est_traduction);
(DB::isError($resultat_est_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
: '';
if ( $resultat_est_traduction->numRows() == 0 ) {
$liste_site[]=$ligne;
}
}
else {
$liste_site[]=$ligne;
}
}
$resultat->free();
// Si la langue en cours n'est pas la langue par défaut, recherche des sites ayant comme langue
// la langue par defaut, non traduits dans la langue en cours et n'etant pas des traductions
if ($langue_test != GEN_I18N_ID_DEFAUT) {
 
$requete = 'SELECT * '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gs_id_site = gsr_id_site_01 '.
'AND gsr_id_valeur IN (102, 103) '.
'AND gs_ce_i18n = "'.GEN_I18N_ID_DEFAUT.'" '.
'ORDER BY gs_code_num ASC';// 102 = site "principal" et 103 = site "externe"
$resultat = $db->query($requete);
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
// Recherche de tous les sites de la langue principale qui ne sont pas traduits dans la langue en cours
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$requete_est_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_02 ' .
'AND gsr_id_site_01 <> gsr_id_site_02 ' .
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_est_traduction = $db->query($requete_est_traduction);
(DB::isError($resultat_est_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_est_traduction->getMessage(), $requete_est_traduction))
: '';
if ( $resultat_est_traduction->numRows() == 0 ) {
if (isset($id_langue) && ($id_langue!='')) {
$langue_test=$id_langue;
} else {
$langue_test=GEN_I18N_ID_DEFAUT;
}
$requete_traduction = 'SELECT gsr_id_site_01 '.
'FROM gen_site_relation, gen_site '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_01 ' .
'AND gsr_id_site_02 = gs_id_site '.
'AND gs_ce_i18n = "'.$langue_test.'" '.
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_traduction = $db->query($requete_traduction);
(DB::isError($resultat_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
: '';
if ( $resultat_traduction->numRows() == 0 ) {
$liste_site []=$ligne;
}
$resultat_traduction->free();
}
$resultat_est_traduction->free();
}
$resultat->free();
}
//----------------------------------------------------------------------------
// Création du formulaire
$form =& new HTML_QuickForm('form_sites', 'post', str_replace('&amp;', '&', $url));
89,8 → 204,26
$form->addElement('html', $partie_site_debut);
$aso_options = array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
foreach ($liste_site as $ligne ) {
$aso_options[$ligne->gs_id_site] = htmlentities($ligne->gs_nom.' ('.$ligne->gs_code_alpha.')');
// Affichage des traductions
$requete_traduction = 'SELECT * '.
'FROM gen_site_relation, gen_site '.
'WHERE '.$ligne->gs_id_site.' = gsr_id_site_01 ' .
'AND gsr_id_site_02 <> gsr_id_site_01 '.
'AND gsr_id_site_02 = gs_id_site '.
'AND gsr_id_valeur = 1 ';// 1 = "avoir traduction"
$resultat_traduction = $db->query($requete_traduction);
(DB::isError($resultat_traduction))
? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction))
: '';
while ($ligne_traduction = $resultat_traduction->fetchRow(DB_FETCHMODE_OBJECT)) {
$aso_options[$ligne_traduction->gs_id_site] = '&nbsp;&nbsp;&nbsp;'.$ligne_traduction->gs_ce_i18n.":&nbsp;".htmlentities($ligne_traduction->gs_nom.' ('.$ligne_traduction->gs_code_alpha.')');
}
$resultat_traduction->free();
}
$resultat->free();
115,6 → 248,11
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = 'Modifier';
$form->addElement('submit', $id, $label, $aso_attributs);
 
$id = 'form_sites_traduire';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++);
$label = 'Traduire';
$form->addElement('submit', $id, $label, $aso_attributs);
$id = 'form_sites_supprimer';
$aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'onclick' => 'javascript:return confirm(\''.'Êtes vous sûr de vouloir supprimer ce site ?'.'\');');
168,22 → 306,57
// Initialisation des valeurs
$sortie = '';
$aso_valeurs['modification'] = false;
$aso_valeurs['traduction'] = false;
$aso_valeurs['defaut'] = false;
$aso_valeurs['type_site_externe'] = 0;
// Nous cherchons à savoir si nous somme en modification
if (isset($aso_valeurs['form_sites_modifier'])) {
$site_id = $aso_valeurs['form_sites_id_site'];
// Requete pour récupérer les informations sur le site à modifier
$requete = 'SELECT * '.
'FROM gen_site '.
'WHERE gs_id_site = '.$site_id;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$aso_valeurs = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$resultat->free();
if ((isset($aso_valeurs['form_sites_modifier'])) || (isset($aso_valeurs['form_sites_traduire']))) {
if ((isset($aso_valeurs['form_sites_modifier']))) {
$as_val['modification'] = true;
}
else {
$as_val['traduction'] = true;
};
if ($as_val['traduction']) {
// Traduction d'un site principal uniquement :
$requete = 'SELECT * '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_02 = '.$aso_valeurs['form_sites_id_site'].' '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
if ( $resultat->numRows() == 0 ) {
$site_id = $aso_valeurs['form_sites_id_site'];
}
else {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$site_id = $ligne->gsr_id_site_01;
}
$resultat->free();
}
else {
$site_id = $aso_valeurs['form_sites_id_site'];
}
// Requete pour récupérer les informations sur le site à modifier
$requete = 'SELECT * '.
'FROM gen_site '.
'WHERE gs_id_site = '.$site_id;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$aso_valeurs = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$site_ligne = $aso_valeurs;
$resultat->free();
// Requete pour récupérer les informations issues des relations du site à modifier
$requete = 'SELECT * '.
'FROM gen_site_relation '.
207,7 → 380,15
}
$resultat->free();
$aso_valeurs['modification'] = true;
if (($as_val['modification'])) {
$aso_valeurs['modification'] = true;
}
else {
$aso_valeurs['traduction'] = true;
};
} else if (isset($aso_valeurs['gs_id_site'])) {
$aso_valeurs['modification'] = true;
}
215,7 → 396,7
//$GLOBALS['_DEBOGAGE_'] .= '<pre>'.print_r($aso_valeurs, true).'</pre>';
//-------------------------------------------------------------------------------------------------------------------
// Information précédent le formulaire (en modification)
if (isset($aso_valeurs['modification'])&&isset($aso_valeurs['gs_id_site'])) {
if ((isset($aso_valeurs['modification'])||isset($aso_valeurs['traduction']))&&isset($aso_valeurs['gs_id_site'])) {
$sortie .= '<p>'.'Identifiant de ce site : '.'<span id="adsi_site_id">'.$aso_valeurs['gs_id_site'].'</span></p>'."\n";
}
//-------------------------------------------------------------------------------------------------------------------
240,8 → 421,10
$partie_site_debut = '<fieldset>'."\n".'<legend>Configuration du site</legend>'."\n".'<ul>'."\n";
$form->addElement('html', $partie_site_debut);
if ($aso_valeurs['modification']) {
if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {
$form->addElement('hidden', 'gs_id_site');
$form->addElement('hidden', 'modification');
$form->addElement('hidden', 'traduction');
}
$id = 'gs_nom';
292,9 → 475,9
$label = '<label for="'.$id.'">'.'Identification : '.'</label>';
$form->addElement('select', $id, $label, $aso_options, $aso_attributs);
// En modification nous affichons la liste des squelettes disponiblent dans
// En modification nous affichons la liste des squelettes disponibles dans
// le dossier du site.
if ($aso_valeurs['modification']) {
if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {
$aso_options = array();
if (!GEN_FTP_UTILISE) {
$chemin_squelettes = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
350,8 → 533,48
}
// Requete pour connaitre les internationalisation dispo
$requete = 'SELECT * '.
'FROM gen_i18n ';
if (!$aso_valeurs['modification'] && !$aso_valeurs['traduction']) {
$requete = 'SELECT * '.
'FROM gen_i18n ';
}
else {
if ($aso_valeurs['traduction']) {
// Recherche liste des sites deja traduits
$requete = 'SELECT distinct gs_ce_i18n '.
'FROM gen_site_relation, gen_site '.
'WHERE gsr_id_site_01 = ' .$site_ligne['gs_id_site'] .' '.
'AND gs_id_site = gsr_id_site_02 '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$not_in_langue='';
if ( $resultat->numRows() == 0 ) {
$not_in_langue="gi_id_i18n not in('".$site_ligne['gs_ce_i18n']."')";
}
else {
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$not_in_langue="'".$ligne->gs_ce_i18n."'".",".$not_in_langue;
$end="'".$ligne->gs_ce_i18n."'";
}
$not_in_langue=' gi_id_i18n not in('.$not_in_langue.$end.')';
}
$resultat->free();
$requete = "SELECT * FROM gen_i18n where ".$not_in_langue;
}
else
{
$requete = "SELECT * FROM gen_i18n where gi_id_i18n =('".$site_ligne['gs_ce_i18n']."')";
}
}
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
398,8 → 621,8
$form->addElement('html', $partie_entete_debut);
$id = 'gs_titre';
$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => 'titre du site');
$label = '<label for="'.$id.'">'.'Titre du site : '.'</label>';
$aso_attributs = array('id'=>$id, 'tabindex' => $tab_index++, 'size' => 45, 'maxlength' => 255, 'value' => ADSI_TITRE_SITE);
$label = '<label for="'.$id.'">'.ADSI_TITRE_SITE.' : '.'</label>';
$form->addElement('text', $id, $label, $aso_attributs);
$form->addRule('gs_titre', 'Un titre est requis pour le site !', 'required', '', 'client');
428,7 → 651,7
$partie_entete_fin = '</ul>'."\n".'</fieldset>'."\n";
$form->addElement('html', $partie_entete_fin);
if ($aso_valeurs['modification']) {
if ($aso_valeurs['modification'] || $aso_valeurs['traduction']) {
// Requete pour connaitre les informations sur l'administrateur ayant fait la dernière modif
$requete_admin = 'SELECT * '.
'FROM gen_annuaire '.
447,9 → 670,15
}
// Titre de la page:
$titre = 'Modifier un site';
// Bouton validant le formulaire
$bouton_validation = '<input type="submit" id="site_modifier" name="site_modifier" value="Enregistrer" />';
if ($aso_valeurs['modification']) {
$titre = 'Modifier un site';
$bouton_validation = '<input type="submit" id="site_modifier" name="site_modifier" value="Enregistrer" />';
}
else {
$titre = 'Traduire un site';
$bouton_validation = '<input type="submit" id="site_traduire" name="site_traduire" value="Enregistrer" />';
}
} else {
// Titre de la page:
$titre = 'Ajouter un site';
515,28 → 744,40
$message .= '<p class="pap_erreur">Le champ "Code numérique" doit contenir un nombre.</p>';
}
// Requete pour vérifier l'abscence du code numérique et alphanumérique de la table gen_site
$requete = 'SELECT gs_code_alpha, gs_code_num '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_site_01 = gs_id_site '.
'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
$requete .= (isset($aso_valeurs['gs_id_site'])) ? 'AND gs_id_site != '.$aso_valeurs['gs_id_site'] : '';
// Requete pour vérifier l'absence du code numérique et alphanumérique de la table gen_site
// en mode creation uniquement !
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
if (!$aso_valeurs['site_modifier'] && !$aso_valeurs['site_traduire'] ) {
$requete = 'SELECT gs_code_alpha, gs_code_num '.
'FROM gen_site, gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_site_01 = gs_id_site '.
'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
$requete .= (isset($aso_valeurs['gs_id_site'])) ? 'AND gs_id_site != '.$aso_valeurs['gs_id_site'] : '';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
if ($ligne->gs_code_num == $aso_valeurs['gs_code_num']) {
$message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_num'].'" pour le champ "Code numérique" existe déjà.</p>';
}
if ($ligne->gs_code_alpha == $aso_valeurs['gs_code_alpha']) {
$message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_alpha'].'" pour le champ "Code alphanumérique" existe déjà.</p>';
}
}
$resultat->free();
}
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ) {
if ($ligne->gs_code_num == $aso_valeurs['gs_code_num']) {
$message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_num'].'" pour le champ "Code numérique" existe déjà.</p>';
}
if ($ligne->gs_code_alpha == $aso_valeurs['gs_code_alpha']) {
$message .= '<p class="pap_erreur">La valeur "'.$aso_valeurs['gs_code_alpha'].'" pour le champ "Code alphanumérique" existe déjà.</p>';
}
else {
// Refuser si plus de traduction disponible !
}
$resultat->free();
if (empty($aso_valeurs['gs_titre'])) {
$message .= '<p class="pap_erreur">Le champ "Titre" ne doit pas être vide.</p>';
797,6 → 1038,305
return $message;
}
 
/** Fonction ADMIN_traduireSite() - Traduire un site papyrus
*
* Cette fonction traduit un site à Papyrus, c'est à dire :
* - 1. Création des répertoire du projet en fonction du nom et des sous-répertoires.
* - 2. Insertion d'une ligne dans la table "gen_site".
* - 3. Insertion d'une ligne dans la table "gen_site_auth" et ses tables liées si nécessaire.
*
* @param string l'objet pear de connexion à la base de données.
* @param string le tableau contenant les valeurs du formulaire.
* @param int identifiant de l'administrateur réalisant cette création.
* @return string retourne un message en cas de succès ou d'échec.
*/
function ADMIN_traduireSite(&$db, $aso_valeurs, $id_admin)
{
// Nous vérifions si nous avons à faire à un site externe.
$id_type_site = '102';// par défaut on considére que c'est un site "principal"
if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
$id_type_site = '103';// c'est un site "externe"
}
// Ajout des répertoires des sites "principaux" soit par manipulation de fichier soit par FTP en fonction de la constante définie
// par l'utilisateur dans le fichier de config avancée.
$tab_rep_langue = array(GEN_DOSSIER_GENERIQUE, $aso_valeurs['gs_ce_i18n']);
$tab_rep_site = array( GEN_DOSSIER_IMAGE,
GEN_DOSSIER_STYLE,
GEN_DOSSIER_SCRIPT,
GEN_DOSSIER_SQUELETTE,
GEN_DOSSIER_DOC);
if (!GEN_FTP_UTILISE && $id_type_site != '103') {
foreach ($tab_rep_langue as $nom_rep_langue) {
foreach ($tab_rep_site as $nom_rep_site) {
$chemin_repertoire = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$nom_rep_langue.GEN_SEP.$nom_rep_site;
$vieux_umask = umask(0);
$resultat = creerDossier($chemin_repertoire, 0777, GEN_SEP);
umask($vieux_umask);
if ($resultat == false) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire.<br />'.
'Répertoire : '. $chemin_repertoire .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
}
}
$chemin_squelette_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
$chemin_squelette_site = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
if (!copy($chemin_squelette_defaut, $chemin_squelette_site)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de squellete par défaut.<br />'.
'Fichier : '. $chemin_squelette_site .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
$chemin_style_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
$chemin_style_site = PAP_CHEMIN_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
if (!copy($chemin_style_defaut, $chemin_style_site)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le fichier de style par défaut.<br />'.
'Fichier : '. $chemin_style_site .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
} else if (GEN_FTP_UTILISE && $id_type_site != '103') { // 103 est le type "site externe"
// Création d'une connection ftp avec Net_FTP de PEAR
// voir http://pear.php.net/manual/fr/package.networking.net-ftp.php
// création de l'objet pear ftp
$objet_pear_ftp = new Net_FTP(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// création de la connexion
$ftp_conn = $objet_pear_ftp->connect(PAP_FTP_SERVEUR, PAP_FTP_PORT);
// identification
$ftp_login_result = $objet_pear_ftp->login(PAP_FTP_UTILISATEUR, PAP_FTP_MOT_DE_PASSE);
// Gestion des erreurs ftp
if ((PEAR::isError($ftp_conn) || PEAR::isError($ftp_login_result))) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de se connecter par ftp.<br />'.
'Serveur : '. PAP_FTP_SERVEUR .'<br />'.
'Utilisateur : '. PAP_FTP_UTILISATEUR .'<br />'.
'Erreur connexion : '.$ftp_conn->getMessage().'<br />'.
'Erreur login : '.$ftp_login_result->getMessage().'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /><p>';
return $message;
}
$objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;
//$objet_pear_ftp->cd(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha']) ;
foreach ($tab_rep_langue as $nom_rep_langue) {
$objet_pear_ftp->mkdir(PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue) ;
foreach ($tab_rep_site as $nom_rep_site) {
$chemin_repertoire = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.$nom_rep_langue.GEN_SEP.$nom_rep_site;
$resultat = $objet_pear_ftp->mkdir($chemin_repertoire) ;
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de créer le répertoire par ftp.<br />'.
'Répertoire : '. $chemin_repertoire .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
}
}
$chemin_squelette_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
$chemin_squelette_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_SQUELETTE.GEN_SEP.GEN_FICHIER_SQUELETTE;
$resultat = $objet_pear_ftp->put($chemin_squelette_defaut, $chemin_squelette_site, true, FTP_BINARY);
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier le squelette defaut par ftp.<br />'.
'Fichier origine : '. $chemin_squelette_defaut .'<br />'.
'Fichier copié : '. $chemin_squelette_site .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
$chemin_style_defaut = PAP_CHEMIN_RACINE.GEN_CHEMIN_COMMUN.GEN_DOSSIER_GENERIQUE.GEN_SEP.
GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
$chemin_style_site = PAP_FTP_RACINE.GEN_CHEMIN_SITES.$aso_valeurs['gs_code_alpha'].GEN_SEP.
$aso_valeurs['gs_ce_i18n'].GEN_SEP.GEN_DOSSIER_STYLE.GEN_SEP.GEN_FICHIER_STYLE;
$resultat = $objet_pear_ftp->put($chemin_style_defaut, $chemin_style_site, true, FTP_BINARY);
if (PEAR::isError($resultat)) {
$message = '<p class="pap_erreur"> ERREUR Papyrus admin : impossible de copier les styles defaut par ftp.<br />'.
'Fichier origine : '. $chemin_style_defaut .'<br />'.
'Fichier copié : '. $chemin_style_site .'<br />'.
'Erreur origine : '. $resultat->getMessage() .'<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
$objet_pear_ftp->disconnect();
}
$id_site = SQL_obtenirNouveauId($db, 'gen_site','gs_id_site');
if ($id_site == false) {
$message = '<p class="erreur"> ERREUR Génésia admin : impossible de récupérer un identifiant pour la table gen_site.<br />'.
'Ligne n° : '. __LINE__ .'<br />'.
'Fichier n° : '. __FILE__ .'<br /></p>';
return $message;
}
// Modification de la requete si nous avons à faire à un site externe.
$requete_complement = ', gs_url = NULL';
if (isset($aso_valeurs['type_site_externe']) && $aso_valeurs['type_site_externe'] > 0 && !empty($aso_valeurs['gs_url']) && $aso_valeurs['gs_url'] != 'http://') {
$requete_complement = ', gs_url = "'.$aso_valeurs['gs_url'].'"';
}
// Requete d'insertion des infos d'un site dans gen_site
$requete = 'INSERT INTO gen_site '.
'SET gs_id_site = '.$id_site.', '.
'gs_ce_i18n = "'.$aso_valeurs['gs_ce_i18n'].'", '.
'gs_ce_auth = '.$aso_valeurs['gs_ce_auth'].', '.
'gs_fichier_squelette = "defaut.html", '.
'gs_code_num = '.$aso_valeurs['gs_code_num'].', '.
'gs_code_alpha = "'.$aso_valeurs['gs_code_alpha'].'", '.
'gs_nom = "'.$aso_valeurs['gs_nom'].'", '.
'gs_raccourci_clavier = "'.$aso_valeurs['gs_raccourci_clavier'].'", '.
'gs_titre = "'.$aso_valeurs['gs_titre'].'", '.
'gs_mots_cles = "'.$aso_valeurs['gs_mots_cles'].'", '.
'gs_description = "'.$aso_valeurs['gs_description'].'", '.
'gs_auteur = "'.$aso_valeurs['gs_auteur'].'", '.
'gs_date_creation = "'.date('Y-m-d H:i:s').'", '.
'gs_ce_admin = '.$id_admin.
$requete_complement;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
// Recherche du nouveau numéro d'ordre de ce site "principal" ou "externe"
$requete = 'SELECT MAX(gsr_ordre) AS max_ordre '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur IN (102, 103) ';// 102 = site "principal" et 103 = site "externe"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouvel_ordre = $ligne->max_ordre + 1;
// Requete d'insertion des relations dans gen_site_relation
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$id_site.', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = '.$id_type_site.', '.
'gsr_ordre = '.$nouvel_ordre;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
// Traduction : Requete d'insertion des relations dans gen_site_relation
 
$requete = 'SELECT MAX(gsr_ordre) AS max_ordre '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = ' .$aso_valeurs['gs_id_site'] .' '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
if ( $resultat->numRows() == 0 ) {
$nouvel_ordre = 1;
}
else {
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
$nouvel_ordre = $ligne->max_ordre + 1;
}
 
// 1 : insertion information traduction pere (si inexistant)
$requete = 'SELECT * '.
'FROM gen_site_relation '.
'WHERE gsr_id_site_01 = ' .$aso_valeurs['gs_id_site'] .' '.
'AND gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur =1 '; // 1 = "avoir traduction"
$resultat = $db->query($requete) ;
if (DB::isError($resultat)) {
die( BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) );
}
if ( $resultat->numRows() == 0 ) {
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '. $aso_valeurs['gs_id_site'].', '.
'gsr_id_site_02 = '.$aso_valeurs['gs_id_site'].', '.
'gsr_id_valeur = 1, '. // 1 = "avoir traduction"
'gsr_ordre = 1 ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
$nouvel_ordre = 2;
}
 
 
// 2 : insertion information traduction site en cours (si inexistant ?) (et la mise a jour, c'est ailleurs
// dans les mises à jour
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '. $aso_valeurs['gs_id_site'].', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = 1, '. // 1 = "avoir traduction"
'gsr_ordre = '.$nouvel_ordre;
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
// Gestion du site par défaut
if (isset($aso_valeurs['defaut']) && $aso_valeurs['defaut'] == 1) {
$requete_supr_defaut = 'DELETE FROM gen_site_relation '.
'WHERE gsr_id_site_01 = gsr_id_site_02 '.
'AND gsr_id_valeur = 101 ';// 101 = site par "defaut"
$resultat_supr_defaut = $db->query($requete_supr_defaut);
if (DB::isError($resultat_supr_defaut)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_supr_defaut->getMessage(), $requete_supr_defaut));
}
// Requete d'insertion de la relations site par défaut
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$id_site.', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = 101, '.
'gsr_ordre = NULL ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
}
// Gestion des sites externes
if ($id_type_site == '103') {
// Requete d'insertion des relations dans gen_site_relation
$requete = 'INSERT INTO gen_site_relation '.
'SET gsr_id_site_01 = '.$id_site.', '.
'gsr_id_site_02 = '.$id_site.', '.
'gsr_id_valeur = '.$aso_valeurs['type_site_externe'].', '.
'gsr_ordre = NULL ';
$resultat = $db->query($requete);
if (DB::isError($resultat)) {
die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete));
}
}
$message = '<p class="pap_info">'.'Succés de l\'ajout du site.'.'</p>';
return $message;
}
 
 
/** Fonction ADMIN_modifierSite() - Modifie un site de Papyrus.
*
* Cette fonction modifie un site géré par Papyrus.
1164,6 → 1704,15
// +- Fin du code source --------------------------------------------------------------------------------+
/*
* $Log: not supported by cvs2svn $
* Revision 1.25.2.2 2006/02/28 14:02:10 ddelon
* Finition multilinguisme
*
* Revision 1.25.2.1 2006/01/19 21:26:20 ddelon
* Multilinguisme site + bug ftp
*
* Revision 1.25 2005/10/17 13:48:59 jp_milcent
* Ajout d'un espace après le texte "Dernière modification par".
*
* Revision 1.24 2005/09/23 14:32:54 florian
* compatibilité XHTML + correction interface
*