source: spip-zone/_contribs_/_importer_/memo/memo.php @ 45722

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

decodage des entites html

File size: 11.7 KB
Line 
1<?php
2
3// © Pierre Lazuly & Ph Riviere 2003-2011.
4// licence GNU/GPL
5// Documentation : http://www.spip-contrib.net/Le-bouton-memo
6
7$debug = false;
8
9//
10// Demarrage
11//
12
13unset ($methode);
14if (@file_exists('shim_auth.php')) {
15        // SHIM
16        require('shim_auth.php');
17        $methode = 'shim';
18} else if (@file_exists('inc_version.php')) {
19        // on est dans ecrire
20        include('inc.php');
21        $methode = 'ecrire';
22} else if (@file_exists('ecrire/inc_version.php')) {
23        // on est dans la racine de spip
24        include('ecrire/inc_version.php');
25        include_spip('inc/session');
26        include_spip('inc/presentation');
27        include_spip('inc/minipres');
28        include_spip('base/abstract_sql');
29        include_spip('inc/vieilles_defs');
30        verifier_visiteur();
31        $methode = 'spip';
32} else {
33        echo "mal install&eacute;.";
34        exit;
35}
36
37# compat. SPIP 1.9
38if (!function_exists('recuperer_page')) include_ecrire('inc_distant');
39
40if ($debug) {
41        $GLOBALS['mysql_profile'] = true;
42        $GLOBALS['mysql_debug'] = true;
43}
44
45// nom du site
46if (!$shim) $shim=lire_meta('nom_site');
47
48// version de la base spip = avant 1.722, on utilise le ps pour l'url, et le soustitre pour le nom du site
49$version_installee = lire_meta('version_installee');
50if ($version_installee < 1.722) {
51        $v_url_site = 'ps';
52        $v_nom_site = 'soustitre';
53} else {
54        $v_url_site = 'url_site';
55        $v_nom_site = 'nom_site';
56}
57
58// multicompatible
59function sql_quote_x($x) {
60        if (function_exists('sql_quote'))
61                return sql_quote($x);
62        else
63                return "'".addslashes($x)."'";
64}
65
66include_spip('inc/filtres');
67include_spip('inc/charsets');
68include_spip('inc/sites');
69
70function javascript2unicode($texte) {   // fonctionne avec le jajascript safari
71        while (ereg("%u([0-9A-F][0-9A-F][0-9A-F][0-9A-F])", $texte, $regs))
72                $texte = str_replace($regs[0],"&#x".$regs[1].";", $texte);
73        return $texte;
74}
75
76//
77//
78//
79
80
81//
82// Configuration ?
83//
84if (!$url=$_REQUEST['url'] OR (lire_meta("memo_active") != "oui")) {
85        configuration_memo();
86        exit;
87}
88
89
90//
91// Recuperer la page
92//
93
94// rubrique 'import'
95if ($rub = intval($_GET['rub'])) {
96        $resq =spip_query("SELECT * FROM spip_rubriques WHERE id_rubrique=$rub");
97        $res = spip_fetch_array($resq);
98        if (!$res) die ("La rubrique '$rub' n'existe pas, veuillez reconfigurer le bouton m&eacute;mo.");
99}
100$lang = $res['lang'];
101$auto_id_rubrique=$rub;
102$auto_id_auteur=$auteur_session['id_auteur'];
103
104// lire la page et la transcoder
105$url = ereg_replace(" ", "%20", $url);
106
107# test version de SPIP : a partir de 1.8pr2 recuperer_page() gere le charset
108if (function_exists('init_mb_string'))
109        $lapage = recuperer_page($url,true);
110
111else {
112        $lapage = recuperer_page($url);
113        if (preg_match(',<[^>]*charset=[\'" ]*([a-z0-9_-]+),i', $lapage, $regs))
114                $charset = trim($regs[1]);
115        else
116                $charset = 'iso-8859-1';
117        $lapage = importer_charset($lapage, $charset);
118}
119
120// PRETRAITEMENTS
121$lapage = str_replace("\n\r", "\r", $lapage); // echapper au greedyness de preg_replace
122$lapage = str_replace("\n", "\r", $lapage);
123
124// virer les commentaires html (qui cachent souvent css et jajascript)
125$lapage = preg_replace("/<!--.*-->/Uims", "", $lapage);
126
127$lapage = preg_replace("/<(script|style)\b.+?<\/\\1>/i", "", $lapage);
128// <pre>...</pre>
129if (preg_match_all('@<pre>.*</pre>@Uims', $lapage, $regs, PREG_SET_ORDER)) {
130        foreach ($regs as $reg) {
131                $lapage = str_replace($reg[0], str_replace("\r", "<br>", $reg[0]), $lapage);
132        }
133}
134// itals
135$lapage = preg_replace(",<(i|em)( [^>\r]*)?".">(.+)</\\1>,Uims", "{\\3}", $lapage);
136
137// gras (pas de {{ pour eviter tout conflit avec {)
138$lapage = preg_replace(",<(b|h[4-6])( [^>]*)?".">(.+)</\\1>,Uims", "@@b@@\\3@@/b@@", $lapage);
139
140// entites
141include_spip('inc/charsets');
142$lapage = html2unicode($lapage, true /* secure */);
143
144// liens
145$lapage = preg_replace(",<a[ \t\n\r][^<>]*href=[^<>]*(http[^<>'\"]*)[^<>]*>(.*?)<\/a>,uims", "[\\2->\\1]", $lapage);
146// intertitres
147$lapage = preg_replace(",<(h[1-3])( [^>]*)?".">(.+)</\\1>,Uims", "\r{{{ \\3 }}}\r", $lapage);
148// tableaux
149$lapage = preg_replace(",<tr( [^>]*)?".">,Uims", "<br>\r", $lapage);
150$lapage = preg_replace(",<t[hd]( [^>]*)?".">,Uims", " | ", $lapage);
151
152
153// POST TRAITEMENT
154$lapage = str_replace("\r", "\n", $lapage);
155
156// SUPPRIME LES TAGS
157if (eregi("<title.*>(.*)</title>", $lapage, $regs))
158        $titre = textebrut($regs[1]);
159$lapage = textebrut($lapage);
160
161// Suite tableaux
162$lapage = preg_replace(",\n[| ]+\n,", "", $lapage);
163$lapage = preg_replace(",\n[|].+?[|].+?[|].+,", "\\0|\r", $lapage);
164
165// retablir les gras
166$lapage = preg_replace(",@@b@@(.*)@@/b@@,Uims","<b>\\1</b>",$lapage);
167$lapage = preg_replace(",@@/?b@@,"," ",$lapage);
168
169$lapage = preg_split("/\r\n|\n\r|\n|\r/", $lapage);
170
171
172// TEST VALIDITE
173if (sizeof($lapage) < 10) {
174        echo install_debut_html("Erreur de lecture...");
175        echo "<p><b>burps !</b> Je n'ai pas r&eacute;ussi &agrave; lire la page demand&eacute;e (ou le r&eacute;sultat fait moins de 10&nbsp;lignes)&nbsp;:<hr>\n<pre>\n".nl2br(join("\n",$lapage))."</pre>\n";
176        echo install_fin_html();
177        exit;
178} 
179
180// ANALYSER
181if (ereg("THE_TITLE:",$lapage[1]))
182        $titre=ereg_replace("THE_TITLE:(.*)","\\1",$lapage[1]);
183$titre=trim($titre);
184if ($titre=='') $titre="(Sans titre)";
185
186// charset titre : safari et mozilla ne passent pas les valeurs dans le meme charset ;(
187// il faut donc se baser sur "le plus probable", a la louche...
188if ($t = $_REQUEST['t']) {
189        $marqueurs = array(224, 233, 232, 249, 244, 249, 234, 231);
190        while (list(,$marqueur) = each($marqueurs)) {
191                if (strpos(chr($marqueur), $t))
192                        $proba['iso-8859-1'] ++;
193                if (strpos(unicode2charset(chr($marqueur), 'utf-8', true), $t))
194                        $proba['iso-8859-1'] --;
195        } 
196
197        if ($proba['iso-8859-1']>0)
198                $titre = javascript2unicode(charset2unicode($t, 'iso-8859-1', true));  // titre passe par la bookmarklet (safari only)
199        else
200                $titre = javascript2unicode(charset2unicode($t, 'utf-8', true));
201
202        // si une valeur entre parenthese : c'est le nom_site
203        if (ereg("^(.+)\((.+)\)[ \r\n]*$", $titre, $regs)) {
204                $titre = $regs[1];
205                $nom_site = $regs[2];
206        }
207}
208
209unset($texte);
210unset($inbox);
211while (list($key,$lig) = each($lapage)) 
212{
213        $lig=trim($lig);
214        if (strlen($lig)>200) $inbox=1;
215        $lig = ereg_replace("[-_]{10,}", "\n------", $lig);
216        if ($inbox) {
217                $texte.=$lig."\n";
218                if ((strlen($lig)>200)AND(strlen($lig)<980))
219                        $texte.="\n";
220        } else
221                $chapo .= $lig."\n";
222}
223
224
225unset($id_article);
226$query="SELECT id_article,statut FROM spip_articles WHERE $v_url_site=".sql_quote_x($url)." AND statut!='poubelle'";
227$result=spip_query($query);
228if ($row = spip_fetch_array($result)) $id_article=$row['id_article'];
229
230if ($row['statut'] == 'publie') {
231        if (! (($auteur_session['statut']=='0minirezo') AND (lire_meta('memo_statut_article') == 'publie'))) {
232                die ("Article d&eacute;j&agrave; t&eacute;l&eacute;charg&eacute; et publi&eacute;... on n'y revient pas");
233        }
234}
235
236if (!$id_article) {
237        $forums_publics = substr(lire_meta('forums_publics'),0,3);
238        if (function_exists('sql_insert')) {
239                $id_secteur = array_pop(sql_fetsel('id_secteur', 'spip_rubriques', 'id_rubrique='._q($auto_id_rubrique)));
240               
241                $id_article = sql_insert('spip_articles',
242                        '(id_rubrique, id_secteur, titre, statut, date, accepter_forum, lang)',
243                        "($auto_id_rubrique, $id_secteur, 'temp', 'prop', NOW(), '$forums_publics', '$lang')");
244        } else {
245                // vieux spip
246                spip_query("INSERT INTO spip_articles (id_rubrique, titre, statut, date, accepter_forum, lang) VALUES ($auto_id_rubrique, 'temp', 'prop', NOW(), '$forums_publics', '$lang')");
247                $id_article = spip_insert_id();
248        }
249        if (!$id_article) die ('erreur insertion');
250
251        spip_query("DELETE FROM spip_auteurs_articles WHERE id_article = $id_article");
252        spip_query("INSERT INTO spip_auteurs_articles (id_auteur, id_article) VALUES ($auto_id_auteur, $id_article)");
253}
254
255
256// ENTRER DANS LA BASE
257
258        $titre = corriger_caracteres($titre);
259        $nom_site = corriger_caracteres($nom_site);
260        $url_site = corriger_caracteres($url);
261        $chapo = corriger_caracteres($chapo);
262        $texte = corriger_caracteres($texte);
263
264        if (function_exists('sql_updateq')) {
265                sql_updateq('spip_articles', array('surtitre' => $surtitre, 'titre' => $titre, $v_nom_site => $nom_site, 'id_rubrique' => $auto_id_rubrique, $v_url_site => $url_site, 'chapo' => $chapo, 'texte' => $texte, 'ps' => $ps), "id_article=$id_article");
266        } else {
267                $query = "UPDATE spip_articles SET surtitre=".sql_quote_x($surtitre).", titre=".sql_quote_x($titre).", $v_nom_site=".sql_quote_x($nom_site).", id_rubrique=".sql_quote_x($auto_id_rubrique).", $v_url_site=".sql_quote_x($url_site).", chapo=".sql_quote_x($chapo).", texte=".sql_quote_x($texte).", ps=".sql_quote_x($ps)." WHERE id_article=$id_article";
268                $result = spip_query($query);
269        }
270
271        // statut article
272        $statut_article = lire_meta('memo_statut_article');
273        if (($statut_article == 'publie') AND ($auteur_session['statut'] == '0minirezo')) {
274                spip_query ("UPDATE spip_articles SET statut='publie' WHERE id_article=$id_article");
275
276                if (lire_meta('activer_moteur') == 'oui') {
277                        include_spip("inc/indexation");
278                        indexer_article($id_article);
279                }
280        }
281
282$url_spip = lire_meta("adresse_site");
283
284if (!$debug)
285@Header("Location: $url_spip/ecrire/?exec=articles&id_article=$id_article");
286
287exit(1);
288
289
290function configuration_memo() {
291        global $shim, $SCRIPT_URI;
292
293        $laius = str_replace(' ', '%20', 'Memoriser cette page sous le titre...');
294
295        include_spip("inc/meta");
296        echo install_debut_html("Configuration m&eacute;mo ($shim)");
297
298        // admin ?
299        if ($GLOBALS['auteur_session']['statut'] != '0minirezo') {
300                echo "<p>Il faut vous <a href='spip.php?page=login&url=memo.php'>enregistrer</a> en tant qu'administrateur pour configurer ce 'bouton memo'.";
301                install_fin_html();
302                exit;
303        }
304
305        // recevoir les donn&eacute;es ou les lire dans meta.
306        $memo = Array('memo_active'=>'non', 'memo_statut'=>'0minirezo', 'memo_statut_article' => 'prop', 'memo_rubrique'=>0);
307        $memo_help = Array('memo_active' => '"oui" pour activer le syst&egrave;me',
308                'memo_statut' => "'0minirezo' ou '1comite' pour savoir qui peut m&eacute;moriser (vide = tout le monde) [pas encore impl&eacute;ment&eacute;]",
309                'memo_statut_article' => "'publie' si on veut publier les articles illico (admins seulement) et les indexer dans la foul&eacute;e",
310                'memo_rubrique' => "id_rubrique o&ugrave; tombent les pages m&eacute;moris&eacute;es (non bloquant)");
311        $post = $_REQUEST;
312        reset ($post);
313        while (list($var,$val) = each($post))
314                if (ereg("^memo_", $var)) {
315                        if ($memo[$var] = $val)
316                                ecrire_meta($var,$val);
317                        else {
318                                unset($memo[$var]);
319                                ecrire_meta($var,$val);
320                                effacer_meta($var);
321                        }
322                }
323        ecrire_metas();
324        $metas = $GLOBALS['meta'];
325        reset ($metas);
326        while (list($var,$val) = each($metas))
327                if (ereg("^memo_", $var)) {
328                        $memo[$var] = $val;
329                }
330
331        if ($_SERVER['SCRIPT_URI'])
332                $base_href = $_SERVER['SCRIPT_URI'];
333        else
334                $base_href = lire_meta('adresse_site') . '/memo.php';
335
336        if ($memo['memo_active'] == 'oui' AND $memo['memo_rubrique']) {
337                $bookmarklet1 = "javascript:void(location.href='$base_href?url='+escape(location.href)+'&rub=".$memo['memo_rubrique']."')";
338                $bookmarklet2 = "javascript:if(t=prompt('$laius',document.title))%7Bvoid(location.href='$base_href?url='+escape(location.href)+'&rub=".$memo['memo_rubrique']."&t='+escape(t));%7D";
339
340                echo "<p><b><a href=\"".$bookmarklet2."\">[+$shim]</a></b>&nbsp;: ";
341                echo "installez ce lien (par glisser-d&eacute;poser) dans votre barre de bookmarks&nbsp;; vous pourrez l'utiliser pour m&eacute;moriser n'importe quelle page web, directement dans votre base SPIP.<br /><a href='http://www.spip-contrib.net/article317.html'>Voir la documentation graphique...</a></p>";
342        }
343
344        // afficher config + formulaire config
345        echo "<br><hr><form method='get' action='memo.php'>\n";
346        reset($memo);
347        while (list($var,$val) = each($memo)) {
348                if (ereg("^memo_", $var)) {
349                        $valt = entites_html($val);
350                        echo "<p><b>$var</b> : <input type='text' name='$var' value='$valt'><br><small>$memo_help[$var]</small>\n";
351                }
352        }
353        echo "<br><div align='right'><input type='submit' name='ok' value='ok'></div></form>\n";
354
355               
356        if ($methode == 'shim') echo "<p><hr>[<a href='/shim/'>shim</a>]</p>";
357        echo install_fin_html();
358}
359
360?>
Note: See TracBrowser for help on using the repository browser.