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 | */ |
---|
17 | function 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 | */ |
---|
36 | function 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 | */ |
---|
56 | function 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 |
---|
69 | if (_request('var_mode')=='inclure') |
---|
70 | define('_INTERDIRE_COMPACTE_HEAD',true); |
---|
71 | |
---|
72 | function 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('&', '&', $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 | |
---|
125 | function 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 | |
---|
133 | // var_dump(find_in_path('theme.scss','css/')); |
---|
134 | |
---|
135 | (find_in_path($scss_file,'css/')) ? $source_file = find_in_path($scss_file,'css/') : $source_file = null ; |
---|
136 | |
---|
137 | } |
---|
138 | // var_dump($source_file); |
---|
139 | return $source_file; |
---|
140 | } |
---|
141 | |
---|
142 | |
---|
143 | function skeleditor_affichage_final($texte){ |
---|
144 | if (isset($_COOKIE['spip_admin']) |
---|
145 | AND $GLOBALS['html'] |
---|
146 | AND isset($GLOBALS['visiteur_session']['statut']) |
---|
147 | AND $GLOBALS['visiteur_session']['statut'] |
---|
148 | AND intval($GLOBALS['visiteur_session']['statut'])<"1comite" |
---|
149 | AND include_spip("inc/autoriser") |
---|
150 | AND autoriser("skeleditor") |
---|
151 | ){ |
---|
152 | if ((defined('_VAR_INCLURE') AND _VAR_INCLURE) OR (isset($GLOBALS['var_inclure']) and $GLOBALS['var_inclure']) ){ |
---|
153 | $retour = self(); |
---|
154 | $url = generer_url_ecrire('skeleditor','retour='.$retour.'&f='); |
---|
155 | $inserer = "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs h6:first-child').each(function(){ |
---|
156 | jQuery(this).html(\"<a class='sepopin' href='$url\"+jQuery(this).html()+\"'>\"+jQuery(this).html()+'<'+'/a>'); |
---|
157 | });" |
---|
158 | //."jQuery('a.sepopin').click(function(){if (jQuery.modalbox) jQuery.modalbox(parametre_url(this.href,'var_zajax','contenu'));return false;});" |
---|
159 | ."});</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> |
---|
160 | </body>"; |
---|
161 | $texte = preg_replace(",</body>,",$inserer,$texte); |
---|
162 | |
---|
163 | $css = skeleditor_extraire_css($texte); |
---|
164 | $lienplus = array(); |
---|
165 | foreach($css as $src){ |
---|
166 | // si c'est un skel, le trouver |
---|
167 | if (is_array($src)) |
---|
168 | $src = find_in_path($src[0]."."._EXTENSION_SQUELETTES); |
---|
169 | if ($src) |
---|
170 | $lienplus[] = "<a href='$url".urlencode($src)."'" |
---|
171 | .">".basename($src)."<\/a>"; |
---|
172 | } |
---|
173 | if (count($lienplus)){ |
---|
174 | $lienplus = implode('',$lienplus); |
---|
175 | $lienplus = "<span class='spip-admin-boutons' id='inclure'>$lienplus<\/span>"; |
---|
176 | }; |
---|
177 | |
---|
178 | } else { |
---|
179 | $lienplus = "<a href='".parametre_url(self(),'var_mode','inclure')."' class='spip-admin-boutons' " |
---|
180 | ."id='inclure'>"._T('skeleditor:squelettes')."<\/a>"; |
---|
181 | } |
---|
182 | if ($lienplus) |
---|
183 | $inserer = "<script type='text/javascript'>/*<![CDATA[*/jQuery(function(){jQuery('#spip-admin').append(\"$lienplus\");});/*]]>*/</script></body>"; |
---|
184 | $texte = preg_replace(",</body>,",$inserer,$texte); |
---|
185 | } |
---|
186 | return $texte; |
---|
187 | } |
---|
188 | |
---|
189 | |
---|
190 | ?> |
---|