4b72741cebe3c7dd05e2bdb0e1c5997eed40a142
[lhc/web/www.git] / www / plugins-dist / squelettes_par_rubrique / squelettes_par_rubrique_options.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Déclarations de pipelines
15 *
16 * @package SPIP\SquelettesParRubrique\Pipelines
17 **/
18 if (!defined('_ECRIRE_INC_VERSION')) {
19 return;
20 }
21
22 if (!isset($GLOBALS['spip_pipeline']['styliser'])) {
23 $GLOBALS['spip_pipeline']['styliser'] = '';
24 }
25
26 // Ajoute à la fin du pipeline styliser la recherche de squelettes par rubriques et par langue
27 $GLOBALS['spip_pipeline']['styliser'] .= '||squelettes_par_rubrique_styliser_par_rubrique|squelettes_par_rubrique_styliser_par_langue';
28
29 /**
30 * Cherche un squelette par rubrique squelette-XX.html ou squelette=XX.html
31 *
32 * Options de recherche de squelette par le styliseur, appelé par le pipeline 'styliser'
33 *
34 * @pipeline styliser
35 *
36 * @param array $flux Données du pipeline
37 * @return array Données du pipeline
38 */
39 function squelettes_par_rubrique_styliser_par_rubrique($flux) {
40
41 // uniquement si un squelette a ete trouve
42 if ($squelette = $flux['data']) {
43 $ext = $flux['args']['ext'];
44
45 // On selectionne, dans l'ordre :
46 // fond=10
47 if ($id_rubrique = $flux['args']['id_rubrique']) {
48 $f = "$squelette=$id_rubrique";
49 if (@file_exists("$f.$ext")) {
50 $squelette = $f;
51 } else {
52 $maxiter = 10000; // on ne remonte pas au dela en profondeur
53 // fond-10 fond-<rubriques parentes>
54 do {
55 $f = "$squelette-$id_rubrique";
56 if (@file_exists("$f.$ext")) {
57 $squelette = $f;
58 break;
59 }
60 } while (
61 $maxiter--
62 and $id_rubrique = quete_parent($id_rubrique)
63 // se proteger des references circulaires
64 and $id_rubrique != $flux['args']['id_rubrique']
65 );
66 }
67 // sauver le squelette
68 $flux['data'] = $squelette;
69 }
70 }
71
72 return $flux;
73 }
74
75
76 /**
77 * Cherche l'existence un squelette par langue squelette.en.html
78 *
79 * Options de recherche de squelette par le styliseur, appelé par le pipeline 'styliser'
80 *
81 * @pipeline styliser
82 *
83 * @param array $flux Données du pipeline
84 * @return array Données du pipeline
85 */
86 function squelettes_par_rubrique_styliser_par_langue($flux) {
87
88 // uniquement si un squelette a ete trouve
89 if ($squelette = $flux['data']) {
90 $ext = $flux['args']['ext'];
91
92 // Affiner par lang
93 if ($lang = $flux['args']['lang']) {
94 $l = lang_select($lang);
95 $f = "$squelette." . $GLOBALS['spip_lang'];
96 if ($l) {
97 lang_select();
98 }
99 if (@file_exists("$f.$ext")) {
100 // sauver le squelette
101 $flux['data'] = $f;
102 }
103 }
104 }
105
106 return $flux;
107 }