source: spip-zone/_galaxie_/programmer.spip.org/plugin_documentation/documentation_pipelines.php @ 52868

Last change on this file since 52868 was 52868, checked in by kent1@…, 9 years ago
File size: 3.8 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5function documentation_pre_boucle($boucle){
6        // ARTICLES, RUBRIQUES : {par num titre, titre}
7        if (in_array($boucle->type_requete, array('rubriques','articles'))
8        AND !$boucle->order) {
9                $boucle->select[] = "0+" . $boucle->id_table . ".titre AS autonum";
10                $boucle->order[]  = "'autonum'";
11                $boucle->order[]  = "'" . $boucle->id_table . ".titre'";
12        }
13        return $boucle;
14}
15
16
17function documentation_jquery_plugins($plugins){
18        $plugins[] = "javascript/menu_documentation.js";
19        $plugins[] = "javascript/documentation.js";
20        return $plugins;
21}
22
23function documentation_insert_head($flux){
24        // pour les petites roues ajax de .animeajax()
25        $flux .= "
26        <script type='text/javascript'><!--
27        var ajax_image_searching = \"<img src='" . url_absolue(chemin_image("searching.gif")) . "' alt='' />\";
28        --></script>
29        ";
30        return $flux;
31}
32
33// valeurs par defaut sur les nouveaux tickets
34function documentation_formulaire_charger($flux){
35        if ($flux['args']['form'] == 'editer_ticket'
36                and (!$flux['args']['args'][0] OR $flux['args']['args'][0] == 'oui') // nouveau ticket
37                and !$flux['data']['type']) {
38                        $flux['data']['type'] = 2;
39                        $flux['data']['severite'] = 4;
40        }
41        return $flux;
42}
43
44
45// ajouter automatiquement des title "art30" sur les raccourcis [->art30]
46// donc, transformer [->art30] en [|art30->art30]
47// ce qui permet a l'integrale de gerer des numeros de pages sur les liens
48function documentation_pre_liens($texte){       
49        // uniquement dans le public
50        if (test_espace_prive()) return $texte;
51
52        $regs = $match = array();
53        // pour chaque lien
54        if (preg_match_all(_RACCOURCI_LIEN, $texte, $regs, PREG_SET_ORDER)) {   
55                foreach ($regs as $reg) {
56                        // si le lien est de type raccourcis "art40"
57                        if (preg_match(_RACCOURCI_URL, $reg[4], $match)) {
58                                $title = '|' . $match[1] . $match[2];
59                                // s'il n'y a pas deja ce title
60                                if (false === strpos($reg[0], $title)) {
61                                        $lien = substr_replace($reg[0], $title, strpos($reg[0], '->'), 0);
62                                        $texte = str_replace($reg[0], $lien, $texte);
63                                }
64                        }
65                }       
66        }
67        return $texte;
68}
69
70// transformer les <a title="art30" href="xxx">zzz</a>
71// en <a href="#art30">zzz</a> (enfin <a title="art30" href="#art30">zzz</a> en attendant mieux)
72// seulement dans le squelette integrale
73// pour que le pdf puisse calculer les numero de page des liens
74function documentation_affichage_final($page){
75        // uniquement dans le public
76        if (test_espace_prive()) return $page;
77       
78        if (_request('page') == 'integrale') {
79                include_spip('inc/filtres');
80                include_spip('inc/lien');
81                $as = extraire_balises($page, 'a');
82                foreach($as as $a) {
83                        if ($title = extraire_attribut($a, 'title')) {
84                                if (preg_match(_RACCOURCI_URL, $title, $match)) {
85                                        $old_a = $a;
86                                        // on laisse le title parce que a[href|="#"] ne semble pas pris en compte avec Prince...
87                                        // $a = vider_attribut($a, 'title');
88                                        $a = inserer_attribut($a, 'href', '#' . $title);
89                                        $page = str_replace($old_a, $a, $page);
90                                }
91                        }
92                }
93                unset($as, $a, $old_a, $title);
94
95                // INDEX
96                // et dans la foulee : generer des liens d'index dans l'ordre de la page :
97                // on cherche les <!-- index_moi:mot#ID_MOT -->
98                if (preg_match_all('#<!-- index_moi:(mot\d+) -->#', $page, $regs, PREG_SET_ORDER)) {
99                        foreach ($regs as $reg) {
100                                $liens = array();
101                                $trouve = 'id="('.$reg[1].'([[:alpha:]][^"]+))"'; // au moins un caractere car si "mot10" on pourrait trouver des "mot103rub4"
102                                if (preg_match_all("#$trouve#", $page, $ids, PREG_SET_ORDER)) {
103                                        foreach ($ids as $id) {
104                                                $interessant = ($id[2][0] == 'r'); // vers une rubrique... loin d'etre ideal
105                                                $lien = "<a href='#$id[1]'></a>";
106                                                if ($interessant) $lien = '<strong>'.$lien.'</strong>';
107                                                $liens[] = $lien;
108                                        }
109                                }
110                                $liens = implode(', ', $liens);
111                                $page = str_replace("<!-- index_moi:$reg[1] -->", $liens, $page);
112                        }
113                }
114        }
115        return $page;
116}
117
118?>
Note: See TracBrowser for help on using the repository browser.