source: spip-zone/_plugins_/skeleditor/trunk/skeleditor_options.php @ 111919

Last change on this file since 111919 was 111919, checked in by arnaud.berard@…, 14 months ago

suite de la recherche des fichiers source scss
on tente un iterateur sur les chemins spip et on ne garde que le premier resultat senssé être le plus prioritaire dans l'idée

c'est mieux que find_in_path on retrouve le fichier qu'il soit dans un dossier css, scss, …

  • tester si ça casse pas les fichiers .css.html

etat : dev
+z

File size: 6.1 KB
Line 
1<?php
2/**
3 * Plugin SkelEditor
4 * Editeur de squelette en ligne
5 * (c) 2007-2010 erational
6 * Licence GPL-v3
7 *
8 */
9
10
11
12/**
13 * Tester avec _request si on est dans l'edition de skeleditor et si oui, retourne l'extension du nom du fichier
14 *
15 * @return string
16 */
17function test_skeleditor_edition() {
18$exec = _request('exec');
19$filename = _request('f');
20        if ($exec == 'skeleditor'
21        AND $filename
22        AND $infos = pathinfo($filename)
23        AND $extension = $infos['extension'])
24        return $extension;
25        else
26        return false;
27
28}
29
30/**
31 * Produit les css dans le header_prive si n�cessaire
32 *
33 * @param string $flux
34 * @return string
35 */
36function skeleditor_insert_head_css($flux){
37        $extension = test_skeleditor_edition();
38                if($extension) {
39                static $done = false;
40                if (!$done) {
41                        $done = true;
42                        $type = "css";
43                        $css = skeleditor_dir($extension, $type);
44                        $flux .= $css;
45                }
46        }
47        return $flux;
48}
49
50/**
51 * Produit les js dans le header_prive si n�cessaire
52 *
53 * @param string $flux
54 * @return string
55 */
56function skeleditor_insert_head($flux){
57/*
58        $extension = test_skeleditor_edition();
59                if($extension) {
60                $type = "js";
61                $script = skeleditor_dir($extension, $type);
62                $flux = skeleditor_insert_head_css($flux); // au cas ou il n'est pas implemente
63                $flux .= $script;
64                }*/
65        return $flux;
66}
67
68// pas de compresseur si var_inclure
69if (_request('var_mode')=='inclure')
70        define('_INTERDIRE_COMPACTE_HEAD',true);
71
72function skeleditor_extraire_css($texte){
73        $url_base = url_de_base();
74        $url_page = substr(generer_url_public('A'), 0, -1);
75        $dir = preg_quote($url_page,',').'|'.preg_quote(preg_replace(",^$url_base,",_DIR_RACINE,$url_page),',');
76
77        $css = array();
78        // trouver toutes les css pour les afficher dans le bouton
79        // repris du compresseur
80        foreach (extraire_balises($texte, 'link') as $s) {
81                if (extraire_attribut($s, 'rel') === 'stylesheet'
82                AND (!($type = extraire_attribut($s, 'type'))
83                        OR $type == 'text/css')
84                AND !strlen(strip_tags($s))
85                AND $src = preg_replace(",^$url_base,",_DIR_RACINE,extraire_attribut($s, 'href'))
86                AND (
87                        // regarder si c'est du format spip.php?page=xxx
88                        preg_match(',^('.$dir.')(.*)$,', $src, $r)
89                        OR (
90                                // ou si c'est un fichier
91                                // enlever un timestamp eventuel derriere un nom de fichier statique
92                                $src2 = skeleditor_trouver_source($src)
93                                // verifier qu'il n'y a pas de ../ ni / au debut (securite)
94                                AND !preg_match(',(^/|\.\.),', substr($src2,strlen(_DIR_RACINE)))
95                                // et si il est lisible
96                                AND @is_readable($src2)
97                        )
98                )) {
99                        if ($r)
100                                $css[$s] = explode('&',
101                                        str_replace('&amp;', '&', $r[2]), 2);
102                        else{
103                                // var_dump($src2);
104                                $file = preg_replace(",[?]\d+$,","",$src2);
105                                if (strncmp($file,_DIR_VAR,strlen(_DIR_VAR))==0){
106                                        lire_fichier($file,$c);
107                                        if (preg_match(",^\/\*\s*(#@.*)\s*\*\/,Uims",$c,$m)){
108                                                $inc = explode("#@",$m[1]);
109                                                $inc = array_map('trim',$inc);
110                                                $inc = array_filter($inc);
111                                                foreach($inc as $i){
112                                                        if (!in_array($i,$css))
113                                                                $css["$s:$i"] = $i;
114                                                }
115                                        }
116                                }
117                                else
118                                        $css[$s] = $file;
119                        }
120                }
121        }
122        return $css;
123}
124
125function skeleditor_trouver_source($src){
126                // enlever un timestamp eventuel derriere un nom de fichier statique
127                $source_file = preg_replace(",[.]css[?].+$,",'.css',$src);
128                // est-ce un fichier scss cssifié
129                if(preg_match("/-cssify-[\w\d]*.css/s",$source_file)){
130                        $scss_file = preg_replace(",local/cache-scss/([a-z0-9\-\_]*)-cssify-[\w\d]*.css,s",'${1}.scss', $source_file);
131
132                        $paths = creer_chemin();
133                        foreach ($paths as $path) {
134                                if($path !='') {
135                                        $dir_iterator = new RecursiveDirectoryIterator($path);
136                                        $iterator = new RecursiveIteratorIterator($dir_iterator,
137                                                                                                                        RecursiveIteratorIterator::SELF_FIRST);
138                                        foreach ($iterator as $splFile) {
139                                                        if ($splFile->getBaseName() == $scss_file) {
140                                                                        return $splFile->getPathName();
141                                                        }
142                                        }
143                                }
144                        }
145                }
146                return $source_file;
147}
148
149
150function skeleditor_affichage_final($texte){
151        if (isset($_COOKIE['spip_admin'])
152          AND $GLOBALS['html']
153          AND isset($GLOBALS['visiteur_session']['statut'])
154                AND $GLOBALS['visiteur_session']['statut']
155          AND intval($GLOBALS['visiteur_session']['statut'])<"1comite"
156          AND include_spip("inc/autoriser")
157          AND autoriser("skeleditor")
158        ){
159                if ((defined('_VAR_INCLURE') AND _VAR_INCLURE) OR (isset($GLOBALS['var_inclure']) and $GLOBALS['var_inclure']) ){
160                        $retour = self();
161                        $url = generer_url_ecrire('skeleditor','retour='.$retour.'&f=');
162                        $inserer = "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs h6:first-child').each(function(){
163                                jQuery(this).html(\"<a class='sepopin' href='$url\"+jQuery(this).html()+\"'>\"+jQuery(this).html()+'<'+'/a>');
164                        });"
165                        //."jQuery('a.sepopin').click(function(){if (jQuery.modalbox) jQuery.modalbox(parametre_url(this.href,'var_zajax','contenu'));return false;});"
166                        ."});</script><style>.spip-admin-boutons {display:block;float:left;margin-right:10px; max-height:300px; overflow:auto;} .spip-admin-boutons a{display:block;opacity:0.7;} .spip-admin-boutons:hover,.spip-admin-boutons a:hover {opacity:1.0;}</style>
167                        </body>";
168                        $texte = preg_replace(",</body>,",$inserer,$texte);
169
170                        $css = skeleditor_extraire_css($texte);
171                        $lienplus = array();
172                        foreach($css as $src){
173                                // si c'est un skel, le trouver
174                                if (is_array($src))
175                                        $src = find_in_path($src[0]."."._EXTENSION_SQUELETTES);
176                                if ($src)
177                                        $lienplus[] = "<a href='$url".urlencode($src)."'"
178                        .">".basename($src)."<\/a>";
179                        }
180                        if (count($lienplus)){
181                                $lienplus = implode('',$lienplus);
182                                $lienplus = "<span class='spip-admin-boutons' id='inclure'>$lienplus<\/span>";
183                        };
184
185                } else {
186                        $lienplus = "<a href='".parametre_url(self(),'var_mode','inclure')."' class='spip-admin-boutons' "
187                        ."id='inclure'>"._T('skeleditor:squelettes')."<\/a>";
188                }
189                if ($lienplus)
190                        $inserer = "<script type='text/javascript'>/*<![CDATA[*/jQuery(function(){jQuery('#spip-admin').append(\"$lienplus\");});/*]]>*/</script></body>";
191                        $texte = preg_replace(",</body>,",$inserer,$texte);
192        }
193        return $texte;
194}
195
196
197?>
Note: See TracBrowser for help on using the repository browser.