From 8868fe4ba058f98ac98101ccc70394eee9cc82d4 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Fri, 27 Apr 2007 15:49:55 +0000 Subject: [PATCH] Rendre surchargeable la fonction d'authentification hors HTTP inc_admin. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Interface: cette fonction reçoit comme premier argument un nom et demande la création d'un répertoire déduit de ce nom et de l'heure, et relance le script. Si le répertoire existe déjà (au 2e appel normalement) elle mémorise dans la table spip_meta le $REQUEST ayant provoqué l'appel, cette méta étant nommée également par le premier argument. Elle effectue ensuite un charger_fonction sur ce nom et le répertoire {{{base}}} (car ces actions concernent toujours la base de donnnées: upgrade, delete_all, convert_utf8, admin_repair). En cas d'interruption du script, tester la présence de telles variables au niveau de ecrire/index.php permet de s'apercevoir de l'interruption, et de reprendre le travail avec les valeurs transmises dans $_REQUEST lors du premier appel (n'est utilisé actuellement que pour import_all). Lorsque la fonction chargée a fini le travail, la meta et le repertoire sont supprimés. La fonction inc_admin admet 3 arguments supplémentaires optionnels: le titre de la page, un texte preliminaire expliquant l'action entreprise après création du répertoire, et une URL de retour. Au passage, ajout de la destruction du cache du menu des rubriques dans l'action de purge des caches, sinon on croit que l'action convert_utf8 n'a pas marché. La rationnalisation des noms induit donc que la meta "debut_restauration" se nomme à présent "import_all", et "conversion_charset" se nomme "convert_utf8; cet arbitraire ne devrait avoir aucune conséquence. Il reste un cas d'appel de debut_admin en dehors de ce schéma, lié au passage inachevé en plugin de la gestion du vieux htpassword. --- .gitattributes | 4 + ecrire/action/purger.php | 5 +- ecrire/base/admin_repair.php | 52 ++++++++ ecrire/base/convert_utf8.php | 162 +++++++++++++++++++++++++ ecrire/base/delete_all.php | 74 ++++++++++++ ecrire/base/import_all.php | 129 ++++++++++++++++++++ ecrire/base/upgrade.php | 13 ++ ecrire/exec/admin_repair.php | 50 +------- ecrire/exec/convert_utf8.php | 214 +++++---------------------------- ecrire/exec/delete_all.php | 67 +---------- ecrire/exec/import_all.php | 200 +++++++----------------------- ecrire/exec/menu_rubriques.php | 4 +- ecrire/exec/upgrade.php | 44 ++----- ecrire/inc/admin.php | 67 +++++++---- ecrire/inc/import.php | 2 +- ecrire/inc/utils.php | 9 +- ecrire/index.php | 3 +- ecrire/install/etape_3.php | 2 +- 18 files changed, 582 insertions(+), 519 deletions(-) create mode 100644 ecrire/base/admin_repair.php create mode 100644 ecrire/base/convert_utf8.php create mode 100644 ecrire/base/delete_all.php create mode 100644 ecrire/base/import_all.php diff --git a/.gitattributes b/.gitattributes index d94bb602f1..6e20957dad 100644 --- a/.gitattributes +++ b/.gitattributes @@ -392,6 +392,10 @@ ecrire/action/tester_taille.php -text ecrire/action/tourner.php -text ecrire/action/virtualiser.php -text ecrire/balise/index.php -text +ecrire/base/admin_repair.php -text +ecrire/base/convert_utf8.php -text +ecrire/base/delete_all.php -text +ecrire/base/import_all.php -text ecrire/base/index.php -text ecrire/charsets/cp1250.php -text ecrire/charsets/cp1251.php -text diff --git a/ecrire/action/purger.php b/ecrire/action/purger.php index eae598423e..2a8360f786 100644 --- a/ecrire/action/purger.php +++ b/ecrire/action/purger.php @@ -20,17 +20,19 @@ function action_purger_dist() include_spip('inc/invalideur'); + spip_log('purger $arg'); + switch ($arg) { case 'index': include_spip('inc/indexation'); - spip_log("purger_indx"); purger_index(); creer_liste_indexation(); break; case 'cache': supprime_invalideurs(); + @unlink(_CACHE_RUBRIQUES); purger_repertoire(_DIR_CACHE); break; @@ -39,7 +41,6 @@ function action_purger_dist() break; case 'vignettes': - spip_log('vider le cache'); purger_repertoire(_DIR_VAR); supprime_invalideurs(); purger_repertoire(_DIR_CACHE); diff --git a/ecrire/base/admin_repair.php b/ecrire/base/admin_repair.php new file mode 100644 index 0000000000..c036307ff9 --- /dev/null +++ b/ecrire/base/admin_repair.php @@ -0,0 +1,52 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2007 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + +// http://doc.spip.org/@verifier_base +function base_admin_repair_dist() { + $res1= spip_query("SHOW TABLES"); + + $res = ""; + if ($res1) { while ($tab = spip_fetch_array($res1,SPIP_NUM)) { + $res .= "<p><b>".$tab[0]."</b> "; + + $result_repair = spip_query("REPAIR TABLE ".$tab[0]); + if (!$result_repair) return false; + + $result = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM ".$tab[0])); + if (!$result) return false; + + $count = $result['n']; + if ($count>1) + $res .= "("._T('texte_compte_elements', array('count' => $count)).")\n"; + else if ($count==1) + $res .= "("._T('texte_compte_element', array('count' => $count)).")\n"; + else + $res .= "("._T('texte_vide').")\n"; + + $row = spip_fetch_array($result_repair,SPIP_NUM); + $ok = ($row[3] == 'OK'); + + if (!$ok) + $res .= "<pre><span style='color: red; font-weight: bold;'>".htmlentities(join("\n", $row))."</span></pre>\n"; + else + $res .= " "._T('texte_table_ok')."<br />\n"; + } + } + + if (!$res) { + $res = "<br /><br /><span style='color: red; font-weight: bold;'><tt>"._T('avis_erreur_mysql').' '.spip_sql_errno().': '.spip_sql_error() ."</tt></span><br /><br /><br />\n"; + } + echo minipres(_T('texte_tentative_recuperation'), $res); +} +?> diff --git a/ecrire/base/convert_utf8.php b/ecrire/base/convert_utf8.php new file mode 100644 index 0000000000..cbe9f67e9a --- /dev/null +++ b/ecrire/base/convert_utf8.php @@ -0,0 +1,162 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2007 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + +function convert_utf8_init($tables_a_convertir) +{ + // noter dans les meta qu'on veut convertir, et quoi + $charset_source = $GLOBALS['meta']['charset']; + ecrire_meta('charset', 'utf-8'); + ecrire_metas(); + foreach ($tables_a_convertir as $table => $champ) { + spip_log("demande update charset table $table ($champ)"); + spip_query("UPDATE $table SET $champ = CONCAT('<CONVERT ".$charset_source.">', $champ) WHERE $champ NOT LIKE '<CONVERT %'"); + } + + @unlink(_DIR_TMP.'convert_utf8_backup.sql'); + + // convertir spip_meta + + foreach ($GLOBALS['meta'] as $c => $v) { + $v2 = unicode_to_utf_8(charset2unicode($v, $charset_source)); + if ($v2 != $v) ecrire_meta($c, $v2); + } + ecrire_metas(); +} + +function base_convert_utf8_dist($titre, $reprise=false) +{ + // poser un verrou (et abandonner si l'action est en cours) + + if (!spip_get_lock('conversion_charset')) { + echo minipres(_T('utf8_convert_attendez')); + exit; + } + // une liste des tables a convertir, avec le champ dans lequel on + // indique '<CONVERT charset>' ; on commence par les rubriques sinon + // ca fait desordre dans l'interface privee + $tables_a_convertir = array( + 'spip_rubriques' => 'titre', + 'spip_auteurs' => 'nom', + 'spip_articles' => 'titre', + 'spip_breves' => 'titre', + 'spip_documents' => 'titre', + 'spip_forum' => 'titre', + 'spip_mots' => 'titre', + 'spip_groupes_mots' => 'titre', + 'spip_petitions' => 'texte', + 'spip_signatures' => 'nom_email', + 'spip_syndic' => 'nom_site', + 'spip_syndic_articles' => 'titre', + 'spip_messages' => 'titre' + ); + + if (!$reprise) convert_utf8_init($tables_a_convertir); + + echo install_debut_html($titre); + + echo "<p>", _T('utf8_convert_timeout'), "</p><hr />\n"; + + // preparer un fichier de sauvegarde au cas ou + // on met 'a' car ca peut demander plusieurs rechargements + $f = @fopen(_DIR_TMP.'convert_utf8_backup.sql', 'a'); + + foreach ($tables_a_convertir as $table => $champ) { + convert_table_utf8($f, $table, $champ); + } + + if ($f) fclose($f); + + echo "<p><b>"._T('utf8_convert_termine')."</b></p>"; + echo "<p>,"._T('utf8_convert_verifier', array('rep' => joli_repertoire(_DIR_TMP))), '</p>'; + + // bouton "retour au site" + redirige_par_entete + echo "<p style='text-align: right'>", + "<a href='", generer_url_ecrire("config_lang"), "'> >> ", + _T('icone_retour'),"</a></p>", + install_fin_html(); +} + + +function convert_table_utf8($f, $table, $champ) +{ + echo "<br /><b>$table</b> "; + $s = spip_query("SELECT * FROM $table WHERE $champ LIKE '<CONVERT %'"); + + // recuperer 'id_article' (encore un truc a faire dans table_objet) + preg_match(',^spip_(.*?)s?$,', $table, $r); + $id_champ = 'id_'.$r[1]; + if ($table == 'spip_petitions') $id_champ = 'id_article'; + if ($table == 'spip_groupes_mots') $id_champ = 'id_groupe'; + + // lire les donnees dans un array + while ($t = spip_fetch_array($s, SPIP_ASSOC)) { + $query = array(); + $query_no_convert = ''; + $query_extra = ''; + foreach ($t as $c => $v) { + if ($c == $champ) { + preg_match(',^<CONVERT (.*?)>,', $v, $reg); + $v = substr($v, strlen($reg[0])); + $charset_source = $reg[1]; + $query[] = "$c=" . _q($v); + } else { + if (!is_numeric($v) + AND !is_ascii($v)) { + // traitement special car donnees serializees + if ($c == 'extra') { + $query_no_convert .= ", $c="._q($v); + $query_extra = convert_extra($v); + } else + $query[] = "$c=" . _q($v); + } else + # pour le backup + $query_no_convert .= ", $c="._q($v); + } + } + + $set = join(', ', $query); + $where = "$id_champ = ".$t[$id_champ]; + + // On l'enregistre telle quelle sur le fichier de sauvegarde + if ($f) fwrite($f, + "UPDATE $table SET $set$query_no_convert" + ." WHERE $where;\n" + ); + + // Mais on la transcode + // en evitant une double conversion + if ($charset_source != 'utf-8') { + $query = "UPDATE $table SET " + . unicode_to_utf_8(charset2unicode($set, $charset_source)) + . $query_extra + . " WHERE $where AND $champ LIKE '<CONVERT %'"; + #echo $query; + spip_query($query); + echo '. '; flush(); + } + } + spip_free_result($s); +} + +// stocker le nouvel extra +// http://doc.spip.org/@convert_extra +function convert_extra($v) { + if ($extra = @unserialize($v)) { + foreach ($extra as $key=>$val) + $extra[$key] = unicode_to_utf_8( + charset2unicode($val, $charset_source)); + return ", extra="._q(serialize($extra)); + } +} +?> diff --git a/ecrire/base/delete_all.php b/ecrire/base/delete_all.php new file mode 100644 index 0000000000..3c27b78f1c --- /dev/null +++ b/ecrire/base/delete_all.php @@ -0,0 +1,74 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2007 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; // securiser + +// faudrait plutot recuperer dans inc_serialbase et inc_auxbase +// mais il faudra prevenir ceux qui affectent les globales qui s'y trouvent +// Afficher la liste de ce qu'on va detruire et demander confirmation +// ca vaudrait mieux + +function base_delete_all_dist($titre) +{ + spip_query("DROP TABLE spip_articles"); + spip_query("DROP TABLE spip_auteurs"); + spip_query("DROP TABLE spip_auteurs_articles"); + spip_query("DROP TABLE spip_auteurs_messages"); + spip_query("DROP TABLE spip_auteurs_rubriques"); + spip_query("DROP TABLE spip_breves"); + spip_query("DROP TABLE spip_documents"); + spip_query("DROP TABLE spip_documents_articles"); + spip_query("DROP TABLE spip_documents_breves"); + spip_query("DROP TABLE spip_documents_rubriques"); + spip_query("DROP TABLE spip_forum"); + spip_query("DROP TABLE spip_groupes_mots"); + spip_query("DROP TABLE spip_index"); + spip_query("DROP TABLE spip_index_dico"); + spip_query("DROP TABLE spip_messages"); + spip_query("DROP TABLE spip_meta"); + spip_query("DROP TABLE spip_mots"); + spip_query("DROP TABLE spip_mots_articles"); + spip_query("DROP TABLE spip_mots_breves"); + spip_query("DROP TABLE spip_mots_forum"); + spip_query("DROP TABLE spip_mots_rubriques"); + spip_query("DROP TABLE spip_mots_syndic"); + spip_query("DROP TABLE spip_petitions"); + spip_query("DROP TABLE spip_referers"); + spip_query("DROP TABLE spip_referers_articles"); + spip_query("DROP TABLE spip_rubriques"); + spip_query("DROP TABLE spip_signatures"); + spip_query("DROP TABLE spip_syndic"); + spip_query("DROP TABLE spip_syndic_articles"); + spip_query("DROP TABLE spip_types_documents"); + spip_query("DROP TABLE spip_visites"); + spip_query("DROP TABLE spip_visites_articles"); + spip_query("DROP TABLE spip_caches"); + spip_query("DROP TABLE spip_mots_documents"); + spip_query("DROP TABLE spip_ortho_cache"); + spip_query("DROP TABLE spip_ortho_dico"); + spip_query("DROP TABLE spip_versions"); + spip_query("DROP TABLE spip_versions_fragments"); + + // Trois tables pas necessairement la: pas de faux messages d'erreur + spip_log("tes index_table et forum_cache"); + @spip_query("DROP TABLE spip_test"); + @spip_query("DROP TABLE spip_index_table"); + @spip_query("DROP TABLE spip_forum_cache"); + +// un pipeline pour detruire les tables installees par les plugins + pipeline('delete_tables', ''); + + @unlink(_ACCESS_FILE_NAME); + @unlink(_FILE_CONNECT); + spip_log("destruction operee redirige vers " . _request('redirect')); +} +?> diff --git a/ecrire/base/import_all.php b/ecrire/base/import_all.php new file mode 100644 index 0000000000..78750de252 --- /dev/null +++ b/ecrire/base/import_all.php @@ -0,0 +1,129 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2007 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + +include_spip('base/serial'); +include_spip('base/auxiliaires'); + +// par defaut tout est importe sauf les tables ci-dessous +// possibiliter de definir cela tables via la meta +global $IMPORT_tables_noimport; +if (isset($GLOBALS['meta']['IMPORT_tables_noimport'])) + $IMPORT_tables_noimport = unserialize($GLOBALS['meta']['IMPORT_tables_noimport']); +else{ + include_spip('inc/meta'); + $IMPORT_tables_noimport[]='spip_caches'; + ecrire_meta('IMPORT_tables_noimport',serialize($IMPORT_tables_noimport),'non'); + ecrire_metas(); +} + +// NB: Ce fichier peut ajouter des tables (old-style) +// donc il faut l'inclure "en globals" +if ($f = include_spip('mes_fonctions', false)) { + global $dossier_squelettes; + @include_once ($f); +} + +// http://doc.spip.org/@import_charge_version +function import_charge_version($version_archive) +{ + if (preg_match("{^phpmyadmin::}is",$version_archive)){ + $fimport = 'import_1_3'; + } else $fimport = 'import_' . str_replace('.','_',$version_archive); + + return charger_fonction($fimport, 'inc', true); +} + +function base_import_all_dist($titre, $reprise=false) +{ + if (!$reprise) import_all_debut(); + + $request = unserialize($GLOBALS['meta']['import_all']); + // au rappel, on commence (voire on continue) + @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure + // utiliser une version fraiche des metas (ie pas le cache) + include_spip('inc/meta'); + lire_metas(); + include_spip('inc/import'); + @ignore_user_abort(1); + + $commencer_page = charger_fonction('commencer_page', 'inc'); + echo $commencer_page($titre, "accueil", "accueil"); + + debut_gauche(); + + debut_droite(); + + // precaution inutile I think (esj) + list($my_date) = spip_fetch_array(spip_query("SELECT UNIX_TIMESTAMP(maj) AS d FROM spip_meta WHERE nom='import_all'"), SPIP_NUM); + + $res = $my_date ? import_all_milieu($request) : ''; + + echo $res, "</body></html>\n"; + + if ($request['insertion'] == 'on' AND !$res) { + $request['insertion'] = 'passe2'; + if ($request['url_site'] + AND substr($request['url_site'],-1) != '/') + $request['url_site'] .= '/'; + ecrire_meta("import_all", serialize($request),'non'); + import_all_debut(); + $res = import_all_milieu($request); + } + + if ($charset = $GLOBALS['meta']['charset_restauration']) { + ecrire_meta('charset', $charset); + ecrire_metas(); + } + + detruit_restaurateur(); + import_all_fin($request); + include_spip('inc/rubriques'); + calculer_rubriques(); + + if (!$res) ecrire_acces(); // Mise a jour du fichier htpasswd +} + +// http://doc.spip.org/@import_all_milieu +function import_all_milieu($request) +{ + global $trans; + if ($request['insertion'] == 'passe2') { + include_spip('inc/import_insere'); + $trans = translate_init($request); + } else $trans = array(); + + return import_tables($request, $request['dir']); +} + +// http://doc.spip.org/@import_all_debut +function import_all_debut() { + ecrire_meta("status_restauration", "0",'non'); + ecrire_metas(); +} + +// http://doc.spip.org/@import_all_fin +function import_all_fin($request) { + + effacer_meta("charset_restauration"); + effacer_meta("charset_insertion"); + effacer_meta("status_restauration"); + effacer_meta("date_optimisation"); + effacer_meta('version_archive_restauration'); + effacer_meta('tag_archive_restauration'); + ecrire_metas(); + if ($request['insertion'] == 'passe2') + spip_query("DROP TABLE spip_translate"); + +} +?> diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php index c143aafce9..1a73e8ba15 100644 --- a/ecrire/base/upgrade.php +++ b/ecrire/base/upgrade.php @@ -13,6 +13,19 @@ if (!defined("_ECRIRE_INC_VERSION")) return; +function base_upgrade_dist($titre) +{ + include_spip('base/create'); + creer_base(); + maj_base(); + + include_spip('inc/acces'); + include_spip('inc/config'); + include_spip('inc/lang'); + ecrire_acces(); + init_config(); +} + // http://doc.spip.org/@maj_version function maj_version ($version, $test = true) { if ($test) { diff --git a/ecrire/exec/admin_repair.php b/ecrire/exec/admin_repair.php index a7d3e8f941..d2986b4b12 100644 --- a/ecrire/exec/admin_repair.php +++ b/ecrire/exec/admin_repair.php @@ -21,48 +21,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return; */ $GLOBALS['connect_statut'] = '0minirezo'; - -include_spip('inc/admin'); -include_spip('inc/texte'); - +$GLOBALS['connect_toutes_rubriques']= true; include_spip('base/db_mysql'); -// http://doc.spip.org/@verifier_base -function verifier_base() { - $res1= spip_query("SHOW TABLES"); - if (!$res1) return false; - - $res = ""; - while ($tab = spip_fetch_array($res1,SPIP_NUM)) { - $res .= "<p><b>".$tab[0]."</b> "; - - $result_repair = spip_query("REPAIR TABLE ".$tab[0]); - if (!$result_repair) return false; - - $result = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM ".$tab[0])); - if (!$result) return false; - - $count = $result['n']; - if ($count>1) - $res .= "("._T('texte_compte_elements', array('count' => $count)).")\n"; - else if ($count==1) - $res .= "("._T('texte_compte_element', array('count' => $count)).")\n"; - else - $res .= "("._T('texte_vide').")\n"; - - $row = spip_fetch_array($result_repair,SPIP_NUM); - $ok = ($row[3] == 'OK'); - - if (!$ok) - $res .= "<pre><span style='color: red; font-weight: bold;'>".htmlentities(join("\n", $row))."</span></pre>\n"; - else - $res .= " "._T('texte_table_ok')."<br />\n"; - - } - - return $res; -} - // http://doc.spip.org/@exec_admin_repair_dist function exec_admin_repair_dist() { @@ -82,15 +43,12 @@ function exec_admin_repair_dist() $action = _T('texte_tenter_reparation'); if ($ok) { - debut_admin("admin_repair", $action, $message); - - if (! $res = verifier_base()) - $res = "<br /><br /><span style='color: red; font-weight: bold;'><tt>"._T('avis_erreur_mysql').' '.spip_sql_errno().': '.spip_sql_error() ."</tt></span><br /><br /><br />\n"; - fin_admin($action); - echo minipres(_T('texte_tentative_recuperation'), $res); + $admin = charger_fonction('admin', 'inc'); + $admin('admin_repair', $action, $message); } else { echo minipres(_T('titre_reparation'), "<p>$message</p>"); + exit; } } ?> diff --git a/ecrire/exec/convert_utf8.php b/ecrire/exec/convert_utf8.php index ab84478837..421f8f6fa5 100644 --- a/ecrire/exec/convert_utf8.php +++ b/ecrire/exec/convert_utf8.php @@ -12,207 +12,51 @@ if (!defined("_ECRIRE_INC_VERSION")) return; +// En cas d'erreur, une page admin normale avec bouton de retour -include_spip('inc/admin'); +function convert_utf8_non($action, $message) { - -// http://doc.spip.org/@demander_conversion -function demander_conversion($tables_a_convertir, $action) { - global $spip_lang_right; - - $charset_orig = $GLOBALS['meta']['charset']; - - // tester si le charset d'origine est connu de spip - if (!load_charset($charset_orig)) - $message = _T('utf8_convert_erreur_orig', array('charset' => "<b>".$charset_orig."</b>")); - - // ne pas convertir si deja utf8 - else if ($charset_orig == 'utf-8') - $message = _T('utf8_convert_erreur_deja', - array('charset' => $charset_orig) - ); - - else { - $commentaire = _T('utf8_convert_avertissement', - array('orig' => $charset_orig, - 'charset' => 'utf-8') - ); - $commentaire .= "<p><small>" - . http_img_pack('warning.gif', _T('info_avertissement'), "style='width: 48px; height: 48px; float: right;margin: 10px;'"); - $commentaire .= _T('utf8_convert_backup', array('charset' => 'utf-8')) - ."</small>"; - $commentaire .= '<p>'._T('utf8_convert_timeout'); - $commentaire .= "<hr />\n"; - - debut_admin("convert_utf8", $action, $commentaire); - - // noter dans les meta qu'on veut convertir - ecrire_meta('conversion_charset', $charset_orig); - ecrire_meta('charset', 'utf-8'); - ecrire_metas(); - foreach ($tables_a_convertir as $table => $champ) { - spip_log("demande update charset table $table ($champ)"); - spip_query("UPDATE $table SET $champ = CONCAT('<CONVERT ".$charset_orig.">', $champ) WHERE $champ NOT LIKE '<CONVERT %'"); - } - return; - } - - // Ici en cas d'erreur, une page admin normale avec bouton de retour - echo minipres($action, ('<p>'.$message. "</p><p align='right'> <a href='" . generer_url_ecrire("config_lang"). "'> >> "._T('icone_retour')."</a>")); + echo minipres($action, ('<p>'.$message. "</p>\n<p style='text-align: right'><a href='" . generer_url_ecrire("config_lang"). "'> >> "._T('icone_retour')."</a>")); exit; } -// stocker le nouvel extra -// http://doc.spip.org/@convert_extra -function convert_extra($v) { - if ($extra = @unserialize($v)) { - foreach ($extra as $key=>$val) - $extra[$key] = unicode_to_utf_8( - charset2unicode($val, $charset_source)); - return ", extra="._q(serialize($extra)); - } -} - - // http://doc.spip.org/@exec_convert_utf8_dist function exec_convert_utf8_dist() { include_spip('inc/meta'); include_spip('inc/charsets'); lire_metas(); - // une liste des tables a convertir, avec le champ dans lequel on - // indique '<CONVERT charset>' ; on commence par les rubriques sinon - // ca fait desordre dans l'interface privee - $tables_a_convertir = array( - 'spip_rubriques' => 'titre', - 'spip_auteurs' => 'nom', - 'spip_articles' => 'titre', - 'spip_breves' => 'titre', - 'spip_documents' => 'titre', - 'spip_forum' => 'titre', - 'spip_mots' => 'titre', - 'spip_groupes_mots' => 'titre', - 'spip_petitions' => 'texte', - 'spip_signatures' => 'nom_email', - 'spip_syndic' => 'nom_site', - 'spip_syndic_articles' => 'titre', - 'spip_messages' => 'titre' - ); - // Definir le titre de la page (et le nom du fichier admin) $action = _T('utf8_convertir_votre_site'); - // si l'appel est explicite, passer par l'authentification ftp - if (!$GLOBALS['meta']['conversion_charset']) { - demander_conversion($tables_a_convertir, $action); - - // si on est la c'est que l'autorisation ftp vient d'etre donnee - @unlink(_DIR_TMP.'convert_utf8_backup.sql'); - - // convertir spip_meta - $charset_source = $GLOBALS['meta']['conversion_charset']; - foreach ($GLOBALS['meta'] as $c => $v) { - $v2 = unicode_to_utf_8(charset2unicode($v, $charset_source)); - if ($v2 != $v) - ecrire_meta($c, $v2); - } - ecrire_metas(); - } - - // commencer (ou continuer apres un timeout et reload) - - echo install_debut_html($action); - - echo "<p>" . _T('utf8_convert_timeout') . "<hr />\n"; - - if (!spip_get_lock('conversion_charset')) { - echo minipres(_T('utf8_convert_attendez')); - exit; - } - - // preparer un fichier de sauvegarde au cas ou - // on met 'a' car ca peut demander plusieurs rechargements - $f = @fopen(_DIR_TMP.'convert_utf8_backup.sql', 'a'); - + // si meta deja la, c'est une reprise apres timeout. + if ($GLOBALS['meta']['convert_utf8']) { + $base = charger_fonction('convert_utf8', 'base'); + $base($action, true); + } else { + $charset_orig = $GLOBALS['meta']['charset']; + // tester si le charset d'origine est connu de spip + if (!load_charset($charset_orig)) + convert_utf8_non($action, + _T('utf8_convert_erreur_orig', array('charset' => "<b>".$charset_orig."</b>"))); + + // ne pas convertir si deja utf8 + else if ($charset_orig == 'utf-8') + convert_utf8_non($action, + _T('utf8_convert_erreur_deja', + array('charset' => $charset_orig))); - foreach ($tables_a_convertir as $table => $champ) { - echo "<br /><b>$table</b> "; - $s = spip_query("SELECT * FROM $table WHERE $champ LIKE '<CONVERT %'"); - - // recuperer 'id_article' (encore un truc a faire dans table_objet) - preg_match(',^spip_(.*?)s?$,', $table, $r); - $id_champ = 'id_'.$r[1]; - if ($table == 'spip_petitions') $id_champ = 'id_article'; - if ($table == 'spip_groupes_mots') $id_champ = 'id_groupe'; - - // lire les donnees dans un array - while ($t = spip_fetch_array($s, SPIP_ASSOC)) { - $query = array(); - $query_no_convert = ''; - $query_extra = ''; - foreach ($t as $c => $v) { - if ($c == $champ) { - preg_match(',^<CONVERT (.*?)>,', $v, $reg); - $v = substr($v, strlen($reg[0])); - $charset_source = $reg[1]; - $query[] = "$c=" . _q($v); - } else { - if (!is_numeric($v) - AND !is_ascii($v)) { - // traitement special car donnees serializees - if ($c == 'extra') { - $query_no_convert .= ", $c="._q($v); - $query_extra = convert_extra($v); - } else - $query[] = "$c=" . _q($v); - } else - # pour le backup - $query_no_convert .= ", $c="._q($v); - } - } - - $set = join(', ', $query); - $where = "$id_champ = ".$t[$id_champ]; - - // On l'enregistre telle quelle sur le fichier de sauvegarde - if ($f) fwrite($f, - "UPDATE $table SET $set$query_no_convert" - ." WHERE $where;\n" - ); - - // Mais on la transcode - // en evitant une double conversion - if ($charset_source != 'utf-8') { - $query = "UPDATE $table SET " - . unicode_to_utf_8(charset2unicode($set, $charset_source)) - . $query_extra - . " WHERE $where AND $champ LIKE '<CONVERT %'"; - #echo $query; - spip_query($query); - echo '. '; flush(); + $commentaire = _T('utf8_convert_avertissement', + array('orig' => $charset_orig,'charset' => 'utf-8')); + $commentaire .= "<p><small>" + . http_img_pack('warning.gif', _T('info_avertissement'), "style='width: 48px; height: 48px; float: right;margin: 10px;'"); + $commentaire .= _T('utf8_convert_backup', array('charset' => 'utf-8')) + ."</small>"; + $commentaire .= '<p>'._T('utf8_convert_timeout'); + $commentaire .= "<hr />\n"; - } - } - spip_free_result($s); + $admin = charger_fonction('admin', 'inc'); + $admin('convert_utf8', $action, $commentaire); } - - if ($f) fclose($f); - - echo "<p><b>"._T('utf8_convert_termine')."</b>"; - echo "<p> "._T('utf8_convert_verifier', array('rep' => joli_repertoire(_DIR_TMP))); - effacer_meta('conversion_charset'); - ecrire_metas(); - - // C'est fini, supprimer le fichier autorisant les modifs - fin_admin($action); - - include_spip('inc/headers'); - // bouton "retour au site" + redirige_par_entete - echo "<p align='right'> <a href='" . generer_url_ecrire("config_lang") - . "'> >> "._T('icone_retour')."</a>"; - - echo install_fin_html(); } - - ?> diff --git a/ecrire/exec/delete_all.php b/ecrire/exec/delete_all.php index 9ef900635d..0f2cb84dc9 100644 --- a/ecrire/exec/delete_all.php +++ b/ecrire/exec/delete_all.php @@ -12,72 +12,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/admin'); - // http://doc.spip.org/@exec_delete_all_dist function exec_delete_all_dist() { -$action = _T('titre_page_delete_all'); - - debut_admin("delete_all", $action); - -// faudrait plutot recuperer dans inc_serialbase et inc_auxbase -// mais il faudra prevenir ceux qui affectent les globales qui s'y trouvent -// Afficher la liste de ce qu'on va detruire et demander confirmation -// ca vaudrait mieux - -spip_query("DROP TABLE spip_articles"); -spip_query("DROP TABLE spip_auteurs"); -spip_query("DROP TABLE spip_auteurs_articles"); -spip_query("DROP TABLE spip_auteurs_messages"); -spip_query("DROP TABLE spip_auteurs_rubriques"); -spip_query("DROP TABLE spip_breves"); -spip_query("DROP TABLE spip_documents"); -spip_query("DROP TABLE spip_documents_articles"); -spip_query("DROP TABLE spip_documents_breves"); -spip_query("DROP TABLE spip_documents_rubriques"); -spip_query("DROP TABLE spip_forum"); -spip_query("DROP TABLE spip_forum_cache"); -spip_query("DROP TABLE spip_groupes_mots"); -spip_query("DROP TABLE spip_index"); -spip_query("DROP TABLE spip_index_table"); -spip_query("DROP TABLE spip_index_dico"); -spip_query("DROP TABLE spip_messages"); -spip_query("DROP TABLE spip_meta"); -spip_query("DROP TABLE spip_mots"); -spip_query("DROP TABLE spip_mots_articles"); -spip_query("DROP TABLE spip_mots_breves"); -spip_query("DROP TABLE spip_mots_forum"); -spip_query("DROP TABLE spip_mots_rubriques"); -spip_query("DROP TABLE spip_mots_syndic"); -spip_query("DROP TABLE spip_petitions"); -spip_query("DROP TABLE spip_referers"); -spip_query("DROP TABLE spip_referers_articles"); -spip_query("DROP TABLE spip_rubriques"); -spip_query("DROP TABLE spip_signatures"); -spip_query("DROP TABLE spip_syndic"); -spip_query("DROP TABLE spip_syndic_articles"); -spip_query("DROP TABLE spip_types_documents"); -spip_query("DROP TABLE spip_visites"); -spip_query("DROP TABLE spip_visites_articles"); -spip_query("DROP TABLE spip_test"); -spip_query("DROP TABLE spip_caches"); -spip_query("DROP TABLE spip_mots_documents"); -spip_query("DROP TABLE spip_ortho_cache"); -spip_query("DROP TABLE spip_ortho_dico"); -spip_query("DROP TABLE spip_versions"); -spip_query("DROP TABLE spip_versions_fragments"); - - -// un pipeline pour DROP les tables installees par les plugins -pipeline('delete_tables', ''); - -@unlink(_ACCESS_FILE_NAME); -@unlink(_FILE_CONNECT); - -@header("Location: ./"); - -fin_admin($action); + $r = generer_url_ecrire('install','',true); + $admin = charger_fonction('admin', 'inc'); + $admin('delete_all', _T('titre_page_delete_all'), '', $r); } - ?> diff --git a/ecrire/exec/import_all.php b/ecrire/exec/import_all.php index f6392f5dd7..5abdb3b6ee 100644 --- a/ecrire/exec/import_all.php +++ b/ecrire/exec/import_all.php @@ -12,173 +12,37 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/admin'); -include_spip('base/serial'); -include_spip('base/auxiliaires'); +include_spip('inc/headers'); -// par defaut tout est importe sauf les tables ci-dessous -// possibiliter de definir cela tables via la meta -global $IMPORT_tables_noimport; -if (isset($GLOBALS['meta']['IMPORT_tables_noimport'])) - $IMPORT_tables_noimport = unserialize($GLOBALS['meta']['IMPORT_tables_noimport']); -else{ - include_spip('inc/meta'); - $IMPORT_tables_noimport[]='spip_caches'; - ecrire_meta('IMPORT_tables_noimport',serialize($IMPORT_tables_noimport),'non'); - ecrire_metas(); -} - -// NB: Ce fichier peut ajouter des tables (old-style) -// donc il faut l'inclure "en globals" -if ($f = include_spip('mes_fonctions', false)) { - global $dossier_squelettes; - @include_once ($f); -} - -// http://doc.spip.org/@verifier_sauvegarde -function verifier_sauvegarde ($archive, $dir) { - global $spip_version; - - $g = preg_match(",\.gz$,", $archive); - $_fopen = ($g) ? gzopen : fopen; - $_fread = ($g) ? gzread : fread; - $buf_len = 1024; // la version doit etre dans le premier ko - $g = $dir . $archive; - - if (!(@file_exists($g) AND $f = $_fopen($g, "rb"))) - return _T('avis_probleme_archive', array('archive' => $g)); - - $buf = $_fread($f, $buf_len); - - if (preg_match('/<SPIP\s+[^>]*version_base="([0-9.]+)"[^>]*version_archive="([^"]+)"/', $buf, $regs) - AND $regs[1] == $spip_version - AND import_charge_version($regs[2], 'inc', true)) - return false; // c'est bon - - return _T('avis_erreur_version_archive', array('archive' => $archive)); -} - -// http://doc.spip.org/@import_charge_version -function import_charge_version($version_archive) -{ - if (preg_match("{^phpmyadmin::}is",$version_archive)){ - $fimport = 'import_1_3'; - } else $fimport = 'import_' . str_replace('.','_',$version_archive); - - return charger_fonction($fimport, 'inc', true); -} +// Restauration d'une base. Comme ca peut etre interrompu pour cause +// de Timeout, un javascript relance automatiquement (cf inc/import.php) +// Comme il peut relancer une action qui vient de se terminer, +// il faut ignorer son appel si la meta indiquant l'action en cours +// est absente. // http://doc.spip.org/@exec_import_all_dist function exec_import_all_dist() { - $dir = import_queldir(); - - // si l'appel est explicite, - // passer par l'authentification ftp et attendre d'etre rappele - if (!$GLOBALS['meta']["debut_restauration"]) { - $archive=_request('archive'); - $insertion=_request('insertion'); - if (!strlen($archive)) $archive=_request('archive_perso'); - if ($archive) { - $action = _T('info_restauration_sauvegarde', array('archive' => $archive)); - $commentaire = verifier_sauvegarde($archive, $dir); - } - - // au tout premier appel, on ne revient pas de debut_admin - - debut_admin("import_all", $action, $commentaire); - - // si on est revenu c'est que l'authentification ftp est ok - // sinon il reste le meta request_restau; a ameliorer. - fin_admin($action); - import_all_debut($_REQUEST); - $request = $_REQUEST; - } else $request = unserialize($GLOBALS['meta']['request_restauration']); - // au rappel, on commence (voire on continue) - @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure - // utiliser une version fraiche des metas (ie pas le cache) - include_spip('inc/meta'); - lire_metas(); - include_spip('inc/import'); - @ignore_user_abort(1); - - $commencer_page = charger_fonction('commencer_page', 'inc'); - echo $commencer_page(_T('titre_page_index'), "accueil", "accueil"); - - debut_gauche(); - - debut_droite(); - - // precaution inutile I think (esj) - list($my_date) = spip_fetch_array(spip_query("SELECT UNIX_TIMESTAMP(maj) AS d FROM spip_meta WHERE nom='debut_restauration'"), SPIP_NUM); - - $res = $my_date ? import_all_milieu($request, $dir) : ''; - - echo $res, "</body></html>\n"; - - if ($request['insertion'] == 'on' AND !$res) { - $request['insertion'] = 'passe2'; - if ($request['url_site'] - AND substr($request['url_site'],-1) != '/') - $request['url_site'] .= '/'; - import_all_debut($request); - $res = import_all_milieu($request, $dir); - } - - if ($charset = $GLOBALS['meta']['charset_restauration']) { - ecrire_meta('charset', $charset); - ecrire_metas(); - } - - detruit_restaurateur(); - import_all_fin($request); - include_spip('inc/rubriques'); - calculer_rubriques(); - - if (!$res) ecrire_acces(); // Mise a jour du fichier htpasswd -} - -// http://doc.spip.org/@import_all_milieu -function import_all_milieu($request, $dir) -{ - global $trans; - if ($request['insertion'] == 'passe2') { - include_spip('inc/import_insere'); - $trans = translate_init($request); - } else $trans = array(); - - return import_tables($request, $dir); -} - -// http://doc.spip.org/@import_all_debut -function import_all_debut($request) { - ecrire_meta("request_restauration", serialize($request),'non'); - ecrire_meta("debut_restauration", "debut",'non'); - ecrire_meta("status_restauration", "0",'non'); - ecrire_metas(); + $archive=_request('archive'); + if (!strlen($archive)) $archive=_request('archive_perso'); + if ($archive) { + $dir = import_queldir(); + $_POST['dir'] = $dir; + $commentaire = verifier_sauvegarde($dir . $archive); + } elseif (!isset($GLOBALS['meta']['import_all'])) + redirige_par_entete(generer_url_ecrire('accueil')); + else $commentaire =''; + $action = _T('info_restauration_sauvegarde', + array('archive' => $archive)); + $admin = charger_fonction('admin', 'inc'); + $admin('import_all', $action, $commentaire); } -// http://doc.spip.org/@import_all_fin -function import_all_fin($request) { - - effacer_meta("charset_restauration"); - effacer_meta("charset_insertion"); - effacer_meta("status_restauration"); - effacer_meta("debut_restauration"); - effacer_meta("date_optimisation"); - effacer_meta('request_restauration'); - effacer_meta('version_archive_restauration'); - effacer_meta('tag_archive_restauration'); - ecrire_metas(); - if ($request['insertion'] == 'passe2') - spip_query("DROP TABLE spip_translate"); - -} // http://doc.spip.org/@import_queldir function import_queldir() { - global $connect_toutes_rubriques, $connect_login; + global $connect_toutes_rubriques, $connect_login; if ($connect_toutes_rubriques) { $repertoire = _DIR_DUMP; @@ -196,4 +60,28 @@ function import_queldir() return sous_repertoire($repertoire, $connect_login); } } + + +// http://doc.spip.org/@verifier_sauvegarde +function verifier_sauvegarde ($archive) { + global $spip_version; + + $g = preg_match(",\.gz$,", $archive); + $_fopen = ($g) ? gzopen : fopen; + $_fread = ($g) ? gzread : fread; + $buf_len = 1024; // la version doit etre dans le premier ko + + if (!(@file_exists($archive) AND $f = $_fopen($archive, "rb"))) + return _T('avis_probleme_archive', array('archive' => $archive)); + + $buf = $_fread($f, $buf_len); + + if (preg_match('/<SPIP\s+[^>]*version_base="([0-9.]+)"[^>]*version_archive="([^"]+)"/', $buf, $regs) + AND $regs[1] == $spip_version + AND import_charge_version($regs[2], 'inc', true)) + return ''; // c'est bon + + return _T('avis_erreur_version_archive', + array('archive' => str_replace('/', ' / ', $archive))); +} ?> diff --git a/ecrire/exec/menu_rubriques.php b/ecrire/exec/menu_rubriques.php index 783a3558a3..ff6147568f 100644 --- a/ecrire/exec/menu_rubriques.php +++ b/ecrire/exec/menu_rubriques.php @@ -147,7 +147,7 @@ function extraire_article($id_p) { function gen_liste_rubriques() { // ici, un petit fichier cache ne fait pas de mal - if (lire_fichier(_DIR_TMP.'cache-menu-rubriques.txt', $cache) + if (lire_fichier(_CACHE_RUBRIQUES, $cache) AND list($date,$GLOBALS['db_art_cache']) = @unserialize($cache) AND $date == $GLOBALS['meta']["date_calcul_rubriques"]) return; // c'etait en cache :-) @@ -172,7 +172,7 @@ function gen_liste_rubriques() { } // ecrire dans le cache - ecrire_fichier(_DIR_TMP.'cache-menu-rubriques.txt', + ecrire_fichier(_CACHE_RUBRIQUES, serialize(array( $GLOBALS['meta']["date_calcul_rubriques"], $GLOBALS['db_art_cache'] diff --git a/ecrire/exec/upgrade.php b/ecrire/exec/upgrade.php index 9b712fc913..9a60684436 100644 --- a/ecrire/exec/upgrade.php +++ b/ecrire/exec/upgrade.php @@ -18,13 +18,13 @@ include_spip('inc/headers'); // http://doc.spip.org/@exec_upgrade_dist function exec_upgrade_dist() { - global $connect_id_auteur, $spip_version, $reinstall; + global $spip_version; if (!_FILE_CONNECT) redirige_par_entete(generer_url_ecrire("install")); // Si reinstallation necessaire, message ad hoc - if ($reinstall == 'oui') { + if (_request('reinstall') == 'oui') { @copy(_FILE_CONNECT, _FILE_CONNECT_INS); @@ -38,46 +38,26 @@ function exec_upgrade_dist() { exit; } - // eviter les actions vides pour cause de fichier de langue inaccessible. - $upgrade_titre = _T('info_mise_a_niveau_base') ; - if (!$upgrade_titre) $upgrade_titre = 'info_mise_a_niveau_base'; - - // Commentaire standard upgrade - $commentaire = _T('texte_mise_a_niveau_base_1'); - // Verifier la version $version_installee = (double) str_replace(',','.',$GLOBALS['meta']['version_installee']); # NB: str_replace car, sur club-internet, il semble que version_installe soit # enregistree au format '1,812' et non '1.812' - // Erreur downgrade - // (cas de double installation de fichiers SPIP sur une meme base) - if ($spip_version < $version_installee) - $commentaire = _T('info_mise_a_niveau_base_2'); - // Qu'est-ce que tu fais ici? if ($spip_version == $version_installee) redirige_par_entete(generer_url_ecrire()); - // On passe a l'upgrade - include_spip('inc/admin'); - - $_POST['reinstall'] = 'non'; - debut_admin("upgrade", $upgrade_titre, $commentaire); - - include_spip('base/create'); - creer_base(); - include_spip('base/upgrade'); - maj_base(); - - include_spip('inc/acces'); - include_spip('inc/config'); - ecrire_acces(); - init_config(); + // Erreur downgrade + // (cas de double installation de fichiers SPIP sur une meme base) + if ($spip_version < $version_installee) + $commentaire = _T('info_mise_a_niveau_base_2'); + // Commentaire standard upgrade + else $commentaire = _T('texte_mise_a_niveau_base_1'); - fin_admin($upgrade_titre); + $_POST['reinstall'] = 'non'; // pour copy_request dans admin - redirige_par_entete(generer_action_auteur('purger', 'cache', _DIR_RESTREINT_ABS, true)); + $r = generer_action_auteur('purger', 'cache', _DIR_RESTREINT_ABS, true); + $admin = charger_fonction('admin', 'inc'); + $admin('upgrade', _T('info_mise_a_niveau_base'), $commentaire, $r); } - ?> diff --git a/ecrire/inc/admin.php b/ecrire/inc/admin.php index ef5850fe48..ae15cfddf8 100644 --- a/ecrire/inc/admin.php +++ b/ecrire/inc/admin.php @@ -12,19 +12,48 @@ if (!defined("_ECRIRE_INC_VERSION")) return; +include_spip('inc/headers'); + +// demande/verifie le droit de creation de repertoire par le demandeur; +// memorise dans les meta que ce script est en cours d'execution +// si elle y est deja c'est qu'il y a eu suspension du script, on reprend. + +function inc_admin_dist($script, $titre, $comment='', $retour='') +{ + if (!isset($GLOBALS['meta'][$script])) { + debut_admin($script, $titre, $comment); + spip_log("meta: $script " . join(',', $_POST)); + ecrire_meta($script, serialize($_POST)); + ecrire_metas(); + } else spip_log("reprise de $script"); + $base = charger_fonction($script, 'base'); + $base($titre); + effacer_meta($script); + ecrire_metas(); + @unlink(_FILE_META); + fin_admin($script); + spip_log("efface meta: $script " . ($retour ? $retour : '')); + if ($retour) redirige_par_entete($retour); +} + + // http://doc.spip.org/@fichier_admin function fichier_admin($action) { global $connect_login; return "admin_".substr(md5($action.(time() & ~2047).$connect_login), 0, 10); } +// demande la creation d'un repertoire et sort +// ou retourne sans rien faire si repertoire deja la. + // http://doc.spip.org/@debut_admin -function debut_admin($script, $action, $commentaire='') { +function debut_admin($script, $action='', $commentaire='') { global $connect_login, $connect_statut, $connect_toutes_rubriques; if ((!$action) || ($connect_statut != "0minirezo")) { include_spip('inc/minipres'); - echo minipres(_T('info_acces_refuse')); + echo minipres(_T('info_acces_refuse') . + ($action ? " ($action)" : '')); exit; } if ($connect_toutes_rubriques) { @@ -33,7 +62,7 @@ function debut_admin($script, $action, $commentaire='') { $dir = _DIR_TRANSFERT . $connect_login . '/'; } - $signal = fichier_admin($action); + $signal = fichier_admin($script); if (@file_exists($dir . $signal)) { spip_log ("Action admin: $action"); return true; @@ -45,26 +74,19 @@ function debut_admin($script, $action, $commentaire='') { include_spip('inc/minipres'); - // Si on est un super-admin, un bouton de validation suffit // nom de l'autorisation a revoir... 'webmestre' veut tout et rien dire... if (autoriser('webmestre')) { if (_request('validation_admin') == $signal) { spip_log ("Action super-admin: $action"); - return true; + return; } - $form = $commentaire - . copy_request($script, - ('<input type="hidden" name="validation_admin" value="'.$signal.'" />' - . bouton_suivant(_T('bouton_valider')))); + $form = ('<input type="hidden" name="validation_admin" value="'.$signal.'" />' + . bouton_suivant(_T('bouton_valider'))); $js = ''; - } - - else { - $form = $commentaire - . copy_request($script, - (fieldset(_T('info_authentification_ftp').aide("ftp_auth"), + } else { + $form = fieldset(_T('info_authentification_ftp').aide("ftp_auth"), array( 'fichier' => array( 'label' => _T('info_creer_repertoire'), @@ -72,7 +94,7 @@ function debut_admin($script, $action, $commentaire='') { )), ('<br />' . _T('info_creer_repertoire_2', array('repertoire' => joli_repertoire($dir))) - . bouton_suivant(_T('bouton_recharger_page')))))); + . bouton_suivant(_T('bouton_recharger_page')))); // code volontairement tordu: // provoquer la copie dans le presse papier du nom du repertoire @@ -82,6 +104,7 @@ function debut_admin($script, $action, $commentaire='') { $js = " onload='document.forms[0].fichier.value=\"\";barre_inserer(\"$signal\", document.forms[0].fichier)'"; } + $form = $commentaire . copy_request($script, $form); echo minipres(_T('info_action', array('action' => $action)), $form, $js); exit; } @@ -103,17 +126,13 @@ function fin_admin($action) { // http://doc.spip.org/@copy_request function copy_request($script, $suite) { - $hidden = ""; - $args = $_POST; - $args['exec'] = $script; - unset($args['fichier']); include_spip('inc/filtres'); - foreach($args as $n => $c) { - $hidden .= "\n<input type='hidden' name='$n' value='" . + foreach($_POST as $n => $c) { + if ($n != 'fichier') + $suite .= "\n<input type='hidden' name='$n' value='" . entites_html($c) . "' />"; } - return "<form action='" . generer_url_ecrire() . - "' method='post'><div>$hidden$suite</div></form>"; + return generer_post_ecrire($script, $suite); } ?> diff --git a/ecrire/inc/import.php b/ecrire/inc/import.php index 9887fa7533..6121c675e8 100644 --- a/ecrire/inc/import.php +++ b/ecrire/inc/import.php @@ -199,7 +199,7 @@ function import_tables($request, $dir) { $gz = 'gzread'; } else { $size = @filesize($archive); - $taille = floor(100 * $abs_pos / $size)." %"; + $taille = @floor(100 * $abs_pos / $size)." %"; $file = fopen($archive, 'rb'); $gz = 'fread'; } diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 51ea1e1545..63e0d65f1b 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -20,7 +20,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // son evolution. Si vous n'en utilisez pas, neutraliser cette ligne pour // gagner du temps au chargement. -include(_DIR_RESTREINT . 'inc/vieilles_defs.php'); +if (is_readable($f =_DIR_RESTREINT . 'inc/vieilles_defs.php')) include $f; // charge un fichier perso ou, a defaut, standard // et retourne si elle existe le nom de la fonction homonyme (exec_$nom), @@ -943,7 +943,7 @@ function generer_url_prive($script, $args="", $no_entities=false) { } // Pour les formulaires en methode POST, -// mettre les arguments a la fois en input-hidden et dans le champ action: +// mettre le nom du script a la fois en input-hidden et dans le champ action: // 1) on peut ainsi memoriser le signet comme si c'etait un GET // 2) ca suit http://en.wikipedia.org/wiki/Representational_State_Transfer @@ -1040,7 +1040,7 @@ function spip_register_globals() { } -// Fonction d'initialisation, appelle dans inc_version ou mes_options +// Fonction d'initialisation, appellee dans inc_version ou mes_options // Elle definit les repertoires et fichiers non partageables // et indique dans $test_dirs ceux devant etre accessibles en ecriture // mais ne touche pas a cette variable si elle est deja definie @@ -1083,7 +1083,7 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { : (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php3') ? $f : false)))); - // Le fichier de connexion a la base de donnees + // Le fichier de reglages des droits define('_FILE_CHMOD_INS', _DIR_ETC . 'chmod'); define('_FILE_CHMOD', (@is_readable($f = _FILE_CHMOD_INS . '.php') ? $f @@ -1113,6 +1113,7 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { define('_ACCESS_FILE_NAME', '.htaccess'); define('_AUTH_USER_FILE', '.htpasswd'); define('_SPIP_DUMP', 'dump@nom_site@@stamp@.xml'); + define('_CACHE_RUBRIQUES', _DIR_TMP.'cache-menu-rubriques.txt'); define('_DOCTYPE_ECRIRE', // "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n"); diff --git a/ecrire/index.php b/ecrire/index.php index 7a1e939665..9a287d50bc 100644 --- a/ecrire/index.php +++ b/ecrire/index.php @@ -119,7 +119,7 @@ AND ($GLOBALS['spip_version'] != (str_replace(',','.',$GLOBALS['meta']['version_ // detourner le script demande pour qu'il reprenne le boulot // mais virer les Ajax pour eviter plusieurs restaurations en parallele elseif ($_COOKIE['spip_admin'] -AND isset($GLOBALS['meta']["debut_restauration"])) { +AND isset($GLOBALS['meta']["import_all"])) { if (isset($var_ajaxcharset)) exit; $exec = 'import_all'; } @@ -161,5 +161,4 @@ if (!strncmp($exec,"accueil",7)==0 // Feu ! $var_f(); - ?> diff --git a/ecrire/install/etape_3.php b/ecrire/install/etape_3.php index 358b395383..09c33c304b 100644 --- a/ecrire/install/etape_3.php +++ b/ecrire/install/etape_3.php @@ -68,7 +68,7 @@ function install_bases(){ $result_ok = !spip_sql_errno(); } else { // en cas de reinstall sur mise a jour mal passee - spip_query("DELETE FROM spip_meta WHERE nom='debut_restauration'"); + spip_query("DELETE FROM spip_meta WHERE nom='import_all'"); $result = spip_query("SELECT COUNT(*) FROM spip_articles"); $result_ok = (spip_num_rows($result) > 0); } -- GitLab