2012-06-20 05:35:34 +00:00
#!/usr/bin/env php
2007-02-24 16:46:39 +00:00
< ? php
2012-12-09 09:41:22 +00:00
set_include_path ( dirname ( __FILE__ ) . " /include " . PATH_SEPARATOR .
get_include_path ());
2011-12-11 19:59:25 +00:00
2010-11-09 13:33:08 +00:00
define ( 'DISABLE_SESSIONS' , true );
2011-04-15 08:38:11 +00:00
chdir ( dirname ( __FILE__ ));
2010-11-10 10:14:44 +00:00
require_once " functions.php " ;
2011-12-13 12:06:25 +00:00
require_once " rssfuncs.php " ;
2007-03-01 08:54:55 +00:00
require_once " sanity_check.php " ;
require_once " config.php " ;
require_once " db.php " ;
2010-11-09 13:33:08 +00:00
require_once " db-prefs.php " ;
2012-08-23 09:57:29 +00:00
require_once " update_self.php " ;
2010-11-09 13:33:08 +00:00
2012-10-23 20:25:56 +00:00
if ( ! defined ( 'PHP_EXECUTABLE' ))
define ( 'PHP_EXECUTABLE' , '/usr/bin/php' );
$op = $argv ;
if ( count ( $argv ) == 0 && ! defined ( 'STDIN' )) {
2012-08-23 09:17:22 +00:00
?> <html>
< head >
2012-10-23 20:25:56 +00:00
< title > Tiny Tiny RSS data update script .</ title >
2012-08-23 09:17:22 +00:00
< meta http - equiv = " Content-Type " content = " text/html; charset=utf-8 " >
< link rel = " stylesheet " type = " text/css " href = " utility.css " >
</ head >
< body >
< div class = " floatingLogo " >< img src = " images/logo_wide.png " ></ div >
2012-10-23 20:25:56 +00:00
< h1 >< ? php echo __ ( " Tiny Tiny RSS data update script. " ) ?> </h1>
2012-08-23 09:17:22 +00:00
2012-10-23 20:25:56 +00:00
< ? php print_error ( " Please run this script from the command line. Use option \" -help \" to display command help if this error is displayed erroneously. " ); ?>
2012-08-23 09:17:22 +00:00
</ body ></ html >
< ? php
exit ;
}
2012-08-04 18:15:40 +00:00
if ( count ( $argv ) == 1 || in_array ( " -help " , $op ) ) {
2010-11-09 13:33:08 +00:00
print " Tiny Tiny RSS data update script. \n \n " ;
print " Options: \n " ;
2011-12-27 19:10:04 +00:00
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 " ;
2012-08-23 09:03:39 +00:00
print " -update-self - update tt-rss installation to latest version \n " ;
2012-08-04 18:15:40 +00:00
print " -quiet - don't show messages \n " ;
2012-08-12 07:12:27 +00:00
print " -indexes - recreate missing schema indexes \n " ;
2012-08-30 14:50:56 +00:00
print " -convert-filters - convert type1 filters to type2 \n " ;
2012-10-30 11:18:46 +00:00
print " -force-update - force update of all feeds \n " ;
2011-12-27 19:10:04 +00:00
print " -help - show this help \n " ;
2010-11-09 13:33:08 +00:00
return ;
2007-03-01 08:54:55 +00:00
}
2007-05-04 03:15:58 +00:00
2012-08-04 18:15:40 +00:00
define ( 'QUIET' , in_array ( " -quiet " , $op ));
if ( ! in_array ( " -daemon " , $op )) {
2010-11-09 13:33:08 +00:00
$lock_filename = " update.lock " ;
} else {
$lock_filename = " update_daemon.lock " ;
}
2007-02-24 16:46:39 +00:00
2010-11-09 13:33:08 +00:00
$lock_handle = make_lockfile ( $lock_filename );
$must_exit = false ;
2007-02-24 16:46:39 +00:00
2010-11-09 13:33:08 +00:00
// Try to lock a file in order to avoid concurrent update.
if ( ! $lock_handle ) {
die ( " error: Can't create lockfile ( $lock_filename ). " .
" Maybe another update process is already running. \n " );
}
2007-02-24 16:46:39 +00:00
2010-11-09 13:33:08 +00:00
// Create a database connection.
2011-04-12 15:33:12 +00:00
$link = db_connect ( DB_HOST , DB_USER , DB_PASS , DB_NAME );
2007-02-24 16:46:39 +00:00
2010-11-09 13:33:08 +00:00
init_connection ( $link );
2007-03-02 14:08:00 +00:00
2012-08-04 18:15:40 +00:00
if ( in_array ( " -feeds " , $op )) {
2010-11-09 13:33:08 +00:00
// Update all feeds needing a update.
update_daemon_common ( $link );
2011-04-13 11:48:20 +00:00
// Update feedbrowser
$count = update_feedbrowser_cache ( $link );
_debug ( " Feedbrowser updated, $count feeds processed. " );
// Purge orphans and cleanup tags
purge_orphans ( $link , true );
$rc = cleanup_tags ( $link , 14 , 50000 );
_debug ( " Cleaned $rc cached tags. " );
2011-04-21 04:51:59 +00:00
get_linked_feeds ( $link );
2010-11-09 13:33:08 +00:00
}
2007-02-24 16:46:39 +00:00
2012-08-04 18:15:40 +00:00
if ( in_array ( " -feedbrowser " , $op )) {
2010-11-09 13:33:08 +00:00
$count = update_feedbrowser_cache ( $link );
print " Finished, $count feeds processed. \n " ;
2007-02-24 16:46:39 +00:00
}
2010-11-09 13:33:08 +00:00
2012-08-04 18:15:40 +00:00
if ( in_array ( " -daemon " , $op )) {
$op = array_diff ( $op , array ( " -daemon " ));
2010-11-09 13:33:08 +00:00
while ( true ) {
2012-08-04 18:15:40 +00:00
passthru ( PHP_EXECUTABLE . " " . implode ( ' ' , $op ) . " -daemon-loop " );
2010-11-09 13:33:08 +00:00
_debug ( " Sleeping for " . DAEMON_SLEEP_INTERVAL . " seconds... " );
sleep ( DAEMON_SLEEP_INTERVAL );
2007-02-24 16:46:39 +00:00
}
2007-03-01 08:54:55 +00:00
}
2007-05-05 11:07:38 +00:00
2012-08-04 18:15:40 +00:00
if ( in_array ( " -daemon-loop " , $op )) {
2010-11-09 13:33:08 +00:00
if ( ! make_stampfile ( 'update_daemon.stamp' )) {
die ( " error: unable to create stampfile \n " );
}
2007-05-05 11:07:38 +00:00
2011-04-12 15:33:12 +00:00
// Call to the feed batch update function
2010-11-09 13:33:08 +00:00
// or regenerate feedbrowser cache
2007-05-05 11:07:38 +00:00
2010-11-09 13:33:08 +00:00
if ( rand ( 0 , 100 ) > 30 ) {
update_daemon_common ( $link );
2007-05-05 11:07:38 +00:00
} else {
2010-11-09 13:33:08 +00:00
$count = update_feedbrowser_cache ( $link );
2010-11-13 18:03:31 +00:00
_debug ( " Feedbrowser updated, $count feeds processed. " );
purge_orphans ( $link , true );
2011-04-12 15:33:12 +00:00
2010-11-13 18:03:31 +00:00
$rc = cleanup_tags ( $link , 14 , 50000 );
_debug ( " Cleaned $rc cached tags. " );
2011-04-21 04:51:59 +00:00
get_linked_feeds ( $link );
2007-05-05 11:07:38 +00:00
}
2007-03-02 14:08:00 +00:00
2007-02-24 16:46:39 +00:00
}
2012-08-04 18:15:40 +00:00
if ( in_array ( " -cleanup-tags " , $op )) {
2010-11-13 16:59:42 +00:00
$rc = cleanup_tags ( $link , 14 , 50000 );
2012-08-04 18:15:40 +00:00
_debug ( " $rc tags deleted. \n " );
2010-11-13 16:59:42 +00:00
}
2012-08-04 18:15:40 +00:00
if ( in_array ( " -get-feeds " , $op )) {
2011-04-20 11:21:00 +00:00
get_linked_feeds ( $link );
}
2012-08-04 18:15:40 +00:00
if ( in_array ( " -import " , $op )) {
$username = $argv [ count ( $argv ) - 2 ];
$filename = $argv [ count ( $argv ) - 1 ];
2011-12-27 19:10:04 +00:00
if ( ! $username ) {
print " error: please specify username. \n " ;
return ;
}
if ( ! is_file ( $filename )) {
print " error: input filename ( $filename ) doesn't exist. \n " ;
return ;
}
2012-08-04 18:15:40 +00:00
_debug ( " importing $filename for user $username ... \n " );
2011-12-27 19:10:04 +00:00
$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 );
}
2012-08-09 10:20:27 +00:00
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. " );
}
2012-08-23 09:03:39 +00:00
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. " );
if ( read_stdin () != 'yes' )
exit ;
2012-08-23 09:57:29 +00:00
update_self ( $link , in_array ( " -force " , $op ));
2012-08-23 09:03:39 +00:00
}
2012-08-30 14:50:56 +00:00
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 " ];
2012-08-31 08:54:37 +00:00
// 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 " ];
}
2012-08-30 14:50:56 +00:00
2012-08-31 08:54:37 +00:00
$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 " ])));
2012-08-30 14:50:56 +00:00
2012-08-31 08:54:37 +00:00
$filter [ " action " ] = array (
json_encode ( array (
" action_id " => $line [ " action_id " ],
" action_param_label " => $line [ " action_param " ],
" action_param " => $line [ " action_param " ])));
2012-08-30 14:50:56 +00:00
2012-08-31 08:54:37 +00:00
// Oh god it's full of hacks
2012-08-31 08:24:13 +00:00
2012-08-31 08:54:37 +00:00
$_REQUEST = $filter ;
$_SESSION [ " uid " ] = $owner_uid ;
2012-08-30 14:50:56 +00:00
2012-08-31 08:54:37 +00:00
$filters = new Pref_Filters ( $link , $_REQUEST );
$filters -> add ();
}
2012-08-30 14:50:56 +00:00
}
}
2012-10-30 11:18:46 +00:00
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' " );
}
2010-11-09 13:33:08 +00:00
db_close ( $link );
2011-12-11 19:59:25 +00:00
2011-12-07 00:17:23 +00:00
if ( $lock_handle != false ) {
fclose ( $lock_handle );
}
2007-02-24 16:46:39 +00:00
2012-08-23 09:03:39 +00:00
if ( file_exists ( LOCK_DIRECTORY . " / $lock_filename " ))
unlink ( LOCK_DIRECTORY . " / $lock_filename " );
2010-11-09 13:33:08 +00:00
?>