source: spip-zone/_plugins_/revision_nbsp/revision_nbsp.php @ 41278

Last change on this file since 41278 was 41278, checked in by fil@…, 11 years ago

auto-detection des notes finales quand elles ne sont pas encadrees par des crochets

File size: 3.2 KB
Line 
1<?php
2
3/*
4 * revision_nbsp
5 *
6 * Dans l'espace prive, souligne en grise les espaces insecables
7 *
8 * Auteur : fil@rezo.net
9 * © 2005-2007 - Distribue sous licence GNU/GPL
10 *
11 * l'icone <edit-find-replace.png> est tiree de Tango Desktop Project
12 * http://tango.freedesktop.org/Tango_Desktop_Project -- sous licence
13 * http://creativecommons.org/licenses/by-sa/2.5/
14 *
15 */
16
17
18        function RevisionNbsp_revision_nbsp($letexte) {
19                if (!_DIR_RESTREINT
20                AND !defined('_STOP_REVISION_NBSP')
21                ) {
22                        $letexte = echappe_html($letexte, '', true, ',(<img[^<]*>),Ums');
23                        $letexte = str_replace('&nbsp;',
24                                '<span style="border-bottom:2px solid #ccc;">&nbsp;</span>', $letexte);
25                        $letexte = str_replace("\n_ ",
26                                "<span style='color:orange;'>&para;</span>\n_ ", $letexte);
27                        return $letexte;
28                } else
29                        return $letexte;
30        }
31
32        function RevisionNbsp_ajoute_bouton_corriger_les_notes($x) {
33                global $nb_notes;
34                if ($GLOBALS['auteur_session']['statut'] == '0minirezo')
35                if ($x['args']['exec'] == 'articles') {
36                        $id_article = intval($x['args']['id_article']);
37                        $t = sql_fetch(spip_query("SELECT texte FROM spip_articles WHERE id_article=$id_article"));
38                        if ($c = notes_automatiques($t['texte'])) {
39                                $x['data'] .= "<br />\n"
40                                .debut_boite_info(true)
41                                .icone_horizontale(
42                                        'Transformer les ' . $nb_notes . ' notes de cet article.',
43                                        generer_url_action('corriger_notes', 'id_article='.$id_article),
44                                                _DIR_PLUGIN_REVISIONNBSP."edit-find-replace.png",  # grml!!
45                                                "rien.gif", false)
46                                .fin_boite_info(true);
47                        }
48#                       else $x['data'] .= "<div>pas de notes a corriger</div>";
49                }
50                return $x;
51        }
52
53
54        function notes_automatiques($texte) {
55                global $nb_notes; // sale
56
57                // Attraper les notes
58                $regexp = ', *\[\[(.*?)\]\],msS';
59                if (strpos($texte, '[[')
60                AND $s = preg_match_all($regexp, $texte, $matches, PREG_SET_ORDER)
61                AND $s==1
62                AND preg_match(",^ *<>(.*),s", $matches[0][1], $r)) {
63                        $lesnotes = $r[1];
64                        $letexte = trim(str_replace($matches[0][0], '', $texte));
65
66                        $num = 0;
67                        while (($a = strpos($lesnotes, '('.(++$num).')')) !== false
68                        AND (
69                                ($b = strpos($letexte, '('.($num).')')) !== false
70                                OR ($b = strpos($letexte, '['.($num).'])')) !== false
71                        )) {
72                                if (!isset($debut))
73                                        $debut = trim(substr($lesnotes, 0, $a));
74
75                                $lanote = substr($lesnotes,$a+strlen('('.$num.')'));
76
77                                $lanote = preg_replace(
78                                ',[(]'.($num+1).'[)].*,s', '',$lanote
79                                );
80                                $lesnotes = substr($lesnotes, $a+strlen('('.$num.')')+strlen($lanote));
81                                $lanote = trim($lanote);
82                                $lanote = (strlen($lanote) ? '[[ '.$lanote.' ]]' : '');
83
84                                $letexte = substr($letexte,0,$b)
85                                        . $lanote
86                                        . substr($letexte,$b+strlen('('.$num.')'));
87                        }
88
89                        $nb_notes = $num-1;
90
91                        if (strlen($suite = trim($lesnotes)))
92                                $letexte.= '[[<> '.$suite.' ]]';
93
94                        if (isset($debut)) {
95                                return (strlen($debut)?"\n\n[[<>$debut ]]":'') . $letexte;
96                        }
97                }
98
99
100                //  Cas deux : on recherche des notes en derniers paragraphes,
101                // commencant par (1), on les reinjecte en [[<> ... ]] et on
102                // relance la fonction sur cette onstruction.
103                else {
104                        $texte = trim($texte);
105                        if (preg_match_all(',^[(](\d+)[)].*$,UmS', $texte, $regs)
106                        AND preg_match(',^(.*\n)([(]1[)].*)$,UmsS', $texte, $u)) {
107                                $notes = $u[2];
108                                $texte = $u[1];
109                                return notes_automatiques("$texte\n\n[[<> $notes ]]");
110                        } 
111                }
112
113        }
114
115?>
Note: See TracBrowser for help on using the repository browser.