source: spip-zone/_plugins_/import_ics/trunk/import_ics_pipelines.php @ 101560

Last change on this file since 101560 was 101560, checked in by maieul@…, 3 years ago

compatible avec plugin corbeille

File size: 6.6 KB
Line 
1<?php
2/**
3 * Utilisations de pipelines par Import_ics
4 *
5 * @plugin     Import_ics
6 * @copyright  2013
7 * @author     Amaury
8 * @licence    GNU/GPL
9 * @package    SPIP\Import_ics\Pipelines
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) return;
13       
14/**
15 * Optimiser la base de données en supprimant
16 * les almanachs à la poubelle
17 * et les liens orphelins depuis et vers les almanachs
18 * @pipeline optimiser_base_disparus
19 * @param  array $flux Données du pipeline
20 * @return array       Données du pipeline
21 */
22function import_ics_optimiser_base_disparus($flux){
23
24        include_spip('action/editer_liens');
25
26        $res = sql_select(
27                'id_almanach AS id',
28                'spip_almanachs',
29                'statut='.sql_quote('poubelle')
30        );
31       
32        $flux['data'] += optimiser_sansref('spip_almanachs', 'id_almanach', $res);
33        $flux['data'] += objet_optimiser_liens(array('almanach'=>'*'),'*');
34        $flux['data'] += objet_optimiser_liens(array('mot'=>'*'), array('almanach' => '*'));
35
36        return $flux;
37}
38
39
40
41function import_ics_taches_generales_cron($taches_generales){
42        $taches_generales['import_ics_synchro'] = 3600*24;/*mettre à jour toutes les 24 heures parait bien*/
43        return $taches_generales;
44}
45
46function import_ics_evenement_liaisons_colonne_gauche($flux){
47        $flux["data"]= $flux["data"].recuperer_fond("prive/objets/infos/evenement_liaisons_almanach",$flux['args']);
48        return $flux;
49}
50
51
52/**
53 * Synchroniser le statut des evenements lorsqu'on publie/depublie un almanach
54 * Synchroniser le statut des almanaches lorsqu'on publie/depublie un evt
55 * @param array $flux
56 * @return array
57 */
58function import_ics_post_edition($flux) {
59        /* Première cas: le statut de l'almanach est modifié*/
60        if (isset($flux['args']['table'])
61                and $flux['args']['table']=='spip_almanachs'
62                and $flux['args']['action'] == 'instituer'
63                and $id_almanach = $flux['args']['id_objet']
64                and isset($flux['data']['statut'])
65                and $statut = $flux['data']['statut']
66                and $statut_ancien = $flux['args']['statut_ancien']
67                and $statut != $statut_ancien) {
68                $set = array();
69                $where = array();
70                switch ($statut) {
71                        case 'poubelle':
72                                // on passe aussi tous les evenements associes a la poubelle, sans distinction
73                                $set['statut'] = 'poubelle';
74                                break;
75                        case 'publie':
76                                // on passe aussi tous les evenements prop en publie
77                                $set['statut'] = 'publie';
78                                $where[] = "statut='prop'";
79                                break;
80                        case 'prop':
81                                $set['statut'] = 'prop';
82                                $where[] = "statut='publie'";
83                                break;
84                        }
85                if (count($set)) {
86                        include_spip('action/editer_evenement');
87                        $res = sql_select('E.id_evenement', 'spip_evenements AS E
88                        INNER JOIN spip_almanachs_liens AS L
89                        ON E.id_evenement = L.id_objet AND L.id_almanach='.intval($id_almanach), $where);
90                        // et on applique a tous les evenements lies a l'almanach
91                        while ($row = sql_fetch($res)) {
92                                evenement_modifier($row['id_evenement'], $set);
93                        }
94                        sql_free($res);
95                }
96        }
97        // Second cas: modification du statut d'un article
98       
99        if (isset($flux['args']['table'])
100                and $flux['args']['table']=='spip_articles'
101                and $flux['args']['action'] == 'instituer'
102                and $id_article = $flux['args']['id_objet']
103                and isset($flux['data']['statut'])
104                and $statut = $flux['data']['statut']
105                and $statut_ancien = $flux['args']['statut_ancien']
106                and $statut != $statut_ancien) {
107                $set = array();
108                // les almanachs associes a cet article
109                $where = array('id_article='.intval($id_article));
110                switch ($statut) {
111                        case 'poubelle':
112                                // on passe aussi tous les almanachs associes a la poubelle, sans distinction
113                                $set['statut'] = 'poubelle';
114                                break;
115                        case 'publie':
116                                // on passe aussi tous les almanachs prop en publie
117                                $set['statut'] = 'publie';
118                                $where[] = "statut='prop'";
119                                break;
120                        default:// c'est à dire lors de la bascule de l'article vers refuse / en cours de modification / proposé
121                                if ($statut_ancien=='publie') {
122                                        // on depublie aussi tous les almanachs publie
123                                        $set['statut'] = 'prop';
124                                        $where[] = "statut='publie'";
125                                }
126                                break;
127                }
128                if (count($set)) {
129                        include_spip('inc/autoriser');
130                        include_spip('action/editer_objet');
131                        $res = sql_select('id_almanach', 'spip_almanachs', $where);
132                        // et on applique a tous les evenements lies a l'article
133                        while ($row = sql_fetch($res)) {
134                                $id_almanach = $row['id_almanach'];
135                                autoriser_exception('instituer','almanach',$id_almanach);
136                                objet_instituer('almanach',$id_almanach,$set);
137                                autoriser_exception('instituer','almanach',$id_almanach,false);
138                        }
139                }
140        }
141       
142        return $flux;
143}
144
145
146/**
147 * Inserer les infos d'almanach sur les articles
148 *
149 * @param array $flux
150 * @return array
151 */
152function import_ics_affiche_milieu($flux){
153        $e = trouver_objet_exec($flux['args']['exec']);
154        $out = False;
155        if ($e["type"]=="article" and $e['edition']==false){
156                $out = recuperer_fond('prive/objets/contenu/article-almanachs', $flux['args']);
157               
158        }
159       
160        if ($out) {
161                if ($p = strpos($flux['data'],'<div id="agenda">')){
162                        $flux['data'] = substr_replace($flux['data'], $out, $p, 0);
163                }
164                elseif ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
165                        $flux['data'] = substr_replace($flux['data'], $out, $p, 0);
166                } else {
167                        $flux['data'] .= $out;
168                }
169        }
170        return $flux;
171}
172
173/**
174* Modifier les mots-clé liés à un évènement
175* lorsque l'almanach de cet évènement voit ses mot-clé modifiés
176* @param array $flux
177* @return array
178*/
179function import_ics_post_edition_lien($flux){
180        if ($flux['args']['objet_source'] == 'mot' and $flux['args']['objet'] == 'almanach'){//si on modifie la liaison mot/objet
181                // ce qui a été modifié
182                $id_mot = $flux['args']['id_objet_source'];
183                $id_almanach = $flux['args']['id_objet'];
184                $action = $flux['args']['action'];
185               
186                // chercher les evenement liés à l'almanach
187                include_spip('inc/import_ics');
188                $evenements = trouver_evenements_almanach($id_almanach,'id_evenement',true);
189                foreach ($evenements as $evt){
190                        $id_evenement = $evt['id_evenement'];
191                        if ($action == 'delete'){
192                                objet_dissocier(
193                                        array('mot'=>$id_mot),
194                                        array('evenement'=>$id_evenement)
195                                );
196                                spip_log ("Dissociation du mot-clef $id_mot de l'évènement $id_evenement suite à modif de l'almanach $id_almanach","import_ics"._LOG_INFO);
197                        }
198                        elseif ($action == 'insert'){
199                                objet_associer(
200                                        array('mot'=>$id_mot),
201                                        array('evenement'=>$id_evenement)
202                                );
203                                spip_log ("Association du mot-clef $id_mot de l'évènement $id_evenement suite à modif de l'almanach $id_almanach","import_ics"._LOG_INFO);                                     
204                        }
205                }
206        }
207        return $flux;
208}
209
210
211/** Déclarer les almanachs
212 * au plugin corbeille
213 * @param array $flux;
214 * @return array $flux;
215**/
216function import_ics_corbeille_table_infos($flux){
217        $flux['almanachs']= array(
218                'statut'=>'poubelle',
219                'table'=>'almanachs', 
220                'tableliee'=>array('spip_almanachs_liens')
221        );
222        return $flux;
223}
Note: See TracBrowser for help on using the repository browser.