source: spip-zone/_plugins_/rang/branches/automatique/rang_pipelines.php @ 110177

Last change on this file since 110177 was 110177, checked in by rastapopoulos@…, 23 months ago

Nettoyage : aucune raison de stocker la config dans une liste à virgule avec ensuite des explode partout dans le code ensuite, alors qu'on sait parfaitement enregistrer nos configs en tableaux et listes. Donc on met à jour la base pour transformer l'ancien stockage, et on met à jour le code en conséquence. Au passage aussi, pas besoin de remettre un préfixe rang_ devant le nom de la config puisque désormais on est déjà dans un casier rang/.

  • Property svn:executable set to *
File size: 3.5 KB
Line 
1<?php
2/**
3 * Utilisations de pipelines par Rang
4 *
5 * @plugin     Rang
6 * @copyright  2016
7 * @author     Peetdu
8 * @licence    GNU/GPL
9 * @package    SPIP\Rang\Pipelines
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16include_spip('inc/rang_api');
17include_spip('inc/config');
18
19/**
20 * Declaration du champ Rang sur les objets sélectionnés
21 *
22 * @param array $tables
23 *
24 * @return array
25 */
26function rang_declarer_tables_objets_sql($tables) {
27        $tables_objets_selectionnes = lire_config('rang/objets');
28       
29        if (isset($tables_objets_selectionnes) and !empty($tables_objets_selectionnes)) {
30                foreach ($tables_objets_selectionnes as $table) {
31                        $tables[$table]['field']['rang'] = "SMALLINT NOT NULL";
32                }
33        }
34       
35        return $tables;
36}
37
38/**
39 * Calculer et Inserer le JS qui gére le tri par Drag&Drop dans le bon contexte (la page ?exec=xxxxx)
40 *
41 * @param    array $flux Données du pipeline
42 *
43 * @return    array        Données du pipeline
44 */
45function rang_recuperer_fond($flux) {
46        $tables_objets_selectionnes = lire_config('rang/objets');
47       
48        if (isset($tables_objets_selectionnes) and !empty($tables_objets_selectionnes)) {
49                // Gestion du contexte : dans quelle page insérer le JS ?
50                if (in_array(_request('exec'), rang_get_contextes())
51                        && in_array($flux['args']['fond'], rang_get_sources())
52                        && strpos($flux['data']['texte'], 'data-objet=')
53                ) {
54                        // recuperer le nom de l'objet
55                        preg_match('/data-objet=["\'](\w+)["\']/', $flux['data']['texte'], $result);
56                        $objet_nom  = $result[1];
57                        $objet_type = objet_type($objet_nom);
58
59                        // insérer le script de tri si on a bien un objet à ranger
60                        if ($objet_type) {
61                                // récupérer le type de parent…
62                                include_spip('base/objets_parents');
63                                $parent       = type_objet_info_parent($objet_type);
64                                $parent_champ = $parent['0']['champ'];
65                                $id_parent    = $flux['args']['contexte'][$parent_champ];
66
67                                // suffixe de la pagination : particularité des objets historiques
68                                switch ($objet_type) {
69                                        case 'article':
70                                                $suffixe_pagination = 'art';
71                                                break;
72                                        case 'site':
73                                                $suffixe_pagination = 'sites';
74                                                break;
75                                        case 'breve':
76                                                $suffixe_pagination = 'bre';
77                                                break;
78                                        default:
79                                                $suffixe_pagination = $objet_type;
80                                                break;
81                                }
82
83                                // Calcul du JS à insérer avec les paramètres
84                                $ajout_script = recuperer_fond('prive/squelettes/inclure/rang', array(
85                                        'suffixe_pagination' => $suffixe_pagination,
86                                        'objet'              => $objet_nom,
87                                        'id_parent'          => $id_parent,
88                                ));
89
90                                // et hop, on insère le JS calculé
91                                $flux['data']['texte'] = str_replace('</table>', '</table>' . $ajout_script, $flux['data']['texte']);
92                        }
93                }
94        }
95       
96        return $flux;
97}
98
99/**
100 * Insertion dans le pipeline pre_edition pour le classer l'objet quand on le publie
101 *
102 * @param    array $flux Données du pipeline
103 *
104 * @return    array        Données du pipeline
105 */
106function rang_pre_edition($flux) {
107        $rang_max = lire_config('rang/rang_max');
108
109        if (isset($rang_max) && !empty($rang_max) && $flux['args']['action'] == 'instituer') {
110                $liste_objets  = lire_config('rang/objets');
111                $table         = $flux['args']['table'];
112
113                if (in_array($table, $liste_objets)) {
114                        $id_objet = $flux['args']['id_objet'];
115
116                        // cas des objets avec statut
117                        if (isset($flux['data']['statut']) && $flux['data']['statut'] == 'publie') {
118                                $flux['data']['rang'] = rang_classer_dernier($table, $id_objet);
119                        }
120                        // cas des mots clés
121                        if ($table == 'spip_mots') {
122                                $flux['data']['rang'] = rang_classer_dernier($table, $id_objet);
123                        }
124                }
125        }
126       
127        return $flux;
128}
Note: See TracBrowser for help on using the repository browser.