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()); }
function aide_extrait_section($aide) { return aide_section($aide, aide_contenu()); }