source: spip-zone/_plugins_/objets_virtuels/trunk/formulaires/rediriger_objet_virtuel.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: 3.1 KB
Line 
1<?php
2/**
3 * Formulaire pour renseigner une redirection
4 *
5 * @plugin     Objets virtuels
6 * @copyright  2017
7 * @author     Matthieu Marcillaud
8 * @licence    GNU/GPL
9 * @package    SPIP\Objets_virtuels\Installation
10 */
11if (!defined('_ECRIRE_INC_VERSION')) {
12        return;
13}
14
15/**
16 * Chargement du formulaire de redirection
17 *
18 * @param string $objet
19 * @param int $id_objet
20 * @param string $retour
21 * @return array|bool
22 */
23function formulaires_rediriger_objet_virtuel_charger_dist($objet, $id_objet, $retour = '') {
24
25        include_spip('inc/autoriser');
26        if (!autoriser('modifier', $objet, $id_objet)) {
27                return false;
28        }
29
30        $id_table_objet = id_table_objet($objet);
31        $table = table_objet_sql($objet);
32        $row = sql_fetsel([$id_table_objet . ' AS id', 'virtuel'], $table, $id_table_objet . '=' . intval($id_objet));
33        if (!$row['id']) {
34                return false;
35        }
36
37        include_spip('inc/lien');
38        include_spip('inc/objets_virtuels');
39
40        $redirection = virtuel_redirige($row['virtuel']);
41        if (!$redirection and !in_array($table, objets_virtuels_tables_actives())) {
42                return false;
43        }
44
45        include_spip('inc/texte');
46        $valeurs = array(
47                'redirection' => $redirection,
48                'id' => $id_objet,
49                'objet' => $objet,
50                '_afficher_url' => ($redirection ? propre("[->$redirection]") : ''),
51        );
52
53        return $valeurs;
54}
55
56/**
57 * Vérifications du formulaire de redirection
58 *
59 * @param string $objet
60 * @param int $id_objet
61 * @param string $retour
62 * @return array|bool
63 */
64function formulaires_rediriger_objet_virtuel_verifier_dist($objet, $id_objet, $retour = '') {
65        $erreurs = array();
66
67        $redirection = _request('redirection');
68        $type = objet_type($objet);
69        include_spip('inc/lien');
70
71        // éviter des boucles de redirection
72        if (
73                ($objet == 'article' and $redirection == $id_objet)
74                or ($redirection == $type . $id_objet)
75                or ($rac = typer_raccourci($redirection) and $rac[0] == $type and $rac[1] == $id_objet)
76        ){
77                $erreurs['redirection'] = _T('info_redirection_boucle');
78        }
79
80        return $erreurs;
81}
82
83
84/**
85 * Traitement du formulaire de redirection
86 *
87 * @param string $objet
88 * @param int $id_objet
89 * @param string $retour
90 * @return array|bool
91 */
92function formulaires_rediriger_objet_virtuel_traiter_dist($objet, $id_objet, $retour = '') {
93
94        $url = preg_replace(',^\s*https?://$,i', '', rtrim(_request('redirection')));
95        if ($url) {
96                $url = corriger_caracteres($url);
97        }
98
99        include_spip('action/editer_objet');
100        objet_modifier($objet, $id_objet, ['virtuel' => $url]);
101
102        // Exception : si c'est une rubrique, la publier.
103        if (objet_type($objet) == 'rubrique') {
104                sql_updateq(table_objet_sql($objet), array('statut' => 'publie'), id_table_objet($objet) . '=' . $id_objet);
105        }
106
107        // malheureusement le ajax=wysiwyg n'est pas toujours présent sur l’inclusion prive/objets/contenu/xx,
108        // donc ce JS n'actualise pas toujours le centre de la page.
109        $js = _AJAX ? '<script type="text/javascript">
110                if (window.ajaxReload) {
111                        $("#objet_virtuel").ajaxReload({args:{virtuel:"' . $url . '"}});
112                        ajaxReload("navigation");
113                }
114        </script>' : '';
115
116        return [
117                'message_ok' => ($url ? _T('info_redirection_activee') : _T('info_redirection_desactivee')) . $js,
118                'redirect' => $retour ? $retour : '',
119                'editable' => true
120        ];
121}
Note: See TracBrowser for help on using the repository browser.