source: spip-zone/_core_/plugins/breves/breves_pipelines.php @ 93607

Last change on this file since 93607 was 93607, checked in by cedric@…, 5 years ago

Indentation et regles de codage selon http://www.spip.net/fr_article3497.html#regles_codage

File size: 9.3 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2015                                                *
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\Breves\Pipelines
17 **/
18if (!defined("_ECRIRE_INC_VERSION")) {
19        return;
20}
21
22
23/**
24 * Définir les meta de configuration liées aux brèves
25 *
26 * @pipeline configurer_liste_metas
27 * @param array $metas
28 *     Couples nom de la méta => valeur par défaut
29 * @return array
30 *    Couples nom de la méta => valeur par défaut
31 */
32function breves_configurer_liste_metas($metas) {
33        $metas['activer_breves'] = 'non';
34
35        return $metas;
36}
37
38/**
39 * Ajouter les brèves à valider sur les rubriques
40 *
41 * @pipeline rubrique_encours
42 *
43 * @param array $flux Données du pipeline
44 * @return array       Données du pipeline
45 **/
46function breves_rubrique_encours($flux) {
47        if ($flux['args']['type'] == 'rubrique') {
48                $lister_objets = charger_fonction('lister_objets', 'inc');
49
50                $id_rubrique = $flux['args']['id_objet'];
51
52                //
53                // Les breves a valider
54                //
55                $flux['data'] .= $lister_objets('breves', array(
56                        'titre' => _T('breves:info_breves_valider'),
57                        'statut' => array('prepa', 'prop'),
58                        'id_rubrique' => $id_rubrique,
59                        'par' => 'date_heure'
60                ));
61        }
62
63        return $flux;
64}
65
66
67/**
68 * Ajouter les brèves référencées sur les vues de rubriques
69 *
70 * @pipeline affiche_enfants
71 *
72 * @param array $flux Données du pipeline
73 * @return array       Données du pipeline
74 **/
75function breves_affiche_enfants($flux) {
76        if (isset($flux['args']['exec'])
77                AND $e = trouver_objet_exec($flux['args']['exec'])
78                AND $e['type'] == 'rubrique'
79                AND $e['edition'] == false
80        ) {
81                $id_rubrique = $flux['args']['id_rubrique'];
82
83                if ($GLOBALS['meta']["activer_breves"] == 'oui') {
84                        $lister_objets = charger_fonction('lister_objets', 'inc');
85                        $bouton_breves = '';
86                        $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . $id_rubrique);
87                        if (autoriser('creerbrevedans', 'rubrique', $id_rubrique, null, array('id_parent' => $id_parent))) {
88                                $bouton_breves .= icone_verticale(_T('breves:icone_nouvelle_breve'),
89                                                generer_url_ecrire("breve_edit", "id_rubrique=$id_rubrique&new=oui"), "breve-24.png", "new", 'right')
90                                        . "<br class='nettoyeur' />";
91                        }
92
93                        $flux['data'] .= $lister_objets('breves', array(
94                                'titre' => _T('breves:icone_ecrire_nouvel_article'),
95                                'where' => "statut != 'prop' AND statut != 'prepa'",
96                                'id_rubrique' => $id_rubrique,
97                                'par' => 'date_heure'
98                        ));
99                        $flux['data'] .= $bouton_breves;
100                }
101        }
102
103        return $flux;
104}
105
106
107/**
108 * Ajoute le nombre de brèves sur l'accueil privé
109 *
110 * @pipeline accueil_informations
111 *
112 * @param string $texte
113 *     HTML des informations générales concernant chaque type d'objet
114 *     sur la page d'accueil privée
115 * @return string
116 *     HTML des informations générales concernant chaque type d'objet
117 *     sur la page d'accueil privée
118 */
119function breves_accueil_informations($texte) {
120        include_spip('base/abstract_sql');
121
122        $q = sql_select("COUNT(*) AS cnt, statut", 'spip_breves', '', 'statut', '', '', "COUNT(*)<>0");
123
124        $cpt = array();
125        $cpt2 = array();
126        $where = false;
127        if ($GLOBALS['visiteur_session']['statut'] == '0minirezo') {
128                $where = sql_allfetsel('id_objet', 'spip_auteurs_liens',
129                        "objet='rubrique' AND id_auteur=" . intval($GLOBALS['visiteur_session']['id_auteur']));
130                if ($where) {
131                        $where = sql_in('id_rubrique', array_map('reset', $where));
132                }
133        }
134        $defaut = $where ? '0/' : '';
135        while ($row = sql_fetch($q)) {
136                $cpt[$row['statut']] = $row['cnt'];
137                $cpt2[$row['statut']] = $defaut;
138        }
139
140        if ($cpt) {
141                if ($where) {
142                        $q = sql_select("COUNT(*) AS cnt, statut", 'spip_breves', $where, "statut");
143                        while ($row = sql_fetch($q)) {
144                                $r = $row['statut'];
145                                $cpt2[$r] = intval($row['cnt']) . '/';
146                        }
147                }
148                $texte .= "<div class='accueil_informations breves liste'>";
149                $texte .= "<h4>" . afficher_plus_info(generer_url_ecrire("breves"), "", _T('breves:info_breves_02')) . "</h4>";
150                $texte .= "<ul class='liste-items'>";
151                if (isset($cpt['prop'])) {
152                        $texte .= "<li class='item'>" . _T("texte_statut_attente_validation") . ": " . $cpt2['prop'] . $cpt['prop'] . '</li>';
153                }
154                if (isset($cpt['publie'])) {
155                        $texte .= "<li class='item on'>" . _T("texte_statut_publies") . ": " . $cpt2['publie'] . $cpt['publie'] . '</li>';
156                }
157                $texte .= "</ul>";
158                $texte .= "</div>";
159        }
160
161        return $texte;
162}
163
164
165/**
166 * Compter les brèves dans une rubrique
167 *
168 * @pipeline objet_compte_enfants
169 *
170 * @param array $flux Données du pipeline
171 * @return array       Données du pipeline
172 */
173function breves_objet_compte_enfants($flux) {
174        if ($flux['args']['objet'] == 'rubrique'
175                AND $id_rubrique = intval($flux['args']['id_objet'])
176        ) {
177                // juste les publies ?
178                if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) {
179                        $flux['data']['breve'] = sql_countsel('spip_breves',
180                                "id_rubrique=" . intval($id_rubrique) . " AND (statut='publie')");
181                } else {
182                        $flux['data']['breve'] = sql_countsel('spip_breves',
183                                "id_rubrique=" . intval($id_rubrique) . " AND (statut='publie' OR statut='prop')");
184                }
185        }
186
187        return $flux;
188}
189
190
191/**
192 * Changer la langue des brèves si la rubrique change
193 *
194 * @pipeline trig_calculer_langues_rubriques
195 *
196 * @param array $flux Données du pipeline
197 * @return array       Données du pipeline
198 */
199function breves_trig_calculer_langues_rubriques($flux) {
200
201        $s = sql_select("A.id_breve AS id_breve, R.lang AS lang", "spip_breves AS A, spip_rubriques AS R",
202                "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (A.lang='' OR R.lang<>'') AND R.lang<>A.lang");
203        while ($row = sql_fetch($s)) {
204                $id_breve = $row['id_breve'];
205                sql_updateq('spip_breves', array("lang" => $row['lang'], 'langue_choisie' => 'non'), "id_breve=$id_breve");
206        }
207
208        return $flux;
209}
210
211
212/**
213 * Publier et dater les rubriques qui ont une brève publiée
214 *
215 * @pipeline calculer_rubriques
216 *
217 * @param array $flux Données du pipeline
218 * @return array       Données du pipeline
219 */
220function breves_calculer_rubriques($flux) {
221
222        $r = sql_select(
223                "R.id_rubrique AS id, max(A.date_heure) AS date_h",
224                "spip_rubriques AS R JOIN spip_breves AS A ON R.id_rubrique = A.id_rubrique",
225                "A.date_heure>R.date_tmp AND A.statut='publie' ", "R.id_rubrique");
226        while ($row = sql_fetch($r)) {
227                sql_updateq('spip_rubriques', array('statut_tmp' => 'publie', 'date_tmp' => $row['date_h']),
228                        "id_rubrique=" . $row['id']);
229        }
230
231        return $flux;
232}
233
234
235/**
236 * Ajouter les brèves à valider sur la page d'accueil
237 *
238 * @pipeline accueil_encours
239 *
240 * @param string $flux HTML du bloc encours sur la page d'accueil privée
241 * @return string       HTML du bloc encours sur la page d'accueil privée
242 **/
243function breves_accueil_encours($flux) {
244        $lister_objets = charger_fonction('lister_objets', 'inc');
245
246
247        $flux .= $lister_objets('breves', array(
248                'titre' => afficher_plus_info(generer_url_ecrire('breves')) . _T('breves:info_breves_valider'),
249                'statut' => array('prepa', 'prop'),
250                'par' => 'date_heure'
251        ));
252
253        return $flux;
254}
255
256
257/**
258 * Optimiser la base de données en supprimant les liens de brèves orphelins
259 *
260 * @pipeline optimiser_base_disparus
261 *
262 * @param array $flux Données du pipeline
263 * @return array       Données du pipeline
264 */
265function breves_optimiser_base_disparus($flux) {
266        $n = &$flux['data'];
267        $mydate = $flux['args']['date'];
268
269
270        # les breves qui sont dans une id_rubrique inexistante
271        $res = sql_select("B.id_breve AS id",
272                "spip_breves AS B
273                        LEFT JOIN spip_rubriques AS R
274                          ON B.id_rubrique=R.id_rubrique",
275                "R.id_rubrique IS NULL
276                         AND B.maj < " . sql_quote($mydate));
277
278        $n += optimiser_sansref('spip_breves', 'id_breve', $res);
279
280
281        //
282        // Breves
283        //
284
285        sql_delete("spip_breves", "statut='refuse' AND maj < $mydate");
286
287        return $flux;
288
289}
290
291/**
292 * Afficher le nombre de brèves dans chaque rubrique
293 *
294 * @pipeline boite_infos
295 *
296 * @param array $flux Données du pipeline
297 * @return array       Données du pipeline
298 */
299function breves_boite_infos($flux) {
300        if (
301                isset($flux['args']['type']) and $flux['args']['type'] == 'rubrique'
302                and isset($flux['args']['id']) and $id_rubrique = $flux['args']['id']
303        ) {
304                if ($nb = sql_countsel('spip_breves', "statut='publie' AND id_rubrique=" . intval($id_rubrique))) {
305                        $nb = "<div>" . singulier_ou_pluriel($nb, "breves:info_1_breve", "breves:info_nb_breves") . "</div>";
306                        if ($p = strpos($flux['data'], "<!--nb_elements-->")) {
307                                $flux['data'] = substr_replace($flux['data'], $nb, $p, 0);
308                        }
309                }
310        }
311
312        return $flux;
313}
314
315/**
316 * Ajoute le formulaire de configuration des brèves sur la page de
317 * configuration des contenus
318 *
319 * @pipeline affiche_milieu
320 *
321 * @param array $flux Données du pipeline
322 * @return array       Données du pipeline
323 */
324function breves_affiche_milieu($flux) {
325        if ($flux["args"]["exec"] == "configurer_contenu") {
326                $flux["data"] .= recuperer_fond('prive/squelettes/inclure/configurer', array('configurer' => 'configurer_breves'));
327        }
328
329        return $flux;
330}
331
332
333?>
Note: See TracBrowser for help on using the repository browser.