source: spip-zone/_plugins_/pages/trunk/pages_pipelines.php @ 49040

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

Pages pour SPIP 3.0 ... on passe en stable, version 1.0.0, même si il y aurait des améliorations de code à faire, notamment sur le calcul des urls d'édition d'article. En tout cas, ça semble marcher.

File size: 6.2 KB
Line 
1<?php
2#---------------------------------------------------#
3#  Plugin  : Pages                                  #
4#  Auteur  : RastaPopoulos                          #
5#  Licence : GPL                                    #
6#--------------------------------------------------------------- -#
7#  Documentation : http://www.spip-contrib.net/Plugin-Pages       #
8#-----------------------------------------------------------------#
9
10if (!defined("_ECRIRE_INC_VERSION")) return;
11
12// Change l'entête du formulaire des articles pour montrer que c'est une page
13function pages_affiche_milieu_ajouter_page($flux){
14
15        if ($flux['args']['exec'] == 'article_edit'){
16                include_spip('base/abstract_sql');
17                if (
18                        _request('modele') == 'page'
19                        or
20                        (
21                                ($id_article = $flux['args']['id_article']) > 0
22                                and
23                                (sql_getfetsel('page', 'spip_articles', 'id_article='.sql_quote($id_article)))
24                        )
25                )
26                {
27                       
28                        // On cherche et remplace l'entete de la page : "modifier la page"
29                        $cherche = "/(<div[^>]*class=('|\")entete-formulaire.*?<\/span>).*?(<h1>.*?<\/h1>.*?<\/div>)/is";
30                        $surtitre = _T('pages:modifier_page');
31                        $remplace = "$1$surtitre$3";
32                        $flux['data'] = preg_replace($cherche, $remplace, $flux['data']);
33                       
34                        // Si c'est une nouvelle page, on remplace le lien de retour dans l'entete
35                        if (_request('new') == 'oui'){
36                                $cherche = "/(<span[^>]*class=(?:'|\")icone[^'\"]*retour[^'\"]*(?:'|\")>"
37                                         . "<a[^>]*href=(?:'|\"))[^'\"]*('|\")/is";
38                                $retour = generer_url_ecrire("pages_tous");
39                                $remplace = "$1$retour$2";
40                                $flux['data'] = preg_replace($cherche, $remplace, $flux['data']);
41                       
42                        }
43               
44                }
45       
46        }
47       
48        return $flux;
49
50}
51
52
53// Vérifier que la page n'est pas vide
54function pages_formulaire_charger($flux){
55
56        // Si on est dans l'édition d'un article
57        if (is_array($flux) and $flux['args']['form'] == 'editer_article'){
58       
59                // Si on est dans un article de modele page
60                if (_request('modele') == 'page' or ($flux['data']['page'] and _request('modele') != 'article')){
61                        $flux['data']['modele'] = 'page';
62                        $flux['data']['champ_page'] = $flux['data']['page'];
63                }
64                unset($flux['data']['page']);
65        }
66       
67        return $flux;
68
69}
70
71
72// Vérifier que la page n'est pas vide
73function pages_formulaire_verifier($flux){
74
75        // Si on est dans l'édition d'un article
76        if (is_array($flux) and $flux['args']['form'] == 'editer_article'){
77       
78                // Si on est dans un article de type page mais que le champ "page" est vide
79                if (_request('modele') == 'page' and !_request('champ_page'))
80                        $flux['data']['champ_page'] .= _T('info_obligatoire');
81       
82        }
83
84        return $flux;
85
86}
87
88
89// Ajouter le champ page dans le formulaire d'édition d'article
90function pages_editer_contenu_objet($flux){
91
92        $args = $flux['args'];
93        $erreurs = $args['contexte']['erreurs'];
94       
95        if ($args['type'] == 'article' and $args['contexte']['modele'] == 'page'){
96       
97                // On cherche et remplace l'édition de la rubrique
98                $cherche = "/<li[^>]*class=('|\")editer editer_parent.*?<\/li>/is";
99                $remplace = '<li class="editer_page obligatoire'.($erreurs['champ_page'] ? ' erreur' : '').'">';
100                $remplace .= '<input type="hidden" name="id_parent" value="-1" />';
101                $remplace .= '<input type="hidden" name="id_rubrique" value="-1" />';
102                $remplace .= '<input type="hidden" name="modele" value="page" />';
103        $remplace .= '<label for="id_page">'._T('pages:titre_page').'</label>';
104        if ($erreurs['champ_page'])
105                $remplace .= '<span class="erreur_message">'.$erreurs['champ_page'].'</span>';
106        $value = $args['contexte']['champ_page'] ? $args['contexte']['champ_page'] : $args['contexte']['page'];
107        $remplace .= '<input type="text" class="text" name="champ_page" id="id_page" value="'.$value.'" />';
108        $remplace .= '</li>';
109                $flux['data'] = preg_replace($cherche, $remplace, $flux['data']);
110       
111        }
112       
113        return $flux;
114
115}
116
117
118/**
119 * Insertion dans le pipeline pre_edition (SPIP)
120 *
121 * Si on édite un article :
122 * - Si on récupère un champ "champ_page" dans les _request() et qu'il est différent de "article",
123 * on transforme l'article en page unique, id_rubrique devient -1
124 * - Si on ne récupère pas de champ_page et que id_parent est supérieur à 0, on le passe en article et on vide
125 * son champ page pour pouvoir réaliser le processus inverse dans le futur
126 *
127 * @param array $flux Le contexte du pipeline
128 * @return array $flux Le contexte modifié
129 */
130function pages_pre_edition_ajouter_page($flux){
131        if (is_array($flux) and $flux['args']['type'] == 'article'){
132                if ((($page = _request('champ_page')) != '') AND ($page != 'article')){
133                        /**
134                         * On ajoute le "champ_page" du formulaire qui deviendra "page" dans la table
135                         * On force l'id_rubrique à -1
136                         */
137                        $flux['data']['page'] = $page;
138                        $flux['data']['id_rubrique'] = '-1';
139                        $flux['data']['id_secteur'] = '0';
140                }
141                /**
142                 * si l'id_parent est supérieur à 0 on que l'on ne récupère pas de champ_page,
143                 * on pense à vider le champ "page", pour pouvoir revenir après coup en page
144                 */
145                if (!_request('champ_page') && (_request('id_parent') > 0)){
146                        $flux['data']['page'] = '';
147                }
148        }
149        return $flux;
150}
151
152/**
153 * Insertion dans le pipeline boite_infos
154 *
155 * Ajouter un lien pour transformer une article normal en page inversement
156 *
157 * @param array $flux Le contexte du pipeline
158 * @return array $flux Le contexte modifié
159 */
160function pages_boite_infos($flux){
161        if ($flux['args']['type'] == 'article' and autoriser('modifier', 'article', $flux['args']['id'])){
162                if (sql_getfetsel('page', 'spip_articles', 'id_article='. $flux['args']['id']) == ''){
163                        $flux['data'] .= '<div>
164                                <a href="'.parametre_url(parametre_url(generer_url_ecrire('article_edit'), 'id_article', $flux['args']['id']), 'modele', 'page').'" class="cellule-h">
165                                        <img src="'.find_in_path('images/page-24.png').'" style="vertical-align:middle;" alt="" />
166                                        <span style="vertical-align:middle;">'._T('pages:convertir_page').'</span>
167                                </a>
168                        </div>';
169                }
170                else{
171                        $flux['data'] .= '<div>
172                                <a href="'.parametre_url(parametre_url(generer_url_ecrire('article_edit'), 'id_article', $flux['args']['id']), 'modele', 'article').'" class="cellule-h">
173                                        <img src="'.find_in_path('images/article-24.gif').'" style="vertical-align:middle;" alt="" />
174                                        <span style="vertical-align:middle;">'._T('pages:convertir_article').'</span>
175                                </a>
176                        </div>';
177                }
178        }
179        return $flux;
180}
181
182?>
Note: See TracBrowser for help on using the repository browser.