diff --git a/classes/opml.php b/classes/opml.php index 48db9a8a3..c4523f83f 100644 --- a/classes/opml.php +++ b/classes/opml.php @@ -125,15 +125,16 @@ class Opml extends Handler_Protected { return $out; } - function opml_export($name, $owner_uid, $hide_private_feeds = false, $include_settings = true) { + function opml_export($filename, $owner_uid, $hide_private_feeds = false, $include_settings = true, $file_output = false) { if (!$owner_uid) return; - if (!isset($_REQUEST["debug"])) { - header("Content-type: application/xml+opml"); - header("Content-Disposition: attachment; filename=" . $name ); - } else { - header("Content-type: text/xml"); - } + if (!$file_output) + if (!isset($_REQUEST["debug"])) { + header("Content-type: application/xml+opml"); + header("Content-Disposition: attachment; filename=$filename"); + } else { + header("Content-type: text/xml"); + } $out = ""; @@ -288,7 +289,10 @@ class Opml extends Handler_Protected { 'return str_repeat("\t", intval(strlen($matches[0])/2));'), $res); */ - print $res; + if ($file_output) + return file_put_contents($filename, $res) > 0; + else + print $res; } // Import diff --git a/update.php b/update.php index 5b723277f..881db3621 100755 --- a/update.php +++ b/update.php @@ -85,6 +85,7 @@ "debug-feed:", "force-refetch", "force-rehash", + "opml-export:", "help"); foreach (PluginHost::getInstance()->get_commands() as $command => $data) { @@ -122,29 +123,30 @@ if (count($options) == 0 || isset($options["help"]) ) { print "Tiny Tiny RSS data update script.\n\n"; print "Options:\n"; - print " --feeds - update feeds\n"; - print " --daemon - start single-process update daemon\n"; - print " --task N - create lockfile using this task id\n"; - print " --cleanup-tags - perform tags table maintenance\n"; - print " --quiet - don't output messages to stdout\n"; - print " --log FILE - log messages to FILE\n"; - print " --log-level N - log verbosity level\n"; - print " --indexes - recreate missing schema indexes\n"; - print " --update-schema - update database schema\n"; - print " --gen-search-idx - generate basic PostgreSQL fulltext search index\n"; - print " --convert-filters - convert type1 filters to type2\n"; - print " --send-digests - send pending email digests\n"; - print " --force-update - force update of all feeds\n"; - print " --list-plugins - list all available plugins\n"; - print " --debug-feed N - perform debug update of feed N\n"; - print " --force-refetch - debug update: force refetch feed data\n"; - print " --force-rehash - debug update: force rehash articles\n"; - print " --help - show this help\n"; + print " --feeds - update feeds\n"; + print " --daemon - start single-process update daemon\n"; + print " --task N - create lockfile using this task id\n"; + print " --cleanup-tags - perform tags table maintenance\n"; + print " --quiet - don't output messages to stdout\n"; + print " --log FILE - log messages to FILE\n"; + print " --log-level N - log verbosity level\n"; + print " --indexes - recreate missing schema indexes\n"; + print " --update-schema - update database schema\n"; + print " --gen-search-idx - generate basic PostgreSQL fulltext search index\n"; + print " --convert-filters - convert type1 filters to type2\n"; + print " --send-digests - send pending email digests\n"; + print " --force-update - force update of all feeds\n"; + print " --list-plugins - list all available plugins\n"; + print " --debug-feed N - perform debug update of feed N\n"; + print " --force-refetch - debug update: force refetch feed data\n"; + print " --force-rehash - debug update: force rehash articles\n"; + print " --opml-export \"USER FILE\" - export feeds of selected user to OPML\n"; + print " --help - show this help\n"; print "Plugin options:\n"; foreach (PluginHost::getInstance()->get_commands() as $command => $data) { $args = $data['arghelp']; - printf(" --%-19s - %s\n", "$command $args", $data["description"]); + printf(" --%-26s - %s\n", "$command $args", $data["description"]); } return; @@ -483,6 +485,26 @@ Digest::send_headlines_digests(); } + if (isset($options["opml-export"])) { + list ($user, $filename) = explode(" ", $options["opml-export"], 2); + + Debug::log("Exporting feeds of user $user to $filename as OPML..."); + + $sth = $pdo->prepare("SELECT id FROM ttrss_users WHERE login = ?"); + $sth->execute([$user]); + + if ($res = $sth->fetch()) { + $opml = new OPML(""); + + $rc = $opml->opml_export($filename, $res["id"], false, true, true); + + Debug::log($rc ? "Success." : "Failed."); + } else { + Debug::log("User not found: $user"); + } + + } + PluginHost::getInstance()->run_commands($options); if (file_exists(LOCK_DIRECTORY . "/$lock_filename"))