Subversion Repositories Sites.tela-botanica.org

Rev

Rev 7 | Blame | Last modification | View Log | RSS feed

<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2005                                                *
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/

define('_ECRIRE_AIDE', 1);
include ("inc_version.php3");
include_ecrire ("inc_presentation.php3");


// Eviter les calculs evitables (surtout en client/serveur sans cache !)
$lastmodified = filemtime("aide_index.php3");
$headers_only = http_last_modified($lastmodified, time() + 24 * 3600);
if ($headers_only) exit;

include_ecrire ("inc_filtres.php3");
include_ecrire ("inc_layer.php3");
include_ecrire ("inc_texte.php3");


// Recuperer les infos de langue (preferences auteur), si possible
if (_FILE_CONNECT) {
        include_ecrire ("inc_session.php3");
        verifier_visiteur();
}
include_ecrire ("inc_lang.php3");
utiliser_langue_visiteur();
if ($var_lang) changer_langue($var_lang);
if ($lang) changer_langue($lang); # pour le cas ou on a fait appel au menu de changement de langue (aide absente dans la langue x)

/////////////////////////////
// La frame de base
//
function help_frame ($aide) {
        global $spip_lang;

        echo "</head>\n";

        $frame_menu = "<frame src=\"aide_index.php3?aide=$aide&var_lang=$spip_lang&frame=menu\" name=\"gauche\" scrolling=\"auto\" noresize>\n";
        $frame_body = "<frame src=\"aide_index.php3?aide=$aide&var_lang=$spip_lang&frame=body\" name=\"droite\" scrolling=\"auto\" noresize>\n";

        if ($GLOBALS['spip_lang_rtl']) {
                echo '<frameset cols="*,160" border="0" frameborder="0" framespacing="0">';
                echo $frame_body.$frame_menu;
        }
        else {
                echo '<frameset cols="160,*" border="0" frameborder="0" framespacing="0">';
                echo $frame_menu.$frame_body;
        }
        echo '</frameset>';
        echo "\n</html>";
}



/////////////////////////////
// Le contenu demande
//

// Erreur aide non disponible
function erreur_aide_indisponible() {
        include_ecrire('inc_presentation.php3');
        install_debut_html(_T('forum_titre_erreur'));
        echo "<div>"._T('aide_non_disponible')."</div>";
        echo "<div align='right'>".menu_langues('var_lang_ecrire')."</div>";
        install_fin_html();
        exit;
}

// Selection de l'aide correspondant a la langue demandee
function fichier_aide($lang_aide = '') {
        global $help_server;

        if (!$lang_aide) $lang_aide = $GLOBALS['spip_lang'];

        // fichier local ?
        if (@file_exists($fichier_aide = "../AIDE/aide-$lang_aide-aide.html")) {
                return array(spip_file_get_contents($fichier_aide), $lang_aide);
        }

        // fichier local ? si reduction ISO du code langue oc_prv_ni => oc
        else if (ereg("(.*)_", $lang_aide, $regs)
                AND (@file_exists($fichier_aide = "../AIDE/aide-".$regs[1]."-aide.html")))
                        return array(spip_file_get_contents($fichier_aide), $regs[1]);

        // Aide internet
        else {
                // en cache ?
                if (!@file_exists($fichier_aide = _DIR_CACHE . "aide-$lang_aide-aide.html")) {
                        if ($help_server) {
                                include_ecrire('inc_sites.php3');
                                if (ecrire_fichier(_DIR_CACHE . 'aide-test', "test")
                                AND ($contenu = recuperer_page("$help_server/$lang_aide-aide.html")))
                                        ecrire_fichier ($fichier_aide, $contenu);
                        }
                }

                lire_fichier($fichier_aide, $contenu);

                if (strlen($contenu) > 500) {
                        return array($contenu, $lang_aide);
                }
                
                // Pas d'aide meme sur internet : n'existe pas dans la langue

                // Hack: comportement special sur le serveur d'aide SPIP.NET
                // (definir la constante SPIP.NET_...)
                if (defined('SPIP.NET_PAS_DE_BOUCLE_AIDE')) {
                        $GLOBALS['clean_link'] = new Link("../aide/?aide=$aide");
                }

                erreur_aide_indisponible();
        }

        return false;
}


function help_body($aide, $html) {
        global $help_server;


        // Recuperation du contenu de l'aide demandee
        if ($aide) {
                $html = analyse_aide($html, $aide);

                if (!$html) {
                        erreur_aide_indisponible();
                }
        } else {
                // panneau d'accueil
                $html = '<CENTER>
                        <img src="'._DIR_IMG_PACK.
                        'logo-spip.gif" alt="SPIP" width="267" height="170" border="0">
                        <p />
                        <div align="center" style="font-variant: small-caps;">
                        Syst&egrave;me de publication pour l\'Internet
                        </div></CENTER>
                        <div style="position:absolute; bottom: 10px; right:20px;
                        font-size: 12px; ">'.
                preg_replace(",<a ,i", "<a target='_new' ",_T('info_copyright_doc')).
                        '</div>';
        }

        // Recherche des images de l'aide
        $suite = $html;
        $html = "";
        while (preg_match("@(<img([^<>]* +)? src=['\"])"
                . "((AIDE|IMG)/([-_a-zA-Z0-9]*/?)([^'\"<>]*))@i",
        $suite, $r)) {

                $image = $r[3];
                $image_plat = str_replace('/', '-', $image);
                $f = "aide_index.php3?img=$image_plat";

                $p = strpos($suite, $r[0]);
                $html .= substr($suite, 0, $p) . $r[1].$f;
                $suite = substr($suite, $p + strlen($r[0]));
        }

        $html .= $suite;

?>
<style type="text/css"><!--
.spip_cadre {
        width : 100%;
        background-color: #FFFFFF;
        padding: 5px;
}
.spip_quote {
        margin-left : 40px;
        margin-top : 10px;
        margin-bottom : 10px;
        border : solid 1px #aaaaaa;
        background-color: #dddddd;
        padding: 5px;
}

a {text-decoration: none;}
a:hover {color:#FF9900; text-decoration: underline;}

body {
        font-family: Georgia, Garamond, Times New Roman, serif;
}
h3.spip {
        font-family: Verdana,Arial,Sans,sans-serif;
        font-weight: bold;
        font-size: 115%;
        text-align: center;
}

table.spip {
}

table.spip tr.row_first {
        background-color: #FCF4D0;
}

table.spip tr.row_odd {
        background-color: #C0C0C0;
}

table.spip tr.row_even {
        background-color: #F0F0F0;
}

table.spip td {
        padding: 1px;
        text-align: left;
        vertical-align: center;
}

--></style>
</head>
<?php

        echo '<body bgcolor="#FFFFFF" text="#000000" TOPMARGIN="24" LEFTMARGIN="24" MARGINWIDTH="24" MARGINHEIGHT="24"';
        if ($spip_lang_rtl)
                echo " dir='rtl'";
        echo " lang='$lang_aide'>";

        if ($aide == 'spip') {
                echo '<TABLE BORDER=0 WIDTH=100% HEIGHT=60%>
<TR WIDTH=100% HEIGHT=60%>
<TD WIDTH=100% HEIGHT=60% ALIGN="center" VALIGN="middle">

<CENTER>
<img src="aide_index.php3?img=AIDE--logo-spip.gif" alt="SPIP" width="300" height="170" border="0">
</CENTER>
</TD></TR></TABLE>';
        }

        // Il faut que la langue de typo() soit celle de l'aide en ligne
        changer_typo($lang_aide);

        $html = justifier($html."<p>");
        // Remplacer les liens externes par des liens ouvrants (a cause des frames)
        $html = ereg_replace('<a href="(http://[^"]+)"([^>]*)>', '<a href="\\1"\\2 target="_blank">', $html);

        echo $html;

}


/////////////////////////////////////
// Recuperer une image dans le cache
//
function help_img($regs) {
        global $help_server;

        list ($cache, $rep, $lang, $file, $ext) = $regs;

        header("Content-Type: image/$ext");
        if (@file_exists($img = _DIR_CACHE . 'aide-'.$cache)) {
                readfile($img);
        } else if (@file_exists($img = '../AIDE/aide-'.$cache)) {
                readfile($img);
        } else if ($help_server) {
                include_ecrire('inc_sites.php3');
                if (ecrire_fichier(_DIR_CACHE . 'aide-test', "test")
                AND ($contenu =
                recuperer_page("$help_server/$rep/$lang/$file"))) {
                        echo $contenu;
                        ecrire_fichier (_DIR_CACHE . 'aide-'.$cache, $contenu);
                } else
                        header ("Location: $help_server/$rep/$lang/$file");
        }
        exit;
}

///////////////////////////////////////
// Le menu de gauche
//
function help_menu($aide, $html) {
        global $spip_lang_left, $spip_lang_rtl, $spip_lang_right;

$triangle = "url(" . _DIR_IMG_PACK . 'triangle'.$spip_lang_rtl.'.gif) ';

echo '<style type="text/css">
<!--
        a {text-decoration: none; }
        A:Hover {text-decoration: underline;}

        .article-inactif {
                float: '.$spip_lang_left.';
                text-align: '.$spip_lang_left.';
                width: 80%;
                background: ' . $triangle . $spip_lang_left.' center no-repeat;
                margin: 2px;
                padding: 0px;
                padding-'.$spip_lang_left.': 20px;
                font-family: Arial, Sans, sans-serif;
                font-size: 12px;
        }
        .article-actif {
                float: '.$spip_lang_right.';
                text-align: '.$spip_lang_right.';
                width: 80%;
                background: ' . $triangle . $spip_lang_right.' center no-repeat;
                margin: 4px;
                padding: 0px;
                padding-'.$spip_lang_right.': 20px;
                font-family: Arial, Sans, sans-serif;
                font-size: 12px;
                font-weight: bold;
                color: black;
        }
        .article-actif:hover {
                text-decoration: none;
        }
        .rubrique {
                width: 90%;
                margin: 0px;
                margin-top: 6px;
                margin-bottom: 4px;
                padding: 4px;
                font-family: Trebuchet MS, Arial, Sans, sans-serif;
                font-size: 13px;
                font-weight: bold;
                color: black;
                background-color: #EEEECC;
                -moz-border-radius: 4px;
        }
-->
</style>
<script type="text/javascript"><!--
var curr_article;
function activer_article(id) {
        if (curr_article)
                document.getElementById(curr_article).className = "article-inactif";
        if (id) {
                document.getElementById(id).className = "article-actif";
                curr_article = id;
        }
}
//--></script>
';

afficher_script_layer();
echo '
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#E86519" vlink="#6E003A" alink="#FF9900" TOPMARGIN="5" LEFTMARGIN="5" MARGINWIDTH="5" MARGINHEIGHT="5"';

        if ($spip_lang_rtl)
                echo " dir='rtl'";
        echo " lang='$lang_aide'>";


        // Recuperation et analyse de la structure de l'aide demandee
        $sections = analyse_aide($html);
        foreach ($sections as $section) {
                if ($section[1] == '1') {
                        if ($rubrique_vue)
                                fin_rubrique();
                        rubrique($section[3].$section[5]);
                        $rubrique_vue = true;
                } else
                        article($section[5], $section[3]);
        }
        fin_rubrique();
}


function rubrique($titre, $statut = "redac") {
        global $ligne_rubrique;
        global $block_rubrique;
        global $titre_rubrique;
        global $afficher_rubrique, $ouvrir_rubrique;
        global $larubrique;

        global $aide_statut;

        $afficher_rubrique = 0;

        if (($statut == "admin" AND $aide_statut == "admin") OR ($statut == "redac")) {
                $larubrique++;
                $titre_rubrique = $titre;
                $ligne_rubrique = array();
                $block_rubrique = "block$larubrique";
                $afficher_rubrique = 1;
                $ouvrir_rubrique = 0;
        }
}

function fin_rubrique() {
        global $ligne_rubrique;
        global $block_rubrique;
        global $titre_rubrique;
        global $afficher_rubrique, $ouvrir_rubrique;
        global $texte;

        if ($afficher_rubrique && count($ligne_rubrique)) {
                echo "<div class='rubrique'>";
                if ($ouvrir_rubrique)
                        echo bouton_block_visible($block_rubrique);
                else 
                        echo bouton_block_invisible($block_rubrique);
                echo $titre_rubrique;
                echo "</div>\n";
                if ($ouvrir_rubrique)
                        echo debut_block_visible($block_rubrique);
                else
                        echo debut_block_invisible($block_rubrique);
                echo "\n";
                reset($ligne_rubrique);
                while (list(, $ligne) = each($ligne_rubrique)) {
                        echo $texte[$ligne];
                }
                echo fin_block();
                echo "\n\n";
        }
}

function article($titre, $lien, $statut = "redac") {
        global $aide;
        global $ligne;
        global $ligne_rubrique;
        global $rubrique;
        global $texte;
        global $afficher_rubrique, $ouvrir_rubrique;
        global $aide_statut;
        global $spip_lang;

        if ($afficher_rubrique AND (($statut == "admin" AND $aide_statut == "admin") OR ($statut == "redac"))) {
                $ligne_rubrique[] = ++$ligne;
                
                $texte[$ligne] = '';
                $id = "ligne$ligne";
                $url = "aide_index.php3?aide=$lien&frame=body&var_lang=$spip_lang";
                if ($aide == $lien) {
                        $ouvrir_rubrique = 1;
                        $class = "article-actif";
                        $texte[$ligne] .= "<script type='text/javascript'><!--\ncurr_article = '$id';\n// --></script>\n";
                }
                else {
                        $class = "article-inactif";
                }
                $texte[$ligne] .= "<a class='$class' id='$id' href='$url' target='droite' ".
                        "onClick=\"activer_article('$id');return true;\">$titre</a><br style='clear:both;'>\n";
        }
}


function analyse_aide($html, $aide=false) {

        preg_match_all(',<h([12])( class="spip")?'. '>([^/]+?)(/(.+?))?</h\1>,ism',
        $html, $regs, PREG_SET_ORDER);

        if ($aide) {
                unset ($regs);
                $preg = ',<h2( class="spip")?'
                . ">$aide/(.+?)</h2>(.*)$,ism";
                preg_match($preg, $html, $regs);
                $regs = preg_replace(',<h[12].*,ism', '', $regs[3]);
        }

        return $regs;
}


//
// Distribuer le travail
//
if (preg_match(',^([^-.]*)-([^-.]*)-([^\.]*\.(gif|jpg|png))$,', $img, $regs))
        help_img($regs);
else {
        list($html, $l, $url_aide) = fichier_aide();

        // On n'a pas d'aide
        if (!$html) {
                // Renvoyer sur l'aide en ligne du serveur externe
                if ($help_server)
                        @Header("Location: $help_server/?lang=$spip_lang");
                // Sinon message d'erreur
                else {
                        erreur_aide_indisponible();
                }
        } else {
                echo debut_entete(_T('info_aide_en_ligne'),
                                  "Content-Type: text/html; charset=utf-8");
                if ($frame == 'menu')
                        help_menu($aide, $html);
                else if ($frame == 'body')
                        help_body($aide, $html);
                else
                        help_frame($aide);
        }
}

?>