Subversion Repositories Applications.papyrus

Rev

Rev 54 | Rev 142 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */ 
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1                                                                                      |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or                                        |
// | modify it under the terms of the GNU Lesser General Public                                           |
// | License as published by the Free Software Foundation; either                                         |
// | version 2.1 of the License, or (at your option) any later version.                                   |
// |                                                                                                      |
// | This library 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                                    |
// | Lesser General Public License for more details.                                                      |
// |                                                                                                      |
// | You should have received a copy of the GNU Lesser General Public                                     |
// | 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: admin_menu.php,v 1.6 2004-09-23 17:45:19 jpm Exp $
/**
* Application gérant les menus de Papyrus
*
* Cette application permet de gérer les menus classiques, les menus communs 
* et les liaison d'une application à un menu.
*
*@package Admin_menu
//Auteur original :
*@author        Laurent COUDOUNEAU <lc@gsite.org>
//Autres auteurs :
*@author        Alexandre GRANIER <alexandre@tela-botanica.org>
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
*@copyright     Tela-Botanica 2000-2004
*@version       $Revision: 1.6 $ $Date: 2004-09-23 17:45:19 $
// +------------------------------------------------------------------------------------------------------+
*/

// +------------------------------------------------------------------------------------------------------+
// |                                            ENTÊTE du PROGRAMME                                       |
// +------------------------------------------------------------------------------------------------------+
                                    /*Mettre ici les inclusions de fichiers*/
/** Inclusion du fichier de configuration de cette application.*/
require_once GEN_CHEMIN_PAP.'applications/admin_menu/configuration/adme_configuration.inc.php';

/** Inclusion de la bibliothèque PEAR de conception de formulaire.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm.php';
require_once ADME_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm/select.php';

/** Inclusion de l'API de fonctions gérant les erreurs sql.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_API.'debogage_1.0/BOG_sql.fonct.php';

/** Inclusion des fonctions de manipulation du sql.
* Permet la récupération d'un nouvel identifiant d'une table.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_API.'sql_1.0/SQL_manipulation.fonct.php';

/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_site..." de Papyrus.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_GEN.'pap_site.fonct.php';

/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_menu..." de Papyrus.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_GEN.'pap_menu.fonct.php';

/** <BR> Inclusion de la bibliothèque de fonctions concernant la gestion des menus classiques.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_menu_classique.fonct.php';//ok

/** <BR> Inclusion de la bibliothèque de fonctions concernant la gestion des menus communs.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_menu_commun.fonct.php';//ok

/** <BR> Inclusion de la bibliothèque de fonctions concernant la gestion de la rédaction de contenu.*/
require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_contenu.fonct.php';//ok

// +------------------------------------------------------------------------------------------------------+
// |                                            CORPS du PROGRAMME                                        |
// +------------------------------------------------------------------------------------------------------+
                                       /*Mettre ici le code du programme*/                                 
/** Fonction afficherContenuTete() - Fonction appelé par le gestionnaire Papyrus.
*
* Elle retourne l'entête de l'application..
*
* @return  string  du code XHTML correspondant à la zone d'entête de l'application.
*/
function afficherContenuTete()
{
    return '';
}

function afficherContenuCorps()
{
    global $_GEN_commun;
    $objet_pear_auth = $_GEN_commun['pear_auth'];
    $objet_pear_db = $_GEN_commun['pear_db'];
    $db = $_GEN_commun['pear_db'];
    
    $url_site = $_GEN_commun['url_site'];
    $url_menu = $_GEN_commun['url_menu'];
    $url_i18n = $_GEN_commun['url_i18n'];
    $outputText = '' ;
    //------------------------------------------------------------------------------
    // Vérification de la présence d'arguments pour l'application.
    
    if (!isset($_POST['adminProject'])) {
        if (!isset($_GET['adminProject'])) {
            $adminProject = '';
        } else {
            $adminProject = $_GET['adminProject'];
        }
    } else {
        $adminProject = $_POST['adminProject'];
    }
    /*
    $adminProject = $_GEN_commun['info_site']->gs_code_alpha;
    
    if (isset($_GEN_commun['info_application']->site)) {
        $adminProject = $_GEN_commun['info_application']->site;
    }
    */
    global $adminLocale;
    if (empty($adminLocale)) {
        $adminLocale = $_GEN_commun['info_site']->gs_ce_i18n;
    }
    //------------------------------------------------------------------------------
    // Internationalisation ?
    if (isset ($doclocale) && ($doclocale != '')) {
        $adminLocale = $doclocale;
    }
    
    //------------------------------------------------------------------------------
    // Arguments spécifique à l'application.
    global $menuid;
    global $upperid;
    global $doccmd;
    global $docopen;
    global $menuopen;
    global $upperopen;
    
    global $doc_name;
    global $doc_title;
    
    global $docid;
    global $pageid;
    global $pageopen;
    
    //------------------------------------------------------------------------------
    // L'url de base pour revenir au menu (=page) en cours.
    $url =
        'papyrus.php'.
        '?'.GEN_URL_CLE_SITE.'='.$url_site.
        '&'.GEN_URL_CLE_MENU.'='.$url_menu;
    
    $baseURL =
        'papyrus.php'.
        '?'.GEN_URL_CLE_SITE.'='.$url_site.
        '&amp;'.GEN_URL_CLE_MENU.'='.$url_menu.
        '&amp;'.GEN_URL_CLE_I18N.'='.$url_i18n;
    
    $baseURLjs =
        'papyrus.php'.
        '?'.GEN_URL_CLE_SITE.'='.$url_site.
        '&'.GEN_URL_CLE_MENU.'='.$url_menu.
        '&'.GEN_URL_CLE_I18N.'='.$url_i18n.
        '&adminProject='.$adminProject;
        //'&doclocale='.$doclocale;
    
    // Virer la variable baseHidden devenu inutile
    $baseHidden = '';
    
    //------------------------------------------------------------------------------
    // Authentification
    if ($_GEN_commun['pear_auth']->getAuth()) {
        //------------------------------------------------------------------------------
        // Gestion des commandes.
        
        //------------------------------------------------------------------------------
        // Gestion des menus classiques
        
        // Ajout d'un menu
        if ($doccmd == 'addmenu') {
            $doccmd = '';
            addMenu($adminProject, $adminLocale);
        }
        
        // Formulaire de mise à jour du menu
        if ($doccmd == 'showmenu') {
            $outputText .= showMenu (   $db, $adminProject, $adminLocale, $baseURL, $baseURLjs, $baseHidden,
                                        $menuid, $docid, $pageid, $menuopen, $docopen, $pageopen);
            return $outputText ;
        }
        
        // Mise à jour du menu
        if ($doccmd == 'commitupdmenu') {
            commitUpdateLevel ($db, $adminProject, $adminLocale, $menuid);
            $doccmd = '';
        }
        
        // Déplacer le menu vers le haut
        if ($doccmd == 'upmenu') {
            moveMenu ($db, $adminProject, $adminLocale, $menuid, true);
            $doccmd = '';
        }
        
        // Déplacer le menu vers le bas
        if ($doccmd == 'dnmenu') {
            moveMenu ($db, $adminProject, $adminLocale, $menuid, false);
            $doccmd = '';
        }
        
        // Détruire le menu
        if ($doccmd == 'delmenu') {
            $msg = deleteMenu($objet_pear_db, $menuid);
            $doccmd = '';
        }
        
        //------------------------------------------------------------------------------
        // Gestion des Menus communs
        
        // Ajout un menu commun
        if ($doccmd == 'addupper') {
            addUpper($db, $adminProject, $adminLocale);
            $doccmd = '';
        }
        
        // Valide et modifie un menu commun.
        if ($doccmd == 'commitupduppertxt') {
            commitUpdateUpperText($db, $adminProject, $adminLocale, $upperid);
            $doccmd = '';
        }
        
        // Update upper menu.
        if ($doccmd == 'upduppertxt') {
            $outputText .=
            showUpper(  $db, $adminProject, $adminLocale,
                        $baseURL, $baseURLjs, $baseHidden,
                        $upperid, $menuopen, $upperopen, $docopen);
            return $outputText;
        }
        
        // Valide et modifie un menu commun
        if ($doccmd == 'commitupdupper') {
            commitUpdateUpper($db, $adminProject, $adminLocale, $upperid);
            $doccmd = '';
        }
        
        // Déplace vers le haut de la hiérarchie un menu commun
        if ($doccmd == 'upupper') {
            moveUpper($db, $adminProject, $adminLocale, $upperid, true);
            $doccmd = '';
        }
        
        // Déplace vers le bas de la hiérarchie un menu commun
        if ($doccmd == 'dnupper') {
            moveUpper($db, $adminProject, $adminLocale, $upperid, false);
            $doccmd = '';
        }
        
        // Supprime définitivement un menu commun
        if ($doccmd == 'delupper') {
            deleteUpper($db, $adminProject, $adminLocale, $upperid);
            $doccmd = '';
        }
        
        //------------------------------------------------------------------------------
        // Gestion de la rédaction
        
        // Rédiger
        if ($doccmd == 'contenuredac') {
            if (isset($upperid) && !empty($upperid) && !isset($menuid) && empty($menuid)) {
                $menuid = $upperid;
            }
            $outputText .= redigerContenu(  $db, $adminProject, $adminLocale, $baseURL, $baseURLjs, $baseHidden,
                                            $menuid, $docid, $pageid, $menuopen, $docopen, $pageopen);
            return $outputText;
        }
        // Mise à jour du contenu
        if ($doccmd == 'contenuenreg') {
            ajouterContenu($db, $adminProject, $adminLocale, $menuid, $_POST);
            $doccmd = '';
        }
        
        //------------------------------------------------------------------------------
        // Autres
        
        // Message ?
        if (! empty($msg)) {
            $outputText .= "\n".'<p class="erreur">'.$msg.'</p>';
        }
        
        //------------------------------------------------------------------------------
        // Nous affichons la liste des menus classiques et communs
        $annuName = '';
        $outputText .=
        listAll(    $db,
                    $baseURL, $baseURLjs, $url, $baseHidden,
                    $adminProject, $adminLocale, $annuName,
                    $annuName, $menuid, $upperid,
                    $doccmd, $menuopen, $upperopen);
        return $outputText ;
        // Fin de l'authentification
    } else {
        return GEN_afficherInfoIdentification($baseURL);
    }
}// Fin de la fonction afficherContenuCorps()

// +------------------------------------------------------------------------------------------------------+
// |                                           LISTE de FONCTIONS                                         |
// +------------------------------------------------------------------------------------------------------+
                                        /*Mettre ici la liste de fonctions.*/

function listAll($db, 
                  $baseURL, $baseURLjs, $url, $baseHidden,
                  $adminProject, $adminLocale, $adminAnnu,
                  $annuName, $menuid, $upperid,
                  $doccmd, $menuopen, $upperopen)
{
    $res  = '';
    $res .= "\n";
    
    // Liste des sites principaux
    $requete =  'SELECT * '.
                'FROM gen_site, gen_site_relation '.
                'WHERE gsr_id_site_01 = gsr_id_site_02 '.
                'AND gsr_id_valeur = 102 '.// 102 = site "principal"
                'AND gsr_id_site_01 = gs_id_site '.
                'ORDER BY gsr_ordre';
    
    $resultat = $db->query($requete);
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
    
    //----------------------------------------------------------------------------
    // Création du formulaire
    
    $form =& new HTML_QuickForm('form_sites', 'post', $url);
    $tab_index = 1000;
    $squelette =& $form->defaultRenderer();
    $squelette->setFormTemplate("\n".'<form{attributes}>'."\n".'<p>'."\n".'{content}'."\n".'</p>'."\n".'</form>'."\n");
    $squelette->setElementTemplate( '{label}'."\n".'{element}'."\n".
                                    '<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
                                    '<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n");
    $partie_site_debut =    '<fieldset>'."\n".
                            '<legend>Listes des sites</legend>'."\n";
    $form->addElement('html', $partie_site_debut);
    $id = 'adminProject';
    $aso_attributs = array('id'=> $id, 'tabindex' => $tab_index++, 'onchange' => 'javascript:this.form.submit();');
    $label = '<label for="'.$id.'">'.'Choix du site à administrer : '.'</label>';
    $objet_select = new HTML_QuickForm_select($id, $label, '', $aso_attributs);
    $aso_options = array();
    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
        if (empty($adminProject)) {
            $adminProject = $ligne->gs_code_alpha;
        }
        if ($ligne->gs_code_alpha == $adminProject) {
            $objet_select->addOption(htmlentities($ligne->gs_nom.' ('.$ligne->gs_code_alpha.')'), $ligne->gs_code_alpha, 'selected="selected"');
        } else {
            $objet_select->addOption(htmlentities($ligne->gs_nom.' ('.$ligne->gs_code_alpha.')'), $ligne->gs_code_alpha);
        }
    }
    $resultat->free();
    $form->addElement($objet_select);
    $form->addElement('submit', 'choisir_site', 'OK');
    $partie_site_fin = '</fieldset>'."\n";
    $form->addElement('html', $partie_site_fin);
    
    // Instanciation des valeurs par défaut du formulaire
    $form->setDefaults($adminProject);
    
    $res .= '<h1>'.'Configuration des menus du site : '.$adminProject.'</h1>'."\n";
    $res .= '<p>'."\n";
    $res .= $form->toHTML()."\n";
    
    //----------------------------------------------------------------------------
    // Affiche la langue courante pour les menus à administrer
    $requete =  'SELECT * '.
                'FROM gen_i18n '.
                'WHERE gi_id_i18n = "'.$adminLocale.'"';
    
    $LOCALEresult = $db->query($requete);
    if (DB::isError($LOCALEresult)) {
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $LOCALEresult->getMessage(), $requete));
    }
    
    $FLAGrow = $LOCALEresult->fetchRow(DB_FETCHMODE_OBJECT);
    if ($FLAGrow) {
        $res .= $FLAGrow->gi_nom.'&nbsp;'."\n";
    }
    $LOCALEresult->free() ;
    
    
    // Internationalisation disponible pour le site principal.
    $requete =  'SELECT gs_ce_i18n, gi_nom '.
                'FROM gen_site, gen_i18n '.
                'WHERE gs_ce_i18n = gi_id_i18n '.
                'AND gs_code_alpha = "'.$adminProject.'" ';
    
    $LOCALEresult = $db->query($requete);
    (DB::isError ($LOCALEresult))
        ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $LOCALEresult->getMessage(), $requete))
        : '';
    
    while ($LOCALErow = $LOCALEresult->fetchRow(DB_FETCHMODE_OBJECT)) {
        if ($adminLocale != $LOCALErow->gs_ce_i18n) {
            $res .= '<a href="'.$baseURL.'&amp;adminLocale='.$LOCALErow->gs_ce_i18n.'">'.
                        $LOCALErow->gi_nom.
                    '</a>'."\n";
        }
    }
    $LOCALEresult->free() ;
    $res .= '</p>'."\n";
    
    //----------------------------------------------------------------------------
    // Gestion des menus classiques
    $etiquette_title_ajouter = 'Ajouter un menu classique';
    $res .= '<p>'."\n";
    $res .= '<a href="'.$baseURL.'&amp;adminProject='.$adminProject.'&amp;doccmd=addmenu&amp;menuid=0" >'.
                $etiquette_title_ajouter.'&nbsp;'.
                '<img src="'.ADME_IMAGE_NOUVEAU.'" alt="" width="16" height="16" border="0" />'.
            '</a>'."\n";
    $res .= '</p>'."\n";
    
    $res .= '<form name="updform" action="papyrus.php" method="post">'."\n";
    
    $res .= lister_menu_racine( $db,
                                $baseURL, $baseURLjs, $baseHidden,
                                $adminProject, $adminLocale, $adminAnnu,
                                $menuid, $upperid,
                                $doccmd, $menuopen,  $upperopen, 0);
    //----------------------------------------------------------------------------
    // Gestion des menus communs
    $etiquette_title_ajouter = 'Ajouter un menu commun';
    $res .=     '<p>'."\n";
    $res .=     '<a href="'.$baseURL.'&amp;adminProject='.$adminProject.'&amp;doccmd=addupper">'.
                    $etiquette_title_ajouter.'&nbsp;'.
                    '<img src="'.ADME_IMAGE_NOUVEAU.'" alt="" width="16" height="16" border="0" />'.
                '</a>'."\n";
    $res .=     '</p>'."\n";
    $res .= listUpper(  $db,
                        $baseURL, $baseURLjs, $baseHidden,
                        $adminProject, $adminLocale, $adminAnnu,
                        $menuid, $upperid,
                        $doccmd, $menuopen);
    
    // Valeur de formulaire cachées.
    $res .= '<input type="hidden" name="menuid" value="'.$menuid.'" />'."\n";
    $res .= '<input type="hidden" name="upperid" value="'.$upperid.'" />'."\n";
    $res .= '<input type="hidden" name="menuopen" value="'.$menuopen.'" />'."\n";
    $res .= $baseHidden;
    
    $res .= '</form>'."\n";
    
    return $res;
}

// +------------------------------------------------------------------------------------------------------+
// |                                            PIED du PROGRAMME                                         |
// +------------------------------------------------------------------------------------------------------+
                                           /*Partie non obligatoire*/


/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.5  2004/09/23 16:49:24  jpm
* Correction d'une erreur dans l'url de l'ajout de menu commun.
*
* Revision 1.4  2004/07/06 17:24:54  jpm
* Suppression d'inclusions de fichiers inutiles.
*
* Revision 1.3  2004/07/06 17:07:28  jpm
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
*
* Revision 1.2  2004/06/16 15:06:30  jpm
* Suppression fichier inutile.
*
* Revision 1.1  2004/06/16 15:04:39  jpm
* Changement de nom de Génésia en Papyrus.
* Changement de l'arborescence.
*
* Revision 1.26  2004/05/10 14:32:21  jpm
* Changement du titre.
*
* Revision 1.25  2004/05/10 12:13:23  jpm
* Ajout de la sélection des sites.
*
* Revision 1.24  2004/05/07 16:33:05  jpm
* Intégration de constantes.
*
* Revision 1.23  2004/05/07 07:23:53  jpm
* Amélioration du code, des commentaires et correction de bogues.
*
* Revision 1.22  2004/05/05 06:45:44  jpm
* Suppression de l'appel de la fonction générant le "vous êtes ici" dans la fonction affichant l'entête de l'application.
*
* Revision 1.21  2004/05/04 16:27:33  jpm
* Réduction de code pour la fonction afficherContenuTete().
*
* Revision 1.20  2004/05/03 11:23:26  jpm
* Début mise en conformité des commentaires.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>