source: spip-zone/_plugins_/_stable_/couteau_suisse/outils/introduction_fonctions.php @ 27090

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

#INTRODUCTION : Points de suite classés

File size: 4.9 KB
Line 
1<?php
2
3@define('_INTRODUCTION_CODE', '@@CS_SUITE@@');
4
5// compatibilite avec SPIP 1.92 et anterieurs
6$GLOBALS['cs_couper_intro'] = 'couper_intro';
7if (!defined('_SPIP19300')) {
8        $GLOBALS['cs_couper_intro'] = 'couper_intro2';
9        function couper_intro2($texte, $long, $suite) {
10                $texte = couper_intro($texte, $long);
11                $i = strpos($texte, '&nbsp;(...)');
12                if (strlen($texte) - $i == 11)
13                        $texte = substr($texte, 0, $i) . _INTRODUCTION_CODE;
14                return $texte;
15        }
16        function chapo_redirigetil($chapo) { return $chapo && $chapo[0] == '='; }
17        function objet_type($table_objet){ return preg_replace(',^spip_|s$,', '', $table_objet); }
18}
19// compatibilite avec SPIP 2.0 : la balise a fortement change !! >> TODO
20// la fonction couper_intro a disparu.
21// voir function filtre_introduction_dist
22if (defined('_SPIP19300')) {
23        $GLOBALS['cs_couper_intro'] = 'couper_intro3';
24        function couper_intro3($texte, $long, $suite) {
25                $texte = extraire_multi(preg_replace(",(</?)intro>,i", "\\1intro>", $texte)); // minuscules
26                $intro = '';
27                while ($fin = strpos($texte, "</intro>")) {
28                        $zone = substr($texte, 0, $fin);
29                        $texte = substr($texte, $fin + strlen("</intro>"));
30                        if ($deb = strpos($zone, "<intro>") OR substr($zone, 0, 7) == "<intro>")
31                                $zone = substr($zone, $deb + 7);
32                        $intro .= $zone;
33                }
34                $texte = nettoyer_raccourcis_typo($intro ? $intro : $texte);
35                return PtoBR(traiter_raccourcis(preg_replace(',([|]\s*)+,S', '; ', couper($texte, $long, _INTRODUCTION_CODE))));
36        }
37}
38
39function remplace_points_de_suite($texte, $id, $racc) {
40        if (strpos($texte, _INTRODUCTION_CODE) === false) return $texte;
41        // precaution sur le tout paragrapher de SPIP 2.0 !
42        $mem = $GLOBALS['toujours_paragrapher']; 
43        $GLOBALS['toujours_paragrapher'] = false; 
44        // des points de suite bien propres
45        @define('_INTRODUCTION_SUITE', '&nbsp;(...)');
46        $intro_suite = propre(_INTRODUCTION_SUITE);
47        // si les points de suite sont cliquables
48        if ($id && _INTRODUCTION_LIEN == 1) {
49                if (substr($intro_suite, 0, 6) == '<br />') 
50                        $intro_suite = propre("<br />[".substr($intro_suite, 6)."->$racc$id]");
51                        else $intro_suite = propre("&nbsp;[{$intro_suite}->$racc$id]");
52                $intro_suite = inserer_attribut($intro_suite, 'class', extraire_attribut($intro_suite,'class') . ' pts_suite');
53        }
54        $GLOBALS['toujours_paragrapher'] = $mem; 
55        return str_replace(_INTRODUCTION_CODE, $intro_suite, $texte);
56}
57
58// lgr>0 : aucun parametre, donc lgr par defaut
59// lgr<0 : parametre #INTRODUCTION{longeur}
60// lgr=0 : pas possible
61// TODO : $connect est pour SPIP 2.0
62function cs_introduction($texte, $descriptif, $lgr, $id, $racc, $connect) {
63        // fonction couper_intro
64        $couper = $GLOBALS['cs_couper_intro'];
65        if (strlen($descriptif))
66                # si descriptif contient juste des espaces ca produit une intro vide,
67                # c'est une fonctionnalite, pas un bug
68                // ici le descriptif est coupe s'il est trop long
69                $texte = $lgr<0?propre($couper($descriptif, -$lgr, _INTRODUCTION_CODE)):propre($descriptif);
70        else {
71                // pas de maths dans l'intro...
72                $texte = preg_replace(',<math>.*</math>,imsU', '', $texte);
73                // on coupe proprement...
74                $texte = PtoBR(propre(supprimer_tags($couper(cs_introduire($texte), $lgr>0?round($lgr*_INTRODUCTION_LGR/100):-$lgr, _INTRODUCTION_CODE))));
75        }
76        // si les points de suite ont ete ajoutes
77        return remplace_points_de_suite($texte, $id, $racc);
78} // introduction()
79
80if (!function_exists('balise_INTRODUCTION')) {
81        // #INTRODUCTION_SPIP (pour tests)
82        function balise_INTRODUCTION_SPIP($p) {
83                return balise_INTRODUCTION_dist($p);
84        }
85        include_spip('public/interfaces');
86        global $table_des_traitements;
87        // INTRODUCTION_SPIP est une INTRODUCTION !
88        if (!isset($table_des_traitements['INTRODUCTION_SPIP']))
89                $table_des_traitements['INTRODUCTION_SPIP'] = $table_des_traitements['INTRODUCTION'];
90        // #INTRODUCTION
91        function balise_INTRODUCTION($p) {
92                @define('_INTRODUCTION_LGR', 100);
93                $type = $p->type_requete;
94                $_texte = champ_sql('texte', $p);
95                $_descriptif =  "''";
96                $_id = 0;
97                $_lgr = "600";
98                switch ($type) {
99                        case 'articles':
100                                $_chapo = champ_sql('chapo', $p);
101                                $_descriptif =  champ_sql('descriptif', $p);
102                                $_texte = "(strlen($_descriptif) OR chapo_redirigetil($_chapo)) ? '' : $_chapo . \"\\n\\n\" . $_texte";
103                                $_lgr = "500";
104                                break;
105                        case 'rubriques':
106                                $_descriptif =  champ_sql('descriptif', $p);
107                                break;
108                        case 'breves':
109                                $_lgr = "300";
110                                break;
111                }
112                // longueur en parametre ?
113                if(($v = interprete_argument_balise(1,$p))!==NULL) $_lgr = "-intval($v)" ;
114                $_id = champ_sql(id_table_objet($racc = objet_type($type)), $p);
115                $p->code = "cs_introduction($_texte, $_descriptif, $_lgr, $_id, '$racc', \$connect)";
116       
117                #$p->interdire_scripts = true;
118                $p->etoile = '*'; // propre est deja fait dans le calcul de l'intro
119                return $p;
120        }
121       
122} //!function_exists('balise_INTRODUCTION')
123else spip_log("Erreur - balise_INTRODUCTION() existe deja et ne peut pas etre surchargee par le Couteau Suisse !");
124
125?>
Note: See TracBrowser for help on using the repository browser.