source: spip-zone/_plugins_/acs/balise/acs_balises.php @ 48798

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

ACS:

  • la balise #ACS_CHEMIN{truc} ne renvoit désormais plus rien si truc n'est pas un fichier lisible.


Cat :

  • Articles: gestion des versions des articles. Affichage des changements (wiki). Mise à jour d'une ancienne version (wiki: revert).
  • Rubnav : supprimer numéro sur résultat d'une recherche.
  • Versions: nouveau composant affichant les versions d'un article (wiki).
File size: 6.7 KB
Line 
1<?php
2#              ACS
3#          (Plugin Spip)
4#     http://acs.geomaticien.org
5#
6# Copyright Daniel FAIVRE, 2007-2011
7# Copyleft: licence GPL - Cf. LICENCES.txt
8
9include_spip('inc/composant/composants_liste');
10
11/**
12 * Inclut les balises spip définies par les composants actifs
13 * Include components defined spip-tags
14 */
15function composants_ajouter_balises() {
16  foreach (composants_liste() as $c =>$composant) {
17        // On teste si au moins une instance du composant est active
18    if (!composant_actif($composant)) continue;
19        $bc= find_in_path('composants/'."$c/$c".'_balises.php');
20    if ($bc)
21      include($bc); // Les erreurs ne doivent JAMAIS être masquées, ici
22  }
23}
24// On ajoute les balises de chaque composant actif - We add tags for every active component
25composants_ajouter_balises();
26
27function balise_ACS_VERSION($p) {
28  $p->code = 'calcule_balise_acs_version()';
29  $p->statut = 'php';
30  $p->interdire_scripts = false;
31  return $p;
32}
33function calcule_balise_acs_version() {
34        include_spip('inc/acs_version');
35        return acs_version();
36}
37function balise_ACS_RELEASE($p) {
38  $p->code = 'calcule_balise_acs_release()';
39  $p->statut = 'php';
40  $p->interdire_scripts = false;
41  return $p;
42}
43function calcule_balise_acs_release() {
44        include_spip('inc/acs_version');
45        return acs_release();
46}
47
48function calculer_balise_pinceau($composant, $nic) {
49  $nic = $nic ? $nic : '0';
50  return  'crayon composant-'.$composant.'-'.$nic.' type_pinceau';
51}
52
53function balise_PINCEAU($p) {
54  $composant = interprete_argument_balise(1,$p);
55  $nic = interprete_argument_balise(2,$p);
56  $nic = $nic ? $nic : "'0'";
57  $p->code = 'calculer_balise_pinceau('.$composant.', '.$nic.')';
58  $p->statut = 'php';
59  $p->interdire_scripts = false;
60  return $p;
61}
62
63function balise_ACS_DERNIERE_MODIF($p) {
64  $p->code = '$GLOBALS["meta"]["acsDerniereModif"]';
65  $p->statut = 'php';
66  $p->interdire_scripts = false;
67  return $p;
68}
69
70// Retourne le chemin d'une ressource ACS
71// ou vide si la ressource n'est pas accessible au moins en lecture.
72function balise_ACS_CHEMIN($p) {
73  $arg = interprete_argument_balise(1,$p);
74  $p->statut = 'php';
75  $p->interdire_scripts = false;
76  $p->code = $arg ? '_DIR_RACINE.$GLOBALS["ACS_CHEMIN"]."/".'.$arg : '_DIR_RACINE.$GLOBALS["ACS_CHEMIN"]."/"';
77  eval('$path = '.$p->code.';');
78  if (!is_readable($path) || !is_file($path))
79        $p->code = '""';
80  return $p;
81}
82
83/** VAR = balise CONFIG de SPIP etendue, qui remplaçe les variables ACS par leur valeur, récursivement.
84 * admet deux arguments : nom de variable, valeur par defaut si vide
85 * syntaxe : #VAR{acsComposantVariable} ou #VAR{acsComposantVariable, valeur_par_defaut}
86 * Lorsque la valeur d'une variable commence par le signe "=",
87 * cette valeur est interprétée comme une référence récursive à une autre variable.
88 */
89
90function balise_VAR($p) {
91        $var = interprete_argument_balise(1,$p);
92        $sinon = interprete_argument_balise(2,$p);
93        if (!$var) {
94                $p->code = '""'; // cas de #VAR sans argument
95        } else {
96                $p->code = 'meta_recursive($GLOBALS["meta"], '.$var.')';
97                if ($sinon)
98                        $p->code = 'sinon('.$p->code.','.$sinon.')';
99                else
100                        $p->code = '('.$p->code.')';
101        }
102        $p->interdire_scripts = false;
103        return $p;
104}
105
106/**
107 * Retourne les css ou les javascripts des composants
108 */
109function balise_HEADER_COMPOSANTS($p) {
110  $typeh = interprete_argument_balise(1,$p);
111  $typeh = substr($typeh, 1, strlen($typeh)-2);
112  $p->code = 'composants_head_cache("'.$typeh.'")';
113  $p->statut = 'php';
114  $p->interdire_scripts = false;
115  return $p; 
116}
117
118// "Cache" de la fonction composants_head. On force le recalcul car de toute façon SPIP met en cache
119// ça ferait donc double-emploi, avec de sérieux soucis de debug liés a un double cache css sinon.
120// TODO : garder la mise en cache pour les "vieux" Spip ?
121function composants_head_cache($type) {
122  $r = cache('composants_head', 'head_'.$GLOBALS['meta']['acsModel'].'_'.$type, array("$type"), true);
123  return $r[0];
124}
125
126// Retourne les css ou javascripts des composants, concaténés
127function composants_head($type) {
128  if (is_array(composants_liste())) {
129    // composants_liste() est statique,  mise en cache,
130    // et tient compte de l'override éventuel
131    $done = array();
132    $jslibs = array();
133    foreach (composants_liste() as $class=>$cp) {
134        foreach($cp['instances'] as $nic=>$c) {
135                if ($c['on'] != 'oui') continue;
136                if (!in_array($class, $done)) {
137          $filepath = 'composants/'.$class.'/'.((strtolower($type) == 'css') ? $class.'.css': "$type/$class.js");
138          $file = find_in_path($filepath.'.html');
139          if (!$file) {
140            $file = find_in_path($filepath);
141            if ($file)
142              $r .= file_get_contents($file);
143          }
144          else {
145            $r .= recuperer_fond($filepath, array('X-Spip-Cache' => 0))."\r";
146          }
147          $done[] = $class; 
148                }
149        // On cherche aussi les css d'instances de composants
150        if (strtolower($type) == 'css') {
151                $filepath = 'composants/'.$class.'/'.$class.'_instances.css';
152                $file = find_in_path($filepath.'.html');
153                if ($file)
154                        $r .= recuperer_fond($filepath, array('nic' => $nic, 'X-Spip-Cache' => 0))."\r";
155        }
156      }
157      // on fait la liste des librairies javascripts a inclure (declarees dans chaque composant, dans moncomposant_balises.php,
158      // sous la forme d'une fonction moncomposant_jslib() qui retourne un tableau des librairies js a inclure pour ce composant)
159      if(strtolower($type) == 'javascript') {
160        if (is_callable($class.'_jslib')) {
161                $c_jslibs = $class.'_jslib';
162                foreach($c_jslibs() as $lib) {
163                        $jslibs[$lib] = true;
164                }
165        }
166      }
167    }
168    // on recupere les librairies js requises pour tous les composants, une seule fois chacune
169    foreach($jslibs as $jslib => $ok) {
170      $file = find_in_path($jslib.'.html');
171      if (!$file) {
172        $file = find_in_path($jslib);
173        if ($file)
174          $libs .= file_get_contents($file)."\r";
175      }
176      else {
177        $libs .= recuperer_fond($jslib, array('X-Spip-Cache' => 0))."\r";
178      }
179    }
180  }
181  return $libs.$r;
182}
183/* usage avec les groupes acs ou pour droits sur le site public */
184function balise_ACS_AUTORISE($p) {
185  $rs = interprete_argument_balise(1,$p);
186  $p->code = 'acs_autorise('.$rs.')';
187  $p->statut = 'php';
188  $p->interdire_scripts = false;
189  return $p;
190}
191
192/* Overide de la balise CACHE : permet de passer un paramètre à la balise SPIP
193 * Les 2 paramètres de la balise #CACHE sont interprétés et passés à la balise
194 * #CACHE de la dist.
195 */
196function balise_CACHE($p) {
197  if ($GLOBALS['contexte']['cache']) {
198    $cache = explode(',', $GLOBALS['contexte']['cache']);
199    $p->param[0][1][0]->texte = $cache[0];
200    if (isset($cache[1]))
201      $p->param[0][1][1]->texte = $cache[1];
202  }
203  return balise_CACHE_dist($p);
204}
Note: See TracBrowser for help on using the repository browser.