Subversion Repositories eFlore/Applications.bibliobota

Rev

Rev 23 | 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: bbc_affichage.fonct.php,v 1.1 2005/11/23 10:22:25 jp_milcent Exp $
/**
* Fonctions de l'interface de consultation de Biblio Bota.
*
* Contient les fonctions fournissant du XHTML pour l'affichage de l'interface de consultation de BibioBota.
*
*@package BiblioBota-Consultation
*@subpackage Fonctions
//Auteur original :
*@author        Jean-Charles GRANGER <tela@vecteur.org>
//Autres auteurs :
*@author        Jean-Pascal MILCENT <jpm@clapas.org>
*@copyright     Tela-Botanica 2000-2004
*@version       $Revision: 1.1 $ $Date: 2005/11/23 10:22:25 $
// +------------------------------------------------------------------------------------------------------+
*/

// +------------------------------------------------------------------------------------------------------+
// |                                            ENTETE du PROGRAMME                                       |
// +------------------------------------------------------------------------------------------------------+
                                    /*Mettre ici les inclusions de fichiers*/                             

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

// string ColorizeFound($tomod,$tofind)
//    Colorie dans une chaine de texte $tomod la chaine $tofind.
//    $tofind peut contenir des espaces, chaque terme sera quand même colorié.
//    Retourne la chaine de caractères $tomod convertie.
function ColorizeFound($tomod, $tofind)
{
    $words = explode(' ', $tofind);
    // Liste de mots générant des problèmes vis à vis de la chaine $edited 
    $forbid_lst[0] = 'la';
    $forbid_lst[1] = 'texte';
    $forbid_lst[2] = 'found';
    $forbid_lst[3] = 'un';
    $forbid_lst[4] = 'fou';
    $forbid_lst[5] = 'las';
    $forbid_lst[6] = 'class';
    $forbid_lst[7] = 'text';
    $forbid_lst[8] = 'ou';
    $forbid_lst[9] = 'ext';
    $forbid_lst[10] = 'te';
    $forbid_lst[11] = 'ex';
    $forbid_lst[12] = 'und';
    $forbid_lst[13] = 'a';
    $forbid_lst[14] = 'c';
    $forbid_lst[15] = 'd';
    $forbid_lst[16] = 'e';
    $forbid_lst[17] = 'f';
    $forbid_lst[18] = 'l';
    $forbid_lst[19] = 'n';
    $forbid_lst[20] = 'o';
    $forbid_lst[21] = 'p';
    $forbid_lst[22] = 's';
    $forbid_lst[23] = 't';
    $forbid_lst[24] = 'u';
    $forbid_lst[25] = 'x';
    
    for ($i = 0; $i < count($words); $i++) {
        $words[$i] = ereg_replace('\[', '', $words[$i]);
        $words[$i] = ereg_replace('\]', '', $words[$i]);
        $edited = '<span class="bb_txt_trouve">'.$words[$i].'</span>';
        if (($words[$i] != '') && ($tomod != '') && (! in_array($words[$i], $forbid_lst))){
            $tomod = eregi_replace($words[$i], $edited, $tomod);
        }
    }
    return $tomod;
}

// form_mk_submit($value) :
// créé un bouton de validation de formulaire
// Entrée : string $value (facultatif), string $class
// Sortie (par retour) : string
function form_mk_submit($value = 'Chercher', $class = 'texte_tb')
{
    $retour = '';
    $retour .= '<input type="submit" name="valider" value="'.$value.'" class="'.$class.'" />';
    $retour .= '<input type="hidden" name="TabFinder[valid]" value="1" />';
    
    return $retour;
}


// form_mk_reset($value) :
// créé un bouton d'effacement de formulaire   
// Entrée : string $value (facultatif)
// Sortie (par retour) : string
function form_mk_reset($value = 'Effacer', $class = 'texte_tb')
{
    return '<input type="reset" value="'.$value.'" name="valider" class="'.$class.'" />';
}


// form_mk_chaine($value,$class) :
// créé un champ texte "chaine"
// Entrée : $value (valeur de TabFinder['chaine']), $class (classe CSS) par défaut "insInputForm"
// Sortie (par retour) : string
function form_mk_chaine($value = '', $class = 'insInputForm')
{
    $id = 'TabFinder[chaine]';
    $retour = '<label for="'.$id.'">'.'Rechercher : '.'</label>';
    $retour .= '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.$value.'" />'."\n";
    return $retour;
}


// form_mk_geo($value,$class) :
// créé un champ texte "geo"
// Entrée : $value (valeur de TabFinder['geo']), $class (classe CSS) par défaut "insInputForm"
// Sortie (par retour) : string
function form_mk_geo($value = '', $class = 'insInputForm')
{
    $id = 'TabFinder[geo]';
    $retour = '<label for="'.$id.'">'.'Zone géo. : '.'</label>';
    $retour .= '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.$value.'" />'."\n";
    return $retour;
}


// form_mk_auteur($value,$class) :
// créé un champ texte "auteur"
// Entrée : $value (valeur de TabFinder['auteur']), $class (classe CSS) par défaut "insInputForm"
// Sortie (par retour) : string
function form_mk_auteur($value = '', $class = 'insInputForm')
{
    $id = 'TabFinder[auteur]';
    $retour = '<label for="'.$id.'">'.'Auteur : '.'</label>';
    $retour .= '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.$value.'" />';
    return $retour;
}


// form_mk_step($actualstep,$class) :
// créé une liste déroulante TabFinder[step] pour fragmenter les pages en x résultats
// Entrée : $actualstep (valeur de TabFinder['step']), $class (classe CSS) par défaut "insInputForm"
// Sortie (par retour) : string
function form_mk_step($actualstep, $class = 'insInputForm')
{
    $retour = '';
    $id = 'TabFinder[step]';
    
    $retour .= '<label for="'.$id.'">'.'Grouper les résultats : '.'</label>';
    $retour .= '<select id="'.$id.'" name="'.$id.'" class="'.$class.'">'."\n";
    
    $retour .= '   <option value="10"';
    if ($actualstep == 10) {
        $retour .= 'selected="selected"';
    }
    $retour .= '>par 10</option>'."\n";
    
    $retour .= '   <option value="20"';
    if (($actualstep == 20) || ($actualstep == '')) {
        $retour .= 'selected="selected"';
    }
    $retour .= '>par 20</option>'."\n";
    
    $retour .= '   <option value="50"';
    if ($actualstep == 50) {
        $retour .= 'selected="selected"';
    }
    $retour .= '>par 50</option>'."\n";
    
    $retour .= '</select>'."\n";
    
    return $retour;
}


// form_mk_typque($actualstep,$class) :
// créé une liste déroulante TabFinder[step] pour fragmenter les pages en x résultats
// Entrée : $actualtypque (valeur de TabFinder['typque']), $class (classe CSS) par défaut "insInputForm"
// Sortie (par retour) : string
function form_mk_typque($actualtypque, $class = 'insInputForm')
{
    global $label_bbota;
    
    $retour = '';
    
    $retour .= '<select name="TabFinder[typque]" size="1" class="'.$class.'">'."\n";
    
    $retour .= '   <option value="1"';
    if (($actualtypque == '') || ($actualtypque == 1)) {
        $retour .= ' selected="selected"';
    }
    $retour .= '>'.$label_bbota['bool_separe'].'</option>'."\n";
    
    $retour .= '   <option value="0"';
    if (($actualtypque == 0) && ($actualtypque != '')) $retour .= ' selected';
    $retour .= '>'.$label_bbota['bool_exacte'].'</option>'."\n";
    
    $retour .= '</select>'."\n";
    
    return $retour;
}

// form_mk_since($value,$class) :
// créé un champ texte "since"
// Entrée : $value (valeur de TabFinder['since']), $class (classe CSS) par défaut "insInputForm"
// Sortie (par retour) : string
function form_mk_since($value = '', $class = 'insInputForm')
{
    $id = 'TabFinder[since]';
    $retour = '<label for="'.$id.'">'.'Réduire aux données mises en ligne depuis le : '.'</label>';
    $retour .= '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.$value.'" maxlength="10" />';
    $retour .= ' (au format jj/mm/aaaa)'."\n";
    return $retour;
}


// form_mk_plugin($value) :
// créé un element de formulaire caché en fonction du contenu de Plugin
// Entrée : string $value
// Sortie (par retour) : string ou void
function form_mk_plugin($value)
{
    if ($value != '') {
        return '<input type="hidden" name="TabFinder[plugin]" value="'.$value.'" />'."\n";
    } else {
        return '';
    }
}

// form_mk_advance() :
// créé un element/lien formulaire appelant la page elle-même pour avoir un formulaire en mode "avancé"
// Entrée :
// Sortie (par retour) : string
function form_mk_advance()
{
    global $TabFinder, $arg_0, $arg_1, $arg_2, $arg_3, $arg_4, $arg_5;
    
    if (empty($TabFinder)) {
        $TabFinder = '';
    }
    
    $stockagevar = '';
    
    foreach($TabFinder as $tmp_stock_i => $value) {
        if ($tmp_stock_i != 'args' && $tmp_stock_i != 'finder_mode') {
            $stockagevar .= $tmp_stock_i.','.$value.'!';
        }
    }
    
    $stockagevar = ereg_replace(' ', '{', $stockagevar);
    
    if ($TabFinder['finder_mode'] == 'normal') {
        $chaine_url_middle = 'advance';
        $chaine_labelle = 'Plus';
    } else if ($TabFinder['finder_mode'] == 'advance') {
        $chaine_url_middle = 'normal';
        $chaine_labelle = 'Moins';
    }
    
    $chaine_url_end = '&amp;arg_0='.$arg_0.'&amp;arg_1='.$arg_1.'&amp;arg_2='.$arg_2.'&amp;arg_3='.$arg_3.'&amp;arg_4='.$arg_4.'&amp;arg_5='.$arg_5;
    $chaine_url_start = "\n".'<input type="button" class="texte_tb" value="'.$chaine_labelle.' d\'options" '.
                        'onclick="javascript:window.location.href=\''.$GLOBALS['_GEN_commun']['url']->getURL().
                        '&amp;TransTab='.$stockagevar.'finder_mode,'.$chaine_url_middle.$chaine_url_end.'\';" />'."\n";
    
    return $chaine_url_start;
}

// presa_mk_title($value,$colspan) :
// créé une ligne de titre dans un <tr>   
// Entrée : string $value, int $colspan
// ($value : titre ; $colspan : nombre de colonnes fusionnées ; par défaut $colspan = 1)
// Sortie (par retour) : string

function presa_mk_title($value, $niveau = '2', $class = 'insTitle1')
{
    return '<h'.$niveau.' class="'.$class.'">'.$value.'</h'.$niveau.'>'."\n";
}


// presa_mk_maxtitle($value,$colspan) :
// créé une ligne de titre dans un <tr>   
// Entrée : string $value, int $colspan
// ($value : titre ; $colspan : nombre de colonnes fusionnées ; par défaut $colspan = 1)
// Sortie (par retour) : string
function presa_mk_maxtitle($value, $niveau = '1', $class = 'insMsg')
{
    return '<h'.$niveau.' class="'.$class.'">'.$value.'</h'.$niveau.'>'."\n";
}


// presa_mk_blkline($colspan=1) :
// créé une ligne vide dans un <tr>   
// Entrée : int $colspan
// ($colspan : nombre de colonnes fusionnées ; par défaut $colspan = 1)
// Sortie (par retour) : string
function presa_mk_blkline($colspan=1)
{
    return '<tr><td class="texte_tb" colspan="'.$colspan.'">&nbsp;</td></tr>'."\n";
}

// count_num_of_reductor($table,$id)
// retourne le nombre d'items de la table $tbl['item'] ayant un 
// type de réducteur $id dans le champ $champ 

function count_num_of_reductor($champ, $id)
{
    global $tbl;
    global $retour_biblio;
    global $plugin_store;
    
    if ($retour_biblio['limit_domain'] == 1) {
        $from_ajout = ', '.$tbl['domaine_lk'];
        $requete_ajout = ' AND B_I_IDITEM = B_DL_IDITEM AND B_DL_IDDOM = 1';
    } else {
        $from_ajout = '';
        $requete_ajout = '';
    }
    
    if ((BB_ARGUMENT_REGROUPEMENT == 'media') && ($champ == 'B_I_TYPLOG')) {
        $requete_ajout .= ' AND '.$GLOBALS['query_dom']['phy'];
    }
    
    $requete =  'SELECT COUNT(B_I_IDITEM) AS CPT '.
                'FROM '.$tbl['item'].$plugin_store['count_add_table'].$from_ajout.' '.
                'WHERE '.$champ.' = '.$id.' '.
                $requete_ajout.' '.
                $plugin_store['count_add_query'];
    
    $resultat = $GLOBALS['db_bb']->query($requete);
    (DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '';
    
    $nbre_ligne = $resultat->numRows();
    if ($nbre_ligne != 1) {
        die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete, 'Erreur : '.$nbre_ligne.' résultat(s) au lieu d\'1.'));
        $resultat->free();
        return -1;
    } else {
        $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
        $nombre = $ligne->CPT;
        $resultat->free();
        return $nombre;
    }
}

/**Fonction CreateNavigBiblio() - construit l'interface de navigation de la consultation avancée.
*
* Créée des boutons pour accéder à certains services spécifiques de Biblio Bota
* (listes,modifications...).
* Cette fonction utilise les constantes :
* - BB_URL_COURANTE_CONSULTATION
* - BB_IMG_PRECEDENT
* - BB_CLASS_IMG_PRECEDENT
*
* @param string la destination du bouton (goback ou goto).
* @param string le sujet de destination du bouton (coll, fasc ou art).
* @param array un tableau contenant les arguments des liens des boutons.
* @param string le texte du bouton qui remplacera l'image.
* @param bool booléen indiquant si on doit afficher une image ou pas.
*
* @return array les infos des "voir aussi".
*/
function CreateNavigBiblio($destination, $sujet, $tableau, $texte = '', $image = 0)
{
    if (!isset($tableau['pass'])) {
        $tableau['pass'] = '';
    }
    if (!isset($tableau['locusfasc'])) {
        $tableau['locusfasc'] = '';
    }
    $retour = '';
    
    switch ($destination) {
        // GoBack permet de créer des retours aux pages précédentes (fasc->coll, art->fasc)
        case 'goback':
            switch ($sujet) {
                case 'coll':
                    // Permet de retourner des fascicules aux collections
                    $action = BB_URL_COURANTE_CONSULTATION.'&amp;consultation=avancee&amp;page=1&amp;coll='.$tableau['pass'].$tableau['args'];
                    $retour = '<p class="bb_navigation">';
                    $retour .= '<a href="'.$action.'">';
                    if ($image == 1) {
                        $retour .= '<img class="'.BB_CLASS_IMG_PRECEDENT.'" src="'.BB_IMG_PRECEDENT.'" alt="'.$texte.'..."/>';
                        $retour .= ' '.$texte;
                    } else {
                        $retour .= ' '.$texte;
                    }
                    $retour .= '</a></p>'."\n";
                break;
                case 'fasc':
                    // Permet de retourner des articles aux fascicules
                    $action = BB_URL_COURANTE_CONSULTATION.'&amp;consultation=avancee&amp;page=1&amp;fasc='.$tableau['back'].$tableau['args'].
                                '&amp;locusfasc='.$tableau['locusfasc'];
                    $retour = '<p class="bb_navigation">';
                    $retour .= '<a href="'.$action.'">';
                    if ($image == 1) {
                        $retour .= '<img class="'.BB_CLASS_IMG_PRECEDENT.'" src="'.BB_IMG_PRECEDENT.'" alt="'.$texte.'..."/>';
                        $retour .= ' '.$texte;
                    } else {
                        $retour .= ' '.$texte;
                    }
                    $retour .= '</a></p>'."\n";
                break;
            }
        break;
        // GoTo permet de descendre d'un niveau (coll->fasc->art)
        case 'goto':
            switch ($sujet) {
                case 'fasc':
                    // Permet de descendre des coll aux fasc
                    $action = BB_URL_COURANTE_CONSULTATION.'&amp;consultation=avancee&amp;page=1&amp;fasc='.$tableau['pass'].$tableau['args'];
                    $retour = '<p class="bb_navigation">';
                    $retour .= '<a href="'.$action.'">';
                    if ($image == 1) {
                                                $retour .= $texte.' ';
                        $retour .= '<img class="'.BB_CLASS_IMG_SUIVANT.'" src="'.BB_IMG_SUIVANT.'" alt="'.$texte.'..."/>';
                    } else {
                        $retour .= ' '.$texte;
                    }
                    $retour .= '</a></p>'."\n";
                break;
                case 'art':
                    // Permet de descendre des fasc aux art
                    $action = BB_URL_COURANTE_CONSULTATION.'&amp;consultation=avancee&amp;page=1&amp;art='.$tableau['pass'].$tableau['args'].
                                '&amp;locusfasc='.$tableau['locusfasc'];
                    $retour = ' - ';
                    $retour .= '<a href="'.$action.'">';
                    if ($image == 1) {
                        $retour .= $texte.' ';
                        $retour .= '<img class="'.BB_CLASS_IMG_SUIVANT.'" src="'.BB_IMG_SUIVANT.'" alt="'.$texte.'..."/>';
                    } else {
                        $retour .= ' '.$texte;
                    }
                    $retour .= '</a>'."\n";
                break;
            }
        break;
    }
    
    return $retour;
}

/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: bbc_affichage.fonct.php,v $
* Revision 1.1  2005/11/23 10:22:25  jp_milcent
* Ajout au dépot de l'application BiblioBota.
* Elle doit à terme migrer dans eFlore.
*
* Revision 1.6  2005/05/17 10:10:08  jpm
* Correction des bogues avant mise en ligne du site v4.
*
* Revision 1.5  2005/01/04 16:23:47  jpm
* Amélioration de la forme.
*
* Revision 1.4  2004/09/16 12:07:30  jpm
* Changement de noms de constantes.
*
* Revision 1.3  2004/09/14 10:18:17  jpm
* Mise en forme et amélioration du code.
* Passage au XHTML strict.
*
* Revision 1.2  2004/09/10 18:44:25  jpm
* Ajout de fonction et mise en forme.
*
* Revision 1.1  2004/09/10 09:45:37  jpm
* Ajout des fichiers BiblioBota configurer pour Papyrus.
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>