source: spip-zone/_plugins_/z-core/trunk/zcore_options.php @ 118448

Last change on this file since 118448 was 118448, checked in by cedric@…, 9 months ago

eviter une fonction indefinie quand le hit fait que charger du cache et que zcore_pipelines n'est pas charge

File size: 8.9 KB
Line 
1<?php
2/*
3 * Plugin Z-core
4 * (c) 2008-2010 Cedric MORIN Yterium.net
5 * Distribue sous licence GPL
6 *
7 */
8
9// demander a SPIP de definir 'type-page' dans le contexte du premier squelette
10define('_DEFINIR_CONTEXTE_TYPE_PAGE', true);
11define('_ZPIP', true);
12// differencier le cache,
13// la verification de credibilite de var_zajax sera faite dans public_styliser_dist
14// mais ici on s'assure que la variable ne permet pas de faire une inclusion arbitraire
15// avec un . ou un /
16if ($z = _request('var_zajax') AND !preg_match(",[^\w-],", $z)) {
17        if (!isset($GLOBALS['marqueur'])) {
18                $GLOBALS['marqueur'] = "$z:";
19        } else {
20                $GLOBALS['marqueur'] .= "$z:";
21        }
22        $GLOBALS['flag_preserver'] = true;
23} else {
24        // supprimer cette variable dangereuse
25        set_request('var_zajax', '');
26}
27
28if (!isset($GLOBALS['spip_pipeline']['recuperer_fond'])) $GLOBALS['spip_pipeline']['recuperer_fond'] = '';
29$GLOBALS['spip_pipeline']['recuperer_fond'] .= '||zcore_recuperer_fond';
30
31function zcore_recuperer_fond($flux) {
32        if (!function_exists('zcore_recuperer_fond_detecter_404')) {
33                include_spip('zcore_pipelines');
34        }
35        return zcore_recuperer_fond_detecter_404($flux);
36}
37
38if (
39        defined('_SPIPR_AUTH_DEMO')?
40                _SPIPR_AUTH_DEMO
41                :
42                (isset($GLOBALS['visiteur_session']['statut'])
43    AND $GLOBALS['visiteur_session']['statut']=='0minirezo'
44    AND $GLOBALS['visiteur_session']['webmestre']=='oui')
45        )
46        _chemin(_DIR_PLUGIN_ZCORE."demo/");
47
48/**
49 * Passe un chemin en URL absolue uniquement si non vide
50 * utilise pour l'insertion d'URL conditionnee a l'existence d'un fichier (favicon.ico par exemple)
51 *
52 * @param string $path
53 * @param string $base
54 *
55 * @return string
56 */
57function url_absolue_si($path, $base = '') {
58        if (!$path) {
59                return "";
60        }
61        if (!function_exists('url_absolue')) {
62                include_spip('inc/filtres_mini');
63        }
64
65        return url_absolue($path, $base);
66}
67
68/**
69 * html Pour pouvoir masquer les logos sans les downloader en petit ecran
70 * il faut le mettre dans un conteneur parent que l'on masque
71 * http://timkadlec.com/2012/04/media-query-asset-downloading-results/
72 *
73 * On utilise un double conteneur :
74 * le premier fixe la largeur, le second la hauteur par le ratio hauteur/largeur
75 * grace a la technique des intrinsic-ratio ou padding-bottom-hack
76 * http://mobile.smashingmagazine.com/2013/09/16/responsive-images-performance-problem-case-study/
77 * http://alistapart.com/article/creating-intrinsic-ratios-for-video
78 *
79 * Le span interieur porte l'image en background CSS
80 * Le span conteneur ne porte pas de style display car trop prioritaire.
81 * Sans CSS il occupe la largeur complete disponible, car en inline par defaut
82 * Il suffit de lui mettre un float:xxx ou un display:block pour qu'il respecte la largeur initiale du logo
83 *
84 * Pour masquer les logos :
85 * .spip_logos {display:none}
86 * Pour forcer une taille maxi :
87 * .spip_logos {max-width:25%;float:right}
88 *
89 * @param $logo
90 *
91 * @return string
92 */
93function responsive_logo($logo) {
94        if (!function_exists('extraire_balise')) {
95                include_spip('inc/filtres');
96        }
97        if (!$logo OR !$img = extraire_balise($logo, "img")) {
98                return $logo;
99        }
100        list($h, $w) = taille_image($img);
101        if (!$h or !$w) {
102                return $logo;
103        }
104        $src = extraire_attribut($img, "src");
105        $class = extraire_attribut($img, "class");
106
107        // timestamper l'url si pas deja fait
108        if (strpos($src, "?") == false) {
109                $src = timestamp($src);
110        }
111
112        if (defined('_STATIC_IMAGES_DOMAIN')) {
113                $src = url_absolue($src, _STATIC_IMAGES_DOMAIN);
114        }
115
116        $hover = "";
117        if ($hover_on = extraire_attribut($img, "onmouseover")) {
118                $hover_off = extraire_attribut($img, "onmouseout");
119                $hover_on = str_replace("this.src=", "jQuery(this).css('background-image','url('+", $hover_on) . "+')')";
120                $hover_off = str_replace("this.src=", "jQuery(this).css('background-image','url('+", $hover_off) . "+')')";
121                $hover = " onmouseover=\"$hover_on\" onmouseout=\"$hover_off\"";
122        }
123
124        $ratio = round($h * 100 / $w, 2);
125
126        return "<span class='logo-img-wrapper $class' style=\"width:{$w}px;\"><span class=\"img\" style=\"display:block;position:relative;height:0;width:100%;padding-bottom:{$ratio}%;overflow:hidden;background:url($src) no-repeat center;background-size:100%;\"$hover> </span></span>";
127}
128
129/**
130 * Compatibilite : permet de remplacer les [(#TEXTE|image_reduire{500})] des squelettes
131 * par un simple [(#TEXTE|adaptive_images)]
132 * Avec le plugin adaptive_images cela produire des images adaptives
133 */
134if (!defined('_DIR_PLUGIN_ADAPTIVE_IMAGES')) {
135        // les images 1x sont au maximum en _ADAPTIVE_IMAGES_MAX_WIDTH_1x px de large dans la page
136        if (!defined('_ADAPTIVE_IMAGES_MAX_WIDTH_1x')) {
137                define('_ADAPTIVE_IMAGES_MAX_WIDTH_1x', 640);
138        }
139
140        function adaptive_images($texte, $max_width_1x = _ADAPTIVE_IMAGES_MAX_WIDTH_1x) {
141                if (!function_exists('filtrer')) {
142                        include_spip('inc/filtres');
143                }
144                $texte = filtrer('image_reduire', $texte, $max_width_1x, 10000);
145
146                return filtrer('image_graver', $texte);
147        }
148}
149
150/**
151 * utiliser une icone standard du sprite par defaut :
152 * #ICON{search,icon-sm,Rechercher}
153 *
154 * utiliser une icone #search definie dans un svg inline de la page
155 * #ICON{#search,icon-sm,Rechercher}
156 *
157 * utiliser une l'icone #search definie dans un svg externe (qui sera resolu via #CHEMIN)
158 * #ICON{img/sprite.svg#search,icon-sm,Rechercher}
159 *
160 * @param $p
161 * @return mixed
162 */
163function balise_ICON_dist($p) {
164        $_name = interprete_argument_balise(1, $p);
165        if (!$_name) {
166                // compat avec les champs #ICON utilises dans composition et noizetier : pas d'argument = champ sql (ou DATA)
167                $_icon = champ_sql('icon', $p);
168                $p->code = $_icon;
169        }
170        else {
171                $_class = interprete_argument_balise(2, $p);
172                if (!$_class) {
173                        $_class = "''";
174                }
175                $_alt = interprete_argument_balise(3, $p);
176                if (!$_alt) {
177                        $_alt = "''";
178                }
179                $p->code = "afficher_icone_svg($_name, $_class, $_alt)";
180        }
181
182        $p->interdire_scripts = false;
183        return $p;
184}
185
186function afficher_icone_svg($name, $class = '', $alt = '') {
187        $icone_href_class_from_name = chercher_filtre("icone_href_class_from_name");
188        list($href, $class_base) = $icone_href_class_from_name($name);
189        if (!$name) {
190                return $href;
191        }
192
193        if ($href) {
194                /*
195                        <svg aria-labelledby="my-icon-title" role="img">
196                    <title id="my-icon-title">Texte alternatif</title>
197                    <use xlink:href="bytesize-symbols.min.svg#search"></use>
198            </svg>
199                        <svg aria-hidden="true" role="img">
200                    <use xlink:href="bytesize-symbols.min.svg#search"></use>
201                        </svg>
202                 */
203                // width="0" height="0" -> rien ne s'affiche si on a pas la CSS icons.css
204                $svg = "<svg role=\"img\" width=\"0\" height=\"0\"";
205                if ($alt) {
206                        $id = "icon-title-" . substr(md5("$name:$alt:$href"),0,4);
207                        $svg .= " aria-labelledby=\"$id\"><title id=\"$id\">" . entites_html($alt)."</title>";
208                }
209                else {
210                        $svg .= ">";
211                }
212                $svg .= "<use xlink:href=\"$href\"></use>";
213                $svg .= "</svg>";
214
215                if ($class_base = trim($class_base)) {
216                        $class_base = ' icon-' . $class_base;
217                }
218                if ($class = trim($class)) {
219                        $class = preg_replace(",[^\w\s\-],", "", $class);
220                }
221                return "<i class=\"icon{$class_base}" . ($class ? " $class" : "") . "\">$svg</i> ";
222        }
223        return "";
224}
225
226function filtre_icone_href_class_from_name_dist($name) {
227        static $sprite_files = array();
228
229        if (strpos($name,'#') !== false or strpos($name,'/') !== false or strpos($name,'.svg') !== false) {
230                // l'ancre est fournie explicitement (sprite inline)
231                // voire le nom du fichier sprite svg
232                list($filename, $anchor) = explode('#', trim($name), 2);
233                // sanitizer l'ancre pour la class
234                $class = preg_replace(",[^\w\-],", "", $anchor);
235
236                if ($filename) {
237                        if (!isset($sprite_files[$filename])) {
238                                $sprite_files[$filename] = timestamp(find_in_path($filename));
239                        }
240                        $filename = $sprite_files[$filename];
241                        return array($filename . ($anchor ? '#' . $anchor : ''), $class);
242                }
243                else {
244                        return array($name, $class);
245                }
246        }
247        else {
248                // c'est le sprite par defaut avec un name qui correspond a l'ancre abregee
249                // et la gestion de quelques historiques de nommage/renommage
250                if (!isset($sprite_files[''])) {
251                        if (!defined('_ICON_SPRITE_SVG_FILE')) {
252                                define('_ICON_SPRITE_SVG_FILE', "css/bytesize/bytesize-symbols.min.svg");
253                        }
254                        $sprite_files[''] = timestamp(find_in_path(_ICON_SPRITE_SVG_FILE));
255                }
256                // sanitizer l'ancre pour la class
257                $class = preg_replace(",[^\w\-],", "", $name);
258                if (!$name) {
259                        return array($sprite_files[''], $class);
260                }
261                $icone_anchor_from_name = chercher_filtre("icone_anchor_from_name");
262                $anchor = $icone_anchor_from_name($name);
263                return array($sprite_files[''] . '#' . $anchor, $class);
264        }
265}
266
267function filtre_icone_anchor_from_name_dist($name) {
268        switch ($name) {
269                case "comment":
270                        $ancre = 'msg';
271                        break;
272                case "ok-circle":
273                        $ancre = 'compose';
274                        break;
275                default:
276                        $ancre = $name;
277                        break;
278        }
279        return "i-$ancre";
280}
281
282function lister_icones_svg() {
283        $sprite_file = afficher_icone_svg('');
284        if ($sprite_file
285                and $sprite_file = supprimer_timestamp($sprite_file)
286          and $sprite = file_get_contents($sprite_file)
287          and preg_match_all(',id="i-([\w\-]+)",', $sprite, $matches, PREG_PATTERN_ORDER)) {
288                $icons = $matches[1];
289                return $icons;
290        }
291        return array();
292}
293
294
Note: See TracBrowser for help on using the repository browser.