You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
4.6 KiB

  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2020 *
  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')) {
  12. return;
  13. }
  14. include_spip('base/dump');
  15. include_spip('inc/dump');
  16. /**
  17. * Charger #FORMULAIRE_RESTAURER
  18. *
  19. * @return array
  20. */
  21. function formulaires_restaurer_charger_dist() {
  22. // ici on liste tout, les tables exclue sont simplement non cochees
  23. $valeurs = array(
  24. '_dir_dump' => dump_repertoire(),
  25. 'choisi' => _request('fichier') ? _request('fichier') : _request('nom'),
  26. 'nom_sauvegarde' => '',
  27. 'tout_restaurer' => (_request('check_tables') and !_request('tout_restaurer')) ? '' : 'oui',
  28. 'fichier' => '',
  29. 'tri' => 'nom',
  30. );
  31. return $valeurs;
  32. }
  33. /**
  34. * Verifier
  35. *
  36. * @return array
  37. */
  38. function formulaires_restaurer_verifier_dist() {
  39. $erreurs = array();
  40. $nom = '';
  41. if (!$fichier = _request('fichier') and !$nom = _request('nom_sauvegarde')) {
  42. $erreurs['fichier'] = _T('info_obligatoire');
  43. } elseif ($fichier) {
  44. $fichier = basename($fichier); // securite
  45. if (!file_exists(dump_repertoire() . $fichier)) {
  46. $erreurs['fichier'] = _T('dump:erreur_nom_fichier');
  47. } else {
  48. $nom = $fichier;
  49. }
  50. } else {
  51. $nom = basename($nom); // securite
  52. if (!file_exists(dump_repertoire() . $nom)) {
  53. $erreurs['nom_sauvegarde'] = _T('dump:erreur_nom_fichier');
  54. $nom = '';
  55. }
  56. }
  57. if (!$nom) {
  58. $erreurs['message_erreur'] = _T('dump:erreur_restaurer_verifiez');
  59. }
  60. if ($nom) {
  61. $archive = dump_repertoire() . $nom;
  62. if (!$args = dump_connect_args($archive)) {
  63. $erreurs['tout_restaurer'] = _T('dump:erreur_sqlite_indisponible');
  64. }
  65. dump_serveur($args);
  66. $tables = base_lister_toutes_tables('dump');
  67. $tables = base_saisie_tables('tables', $tables, array(), _request('tables') ? _request('tables') : array(), 'dump');
  68. $erreurs['tables'] = "<ol class='spip'><li class='choix'>\n" . join(
  69. "</li>\n<li class='choix'>",
  70. $tables
  71. ) . "</li></ol><input type='hidden' name='check_tables' value='oui' />\n";
  72. if (
  73. !_request('tables')
  74. and !_request('tout_restaurer')
  75. and _request('check_tables')
  76. ) {
  77. $erreurs['tout_restaurer'] = _T('dump:selectionnez_table_a_restaurer');
  78. }
  79. }
  80. if ($nom
  81. and (!count($erreurs) or (count($erreurs) == 1 and isset($erreurs['tables'])))
  82. ) {
  83. if (_request('confirm') !== $nom) {
  84. $erreurs['message_confirm'] =
  85. _T(
  86. 'dump:info_selection_sauvegarde',
  87. array('fichier' => '<i>' . joli_repertoire(dump_repertoire() . $nom) . '</i>')
  88. )
  89. . "<br /><input type='checkbox' name='confirm' value='$nom' id='confirm' /> ";
  90. $erreurs['message_confirm'] .= "<label for='confirm'><strong>";
  91. if (_request('tables')) {
  92. $erreurs['message_confirm'] .= _T('dump:confirmer_ecraser_tables_selection');
  93. } else {
  94. $erreurs['message_confirm'] .= _T('dump:confirmer_ecraser_base');
  95. }
  96. $erreurs['message_confirm'] .= '</strong></label>';
  97. } else {
  98. // passer a traiter()
  99. unset($erreurs['tables']);
  100. }
  101. }
  102. if (count($erreurs) and !isset($erreurs['message_erreur'])) {
  103. $erreurs['message_erreur'] = '';
  104. } // pas de message general automatique ici
  105. return $erreurs;
  106. }
  107. /**
  108. * Traiter
  109. *
  110. * @return array
  111. */
  112. function formulaires_restaurer_traiter_dist() {
  113. $archive = (_request('fichier') ? _request('fichier') : _request('nom'));
  114. $dir_dump = dump_repertoire();
  115. $archive = $dir_dump . basename($archive, '.sqlite');
  116. $status_file = base_dump_meta_name(0) . '_restauration';
  117. if (_request('tout_restaurer')) {
  118. $args = dump_connect_args($archive);
  119. dump_serveur($args);
  120. $tables = base_lister_toutes_tables('dump');
  121. } else {
  122. $tables = _request('tables');
  123. }
  124. include_spip('inc/dump');
  125. $res = dump_init($status_file, $archive, $tables, array('spip_meta' => "impt='oui'"));
  126. if ($res === true) {
  127. // on lance l'action restaurer qui va realiser la sauvegarde
  128. // et finira par une redirection vers la page sauvegarde_fin
  129. include_spip('inc/actions');
  130. $redirect = generer_action_auteur('restaurer', $status_file);
  131. return array('message_ok' => 'ok', 'redirect' => $redirect);
  132. } else {
  133. return array('message_erreur' => $res);
  134. }
  135. }