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

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

Ne pas chercher 'virtuel' sur les rubriques s'il n'est pas actif.

File size: 5.1 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        include_spip('objets_virtuels_fonctions');
147        if (in_array('spip_rubriques', objets_virtuels_tables_actives())) {
148                $rubriques_virtuelles_non_publiees = sql_allfetsel(
149                        'id_rubrique, statut, id_parent',
150                        'spip_rubriques',
151                        'statut_tmp != "publie" AND virtuel != ""'
152                );
153                foreach ($rubriques_virtuelles_non_publiees as $rub) {
154                        sql_updateq('spip_rubriques', array('statut_tmp' => 'publie'), 'id_rubrique=' . intval($rub['id_rubrique']));
155                }
156        }
157        return $flux;
158}
159
160/**
161 * Pipeline d'autorisation
162 * @pipeline autoriser
163 */
164function objets_virtuels_autoriser() {}
165
166if (!function_exists('autoriser_rubrique_supprimer')) {
167        /**
168         * Ne pas pouvoir supprimer une rubrique si elle a un champ de redirection actif
169         * @param string $faire
170         * @param string $type
171         * @param int $id
172         * @param array $qui
173         * @param array $opt
174         * @return bool
175         */
176        function autoriser_rubrique_supprimer($faire, $type, $id, $qui, $opt) {
177                include_spip('objets_virtuels_fonctions');
178                if (in_array('spip_rubriques', objets_virtuels_tables_actives())) {
179                        $virtuel = quete_objet_virtuel('rubrique', intval($id));
180                        if (strlen($virtuel) > 0) {
181                                return false;
182                        }
183                }
184                return autoriser_rubrique_supprimer_dist($faire, $type, $id, $qui, $opt);
185        }
186}
Note: See TracBrowser for help on using the repository browser.