[PLUGINS] +clavettes et dependances
[lhc/web/clavette_www.git] / www / plugins / agenda_3_5 / agenda_pipelines.php
1 <?php
2 /**
3 * Plugin Agenda 4 pour Spip 3.0
4 * Licence GPL 3
5 *
6 * 2006-2011
7 * Auteurs : cf paquet.xml
8 */
9
10 if (!defined("_ECRIRE_INC_VERSION")) return;
11
12 /**
13 * Inserer la CSS de l'agenda si config cochee
14 * forcee par define('_AGENDA_INSERT_HEAD_CSS',false|true) par le squelette si besoin
15 *
16 * @param $flux
17 * @return mixed
18 */
19 function agenda_insert_head_css($flux){
20 if (!defined('_AGENDA_INSERT_HEAD_CSS') OR !_AGENDA_INSERT_HEAD_CSS){
21 include_spip("inc/config");
22 $cfg = (defined('_AGENDA_INSERT_HEAD_CSS')?_AGENDA_INSERT_HEAD_CSS:lire_config("agenda/insert_head_css"));
23 if ($cfg){
24 $flux .= '<link rel="stylesheet" type="text/css" href="'.find_in_path("css/spip.agenda.css").'" />';
25 }
26 }
27 return $flux;
28 }
29
30 /**
31 * Inserer les infos d'agenda sur les articles et rubriques
32 *
33 * @param array $flux
34 * @return array
35 */
36 function agenda_affiche_milieu($flux) {
37 $e = trouver_objet_exec($flux['args']['exec']);
38 $out = "";
39 if ($e['type']=='rubrique'
40 AND autoriser('configurer')
41 AND $e['edition']==false
42 AND $id_rubrique = intval($flux['args']['id_rubrique'])
43 AND autoriser('modifier', 'rubrique', $id_rubrique)){
44 $activer = true;
45 $res = "";
46 $actif = sql_getfetsel('agenda','spip_rubriques','id_rubrique='.intval($id_rubrique));
47 $statut="-32";
48 $alt = "";
49 $voir = "";
50 if (!sql_countsel('spip_rubriques','agenda=1'))
51 $res .= "<span class='small'>" . _T('agenda:aucune_rubrique_mode_agenda') . "</span><br />";
52 else {
53 include_spip('inc/rubriques');
54 if (sql_countsel('spip_rubriques',sql_in('id_rubrique',calcul_hierarchie_in($id_rubrique))." AND agenda=1 AND id_rubrique<>".intval($id_rubrique))){
55 $alt = _T('agenda:rubrique_dans_une_rubrique_mode_agenda');
56 $activer = false;
57 $statut="-ok-32";
58 $voir = _T('agenda:voir_evenements_rubrique');
59 }
60 elseif(!$actif) {
61 $alt = _T('agenda:rubrique_sans_gestion_evenement').'<br />';
62 $statut="-non-32";
63 }
64 if ($actif){
65 $alt = _T('agenda:rubrique_mode_agenda').'<br />';
66 $statut="-ok-32";
67 $voir = _T('agenda:voir_evenements_rubrique');
68 }
69 }
70
71 if (!$actif){
72 if($activer){
73 $res .= bouton_action(_T('agenda:rubrique_activer_agenda'),generer_action_auteur('activer_agenda_rubrique',$id_rubrique,self()),'ajax');
74 }
75 }
76 else
77 $res .= bouton_action(_T('agenda:rubrique_desactiver_agenda'),generer_action_auteur('activer_agenda_rubrique',"-$id_rubrique",self()),'ajax');
78 if ($voir)
79 $res .= " | <a href='".generer_url_ecrire('evenements',"id_rubrique=$id_rubrique")."'>$voir</a>";
80 if ($res)
81 $out .= boite_ouvrir(_T('agenda:agenda').http_img_pack("agenda$statut.png",$alt,"class='statut'",$alt),'simple agenda-statut')
82 . $res
83 . boite_fermer();
84 }
85 elseif ($e['type']=='article'
86 AND $e['edition']==false){
87 $id_article = $flux['args']['id_article'];
88 $out .= recuperer_fond('prive/objets/contenu/article-evenements',$flux['args']);
89 }
90
91 if ($out){
92 if ($p=strpos($flux['data'],'<!--affiche_milieu-->'))
93 $flux['data'] = substr_replace($flux['data'],$out,$p,0);
94 else
95 $flux['data'] .= $out;
96 }
97 return $flux;
98 }
99
100 /**
101 * Optimiser la base (evenements a la poubelle, lies a des articles disparus, ou liens mots sur evenements disparus)
102 *
103 * @param array $flux
104 * @return array
105 */
106 function agenda_optimiser_base_disparus($flux){
107
108 # passer a la poubelle
109 # les evenements lies a un article inexistant
110 $res = sql_select("DISTINCT evenements.id_article","spip_evenements AS evenements
111 LEFT JOIN spip_articles AS articles
112 ON evenements.id_article=articles.id_article","articles.id_article IS NULL");
113 while ($row = sql_fetch($res))
114 sql_updateq("spip_evenements",array('statut'=>'poubelle'),"id_article=".$row['id_article']);
115
116 // Evenements a la pouvelle
117 sql_delete("spip_evenements", "statut='poubelle' AND maj < ".$flux['args']['date']);
118
119 include_spip('action/editer_liens');
120 // optimiser les liens de tous les mots vers des objets effaces
121 // et depuis des mots effaces
122 $flux['data'] += objet_optimiser_liens(array('mot'=>'*'),array('evenement'=>'*'));
123
124 return $flux;
125 }
126
127
128 /**
129 * Lister les evenements dans le calendrier de l'espace prive (extension organiseur)
130 *
131 * @param array $flux
132 * @return array
133 */
134 function agenda_quete_calendrier_prive($flux){
135 $quoi = $flux['args']['quoi'];
136 if (!$quoi OR $quoi=='evenements'){
137 $start = sql_quote($flux['args']['start']);
138 $end = sql_quote($flux['args']['end']);
139 $res = sql_select('*','spip_evenements AS E',"((E.date_fin >= $start OR E.date_debut >= $start) AND E.date_debut <= $end)");
140 while ($row = sql_fetch($res)){
141 $flux['data'][] = array(
142 'id' => $row['id_evenement'],
143 'title' => $row['titre'],
144 'allDay' => false,
145 'start' => $row['date_debut'],
146 'end' => $row['date_fin'],
147 'url' => str_replace("&amp;","&",generer_url_entite($row['id_evenement'],'evenement')),
148 'className' => "calendrier-event evenement calendrier-couleur5",
149 'description' => $row['descriptif'],
150 );
151 }
152 }
153 return $flux;
154 }
155
156 /**
157 * Synchroniser le statut des evenements lorsqu'on publie/depublie un article
158 * @param array $flux
159 * @return array
160 */
161 function agenda_post_edition($flux){
162 if ($flux['args']['table']=='spip_articles'
163 AND $flux['args']['action'] == 'instituer'
164 AND $id_article = $flux['args']['id_objet']
165 AND isset($flux['data']['statut'])
166 AND $statut = $flux['data']['statut']
167 AND $statut_ancien = $flux['args']['statut_ancien']
168 AND $statut!=$statut_ancien){
169
170 $set = array();
171 // les evenements principaux, associes a cet article
172 $where = array('id_article='.intval($id_article),'id_evenement_source=0');
173 switch($statut){
174 case 'poubelle':
175 // on passe aussi tous les evenements associes a la poubelle, sans distinction
176 $set['statut'] = 'poubelle';
177 break;
178 case 'publie':
179 // on passe aussi tous les evenements prop en publie
180 $set['statut'] = 'publie';
181 $where[] = "statut='prop'";
182 break;
183 default:
184 if ($statut_ancien=='publie'){
185 // on depublie aussi tous les evenements publie
186 $set['statut'] = 'prop';
187 $where[] = "statut='publie'";
188 }
189 break;
190 }
191 if (count($set)){
192 include_spip('action/editer_evenement');
193 $res = sql_select('id_evenement','spip_evenements',$where);
194 // et on applique a tous les evenements lies a l'article
195 while ($row = sql_fetch($res)){
196 evenement_modifier($row['id_evenement'],$set);
197 }
198 }
199 }
200 return $flux;
201 }
202
203 /*
204 * Synchroniser les liaisons (mots, docs, gis, etc) de l'événement édité avec ses répétitions s'il en a
205 * @param array $flux
206 * @param array
207 */
208 function agenda_post_edition_lien($flux){
209 // Si on est en train de lier ou délier quelque chose a un événement
210 if ($flux['args']['objet'] == 'evenement'){
211 // On cherche si cet événement a des répétitions
212 if ($id_evenement = $flux['args']['id_objet']
213 and $id_evenement > 0
214 and $repetitions = sql_allfetsel('id_evenement', 'spip_evenements', 'id_evenement_source = '.$id_evenement)
215 and is_array($repetitions)
216 ){
217 include_spip('action/editer_liens');
218
219 // On a la liste des ids des répétitions
220 $repetitions = array_map('reset', $repetitions);
221
222 // Si c'est un ajout de lien, on l'ajoute à toutes les répétitions
223 if ($flux['args']['action'] == 'insert'){
224 objet_associer(
225 array($flux['args']['objet_source'] => $flux['args']['id_objet_source']),
226 array('evenement' => $repetitions)
227 );
228 }
229 // Si c'est une suppression de lien, on le supprime à toutes les répétitions
230 elseif ($flux['args']['action'] == 'delete'){
231 objet_dissocier(
232 array($flux['args']['objet_source'] => $flux['args']['id_objet_source']),
233 array('evenement' => $repetitions)
234 );
235 }
236 }
237 }
238
239 return $flux;
240 }
241
242 /**
243 * Les evenements peuvent heriter des compositions des articles
244 * @param array $heritages
245 * @return array
246 */
247 function agenda_compositions_declarer_heritage($heritages) {
248 $heritages['evenement'] = 'article';
249 return $heritages;
250 }
251
252 /**
253 * Insertion dans le pipeline revisions_chercher_label (Plugin révisions)
254 * Trouver le bon label à afficher sur les champs dans les listes de révisions
255 *
256 * Si un champ est un champ extra, son label correspond au label défini du champs extra
257 *
258 * @pipeline revisions_chercher_label
259 * @param array $flux Données du pipeline
260 * @return array Données du pipeline
261 **/
262 function agenda_revisions_chercher_label($flux){
263 foreach(array('date_debut', 'date_fin','horaire','lieu') as $champ){
264 if($flux['args']['champ'] == $champ){
265 $flux['data'] = _T('agenda:evenement_'.$champ);
266 return $flux;
267 }
268 }
269
270 if($flux['args']['champ'] == 'id_article')
271 $flux['data'] = _T('agenda:evenement_article');
272
273 return $flux;
274 }
275
276 ?>