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

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

On s'appuie sur ce que faisait le plugin Rubriques virtuelles pour améliorer l'ajax lorsqu'on ajoute une redirection virtuelle.

File size: 2.8 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
77        // si on est sur une page ou il faut inserer les mots cles...
78        if ($desc = trouver_objet_exec($flux['args']['exec'])
79                and $desc['edition'] !== true // page visu
80                and $type = $desc['type']
81                and $type != 'article' // ! Articles déjà gérés par le Core
82                and $id_table_objet = $desc['id_table_objet']
83                and isset($flux['args'][$id_table_objet])
84                and ($id = intval($flux['args'][$id_table_objet]))
85                and (in_array($desc['table_objet_sql'], objets_virtuels_tables_actives()))
86        ) {
87                $virtuel = sql_getfetsel('virtuel', $desc['table_objet_sql'], $id_table_objet . '=' . $id);
88                $texte = recuperer_fond(
89                        'prive/squelettes/inclure/redirection_objet_virtuel',
90                        ['virtuel' => $virtuel],
91                        ['ajax' => true]
92                );
93                if ($p = strpos($flux['data'], '<div id="wys')) {
94                        $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
95                } elseif ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
96                        $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
97                } else {
98                        $flux['data'] .= $texte;
99                }
100        }
101
102        return $flux;
103}
Note: See TracBrowser for help on using the repository browser.