5 * @author Rastapopoulos
6 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
7 * @link http://www.spip-contrib.net/Plugin-Pages Documentation
8 * @package SPIP\Pages\Pipelines
11 if (!defined("_ECRIRE_INC_VERSION")) return;
13 // Change l'entête du formulaire des articles pour montrer que c'est une page
14 function pages_affiche_milieu_ajouter_page($flux){
16 if ($flux['args']['exec'] == 'article_edit'){
17 include_spip('base/abstract_sql');
19 _request('modele') == 'page'
22 ($id_article = $flux['args']['id_article']) > 0
24 (sql_getfetsel('page', 'spip_articles', 'id_article='.sql_quote($id_article)))
29 // On cherche et remplace l'entete de la page : "modifier la page"
30 $cherche = "/(<div[^>]*class=('|\")entete-formulaire.*?<\/span>).*?(<h1>.*?<\/h1>.*?<\/div>)/is";
31 $surtitre = _T('pages:modifier_page');
32 $remplace = "$1$surtitre$3";
33 $flux['data'] = preg_replace($cherche, $remplace, $flux['data']);
35 // Si c'est une nouvelle page, on remplace le lien de retour dans l'entete
36 if (_request('new') == 'oui'){
37 $cherche = "/(<span[^>]*class=(?:'|\")icone[^'\"]*retour[^'\"]*(?:'|\")>"
38 . "<a[^>]*href=(?:'|\"))[^'\"]*('|\")/is";
39 $retour = generer_url_ecrire("pages_tous");
40 $remplace = "$1$retour$2";
41 $flux['data'] = preg_replace($cherche, $remplace, $flux['data']);
55 * Saisie de l'identifiant de la page sur la fiche d'une page
58 * Le contexte du pipeline
60 * Le contexte du pipeline modifié
62 function pages_affiche_milieu_identifiant($flux){
64 $e = trouver_objet_exec($flux['args']['exec']);
66 // Si on est sur la fiche d'un article...
67 if (!$e['edition'] and $e['type']=='article' ) {
68 include_spip('base/abstract_sql');
69 $id_article = isset($flux['args'][$e['id_table_objet']]) ?
$flux['args'][$e['id_table_objet']] : false;
70 // ... et s'il s'agit d'une page
72 _request('modele') == 'page'
77 (sql_getfetsel('page', 'spip_articles', 'id_article='.sql_quote($id_article)))
80 $texte .= recuperer_fond('prive/objets/editer/identifiant_page',
81 array('id_article' => $id_article),
88 if ($p=strpos($flux['data'],"<!--affiche_milieu-->"))
89 $flux['data'] = substr_replace($flux['data'],$texte,$p,0);
91 $flux['data'] .= $texte;
98 // Vérifier que la page n'est pas vide
99 function pages_formulaire_charger($flux){
101 // Si on est dans l'édition d'un article
102 if (is_array($flux) and $flux['args']['form'] == 'editer_article'){
104 // Si on est dans un article de modele page
105 if (_request('modele') == 'page' or ($flux['data']['page'] and _request('modele') != 'article')){
106 $flux['data']['modele'] = 'page';
107 $flux['data']['champ_page'] = $flux['data']['page'];
109 unset($flux['data']['page']);
118 * Vérifications de l'identifiant d'une page
121 * Le contexte du pipeline
122 * @return array $flux
123 * Le contexte du pipeline modifié
125 function pages_formulaire_verifier($flux){
127 // Si on est dans l'édition d'un article/page ou dans le formulaire d'édition d'un identifiant page
131 ( $flux['args']['form'] == 'editer_article' and _request('modele') == 'page' )
132 or $flux['args']['form'] == 'editer_identifiant_page'
136 $page = _request('champ_page');
137 $id_page = $flux['args']['args'][0];
141 $erreur .= _T('info_obligatoire');
142 // nombre de charactères : 40 max
143 elseif (strlen($page) > 255)
144 $erreur = _T('pages:erreur_champ_page_taille');
145 // format : charactères alphanumériques en minuscules ou "_"
146 elseif (!preg_match('/^[a-z0-9_]+$/', $page))
147 $erreur = _T('pages:erreur_champ_page_format');
149 elseif (sql_countsel(table_objet_sql('article'), "page=".sql_quote($page) . " AND id_article!=".intval($id_page)))
150 $erreur = _T('pages:erreur_champ_page_doublon');
153 $flux['data']['champ_page'] .= $erreur;
161 * Insertion dans le pipeline editer_contenu_objet (SPIP)
163 * Sur les articles considérés comme pages uniques, on remplace l'élément de choix de rubriques par :
164 * -* un input hidden id_rubrique et id_parent avec pour valeur -1
165 * -* un input hidden modele avec comme valeur "page"
166 * -* un champ d'édition de l'identifiant de la page unique
169 * Le contexte du pipeline
170 * @return array $flux
171 * Le contexte du pipeline modifié
173 function pages_editer_contenu_objet($flux){
174 $args = $flux['args'];
175 if ($args['type'] == 'article' && isset($args['contexte']['modele']) && $args['contexte']['modele'] == 'page'){
176 $erreurs = $args['contexte']['erreurs'];
177 // On cherche et remplace l'édition de la rubrique
178 $cherche = "/<li[^>]*class=('|\")editer editer_parent.*?<\/li>/is";
179 $remplace = '<li class="editer editer_page obligatoire'.($erreurs['champ_page'] ?
' erreur' : '').'">';
180 $remplace .= '<input type="hidden" name="id_parent" value="-1" />';
181 $remplace .= '<input type="hidden" name="id_rubrique" value="-1" />';
182 $remplace .= '<input type="hidden" name="modele" value="page" />';
183 $remplace .= '<label for="id_page">'._T('pages:titre_page').'</label>';
184 if ($erreurs['champ_page'])
185 $remplace .= '<span class="erreur_message">'.$erreurs['champ_page'].'</span>';
186 $value = $args['contexte']['champ_page'] ?
$args['contexte']['champ_page'] : $args['contexte']['page'];
187 $remplace .= '<input type="text" class="text" name="champ_page" id="id_page" value="'.$value.'" />';
188 $remplace .= '</li>';
189 $flux['data'] = preg_replace($cherche, $remplace, $flux['data'],1);
190 $flux['data'] = preg_replace($cherche, '', $flux['data']);
196 * Insertion dans le pipeline pre_edition (SPIP)
198 * Si on édite un article :
199 * - Si on récupère un champ "champ_page" dans les _request() et qu'il est différent de "article",
200 * on transforme l'article en page unique, id_rubrique devient -1
201 * - 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
202 * son champ page pour pouvoir réaliser le processus inverse dans le futur
204 * @param array $flux Le contexte du pipeline
205 * @return array $flux Le contexte modifié
207 function pages_pre_edition_ajouter_page($flux){
208 if (is_array($flux) and isset($flux['args']['type']) && $flux['args']['type'] == 'article'){
209 if ((($page = _request('champ_page')) != '') AND ($page != 'article')){
211 * On ajoute le "champ_page" du formulaire qui deviendra "page" dans la table
212 * On force l'id_rubrique à -1
214 $flux['data']['page'] = $page;
215 $flux['data']['id_rubrique'] = '-1';
216 $flux['data']['id_secteur'] = '0';
219 * si l'id_parent est supérieur à 0 on que l'on ne récupère pas de champ_page,
220 * on pense à vider le champ "page", pour pouvoir revenir après coup en page
222 if (!_request('champ_page') && (_request('id_parent') > 0)){
223 $flux['data']['page'] = '';
230 * Insertion dans le pipeline boite_infos (SPIP)
232 * Ajouter un lien pour transformer une article normal en page inversement
235 * Le contexte du pipeline
236 * @return array $flux
237 * Le contexte modifié
239 function pages_boite_infos($flux){
240 if ($flux['args']['type'] == 'article' and autoriser('modifier', 'article', $flux['args']['id'])){
241 include_spip('inc/presentation');
242 if (sql_getfetsel('page', 'spip_articles', 'id_article='. $flux['args']['id']) == '')
243 $flux['data'] .= icone_horizontale(_T('pages:convertir_page'), parametre_url(parametre_url(generer_url_ecrire('article_edit'), 'id_article', $flux['args']['id']), 'modele', 'page'), 'page', $fonction="", $dummy="", $javascript="");
245 $flux['data'] .= icone_horizontale(_T('pages:convertir_article'), parametre_url(parametre_url(generer_url_ecrire('article_edit'), 'id_article', $flux['args']['id']), 'modele', 'article'), 'article', $fonction="", $dummy="", $javascript="");
252 * Insertion dans le pipeline affiche_hierarchie (SPIP)
253 * Pour les pages, faire pointer la racine vers la liste des pages au lieux des rubriques
254 * Pour savoir si on se trouve sur une page, on vérifie que le champ "page" existe, faute de mieux
257 * Le contexte du pipeline
258 * @return array $flux
259 * Le contexte modifié
261 function pages_affiche_hierarchie($flux){
263 $objet = $flux['args']['objet'];
264 $id_article = $flux['args']['id_objet'];
267 and sql_getfetsel('page', 'spip_articles', 'id_article='.sql_quote($id_article))
269 $cherche = "<a href=\"". generer_url_ecrire('rubriques') . "\">" . _T('info_racine_site') . "</a>";
270 $remplace = "<a href=\"". generer_url_ecrire('pages_tous') . "\">" . _T('pages:pages_uniques') . "</a>";
271 $flux['data'] = str_replace($cherche,$remplace,$flux['data']);