Server : Apache System : Linux webd348.cluster026.gra.hosting.ovh.net 5.15.148-ovh-vps-grsec-zfs-classid #1 SMP Thu Feb 8 09:41:04 UTC 2024 x86_64 User : hednacluml ( 122243) PHP Version : 8.3.9 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl Directory : /home/hednacluml/france/plugins-dist/aide/inc/ |
<?php /***************************************************************************\ * SPIP, Système de publication pour l'internet * * * * Copyright © avec tendresse depuis 2001 * * Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribué sous licence GNU/GPL. * \***************************************************************************/ /** * Gestion de l'aide en ligne de SPIP * * L'aide en ligne de SPIP est disponible sous forme d'articles de www.spip.net * qui ont des repères nommés arttitre, artdesc etc. * * La fonction `inc_aider_dist` reçoit soit ces repères, * soit le nom du champ de saisie, le nom du squelette le contenant et enfin * l'environnement d'exécution du squelette (inutilisé pour le moment). * * Le tableau global `aider_index` donne ces repères. * * @package SPIP\Core\Aider */ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/filtres'); /** * Déclaration de l'index d'aide */ function aide_index(): array { static $index = null; if ($index === null) { $index = []; $index['raccourcis'] = [ 'resume', 'simple', 'lien', 'note', 'citation', 'tableau', 'liste', 'glossaire', 'ancre', 'code' ]; $index = pipeline('aide_index', $index); } return $index; } /** * Quelques mappages d'alias historiques <= SPIP 4 */ function aide_index_alias_historiques(): array { return [ 'text_area' => 'raccourcis', 'chapo' => 'raccourcis', ]; } /** * Générer un lien d'aide (icône + lien) * * @uses aider_icone() * * @param string $aide * clé d'identification du groupe d'aide souhaité. Peut indiquer une entrée spécifique. * Tel que 'raccourcis' ou 'raccourcis/liens' * @return string * icone et lien… * vide si on ne trouve pas le groupe d'aide demandé. **/ function inc_aide_dist($aide = ''): string { $index = aide_index(); if (!$aide) { // pour le moment rien sur entrée vide... return ''; } $alias = aide_index_alias_historiques(); if (isset($alias[$aide])) { $aide = $alias[$aide]; } $aide = explode('/', $aide, 2); $groupe = array_shift($aide); $entree = $aide ? reset($aide) : ''; if (!isset($index[$groupe])) { return ''; } $url = aide_generer_url($groupe, $entree); return aider_icone($url); } /** Génère l'url d'une entrée d'aide */ function aide_generer_url(string $groupe, ?string $entree = null): string { $url = generer_url_ecrire('aide'); $url = parametre_url($url, 'aide', $groupe, '&'); if ($entree) { $url = parametre_url($url, 'entree', $entree, '&'); } return $url; } /** * Créer l'icône d'aide * * @global string $spip_lang * @global string $spip_lang_rtl * * @param string $url * URL vers l'aide * @param string $clic * Contenu de la balise de lien. * @return string * Icone d'aide */ function aider_icone($url, $clic = '') { include_spip('inc/lang'); if (!$clic) { $t = _T('titre_image_aide'); $clic = http_img_pack( 'aide' . aide_lang_dir($GLOBALS['spip_lang'], $GLOBALS['spip_lang_rtl']) . '-16.png', _T('info_image_aide'), " title=\"$t\" class='aide'" ); } return "\n <a class='aide popin'\nhref='" . $url . "' target='_blank'>" . $clic . '</a>'; } // Affichage du menu de gauche avec analyse de la section demandee function aide_data(?string $groupe = null): array { static $menu = []; if (!isset($menu[$groupe])) { include_spip('inc/aide'); $index = aide_index(); if ($groupe === null) { // juste un menu… $menu[$groupe] = [ 'titre' => _T('icone_aide_ligne'), 'entrees' => [], ]; foreach (array_keys($index) as $group) { $menu[$groupe]['entrees'][] = [ 'titre' => _T('aide:' . $group), 'link' => aide_generer_url($group), 'texte' => aide_contenu($group, '_intro'), ]; } } else { $entrees = $index[$groupe] ?? null; if ($entrees === null) { // le groupe est introuvable… return $menu[$groupe] = []; } $menu[$groupe] = [ 'titre' => _T('aide:' . $groupe), 'slug' => $groupe, 'intro' => aide_contenu($groupe, '_intro'), 'entrees' => [], ]; foreach ($entrees as $entree) { $menu[$groupe]['entrees'][] = [ 'titre' => _T('aide:' . $groupe . '_' . $entree), 'groupe' => $menu[$groupe]['titre'], 'slug' => $menu[$groupe]['slug'] . '-' . $entree, 'texte' => aide_contenu($groupe, $entree), ]; } } } return $menu[$groupe]; } /** * Retrouve le contenu d'une aide demandée */ function aide_contenu(string $groupe, string $entree): string { $langues = aide_langues(); foreach ($langues as $lang) { $aide_entree = find_in_path("aide/$lang/$groupe/$entree.spip"); if ($aide_entree) { lire_fichier($aide_entree, $content); return $content; } } return ''; } /** * Retourne la liste des langues dans laquelle une aide est cherchée * On part par défaut de spip_lang * * pt_br => pt => langue_du_site => langue_par_defaut => fr */ function aide_langues($lang = null): array { if ($lang === null) { $lang = $GLOBALS['spip_lang']; } static $langues = []; if (!isset($langues[$lang])) { $_langues = [$lang]; if (strpos($lang, '_') !== false) { $l = explode('_', $lang); while (count($l) > 1) { array_pop($l); $_langues[] = implode('_', $l); } } $_langues[] = $GLOBALS['meta']['langue_site']; $_langues[] = _LANGUE_PAR_DEFAUT; $_langues[] = 'fr'; $_langues = array_unique($_langues); $langues[$lang] = $_langues; } return $langues[$lang]; } /** Gérer le raccourcis `<aide:code>...</aide:code>` */ function aide_pre_echappe_html_propre($flux) { if ( str_contains($flux, '<') && str_contains($flux, '<aide:code>') ) { $regexp = '#' . preg_quote('<aide:code>') . '(.*)' . preg_quote('</aide:code>') . '#Uims'; while (preg_match($regexp, $flux, $matches)) { $code = trim($matches[1]); $flux = str_replace( $matches[0], <<<HTML <div class="aide_code"> <div class="aide_code_source"> ```` $code ```` </div> <div class="aide_code_result"> <p></p> $code </div> </div> HTML, $flux, ); } } return $flux; }