source: spip-zone/_plugins_/objets_virtuels/trunk/objets_virtuels_pipelines.php @ 103934

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

On intègre l'ensemble du plugin Rubriques Virtuelles de Kent1 que je mets en auteur du coup.
Ainsi, les rubriques qui ont un champ virtuelles sont publiées automatiquement.
Et on ne peut pas supprimer un objet qui a une redirection sans avoir préalablement enlevé la redirection.

File size: 4.9 KB
Line 
1<?php
2/**
3 * Utilisations de pipelines par Objets virtuels
4 *
5 * @plugin     Objets virtuels
6 * @copyright  2017
7 * @author     Matthieu Marcillaud
8 * @licence    GNU/GPL
9 * @package    SPIP\Objets_virtuels\Pipelines
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16
17/**
18 * Déclare les champs virtuels utilisés
19 *
20 * @pipeline declarer_tables_objets_sql
21 * @param array $tables
22 * @return array
23 */
24function objets_virtuels_declarer_tables_objets_sql($tables) {
25        include_spip('objets_virtuels_fonctions');
26        $tables_actives = objets_virtuels_tables_actives();
27        foreach ($tables_actives as $table) {
28                if (isset($tables[$table])) {
29                        if (empty($tables[$table]['field']['virtuel'])) {
30                                $tables[$table]['field']['virtuel'] = 'text DEFAULT \'\' NOT NULL';
31                                $tables[$table]['champs_editables'][] = 'virtuel';
32                                $tables[$table]['champs_versionnes'][] = 'virtuel';
33                                $tables[$table]['rechercher_champs']['virtuel'] = 3;
34                        }
35                }
36        }
37        return $tables;
38}
39
40
41/**
42 * Ajoute le formulaire de redirection sur les objets activés
43 *
44 * @pipeline declarer_tables_objets_sql
45 * @param array $flux
46 * @return array
47 */
48function objets_virtuels_afficher_config_objet($flux) {
49        include_spip('objets_virtuels_fonctions');
50        $tables = objets_virtuels_tables_actives();
51        $type = $flux['args']['type'];
52        // ! Articles déjà gérés par le Core
53        if ($type != 'article' and in_array(table_objet_sql($type), $tables)) {
54                $flux['data'] .= recuperer_fond('prive/objets/editer/redirection_objet_virtuel', [
55                        'objet' => $type,
56                        'id_objet' => $flux['args']['id']
57                ]);
58        }
59        return $flux;
60}
61
62
63/**
64 * Utilisation du pipeline affiche milieu
65 *
66 *  Ajoute un bloc montrant que l'objet a une redirection, si tel est le cas.
67 *
68 * @pipeline affiche_milieu
69 *
70 * @param array $flux
71 *     Données du pipeline
72 * @return array
73 *     Données du pipeline
74 */
75function objets_virtuels_affiche_milieu($flux) {
76        include_spip('objets_virtuels_fonctions');
77
78        // si on est sur une page ou il faut inserer les mots cles...
79        if ($desc = trouver_objet_exec($flux['args']['exec'])
80                and $desc['edition'] !== true // page visu
81                and $type = $desc['type']
82                and $type != 'article' // ! Articles déjà gérés par le Core
83                and $id_table_objet = $desc['id_table_objet']
84                and isset($flux['args'][$id_table_objet])
85                and ($id = intval($flux['args'][$id_table_objet]))
86                and (in_array($desc['table_objet_sql'], objets_virtuels_tables_actives()))
87        ) {
88                $virtuel = quete_objet_virtuel($desc['table'], $id);
89                $texte = recuperer_fond(
90                        'prive/squelettes/inclure/redirection_objet_virtuel',
91                        ['virtuel' => $virtuel],
92                        ['ajax' => true]
93                );
94                if ($p = strpos($flux['data'], '<div id="wys')) {
95                        $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
96                } elseif ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
97                        $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
98                } else {
99                        $flux['data'] .= $texte;
100                }
101        }
102
103        return $flux;
104}
105
106
107/**
108 * Insertion dans le pipeline objet_compte_enfants (SPIP)
109 *
110 * Une objet est considérée comme vide lorsqu'il n'a pas d'objets liés (articles, rubriques, documents).
111 * Ici on impose que le champ "virtuel" doit être vide pour que l'objet soit considéré comme vide.
112 *
113 * @pipeline objet_compte_enfants
114 * @param array $flux
115 * @return array
116 */
117function objets_virtuels_objet_compte_enfants($flux) {
118        include_spip('objets_virtuels_fonctions');
119
120        if (
121                $objet = $flux['args']['objet']
122                and $id_objet = $flux['args']['id_objet']
123                and $table = table_objet_sql($objet)
124                and in_array($table, objets_virtuels_tables_actives())
125        ) {
126                $virtuel = quete_objet_virtuel($objet, $id_objet);
127                if (strlen(trim($virtuel)) > 0) {
128                        $flux['data']['redirection'] = 1;
129                }
130        }
131        return $flux;
132}
133
134
135/**
136 * Insertion dans le pipeline calculer_rubriques (SPIP)
137 * (cf calculer_rubriques_publiees() dans inc/rubriques)
138 *
139 * Évite de dépublier une rubrique avec une redirection
140 *
141 * @pipeline calculer_rubriques
142 * @param array $flux
143 * @return array
144 */
145function objets_virtuels_calculer_rubriques($flux) {
146        $rubriques_virtuelles_non_publiees = sql_allfetsel(
147                'id_rubrique, statut, id_parent',
148                'spip_rubriques',
149                'statut_tmp != "publie" AND virtuel != ""'
150        );
151        foreach ($rubriques_virtuelles_non_publiees as $rub) {
152                sql_updateq('spip_rubriques', array('statut_tmp'=> 'publie'), 'id_rubrique='.intval($rub['id_rubrique']));
153        }
154        return $flux;
155}
156
157/**
158 * Pipeline d'autorisation
159 * @pipeline autoriser
160 */
161function objets_virtuels_autoriser() {}
162
163if (!function_exists('autoriser_rubrique_supprimer')) {
164        /**
165         * Ne pas pouvoir supprimer une rubrique si elle a un champ de redirection actif
166         * @param string $faire
167         * @param string $type
168         * @param int $id
169         * @param array $qui
170         * @param array $opt
171         * @return bool
172         */
173        function autoriser_rubrique_supprimer($faire, $type, $id, $qui, $opt) {
174                include_spip('objets_virtuels_fonctions');
175                $virtuel = quete_objet_virtuel('rubrique', intval($id));
176                if (strlen($virtuel) > 0) {
177                        return false;
178                }
179                return autoriser_rubrique_supprimer_dist($faire, $type, $id, $qui, $opt);
180        }
181}
Note: See TracBrowser for help on using the repository browser.