source: plugins_spip/diogene_complements/diogene_mots/trunk/diogene_mots_pipelines.php @ 6923

Last change on this file since 6923 was 6923, checked in by kent1, 8 years ago

On suit le changement de pipeline cf r6919

File size: 7.1 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5/**
6 * Insertion dans le pipeline diogene_ajouter_saisies (Diogene)
7 *
8 * @param array $flux Le contexte du pipeline
9 * @return array $flux le contexte modifié passé aux suivants
10 */
11function diogene_mots_diogene_ajouter_saisies($flux){
12        $id_article = $flux['args']['contexte']['id_article'];
13        if (is_array(unserialize($flux['args']['champs_ajoutes'])) && in_array('mots',unserialize($flux['args']['champs_ajoutes']))) {
14
15                if (!is_array(unserialize($flux['args']['options_complements']['mots_obligatoires']))) {
16                        $mots_obligatoires = array();
17                } else {
18                        $mots_obligatoires = unserialize($flux['args']['options_complements']['mots_obligatoires']);
19                }
20                if(!is_array(unserialize($flux['args']['options_complements']['mots_facultatifs']))) {
21                        $mots_facultatifs = array();
22                } else {
23                        $mots_facultatifs = unserialize($flux['args']['options_complements']['mots_facultatifs']);
24                }
25                $valeurs_mots['id_groupes'] = $groupes_possibles = array_merge($mots_obligatoires,$mots_facultatifs);
26               
27                if (intval($id_article)) {                             
28                        //On récupÚre les mots qui sont peut être associés
29                        foreach($groupes_possibles as $groupe){
30                                if (sql_getfetsel('unseul','spip_groupes_mots','id_groupe='.intval($groupe))== 'oui') {
31                                        $valeurs_mots['groupe_'.$groupe] = sql_fetsel('mot.id_mot','spip_mots as mot LEFT JOIN spip_mots_liens as mots_liens ON (mot.id_mot=mots_liens.id_mot)','mots_liens.objet="article" AND mots_liens.id_objet='.intval($id_article).' AND mot.id_groupe='.intval($groupe));
32                                }else {
33                                        $result = sql_select('mot.id_mot','spip_mots as mot LEFT JOIN spip_mots_liens as mots_liens ON mot.id_mot=mots_liens.id_mot','mots_liens.objet="article" AND id_groupe='.intval($groupe).' AND mots_liens.id_objet='.intval($id_article));
34                                        while ($row = sql_fetch($result)) {
35                                                $valeurs_mots['groupe_'.$groupe][] = $row['id_mot'];
36                                        }
37                                }
38                        }
39                }
40               
41                if (is_array($valeurs_mots)) {
42                        $flux['args']['contexte'] = array_merge($flux['args']['contexte'],$valeurs_mots);
43                }
44               
45                $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_medias_mots',$flux['args']['contexte']);
46        }
47        return $flux;
48}
49
50/**
51 * Insertion dans le pipeline diogene_verifier (Diogene)
52 * Vérification des formulaires qui sont modifiés par Diogene
53 *
54 * @param array $flux Le contexte du pipeline
55 * @return array $flux le contexte modifié passé aux suivants
56 */
57function diogene_mots_diogene_verifier($flux){
58        $id_diogene = _request('id_diogene');
59        if(intval($id_diogene)){
60                $diogene = sql_fetsel("*","spip_diogenes","id_diogene=".intval($id_diogene));
61                $options_complements = unserialize($diogene['options_complements']);
62                $erreurs = $flux['args']['erreurs'];
63                // On teste si les groupes obligatoires sont ok
64                if (is_array($options_complements['mots_obligatoires'])) {
65                        foreach($options_complements['mots_obligatoires'] as $groupe_obligatoire){
66                                $mots_groupe = _request('groupe_'.$groupe_obligatoire);
67                                if(empty($mots_groupe)){
68                                        $erreurs['groupe_'.$groupe_obligatoire] = _T('info_obligatoire');
69                                }
70                        }
71                }
72        }
73        return $flux;
74}
75
76/**
77 * Insertion dans le pipeline diogene_traiter (Diogene)
78 * Fonction s'exécutant au traitement des formulaires modifiés par Diogene
79 *
80 * @param array $flux Le contexte du pipeline
81 * @return array $flux le contexte modifié passé aux suivants
82 */
83function diogene_mots_diogene_traiter($flux){
84        if (($flux['args']['type'] == 'article') AND ($id_diogene = _request('id_diogene'))) {
85                $id_article = $flux['args']['id_objet'];
86
87                $diogene = sql_fetsel("*","spip_diogenes","id_diogene=".intval($id_diogene));
88                $options_complements = unserialize($diogene['options_complements']);
89
90                $mots_obligatoires = is_array(unserialize($options_complements['mots_obligatoires']))
91                        ? unserialize($options_complements['mots_obligatoires'])
92                        : array();
93                       
94                $mots_facultatifs = is_array(unserialize($options_complements['mots_facultatifs']))
95                        ? unserialize($options_complements['mots_facultatifs'])
96                        : array();
97
98                /**
99                 * On traite les mots clés obligatoires ou pas
100                 */ 
101                include_spip('inc/editer_mots');
102                $groupes_possibles = array_merge($mots_obligatoires,$mots_facultatifs);
103               
104                $mots_multiples = array();
105               
106                /**
107                 * On traite chaque groupe séparément
108                 * Si c'est une modification d'article il se peut qu'il faille supprimer les anciens mots
109                 * On fait une vérifications sur chaque groupe
110                 */
111                foreach($groupes_possibles as $groupe){
112                        /**
113                         * Si le select est multiple
114                         */
115                        if(is_array(_request('groupe_'.$groupe))){
116                                $result = sql_select('0+mot.titre AS num, mot.id_mot','spip_mots as mot LEFT JOIN spip_mots_liens as liens ON mot.id_mot=liens.id_mot','liens.objet="article" AND id_groupe='.intval($groupe).' AND liens.id_objet='.intval($id_article),'','num, mot.titre');
117                                while ($row = sql_fetch($result)) {
118                                        $mots_multiples[] = $row['id_mot'];
119                                }
120                                foreach(_request('groupe_'.$groupe) as $cle => $mot){
121                                        /**
122                                         * Si le mot est déja dans les mots, on le supprime juste
123                                         * de l'array des mots originaux
124                                         */
125                                        if(in_array($mot, $mots_multiples)){
126                                                unset($mots_multiples[$cle]);
127                                        }
128                                        else{
129                                                sql_insertq('spip_mots_liens', array('id_mot' =>$mot,  'id_objet' => $id_article,'objet'=> 'article'));
130                                        }
131                                }
132                        }
133                        /**
134                         * Si le select est simple
135                         */
136                        else{
137                                if(!is_array($mots_uniques = sql_fetsel('mot.id_mot','spip_mots as mot LEFT JOIN spip_mots_liens as liens ON (mot.id_mot=liens.id_mot)','liens.objet="article" AND liens.id_objet='.intval($id_article).' AND mot.id_groupe='.intval($groupe))))
138                                        $mots_uniques = array();
139                                if(in_array(_request('groupe_'.$groupe), $mots_uniques)){
140                                        unset($mots_uniques);
141                                }
142                                else{
143                                        sql_insertq('spip_mots_liens', array('id_mot' =>_request('groupe_'.$groupe),  'id_objet' => $id_article,'objet'=>'article'));
144                                }
145                        }
146                        /**
147                         * S'il reste quelque chose dans les mots d'origine, on les délie de l'article
148                         */
149                        if(count($mots_uniques)>0){
150                                sql_delete('spip_mots_liens','objet="article" AND id_objet='.intval($id_article).' AND id_mot IN ('.implode(',',$mots_uniques).')');
151                        }
152                        if(count($mots_multiples)>0){
153                                sql_delete('spip_mots_liens','objet="article" AND id_objet='.intval($id_article).' AND id_mot IN ('.implode(',',$mots_multiples).')');
154                        }
155                }
156        }
157        return $flux;
158}
159
160/**
161 * Insertion dans le pipeline diogene_objets (Diogene)
162 * Fonction permettant de mettre des mots dans le formulaire d'un Diogene
163 *
164 * @param array $flux Le contexte du pipeline
165 * @return array $flux le contexte modifié passé aux suivants
166 */
167function diogene_mots_diogene_objets($flux){
168        $flux['article']['champs_sup']['mots'] = _T('diogene_mots:form_legend');
169        if(defined('_DIR_PLUGIN_PAGES'))
170                $flux['page']['champs_sup']['mots'] = _T('diogene_mots:form_legend');
171        return $flux;
172}
173
174function diogene_mots_diogene_champs_texte($flux){
175        $champs = $flux['args']['champs_ajoutes'];
176        if((is_array($champs) OR is_array($champs = unserialize($champs)))
177                && in_array('mots',$champs)){
178                $flux['data'] .= recuperer_fond('prive/diogene_mots_champs_texte', $flux['args']);
179        }
180        return $flux;
181}
182
183function diogene_mots_diogene_champs_pre_edition($array){
184        $array[] = 'mots_obligatoires';
185        $array[] = 'mots_facultatifs';
186        return $array;
187}
188
189?>
Note: See TracBrowser for help on using the repository browser.