reorganize update.php a bit, remove unneeded options

This commit is contained in:
Andrew Dolgov 2021-03-09 14:45:35 +03:00
parent dd9d017f7d
commit 74391ec30a
1 changed files with 62 additions and 157 deletions

View File

@ -74,31 +74,34 @@
init_plugins(); init_plugins();
$longopts = array("feeds", $options_map = [
"daemon", "feeds" => "update all pending feeds",
"daemon-loop", "daemon" => "start single-process update daemon",
"update-feed:", "daemon-loop" => "",
"send-digests", "update-feed:" => "",
"task:", "send-digests" => "send pending email digests",
"cleanup-tags", "task:" => "",
"quiet", "cleanup-tags" => "perform maintenance on tags table",
"log:", "quiet" => "don't output messages to stdout",
"log-level:", "log:" => ["FILE", "log messages to FILE"],
"indexes", "log-level:" => ["N", "set log verbosity level (0-2)"],
"pidlock:", "pidlock:" => "",
"update-schema::", "update-schema::" => ["[force-yes]", "update database schema, optionally without prompting"],
"convert-filters", "force-update" => "mark all feeds as pending update",
"force-update", "gen-search-idx" => "generate basic PostgreSQL fulltext search index",
"gen-search-idx", "plugins-list" => "list installed plugins",
"list-plugins", "debug-feed:" => ["N", "update specified feed with debug output enabled"],
"debug-feed:", "debug-force-refetch" => "debug update: force refetch feed data",
"force-refetch", "debug-force-rehash" => "debug update: force rehash articles",
"force-rehash", "opml-export:" => ["USER:FILE", "export OPML of USER to FILE"],
"opml-export:", "user-list" => "list all users",
"help"); # "user-add:" => ["USER[:PASSWORD]", "add USER, optionally without prompting for PASSWORD"],
# "user-remove:" => ["USERNAME", "remove specified user"],
"help" => "",
];
foreach (PluginHost::getInstance()->get_commands() as $command => $data) { foreach (PluginHost::getInstance()->get_commands() as $command => $data) {
array_push($longopts, $command . $data["suffix"]); $options_map[$command . $data["suffix"]] = [ $data["arghelp"] ?? "", $data["description"] ];
} }
if (php_sapi_name() != "cli") { if (php_sapi_name() != "cli") {
@ -107,35 +110,32 @@
exit; exit;
} }
$options = getopt("", $longopts); $options = getopt("", array_keys($options_map));
if (count($options) == 0 || isset($options["help"]) ) { if (count($options) == 0 || isset($options["help"]) ) {
print "Tiny Tiny RSS data update script.\n\n"; print "Tiny Tiny RSS CLI management tool\n";
print "Options:\n"; print "=================================\n";
print " --feeds - update feeds\n"; print "Options:\n\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[=force-yes] - update database schema (without prompting)\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) { $options_help = [];
$args = $data['arghelp'];
printf(" --%-26s - %s\n", "$command $args", $data["description"]); foreach ($options_map as $option => $descr) {
if (substr($option, -1) === ":")
$option = substr($option, 0, -1);
$help_key = trim(sprintf("--%s %s",
$option, is_array($descr) ? $descr[0] : ""));
$help_value = is_array($descr) ? $descr[1] : $descr;
if ($help_value)
$options_help[$help_key] = $help_value;
}
$max_key_len = array_reduce(array_keys($options_help),
function ($carry, $item) { $len = strlen($item); return $len > $carry ? strlen($item) : $carry; });
foreach ($options_help as $option => $help_text) {
printf(" %s %s\n", str_pad($option, $max_key_len + 5), $help_text);
} }
return; return;
@ -263,112 +263,6 @@
Debug::log("$rc tags deleted.\n"); Debug::log("$rc tags deleted.\n");
} }
if (isset($options["indexes"])) {
Debug::log("PLEASE BACKUP YOUR DATABASE BEFORE PROCEEDING!");
Debug::log("Type 'yes' to continue.");
if (read_stdin() != 'yes')
exit;
Debug::log("clearing existing indexes...");
if (Config::get(Config::DB_TYPE) == "pgsql") {
$sth = $pdo->query( "SELECT relname FROM
pg_catalog.pg_class WHERE relname LIKE 'ttrss_%'
AND relname NOT LIKE '%_pkey'
AND relkind = 'i'");
} else {
$sth = $pdo->query( "SELECT index_name,table_name FROM
information_schema.statistics WHERE index_name LIKE 'ttrss_%'");
}
while ($line = $sth->fetch()) {
if (Config::get(Config::DB_TYPE) == "pgsql") {
$statement = "DROP INDEX " . $line["relname"];
Debug::log($statement);
} else {
$statement = "ALTER TABLE ".
$line['table_name']." DROP INDEX ".$line['index_name'];
Debug::log($statement);
}
$pdo->query($statement);
}
Debug::log("reading indexes from schema for: " . Config::get(Config::DB_TYPE));
$fp = fopen("schema/ttrss_schema_" . Config::get(Config::DB_TYPE) . ".sql", "r");
if ($fp) {
while ($line = fgets($fp)) {
$matches = array();
if (preg_match("/^create index ([^ ]+) on ([^ ]+)$/i", $line, $matches)) {
$index = $matches[1];
$table = $matches[2];
$statement = "CREATE INDEX $index ON $table";
Debug::log($statement);
$pdo->query($statement);
}
}
fclose($fp);
} else {
Debug::log("unable to open schema file.");
}
Debug::log("all done.");
}
if (isset($options["convert-filters"])) {
Debug::log("WARNING: this will remove all existing type2 filters.");
Debug::log("Type 'yes' to continue.");
if (read_stdin() != 'yes')
exit;
Debug::log("converting filters...");
$pdo->query("DELETE FROM ttrss_filters2");
$res = $pdo->query("SELECT * FROM ttrss_filters ORDER BY id");
while ($line = $res->fetch()) {
$owner_uid = $line["owner_uid"];
// date filters are removed
if ($line["filter_type"] != 5) {
$filter = array();
if (sql_bool_to_bool($line["cat_filter"])) {
$feed_id = "CAT:" . (int)$line["cat_id"];
} else {
$feed_id = (int)$line["feed_id"];
}
$filter["enabled"] = $line["enabled"] ? "on" : "off";
$filter["rule"] = array(
json_encode(array(
"reg_exp" => $line["reg_exp"],
"feed_id" => $feed_id,
"filter_type" => $line["filter_type"])));
$filter["action"] = array(
json_encode(array(
"action_id" => $line["action_id"],
"action_param_label" => $line["action_param"],
"action_param" => $line["action_param"])));
// Oh god it's full of hacks
$_REQUEST = $filter;
$_SESSION["uid"] = $owner_uid;
$filters = new Pref_Filters($_REQUEST);
$filters->add();
}
}
}
if (isset($options["update-schema"])) { if (isset($options["update-schema"])) {
if (Config::is_migration_needed()) { if (Config::is_migration_needed()) {
@ -431,7 +325,7 @@
} }
} }
if (isset($options["list-plugins"])) { if (isset($options["plugins-list"])) {
$tmppluginhost = new PluginHost(); $tmppluginhost = new PluginHost();
$tmppluginhost->load_all($tmppluginhost::KIND_ALL); $tmppluginhost->load_all($tmppluginhost::KIND_ALL);
$enabled = array_map("trim", explode(",", Config::get(Config::PLUGINS))); $enabled = array_map("trim", explode(",", Config::get(Config::PLUGINS)));
@ -470,8 +364,19 @@
Digest::send_headlines_digests(); Digest::send_headlines_digests();
} }
if (isset($options["user-list"])) {
$users = ORM::for_table('ttrss_users')
->order_by_expr('id')
->find_many();
foreach ($users as $user) {
printf ("%-4d\t%-15s\t%-20s\t%-20s\n",
$user->id, $user->login, $user->full_name, $user->email);
}
}
if (isset($options["opml-export"])) { if (isset($options["opml-export"])) {
list ($user, $filename) = explode(" ", $options["opml-export"], 2); list ($user, $filename) = explode(":", $options["opml-export"], 2);
Debug::log("Exporting feeds of user $user to $filename as OPML..."); Debug::log("Exporting feeds of user $user to $filename as OPML...");