X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=update.php;h=821d25bce27c5262d65cdfddd62adea65b88e24c;hb=b835a528148783a5436b88baba33d1210562ef93;hp=f542a390bf833fbfcaed6f4d6a002acbb7ae44ba;hpb=a4fd183b5853867a9293dba438512d8400e6b65e;p=tt-rss.git diff --git a/update.php b/update.php index f542a390..821d25bc 100755 --- a/update.php +++ b/update.php @@ -33,7 +33,12 @@ "update-schema", "convert-filters", "force-update", + "gen-search-idx", "list-plugins", + "debug-feed:", + "force-refetch", + "force-rehash", + "decrypt-feeds", "help"); foreach (PluginHost::getInstance()->get_commands() as $command => $data) { @@ -42,12 +47,19 @@ $options = getopt("", $longopts); + if (!is_array($options)) { + die("error: getopt() failed. ". + "Most probably you are using PHP CGI to run this script ". + "instead of required PHP CLI. Check tt-rss wiki page on updating feeds for ". + "additional information.\n"); + } + if (count($options) == 0 && !defined('STDIN')) { ?> Tiny Tiny RSS data update script. - + @@ -73,9 +85,14 @@ print " --log FILE - log messages to FILE\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 " --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 " --decrypt-feeds - decrypt feed passwords\n"; print " --help - show this help\n"; print "Plugin options:\n"; @@ -162,8 +179,9 @@ if (isset($options["daemon"])) { while (true) { $quiet = (isset($options["quiet"])) ? "--quiet" : ""; + $log = isset($options['log']) ? '--log '.$options['log'] : ''; - passthru(PHP_EXECUTABLE . " " . $argv[0] ." --daemon-loop $quiet"); + passthru(PHP_EXECUTABLE . " " . $argv[0] ." --daemon-loop $quiet $log"); _debug("Sleeping for " . DAEMON_SLEEP_INTERVAL . " seconds..."); sleep(DAEMON_SLEEP_INTERVAL); } @@ -175,7 +193,9 @@ } update_daemon_common(isset($options["pidlock"]) ? 50 : DAEMON_FEED_LIMIT); - housekeeping_common(true); + + if (!isset($options["pidlock"]) || $options["task"] == 0) + housekeeping_common(true); PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", $op); } @@ -307,7 +327,7 @@ for ($i = $updater->getSchemaVersion() + 1; $i <= SCHEMA_VERSION; $i++) { _debug("performing update up to version $i..."); - $result = $updater->performUpdateTo($i); + $result = $updater->performUpdateTo($i, false); _debug($result ? "OK!" : "FAILED!"); @@ -320,9 +340,40 @@ } + if (isset($options["gen-search-idx"])) { + echo "Generating search index (stemming set to English)...\n"; + + $result = db_query("SELECT COUNT(id) AS count FROM ttrss_entries WHERE tsvector_combined IS NULL"); + $count = db_fetch_result($result, 0, "count"); + + print "Articles to process: $count.\n"; + + $limit = 500; + $processed = 0; + + while (true) { + $result = db_query("SELECT id, title, content FROM ttrss_entries WHERE tsvector_combined IS NULL ORDER BY id LIMIT $limit"); + + while ($line = db_fetch_assoc($result)) { + $tsvector_combined = db_escape_string(mb_substr($line['title'] . ' ' . strip_tags(str_replace('<', ' <', $line['content'])), + 0, 1000000)); + + db_query("UPDATE ttrss_entries SET tsvector_combined = to_tsvector('english', '$tsvector_combined') WHERE id = " . $line["id"]); + } + + $processed += db_num_rows($result); + print "Processed $processed articles...\n"; + + if (db_num_rows($result) != $limit) { + echo "All done.\n"; + break; + } + } + } + if (isset($options["list-plugins"])) { $tmppluginhost = new PluginHost(); - $tmppluginhost->load_all($tmppluginhost::KIND_ALL); + $tmppluginhost->load_all($tmppluginhost::KIND_ALL, false); $enabled = array_map("trim", explode(",", PLUGINS)); echo "List of all available plugins:\n"; @@ -342,12 +393,51 @@ } - PluginHost::getInstance()->run_commands($options); + if (isset($options["debug-feed"])) { + $feed = $options["debug-feed"]; - if ($lock_handle != false) { - fclose($lock_handle); + if (isset($options["force-refetch"])) $_REQUEST["force_refetch"] = true; + if (isset($options["force-rehash"])) $_REQUEST["force_rehash"] = true; + + $_REQUEST['xdebug'] = 1; + + update_rss_feed($feed); } + if (isset($options["decrypt-feeds"])) { + $result = db_query("SELECT id, auth_pass FROM ttrss_feeds WHERE auth_pass_encrypted = true"); + + if (!function_exists("mcrypt_decrypt")) { + _debug("mcrypt functions not available."); + return; + } + + require_once "crypt.php"; + + $total = 0; + + db_query("BEGIN"); + + while ($line = db_fetch_assoc($result)) { + _debug("processing feed id " . $line["id"]); + + $auth_pass = db_escape_string(decrypt_string($line["auth_pass"])); + + db_query("UPDATE ttrss_feeds SET auth_pass_encrypted = false, auth_pass = '$auth_pass' + WHERE id = " . $line["id"]); + + ++$total; + } + + db_query("COMMIT"); + + _debug("$total feeds processed."); + } + + PluginHost::getInstance()->run_commands($options); + if (file_exists(LOCK_DIRECTORY . "/$lock_filename")) + if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') + fclose($lock_handle); unlink(LOCK_DIRECTORY . "/$lock_filename"); ?>