[SPIP] v3.2.1-->v3.2.3
[lhc/web/www.git] / www / plugins-dist / organiseur / organiseur_pipelines.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Utilisations de pipelines
15 *
16 * @package SPIP\Organiseur\Pipelines
17 **/
18
19 if (!defined('_ECRIRE_INC_VERSION')) {
20 return;
21 }
22
23
24 /**
25 * Lister les tables à ne pas inclure dans un export de BDD
26 *
27 * Ici se ramener à tester l'admin restreint est un abus
28 * car cela présume qu'un admin restreint ne peut pas faire de sauvegarde
29 * complète, alors que l'intention est d'exclure les messages
30 * des sauvegardes partielles que peuvent réaliser les admin restreint
31 *
32 * @todo *a revoir*
33 * @pipeline lister_tables_noexport
34 *
35 * @param array $EXPORT_tables_noexport
36 * @return array
37 */
38 function organiseur_lister_tables_noexport($EXPORT_tables_noexport) {
39 if (!$GLOBALS['connect_toutes_rubriques']) {
40 $EXPORT_tables_noexport[] = 'spip_messages';
41 #$EXPORT_tables_noexport[]='spip_auteurs_liens'; // where objet='message'
42 }
43
44 return $EXPORT_tables_noexport;
45 }
46
47 /**
48 * Optimiser les liens morts dans la base de donnees
49 *
50 * @pipeline optimiser_base_disparus
51 *
52 * @param array $flux
53 * @return array
54 */
55 function organiseur_optimiser_base_disparus($flux) {
56 //
57 // Messages prives
58 //
59
60 # supprimer les messages lies a un auteur disparu
61 $res = sql_select(
62 'M.id_message AS id',
63 'spip_messages AS M
64 LEFT JOIN spip_auteurs AS A
65 ON A.id_auteur=M.id_auteur',
66 'A.id_auteur IS NULL'
67 );
68
69 $flux['data'] += optimiser_sansref('spip_messages', 'id_message', $res);
70
71 return $flux;
72 }
73
74 /**
75 * Generer les alertes message recu a destination de l'auteur
76 * concerne par l'appel
77 *
78 * @pipeline alertes_auteur
79 *
80 * @param array $flux
81 * @return array
82 */
83 function organiseur_alertes_auteur($flux) {
84
85 $id_auteur = $flux['args']['id_auteur'];
86
87 $result_messages = sql_allfetsel(
88 'M.id_message',
89 "spip_messages AS M LEFT JOIN spip_auteurs_liens AS L ON (L.objet='message' AND L.id_objet=M.id_message)",
90 'L.id_auteur=' . intval($id_auteur) . " AND L.vu='non' AND M.statut='publie' AND M.type='normal'"
91 );
92 $total_messages = count($result_messages);
93 if ($total_messages == 1) {
94 $row = reset($result_messages);
95 $id_message = $row['id_message'];
96 $flux['data'][] = "<a href='" . generer_url_ecrire(
97 'message',
98 "id_message=$id_message"
99 ) . "'>" . _T('organiseur:info_1_message_nonlu') . '</a>';
100 } elseif ($total_messages > 1) {
101 $flux['data'][] = "<a href='" . generer_url_ecrire('messages') . "'>" . _T(
102 'organiseur:info_nb_messages_nonlus',
103 array('nb' => $total_messages)
104 ) . '</a>';
105 }
106
107 return $flux;
108 }
109
110 /**
111 * Afficher les interventions et objets en lien
112 * avec un auteur (sur sa page)
113 *
114 * @pipeline affiche_auteurs_interventions
115 *
116 * @param array $flux
117 * @return array
118 */
119 function organiseur_affiche_auteurs_interventions($flux) {
120
121 if ($id_auteur = intval($flux['args']['id_auteur'])) {
122 include_spip('inc/message_select');
123 // Messages de l'auteur et discussions en cours
124 if ($GLOBALS['meta']['messagerie_agenda'] != 'non'
125 and $id_auteur != $GLOBALS['visiteur_session']['id_auteur']
126 and autoriser('repondre', 'message', '', $id_auteur)
127 ) {
128 $flux['data'] .= recuperer_fond(
129 'prive/squelettes/inclure/organiseur-interventions',
130 array('id_auteur' => $id_auteur)
131 );
132 }
133 }
134
135 return $flux;
136 }
137
138 /**
139 * Déclarer les metas de configuration de l'agenda/messagerie
140 *
141 * @pipeline configurer_liste_metas
142 * @param array $metas
143 * Couples nom de la méta => valeur par défaut
144 * @return array
145 * Couples nom de la méta => valeur par défaut
146 */
147 function organiseur_configurer_liste_metas($metas) {
148 $metas['messagerie_agenda'] = 'oui';
149
150 return $metas;
151 }
152
153 /**
154 * Insérer la css de l'agenda dans l'espace privé (hum)
155 *
156 * @pipeline header_prive
157 * @param string $head
158 * @return string
159 */
160 function organiseur_header_prive($head) {
161 // CSS calendrier
162 if ($GLOBALS['meta']['messagerie_agenda'] != 'non') {
163 $head .= '<link rel="stylesheet" type="text/css" href="'
164 . url_absolue(find_in_path('calendrier.css')) . '" />' . "\n";
165 }
166
167 return $head;
168 }
169
170 /**
171 * Afficher agenda, messages et annonces sur la page d'accueil
172 *
173 * @pipeline affiche_droite
174 * @param array $flux
175 * @return array
176 */
177 function organiseur_affiche_droite($flux) {
178 if ($flux['args']['exec'] == 'accueil') {
179 $flux['data'] .= recuperer_fond(
180 'prive/squelettes/inclure/organiseur-rappels',
181 array(
182 'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'],
183 'last' => $GLOBALS['visiteur_session']['quand'],
184 )
185 );
186 }
187
188 return $flux;
189 }
190
191 /**
192 * Afficher le formulaire de configuration sur la page concernée
193 *
194 * @pipeline affiche_milieu
195 * @param array $flux
196 * @return array
197 */
198 function organiseur_affiche_milieu($flux) {
199 if ($flux['args']['exec'] == 'configurer_interactions') {
200 $c = recuperer_fond('prive/squelettes/inclure/configurer_messagerie', array());
201 if ($p = strpos($flux['data'], '<!--contenu_prive-->')) {
202 $flux['data'] = substr_replace($flux['data'], $c, $p, 0);
203 } else {
204 $flux['data'] .= $c;
205 }
206 }
207
208 return $flux;
209 }
210
211 /**
212 * Diffuser un message qui passe en publie (== a envoyer)
213 *
214 * @pipeline post_edition
215 * @param array $flux
216 * @return array
217 */
218 function organiseur_post_edition($flux) {
219
220 if (isset($flux['args']['table'])
221 and $flux['args']['table'] == 'spip_messages'
222 and $flux['args']['action'] == 'instituer'
223 and $flux['data']['statut'] == 'publie'
224 and $flux['args']['statut_ancien'] != 'publie'
225 ) {
226 $id_message = $flux['args']['id_objet'];
227 $row = sql_fetsel('destinataires,id_auteur,titre,texte', 'spip_messages', 'id_message=' . intval($id_message));
228 if ($row) {
229 include_spip('inc/messages');
230 list($auteurs_dest, $email_dests) = messagerie_destiner(explode(',', $row['destinataires']));
231
232 // diffuser le message en interne
233 messagerie_diffuser_message($id_message, $auteurs_dest);
234 // diffuser le message en externe
235 messagerie_mailer_message($id_message, $email_dests);
236 }
237 }
238
239 return $flux;
240 }