source: spip-zone/_plugins_/dictionnaires/trunk/dictionnaires_pipelines.php @ 61875

Last change on this file since 61875 was 61875, checked in by rastapopoulos@…, 9 years ago

Report des modifs faites dans les deux versions pour égaliser.

Pour l'instant elles sont absolument équivalentes mise à part que le trunk a les infos pour SPIP 3, et du coup c'est le même numéro de version. Il faudra évidemment changer ça.

File size: 4.3 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) return;
5
6function dictionnaires_declarer_url_objets($objets){
7        $objets[] = 'dictionnaire';
8        $objets[] = 'definition';
9        return $objets;
10}
11
12function dictionnaires_post_edition($flux){
13        // Seulement si c'est une modif d'objet
14        if ($flux['args']['action'] == 'modifier' and $id_objet = $flux['args']['id_objet']){
15                $trouver_table = charger_fonction('trouver_table', 'base/');
16                $desc = $trouver_table($flux['args']['table_objet'], $flux['args']['serveur']);
17                $id_table_objet = id_table_objet($flux['args']['type']);
18               
19                // On cherche les champs textuels
20                $champs_texte = array();
21                foreach ($desc['field'] as $champ=>$sql){
22                        if (preg_match('/(text|blob|varchar)/', $sql)){
23                                $champs_texte[] = $champ;
24                        }
25                }
26               
27                // On récupère ces champs
28                $textes = sql_fetsel($champs_texte, $flux['args']['spip_table_objet'], "$id_table_objet = $id_objet");
29                // On récupère les définitions
30                include_spip('inc/dictionnaires');
31                $definitions = dictionnaires_lister_definitions();
32               
33                // On les scanne
34                foreach ($textes as $texte){
35                       
36                }
37        }
38}
39
40function dictionnaires_post_propre($texte){
41        $GLOBALS['dictionnaires_id_texte'] = uniqid();
42        include_spip('inc/dictionnaires');
43        $definitions = dictionnaires_lister_definitions();
44        $masques = array();
45        foreach ($definitions as $definition){
46                $masques[] = $definition['masque'];
47        }
48       
49        // Quelque soit le type de définition
50        // on ne fait rien à l'intérieur de certaines balises
51        $masque_echap = '{<(acronym|abbr|a|code|cadre|textarea)[^>]*>.*</\1>}Uis';
52        preg_match_all($masque_echap, $texte, $balises_echap, PREG_SET_ORDER);
53        $morceaux_a_traiter = preg_split($masque_echap, $texte);
54       
55        // On parcours uniquement les textes hors balises <abbr>
56        foreach ($morceaux_a_traiter as $cle => $morceau_a_traiter){
57                // On ne traite que ce qui est hors balises
58                $masque_balises = '{<([a-z]+[^<>]*)>}i';
59                preg_match_all($masque_balises, $morceau_a_traiter, $balises, PREG_SET_ORDER);
60                $textes_a_traiter = preg_split($masque_balises, $morceau_a_traiter);
61                $textes_a_traiter = preg_replace_callback($masques, 'dictionnaires_replace_callback', $textes_a_traiter);
62               
63                foreach ($textes_a_traiter as $cle2 => $texte_a_traiter){
64                        $textes_a_traiter[$cle2] = $texte_a_traiter ;
65                        if (isset($balises[$cle2][0])) 
66                                $textes_a_traiter[$cle2] .= $balises[$cle2][0];
67                }
68               
69                $morceaux_a_traiter[$cle] = join('', $textes_a_traiter);
70                if (isset($balises_echap[$cle][0])) 
71                        $morceaux_a_traiter[$cle] .= $balises_echap[$cle][0];
72        }
73        $texte = join('', $morceaux_a_traiter);
74       
75        $texte = echappe_retour($texte, 'dictionnaires');
76        return $texte;
77}
78
79function dictionnaires_replace_callback($captures){
80        include_spip('inc/config');
81        static $deja_remplaces = array();
82        static $id_texte = '';
83        $definitions = dictionnaires_lister_definitions_par_terme();
84        $remplacer_celui_la = true;
85       
86        // Si c'est un nouveau texte, on vide la liste des déjà remplacés
87        $nouveau_texte = ((!$id_texte) or ($id_texte != $GLOBALS['dictionnaires_id_texte']));
88        if ($nouveau_texte){
89                $id_texte = $GLOBALS['dictionnaires_id_texte'];
90                $deja_remplaces = array();
91        }
92       
93        // Par défaut rien
94        $retour = $captures[0];
95       
96        // On cherche la définition du terme trouvé
97        if ($definition = $definitions[$captures[2]] or $definition = $definitions[strtolower($captures[2])]){
98                $type = $definition['type'];
99               
100                // Si on a demandé à remplacer uniquement le premier mot trouvé
101                if (
102                        ($type and lire_config('dictionnaires/remplacer_premier_'.$type))
103                        or (!$type and lire_config('dictionnaires/remplacer_premier_defaut'))
104                ){
105                        foreach ($definition['termes'] as $terme){
106                                if (in_array($terme, $deja_remplaces)){
107                                        $remplacer_celui_la = false;
108                                }
109                        }
110                }
111               
112                // On ne travaille pas pour rien !
113                if ($remplacer_celui_la){
114                        if (function_exists("dictionnaires_remplacer_$type")) { $remplacer = "dictionnaires_remplacer_$type"; }
115                        elseif (function_exists("dictionnaires_remplacer_${type}_dist")) { $remplacer = "dictionnaires_remplacer_${type}_dist"; }
116                        elseif (function_exists("dictionnaires_remplacer_defaut")) { $remplacer = "dictionnaires_remplacer_defaut"; }
117                        else { $remplacer = "dictionnaires_remplacer_defaut_dist"; }
118               
119                        $retour = $captures[1].code_echappement($remplacer($captures[2], $definition), 'dictionnaires');
120                        $deja_remplaces = array_merge($deja_remplaces, $definition['termes']);
121                }
122        }
123       
124        return $retour;
125}
126
127?>
Note: See TracBrowser for help on using the repository browser.