Esempio n. 1
0
function aide_fichier($path, $help_server)
{
    $md5 = md5(serialize($help_server));
    $fichier_aide = _DIR_AIDE . substr($md5, 0, 16) . "-" . $path;
    $lastm = @filemtime($fichier_aide);
    $lastversion = @filemtime(_DIR_RESTREINT . 'inc_version.php');
    $here = @(is_readable($fichier_aide) and $lastm >= $lastversion);
    $contenu = '';
    if ($here) {
        lire_fichier($fichier_aide, $contenu);
        return array($contenu, $lastm);
    }
    // mettre en cache (tant pis si echec)
    sous_repertoire(_DIR_AIDE, '', '', true);
    $contenu = array();
    include_spip('inc/distant');
    foreach ($help_server as $k => $server) {
        // Remplacer les liens aux images par leur gestionnaire de cache
        $url = "{$server}/{$path}";
        $local = _DIR_AIDE . substr(md5($url), 0, 8) . "-" . preg_replace(",[^\\w.]+,i", "_", $url);
        $local = _DIR_RACINE . copie_locale($url, 'modif', $local);
        lire_fichier($local, $page);
        $page = aide_fixe_img($page, $server);
        // les liens internes ne doivent pas etre deguises en externes
        $url = parse_url($url);
        $re = '@(<a\\b[^>]*\\s+href=["\'])' . '(?:' . $url['scheme'] . '://' . $url['host'] . ')?' . $url['path'] . '([^"\']*)@ims';
        $page = preg_replace($re, '\\1\\2', $page);
        preg_match_all(_SECTIONS_AIDE, $page, $sections, PREG_SET_ORDER);
        // Fusionner les aides ayant meme nom de section
        $vus = array();
        foreach ($sections as $section) {
            list($tout, $prof, $sujet, ) = $section;
            if (in_array($sujet, $vus)) {
                continue;
            }
            $corps = aide_section($sujet, $page, $prof);
            foreach ($contenu as $k => $s) {
                if ($sujet == $k) {
                    // Section deja vue qu'il faut completer
                    // Si le complement a des sous-sections,
                    // ne pas en tenir compte quand on les rencontrera
                    // lors des prochains passages dans la boucle
                    preg_match_all(_SECTIONS_AIDE, $corps, $s, PREG_PATTERN_ORDER);
                    if ($s) {
                        $vus = array_merge($vus, $s[2]);
                    }
                    $contenu[$k] .= $corps;
                    $corps = '';
                    break;
                }
            }
            // Si totalement nouveau, inserer le titre
            // mais pas le corps s'il contient des sous-sections:
            // elles vont venir dans les passages suivants
            if ($corps) {
                $corps = aide_section($sujet, $page);
                $contenu[$sujet] = $tout . "\n" . $corps;
            }
        }
    }
    $contenu = '<div>' . join('', $contenu) . '</div>';
    // Renvoyer les liens vraiment externes dans une autre fenetre
    $contenu = preg_replace('@<a href="(http://[^"]+)"([^>]*)>@', '<a href="\\1"\\2 target="_blank">', $contenu);
    // Correction typo dans la langue demandee
    #changer_typo($lang_aide);
    $contenu = '<body>' . $contenu . '</body>';
    if (strlen($contenu) <= 100) {
        return array(false, false);
    }
    ecrire_fichier($fichier_aide, $contenu);
    return array($contenu, time());
}
Esempio n. 2
0
function aide_extrait_section($aide)
{
    return aide_section($aide, aide_contenu());
}