X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;ds=sidebyside;f=update.php;h=0809427365df2af404720476fa5b9e043c4b7940;hb=49b2401e0d897255bb1b4dbe0f1486842572da37;hp=5b91bde323241dacadf22cc45c6bd1e73f3a674b;hpb=b4c27af79aa9924b31959153622032d3c83ddc82;p=tt-rss.git diff --git a/update.php b/update.php old mode 100644 new mode 100755 index 5b91bde3..08094273 --- a/update.php +++ b/update.php @@ -1,157 +1,308 @@ +#!/usr/bin/env php + + Tiny Tiny RSS data update script. + + + -define('SCHEMA_VERSION', 13); + + +

-?> + - - -Database Updater - - - + + + if (count($argv) == 1 || in_array("-help", $op) ) { + print "Tiny Tiny RSS data update script.\n\n"; + print "Options:\n"; + print " -feeds - update feeds\n"; + print " -feedbrowser - update feedbrowser\n"; + print " -daemon - start single-process update daemon\n"; + print " -cleanup-tags - perform tags table maintenance\n"; + print " -get-feeds - receive popular feeds from linked instances\n"; + print " -import USER FILE - import articles from XML\n"; + print " -update-self - update tt-rss installation to latest version\n"; + print " -quiet - don't show messages\n"; + print " -indexes - recreate missing schema indexes\n"; + print " -convert-filters - convert type1 filters to type2\n"; + print " -force-update - force update of all feeds\n"; + print " -help - show this help\n"; + return; + } - + define('QUIET', in_array("-quiet", $op)); -

Database Updater

+ if (!in_array("-daemon", $op)) { + $lock_filename = "update.lock"; + } else { + $lock_filename = "update_daemon.lock"; + } -Tiny Tiny RSS database is up to date (version $version).

"; - print "

Return to Tiny Tiny RSS

"; - return; -} + // Call to the feed batch update function + // or regenerate feedbrowser cache -if (!$op) { - print "

Warning: Please backup your database before proceeding.

"; + if (rand(0,100) > 30) { + update_daemon_common($link); + } else { + $count = update_feedbrowser_cache($link); + _debug("Feedbrowser updated, $count feeds processed."); - print "

Your Tiny Tiny RSS database needs update to the latest - version ($version —> $latest_version).

"; + purge_orphans($link, true); -/* print "

Available incremental updates:"; + $rc = cleanup_tags($link, 14, 50000); - foreach (array_keys($update_versions) as $v) { - if ($v > $version) { - print " $v"; + _debug("Cleaned $rc cached tags."); + + get_linked_feeds($link); } - } */ - print "

"; + } - print "
- - -
"; + if (in_array("-cleanup-tags", $op)) { + $rc = cleanup_tags($link, 14, 50000); + _debug("$rc tags deleted.\n"); + } -} else if ($op == "do") { + if (in_array("-get-feeds", $op)) { + get_linked_feeds($link); + } - print "

Performing updates (from version $version)...

"; + if (in_array("-import",$op)) { + $username = $argv[count($argv) - 2]; + $filename = $argv[count($argv) - 1]; - $num_updates = 0; + if (!$username) { + print "error: please specify username.\n"; + return; + } - foreach (array_keys($update_versions) as $v) { - if ($v == $version + 1) { - print "

Updating to version $v...

"; - $fp = fopen($update_versions[$v], "r"); - if ($fp) { - while (!feof($fp)) { - $query = trim(getline($fp, ";")); - if ($query != "") { - print "

QUERY: $query

"; - db_query($link, $query); - } - } - } - fclose($fp); + if (!is_file($filename)) { + print "error: input filename ($filename) doesn't exist.\n"; + return; + } + + _debug("importing $filename for user $username...\n"); + + $result = db_query($link, "SELECT id FROM ttrss_users WHERE login = '$username'"); + + if (db_num_rows($result) == 0) { + print "error: could not find user $username.\n"; + return; + } + + $owner_uid = db_fetch_result($result, 0, "id"); + + perform_data_import($link, $filename, $owner_uid); + + } + + if (in_array("-indexes", $op)) { + _debug("PLEASE BACKUP YOUR DATABASE BEFORE PROCEEDING!"); + _debug("Type 'yes' to continue."); - print "

Checking version... "; + if (read_stdin() != 'yes') + exit; - $result = db_query($link, "SELECT schema_version FROM ttrss_version"); - $version = db_fetch_result($result, 0, "schema_version"); + _debug("clearing existing indexes..."); + + if (DB_TYPE == "pgsql") { + $result = db_query($link, "SELECT relname FROM + pg_catalog.pg_class WHERE relname LIKE 'ttrss_%' + AND relname NOT LIKE '%_pkey' + AND relkind = 'i'"); + } else { + $result = db_query($link, "SELECT index_name,table_name FROM + information_schema.statistics WHERE index_name LIKE 'ttrss_%'"); + } - if ($version == $v) { - print "OK! ($version)"; + while ($line = db_fetch_assoc($result)) { + if (DB_TYPE == "pgsql") { + $statement = "DROP INDEX " . $line["relname"]; + _debug($statement); } else { - print "ERROR!"; - return; + $statement = "ALTER TABLE ". + $line['table_name']." DROP INDEX ".$line['index_name']; + _debug($statement); } + db_query($link, $statement, false); + } + + _debug("reading indexes from schema for: " . DB_TYPE); + + $fp = fopen("schema/ttrss_schema_" . 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]; - $num_updates++; + $statement = "CREATE INDEX $index ON $table"; + + _debug($statement); + db_query($link, $statement); + } + } + fclose($fp); + } else { + _debug("unable to open schema file."); } + _debug("all done."); } - print "

Finished. Performed $num_updates updates up to schema - version $version.

"; + if (in_array("-update-self", $op)) { + _debug("Warning: self-updating is experimental. Use at your own risk."); + _debug("Please backup your tt-rss directory before continuing. Your database will not be modified."); + _debug("Type 'yes' to continue."); - print "

Return to Tiny Tiny RSS

"; + if (read_stdin() != 'yes') + exit; -} + update_self($link, in_array("-force", $op)); + } -?> + if (in_array("-convert-filters", $op)) { + _debug("WARNING: this will remove all existing type2 filters."); + _debug("Type 'yes' to continue."); + + if (read_stdin() != 'yes') + exit; + + _debug("converting filters..."); + + db_query($link, "DELETE FROM ttrss_filters2"); + + $result = db_query($link, "SELECT * FROM ttrss_filters ORDER BY id"); + + while ($line = db_fetch_assoc($result)) { + $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($link, $_REQUEST); + $filters->add(); + } + } - - + } + + if (in_array("-force-update", $op)) { + _debug("marking all feeds as needing update..."); + + db_query($link, "UPDATE ttrss_feeds SET last_update_started = '1970-01-01', + last_updated = '1970-01-01'"); + } + db_close($link); + + if ($lock_handle != false) { + fclose($lock_handle); + } + + if (file_exists(LOCK_DIRECTORY . "/$lock_filename")) + unlink(LOCK_DIRECTORY . "/$lock_filename"); +?>