]> git.wh0rd.org - tt-rss.git/blobdiff - update.php
rework class system to use subdirectories
[tt-rss.git] / update.php
index 44c39b6a883748184c6634ed725e3951d093aec0..2c7f347d91ce86f41674956e926d7a1c3effe5fb 100755 (executable)
@@ -17,9 +17,9 @@
        if (!defined('PHP_EXECUTABLE'))
                define('PHP_EXECUTABLE', '/usr/bin/php');
 
-       $op = $argv[1];
+       $op = $argv;
 
-       if (!$op || $op == "-help") {
+       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 "  -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 "  -quiet              - don't show messages\n";
+               print "  -indexes            - recreate missing schema indexes\n";
                print "  -help               - show this help\n";
                return;
        }
 
-       if ($op != "-daemon") {
+       define('QUIET', in_array("-quiet", $op));
+
+       if (!in_array("-daemon", $op)) {
                $lock_filename = "update.lock";
        } else {
                $lock_filename = "update_daemon.lock";
@@ -52,7 +56,9 @@
 
        init_connection($link);
 
-       if ($op == "-feeds") {
+       $plugins = new Plugins($link);
+
+       if (in_array("-feeds", $op)) {
                // Update all feeds needing a update.
                update_daemon_common($link);
 
                get_linked_feeds($link);
        }
 
-       if ($op == "-feedbrowser") {
+       if (in_array("-feedbrowser", $op)) {
                $count = update_feedbrowser_cache($link);
                print "Finished, $count feeds processed.\n";
        }
 
-       if ($op == "-daemon") {
+       if (in_array("-daemon", $op)) {
+               $op = array_diff($op, array("-daemon"));
                while (true) {
-                       passthru(PHP_EXECUTABLE . " " . $argv[0] . " -daemon-loop");
+                       passthru(PHP_EXECUTABLE . " " . implode(' ', $op) . " -daemon-loop");
                        _debug("Sleeping for " . DAEMON_SLEEP_INTERVAL . " seconds...");
                        sleep(DAEMON_SLEEP_INTERVAL);
                }
        }
 
-       if ($op == "-daemon-loop") {
+       if (in_array("-daemon-loop", $op)) {
                if (!make_stampfile('update_daemon.stamp')) {
                        die("error: unable to create stampfile\n");
                }
 
        }
 
-       if ($op == "-cleanup-tags") {
+       if (in_array("-cleanup-tags", $op)) {
                $rc = cleanup_tags($link, 14, 50000);
-               print "$rc tags deleted.\n";
+               _debug("$rc tags deleted.\n");
        }
 
-       if ($op == "-get-feeds") {
+       if (in_array("-get-feeds", $op)) {
                get_linked_feeds($link);
        }
 
-       if ($op == "-import") {
-               $username = $argv[2];
-               $filename = $argv[3];
+       if (in_array("-import",$op)) {
+               $username = $argv[count($argv) - 2];
+               $filename = $argv[count($argv) - 1];
 
                if (!$username) {
                        print "error: please specify username.\n";
                        return;
                }
 
-               print "importing $filename for user $username...\n";
+               _debug("importing $filename for user $username...\n");
 
                $result = db_query($link, "SELECT id FROM ttrss_users WHERE login = '$username'");
 
 
        }
 
+       if (in_array("-indexes", $op)) {
+               _debug("PLEASE BACKUP YOUR DATABASE BEFORE PROCEEDING!");
+               _debug("Type 'yes' to continue.");
+
+               if (read_stdin() != 'yes')
+                       exit;
+
+               _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_%'");
+               }
+
+               while ($line = db_fetch_assoc($result)) {
+                       if (DB_TYPE == "pgsql") {
+                               $statement = "DROP INDEX " . $line["relname"];
+                               _debug($statement);
+                       } else {
+                               $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];
+
+                                       $statement = "CREATE INDEX $index ON $table";
+
+                                       _debug($statement);
+                                       db_query($link, $statement);
+                               }
+                       }
+                       fclose($fp);
+               } else {
+                       _debug("unable to open schema file.");
+               }
+               _debug("all done.");
+       }
+
        db_close($link);
 
        if ($lock_handle != false) {