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 +
+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 ""; + 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(); + } + } - -