diff --git a/.gitattributes b/.gitattributes index d94bb602f1301dfed408dd630e9e27d2d5818489..6e20957dadf1e454d50a8e055903732e184d9a7e 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 eae598423e6bed41480cbf8321538151feed417e..2a8360f7864b33d76e5f80bc974c226209eba88f 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 0000000000000000000000000000000000000000..c036307ff9e5cec477c8e8fa361f6054ec2ea065 --- /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 0000000000000000000000000000000000000000..cbe9f67e9afc30ceebb684d79ef528cc339382a8 --- /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 0000000000000000000000000000000000000000..3c27b78f1c8ca3db4bc8fea7818adfe4a526a461 --- /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 0000000000000000000000000000000000000000..78750de2527eda7a6774d543f41b1f30b4ada1eb --- /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 c143aafce991157b1ddd502e650a17da166cb783..1a73e8ba15b979263ceca96ef9544ca786ce1996 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 a7d3e8f941113959823c2fe9f05d66960d9fcd55..d2986b4b12b1365758399228453f031ae292f846 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 ab84478837db54793b796edb272626e12e0f7eba..421f8f6fa579e54d2f4dbff99b9fbc3ed0292182 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 9ef900635d61b5a466a13b92e68e478f1443e5e4..0f2cb84dc91e973c56183818128e5d2d5763d6a0 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 f6392f5dd74dc81edb1dc58ef6e2d3695f08a876..5abdb3b6ee41d9cab0f897d528cbea11cf4b7405 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 783a3558a39cdd30d847c29d8dbe5565e1573a22..ff6147568f950d39efe8faf92fafd349529c81f1 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 9b712fc91367122cd1f7bae1fbb67c5c93f9fd72..9a60684436b47bf8fb3d4d8813860273860aa07f 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 ef5850fe48cc30598a8208ffadde59c2d189a422..ae15cfddf8d6af41223a30484fc27a9caae54228 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 9887fa7533e16b6d9f30ab8bd2a557bdd7f21c65..6121c675e8fb800b683ca0bc8e5eaeec4b23ebb3 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 51ea1e1545e602524531d47519380280772f8065..63e0d65f1b6e057f73d25e8da5a2488640f4fcd8 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 7a1e93966561ffa84e1f884ec4077e8f803c5397..9a287d50bcda24ae9409371e33383b819465a4dd 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 358b3953831adf17106e34d12675058d7f928795..09c33c304b0a35640a3d45c949789f3a2436d9e1 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); }