restaurer.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined("_ECRIRE_INC_VERSION")) return;
  12. include_spip('base/dump');
  13. include_spip('inc/dump');
  14. /**
  15. * Charger #FORMULAIRE_RESTAURER
  16. * @return array
  17. */
  18. function formulaires_restaurer_charger_dist(){
  19. // ici on liste tout, les tables exclue sont simplement non cochees
  20. $valeurs = array(
  21. '_dir_dump' => dump_repertoire(),
  22. 'choisi' => _request('fichier')?_request('fichier'):_request('nom'),
  23. 'nom_sauvegarde' => '',
  24. 'tout_restaurer' => (_request('check_tables') AND !_request('tout_restaurer'))?'':'oui',
  25. 'fichier' => '',
  26. 'tri' => 'nom',
  27. );
  28. return $valeurs;
  29. }
  30. /**
  31. * Verifier
  32. * @return array
  33. */
  34. function formulaires_restaurer_verifier_dist() {
  35. $erreurs = array();
  36. if (!$fichier=_request('fichier') AND !$nom = _request('nom_sauvegarde'))
  37. $erreurs['fichier'] = _T('info_obligatoire');
  38. elseif ($fichier) {
  39. $fichier = basename($fichier); // securite
  40. if (!file_exists(dump_repertoire().$fichier))
  41. $erreurs['fichier'] = _T('dump:erreur_nom_fichier');
  42. else
  43. $nom = $fichier;
  44. }
  45. else {
  46. $nom = basename($nom); // securite
  47. if (!file_exists(dump_repertoire().$nom)) {
  48. $erreurs['nom_sauvegarde'] = _T('dump:erreur_nom_fichier');
  49. $nom = "";
  50. }
  51. }
  52. if (!$nom) {
  53. $erreurs['message_erreur'] = _T('dump:erreur_restaurer_verifiez');
  54. }
  55. if ($nom) {
  56. $archive = dump_repertoire().$nom;
  57. if (!$args = dump_connect_args($archive))
  58. $erreurs['tout_restaurer'] = _T('dump:erreur_sqlite_indisponible');
  59. dump_serveur($args);
  60. $tables = base_lister_toutes_tables('dump');
  61. $tables = base_saisie_tables('tables', $tables, array(), _request('tables')?_request('tables'):array(),'dump');
  62. $erreurs['tables'] = "<ol class='spip'><li class='choix'>\n" . join("</li>\n<li class='choix'>",
  63. $tables
  64. ) . "</li></ol><input type='hidden' name='check_tables' value='oui' />\n";
  65. if (!count(_request('tables')) AND !_request('tout_restaurer') AND _request('check_tables'))
  66. $erreurs['tout_restaurer'] = _T('dump:selectionnez_table_a_restaurer');
  67. }
  68. if ($nom
  69. AND (!count($erreurs) OR (count($erreurs)==1 AND isset($erreurs['tables'])))
  70. ) {
  71. if (_request('confirm')!==$nom) {
  72. $erreurs['message_confirm'] =
  73. _T('dump:info_selection_sauvegarde',array('fichier'=> '<i>'.joli_repertoire(dump_repertoire().$nom)."</i>"))
  74. ."<br /><input type='checkbox' name='confirm' value='$nom' id='confirm' /> ";
  75. $erreurs['message_confirm'].="<label for='confirm'><strong>";
  76. if (_request('tables'))
  77. $erreurs['message_confirm'].=_T('dump:confirmer_ecraser_tables_selection');
  78. else
  79. $erreurs['message_confirm'].=_T('dump:confirmer_ecraser_base');
  80. $erreurs['message_confirm'].="</strong></label>";
  81. }
  82. else
  83. // passer a traiter()
  84. unset($erreurs['tables']);
  85. }
  86. return $erreurs;
  87. }
  88. /**
  89. * Traiter
  90. * @return array
  91. */
  92. function formulaires_restaurer_traiter_dist() {
  93. $archive = (_request('fichier')?_request('fichier'):_request('nom'));
  94. $dir_dump = dump_repertoire();
  95. $archive = $dir_dump . basename($archive,".sqlite");
  96. $status_file = base_dump_meta_name(0)."_restauration";
  97. if (_request('tout_restaurer')) {
  98. $args = dump_connect_args($archive);
  99. dump_serveur($args);
  100. $tables = base_lister_toutes_tables('dump');
  101. }
  102. else
  103. $tables = _request('tables');
  104. include_spip('inc/dump');
  105. $res = dump_init($status_file, $archive, $tables,array('spip_meta'=>"impt='oui'"));
  106. if ($res===true) {
  107. // on lance l'action restaurer qui va realiser la sauvegarde
  108. // et finira par une redirection vers la page sauvegarde_fin
  109. include_spip('inc/actions');
  110. $redirect = generer_action_auteur('restaurer', $status_file);
  111. return array('message_ok'=>'ok','redirect'=>$redirect);
  112. }
  113. else
  114. return array('message_erreur'=>$res);
  115. }
  116. ?>