4
0

db-restore.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/env php
  2. <?php
  3. declare(strict_types=1);
  4. require(__DIR__ . '/_cli.php');
  5. performRequirementCheck(FreshRSS_Context::systemConf()->db['type'] ?? '');
  6. $cliOptions = new class extends CliOptionsParser {
  7. public bool $deleteBackup;
  8. public bool $forceOverwrite;
  9. public function __construct() {
  10. $this->addOption('deleteBackup', (new CliOption('delete-backup'))->withValueNone());
  11. $this->addOption('forceOverwrite', (new CliOption('force-overwrite'))->withValueNone());
  12. parent::__construct();
  13. }
  14. };
  15. if (!empty($cliOptions->errors)) {
  16. fail('FreshRSS error: ' . array_shift($cliOptions->errors) . "\n" . $cliOptions->usage);
  17. }
  18. FreshRSS_Context::initSystem(true);
  19. Minz_User::change(Minz_User::INTERNAL_USER);
  20. $ok = false;
  21. try {
  22. $error = initDb();
  23. if ($error != '') {
  24. $_SESSION['bd_error'] = $error;
  25. } else {
  26. $ok = true;
  27. }
  28. } catch (Exception $ex) {
  29. $_SESSION['bd_error'] = $ex->getMessage();
  30. }
  31. if (!$ok) {
  32. fail('FreshRSS database error: ' . (is_string($_SESSION['bd_error'] ?? null) ? $_SESSION['bd_error'] : 'Unknown error'));
  33. }
  34. foreach (listUsers() as $username) {
  35. $username = cliInitUser($username);
  36. $filename = DATA_PATH . "/users/{$username}/backup.sqlite";
  37. if (!file_exists($filename)) {
  38. fwrite(STDERR, "FreshRSS SQLite backup not found for user “{$username}”!\n");
  39. $ok = false;
  40. continue;
  41. }
  42. echo 'FreshRSS restore database from SQLite for user “', $username, "”…\n";
  43. $databaseDAO = FreshRSS_Factory::createDatabaseDAO($username);
  44. $ok &= $databaseDAO->dbCopy($filename, FreshRSS_DatabaseDAO::SQLITE_IMPORT, clearFirst: $cliOptions->forceOverwrite);
  45. if ($ok) {
  46. if ($cliOptions->deleteBackup) {
  47. unlink($filename);
  48. }
  49. } else {
  50. fwrite(STDERR, "FreshRSS database already exists for user “{$username}”!\n");
  51. fwrite(STDERR, "If you would like to clear the user database first, use the option --force-overwrite\n");
  52. }
  53. invalidateHttpCache($username);
  54. }
  55. done((bool)$ok);