diff -u -r -N yasuck-0.0.5.orig/docs/ChangeLog yasuck-0.0.5/docs/ChangeLog --- yasuck-0.0.5.orig/docs/ChangeLog 2004-09-24 11:47:59.000000000 -0500 +++ yasuck-0.0.5/docs/ChangeLog 2004-09-29 14:52:37.503769504 -0500 @@ -4,6 +4,16 @@ *yasuck-0.0.5 (24 Sep 2004) + 29 Sep 2004: Mike Green docs/Changelog, + includes/app.functions.php, includes/globals.php, yasuck, patch-0.0.5-01: + + Added --merge to merge another database into the existing one. Started + lots of code cleanups in preparation for an official 1.0.0 release. Rewrote + argument checking, "functionalized" everything to flow more smoothly, + altered checkDatabase() to allow for merging, changed checkStatus() to + accept a board name or board id, added --drop to drop a board out of the + database. Created patch for it all. + *yasuck-0.0.4 (19 Sep 2004) 24 Sep 2004: Mike Green docs/ChangeLog, diff -u -r -N yasuck-0.0.5.orig/includes/app.functions.php yasuck-0.0.5/includes/app.functions.php --- yasuck-0.0.5.orig/includes/app.functions.php 2004-09-24 11:30:52.000000000 -0500 +++ yasuck-0.0.5/includes/app.functions.php 2004-09-29 14:34:59.967539448 -0500 @@ -12,33 +12,25 @@ function checkArgs($args='') { if ($args == '' or !is_array($args) or count($args) < 2) { - die(helpMessage()); - } - -if (in_array("--debug",$args)) { - define(DEBUG,true); - } else { - define(DEBUG,false); - } -if (in_array("--skipmsgs",$args)) { - define(SKIPMSGS,true); - } else { - define(SKIPMSGS,false); + return false; } -if (in_array("--help",$args)) { die(helpMessage()); } -if (in_array("--version",$args)) { die(displayVersion()); } -if (in_array("--sanity",$args)) { die(sanityCheck()); } -if (in_array("--init",$args)) { die(initializeDatabase()); } - -global $board, $start, $end; - -$action = ''; $board = ''; $start = ''; $end = ''; for($j=1; $j < count($args); $j++) { $arg = $args[$j]; switch($arg) { case "--debug": - case "--skipmsgs": + define(DEBUG,true); + break; + case "--drop": + if (defined('ACTION')) { return false; } + if (defined('BOARD')) { return false; } + $j++; + $board = $args[$j]; + if (empty($board)) { return false; } + if (substr($board,0,2) == "--") { return false; } + define(ACTION,"drop"); + define(BOARD,$board); + return true; break; case "--dryrun": define(DRYRUN,true); @@ -47,31 +39,64 @@ define(DUMPHTML,true); break; case "--end": + if (defined('END')) { return false; } $j++; $end = $args[$j]; - if (empty($end)) { die(helpMessage()); } - if (substr($end,0,2) == "--") { die(helpMessage()); } - if (!is_numeric($end)) { die(helpMessage()); } + if (empty($end)) { return false; } + if (substr($end,0,2) == "--") { return false; } + if (!is_numeric($end)) { return false; } + define(END,$end); break; case "--get": + if (defined('ACTION')) { return false; } + if (defined('BOARD')) { return false; } $j++; - $action = "get"; $board = $args[$j]; - if (empty($board)) { die(helpMessage()); } - if (substr($board,0,2) == "--") { die(helpMessage()); } + if (empty($board)) { return false; } + if (substr($board,0,2) == "--") { return false; } + define(ACTION,"get"); + define(BOARD,$board); + break; + case "--help": + define(ACTION,"help"); + return true; + break; + case "--init": + if (defined('ACTION')) { return false; } + define(ACTION,"init"); + return true; break; case "--listgaps": + if (defined('ACTION')) { return false; } + if (defined('BOARD')) { return false; } + $j++; + $board = $args[$j]; + if (empty($board)) { return false; } + if (substr($board,0,2) == "--") { return false; } + define(ACTION,"listgaps"); + define(BOARD,$board); + return true; + break; + case "--merge": + if (defined('ACTION')) { return false; } + if (defined('BOARD')) { return false; } $j++; $board = $args[$j]; - if (empty($board)) { die(helpMessage()); } - if (substr($board,0,2) == "--") { die(helpMessage()); } - die(listGaps($board)); + if (empty($board)) { return false; } + if (substr($board,0,2) == "--") { return false; } + $j++; + $mergedb = $args[$j]; + if (empty($mergedb)) { return false; } + if (substr($mergedb,0,2) == "--") { return false; } + define(ACTION,"merge"); + define(BOARD,$board); + define(MERGEDB,$mergedb); break; case "--poster": $j++; $text = $args[$j]; - if (empty($text)) { die(helpMessage()); } - if (substr($text,0,2) == "--") { die(helpMessage()); } + if (empty($text)) { return false; } + if (substr($text,0,2) == "--") { return false; } define(AUTHOR_SEARCH,true); define(AUTHOR_TEXT,$text); break; @@ -79,12 +104,12 @@ define(QUIET,true); break; case "--recs": - $action = "refresh"; - define(RECSONLY,true); + if (defined('ACTION')) { return false; } + if (defined('BOARD')) { return false; } $j++; $board = $args[$j]; - if (empty($board)) { die(helpMessage()); } - if (substr($board,0,2) == "--") { die(helpMessage()); } + if (empty($board)) { return false; } + if (substr($board,0,2) == "--") { return false; } $j++; $text = $args[$j]; if ("$text" == "all") { @@ -93,56 +118,71 @@ define(RECSALL,false); $j--; } + define(ACTION,"refresh"); + define(BOARD,$board); + break; + case "--sanity": + if (defined('ACTION')) { return false; } + define(ACTION,"sanity"); + return true; + break; + case "--skipmsgs": + define(SKIPMSGS,true); break; case "--start": + if (defined('START')) { return false; } $j++; $start = $args[$j]; - if (empty($start)) { die(helpMessage()); } - if (substr($start,0,2) == "--") { die(helpMessage()); } - if (!is_numeric($start)) { die(helpMessage()); } + if (empty($start)) { return false; } + if (substr($start,0,2) == "--") { return false; } + if (!is_numeric($start)) { return false; } + define(START,$start); break; case "--status": + if (defined('ACTION')) { return false; } + if (defined('BOARD')) { return false; } $j++; - $action = "status"; $board = $args[$j]; - if (empty($board)) { die(helpMessage()); } - if (substr($board,0,2) == "--") { die(helpMessage()); } + if (empty($board)) { return false; } + if (substr($board,0,2) == "--") { return false; } + define(ACTION,"status"); + define(BOARD,$board); break; case "--subject": $j++; $text = $args[$j]; - if (empty($text)) { die(helpMessage()); } - if (substr($text,0,2) == "--") { die(helpMessage()); } + if (empty($text)) { return false; } + if (substr($text,0,2) == "--") { return false; } define(SUBJECT_SEARCH,true); define(SUBJECT_TEXT,$text); break; case "--unlock": + if (defined('ACTION')) { return false; } + if (defined('BOARD')) { return false; } $j++; $board = $args[$j]; - if (empty($board)) { die(helpMessage()); } - if (substr($board,0,2) == "--") { die(helpMessage()); } - die(lockOverride($board)); + if (empty($board)) { return false; } + if (substr($board,0,2) == "--") { return false; } + define(ACTION,"unlock"); + define(BOARD,$board); + return true; + break; + case "--version": + if (defined('ACTION')) { return false; } + define(ACTION,"version"); + return true; break; default: - die(helpMessage()); + return false; break; } } -switch($action) { - case "get": - if (!empty($start) and !empty($end)) { - if ($end < $start) { die(helpMessage()); } +if (defined('START') and defined('END')) { + if (END < START) { + echo "Invalid start/end message range\n"; + return false; } - break; - case "refresh": - break; - case "status": - die(checkStatus($board)); - break; - default: - die(helpMessage()); - break; } return true; @@ -159,8 +199,7 @@ } $board_id = addslashes($board_id); -$sql = "select locked from " . DBN . ".board_ids -where board_id=$board_id limit 1"; +$sql = "select locked from board_ids where board_id=$board_id limit 1"; if (!$qid = db_query($sql)) { die("ABORT: SQL failure during checkLock().\n"); } @@ -181,11 +220,16 @@ /***************************************************************************** * * *****************************************************************************/ -function checkDatabase() { +function checkDatabase($dbh='',$dbn='',$dbu='',$dbp='') { + +if ($dbh == '') { $dbh = DBH; } +if ($dbn == '') { $dbn = DBN; } +if ($dbu == '') { $dbu = DBU; } +if ($dbp == '') { $dbp = DBP; } $msg = ''; $file = basename($_SERVER['argv'][0]); -if (!db_connect(DBH,DBN,DBU,DBP)) { +if (!db_connect($dbh,$dbn,$dbu,$dbp)) { $msg = "ABORT:\n"; $msg .= "Cannot connect to the database. Either the server is down, \n"; $msg .= "the database has not been initialized, or incorrect database\n"; @@ -195,11 +239,11 @@ } if (! $msg == '') { if (DEBUG) { - $txt = "db_connect(" . DBH . "," . DBN . "," . DBU . ","; - $txt .= DBP . ")"; + $txt = "db_connect($dbh,$dbn,$dbu,PASSWORD)"; $msg .= "DEBUG: failed during $txt\n"; } - die($msg); + echo $msg; + return false; } return true; } @@ -207,41 +251,41 @@ /***************************************************************************** * * *****************************************************************************/ -function checkStatus($board='') { +function checkStatus($board_name='') { -if ($board == '') { die("ABORT: invalid board: checkStatus($board).\n"); } +if ($board_name == '') { + echo "checkStatus(): invalid board name: $board_name\n"; + return false; + } +if (!checkDatabase()) { + echo "checkStatus(): checkDatabase() failure\n"; + return false; + } -checkDatabase(); +$info_ar = queryBoardInfo($board_name,false); +if ($info_ar === false or !is_array($info_ar)) { + echo "checkStatus(): queryBoardInfo() failed\n"; + return false; + } $msg = ''; -$info_ar = queryBoardInfo($board,false); -if ($info_ar === false or !is_array($info_ar)) { - $msg .= "ERROR: queryBoardInfo($board) failed.\n"; - $board_id = "n/a"; - $ticker_id = "n/a"; - $low_msg = "n/a"; - $high_msg = "n/a"; - $last_msg = "n/a"; - $locked = "n/a"; - $getmsg = "n/a"; +$board_id = $info_ar['board_id']; +$ticker_id = $info_ar['ticker_id']; +$low_msg = $info_ar['low_msg']; +$high_msg = $info_ar['high_msg']; +$last_msg = $info_ar['last_msg']; +if (checkLock($board_id)) { + $locked = "locked"; } else { - $board_id = $info_ar['board_id']; - $ticker_id = $info_ar['ticker_id']; - $low_msg = $info_ar['low_msg']; - $high_msg = $info_ar['high_msg']; - $last_msg = $info_ar['last_msg']; - if (checkLock($board_id)) { - $locked = "locked"; - } else { - $locked = "unlocked"; - } - if (retrieveMsg($board_id,$ticker_id,1)) { - $getmsg = "ok"; - } else { - $getmsg = "failed"; - } + $locked = "unlocked"; } -if ($page = retrieveList($board)) { +if (retrieveMsg($board_id,$ticker_id,1)) { + $getmsg = "ok"; + } else { + $getmsg = "failed"; + } + +if ($page = retrieveList($board_name)) { $getIndex = "ok"; $actual_low = parseLowMessage($page); $actual_high = parseHighMessage($page); @@ -251,17 +295,21 @@ $action_high = "n/a"; } -$msg .= "$board status: -board_id: $board_id -ticker_id: $ticker_id -lock status: $locked -index retrieval: $getIndex -message retrieval: $getmsg -low_msg (in database): $low_msg actual: $actual_low -high_msg (in database): $high_msg actual: $actual_high -last_msg (in database): $last_msg\n"; +$msg .= "Board name: $board_name +board_id: $board_id +ticker_id: $ticker_id +lock: $locked +get index: $getIndex +get message: $getmsg +last message: $last_msg + + Database Actual +low_msg $low_msg $actual_low +high_msg $high_msg $actual_high\n"; -die($msg); +echo $msg; + +return true; } @@ -273,7 +321,7 @@ if ($poster_name == '') { return false; } $poster_name = addslashes($poster_name); -$sql = "insert into " . DBN . ".poster_ids(poster_name) +$sql = "insert into poster_ids(poster_name) values('$poster_name')"; if (!db_query($sql)) { return false; } @@ -303,6 +351,51 @@ /***************************************************************************** * * *****************************************************************************/ +function dropBoard($board_name='') { +if ($board_name == '') { + echo "What board do you want to ditch?"; + return false; + } +if (!checkDatabase()) { + echo "checkStatus(): checkDatabase() failure\n"; + return false; + } +$info_ar = queryBoardInfo($board_name,false); +if ($info_ar === false or !is_array($info_ar)) { + echo "queryBoardInfo() failed\n"; + return false; + } +$board_id = addslashes($info_ar['board_id']); + +if (checkLock($board_id)) { + echo "ABORT: board $board_name is locked\n"; + return false; + } +if (!toggleLock($board_id,1)) { + echo "ABORT: cannot lock board.\n"; + return false; + } + +$board_id = addslashes($board_id); +$sql = array(); +$sql[] = "delete from message_ids where board_id=$board_id"; +$sql[] = "delete from board_ids where board_id=$board_id"; + +foreach($sql as $query) { + if (!db_query($query)) { + echo "WARNING: delete failed:\n"; + echo "$query\n"; + return false; + } + } + +return true; + +} + +/***************************************************************************** + * * + *****************************************************************************/ function getUa() { $randomize = false; @@ -393,6 +486,7 @@ $msg = "Usage: $fname action args [--start msg] [--end msg] --debug Turn on verbose debug messages + --drop BOARD Drop/Purge BOARD out of the database --dryrun Fetch only, NO database message insert/updates --dumphtml Dump copy of pages as they are retrieved (in CWD) --end MSG End with message number MSG (optional) @@ -400,6 +494,7 @@ --help Display this help message --init Initialize database (destructive) --listgaps BOARD List possible missing messages + --merge BOARD DB merge all database entries from DB into database --poster POSTER Only retrieve messages posted by POSTER --quiet No non-error messages displayed while running --recs BOARD [all] Update recommendation counters only @@ -450,7 +545,7 @@ $start = $start - 1; $fl = "board_id,board_name,ticker_id,low_msg,high_msg,last_msg"; $vl = "$board_id,'$board_name','$ticker_id',$start,$end,$start"; -$sql = "insert into " . DBN . ".board_ids($fl) values($vl)"; +$sql = "insert into board_ids($fl) values($vl)"; if (!db_query($sql)) { $msg = "ABORT: initializeBoard() failed. The failed query is "; $msg .= "listed below:\n"; @@ -467,11 +562,12 @@ *****************************************************************************/ function initializeDatabase() { -$msg = "INFO: Initializing database:\n"; +$msg = "INFO: Initializing database: " . DBN . "\n"; if (!@db_connect(DBH,"",DBU,DBP)) { $msg .= "ABORT: Cannot connect to database host\n"; - die($msg); + echo $msg; + return false; } $board_ids = "CREATE TABLE " . DBN . ".board_ids ( @@ -527,7 +623,8 @@ $msg = "ABORT: initializeDatabase() failed. The failed query is "; $msg .= "listed below:\n"; $msg .= wordwrap($query) . "\n"; - die($msg); + echo $msg; + return false; } } @@ -540,20 +637,35 @@ *****************************************************************************/ function listGaps($board_name='') { +if ($board_name == '') { + echo "What board do you want to list gaps for?"; + return false; + } +if (!checkDatabase()) { + echo "checkStatus(): checkDatabase() failure\n"; + return false; + } $info_ar = queryBoardInfo($board_name,false); -if ($info_ar === false or !is_array($info_ar)) { - die("ABORT: could not look up board: $board_name\n"); +if ($info_ar === false or !is_array($info_ar)) { + echo "queryBoardInfo() failed\n"; + return false; } $board_id = addslashes($info_ar['board_id']); -$sql = "select message_id from " . DBN . ".message_ids "; +if (checkLock($board_id)) { + echo "WARNING: board $board_name is locked - results may be skewed\n"; + } + +$sql = "select message_id from message_ids "; $sql .= "where board_id=$board_id order by message_id"; if (!$qid = db_query($sql)) { - die("ABORT: could not query message ids\n"); + echo "ABORT: could not query message ids\n"; + return false; } $num = db_num_rows($qid); if ($num < 1) { - die("ABORT: no rows returned by query\n"); + echo "ABORT: no rows returned by query\n"; + return false; } defined('GAPMAX') ? $gapmax = GAPMAX : $gapmax = 10; @@ -566,7 +678,6 @@ for($j=0; $j < $num; $j++) { $mid = db_result($qid,$j,0); - $gap = $mid - $last; if ( $gap > $gapmax ) { $gaps[] = "$last - $mid ($gap)"; @@ -581,7 +692,8 @@ } } echo "highest: $highest\n"; -exit(); + +return true; } @@ -608,12 +720,240 @@ /***************************************************************************** * * *****************************************************************************/ +function mergeBoards($board_name='',$merge_db='',$start='',$end='') { +if ($board_name == '') { + echo "What board do you want to merge?\n"; + return false; + } +if ($merge_db == '') { + echo "No merge database specified\n"; + return false; + } +if (!checkDatabase()) { + echo "checkStatus(): checkDatabase() failure\n"; + return false; + } +$info_ar = queryBoardInfo($board_name,false); +if ($info_ar === false or !is_array($info_ar)) { + echo "queryBoardInfo() failed\n"; + return false; + } +$board_id = addslashes($info_ar['board_id']); + +if (checkLock($board_id)) { + echo "ABORT: board $board_name is locked\n"; + return false; + } +// Verify the 2nd database can be connected to and is sane. +if (!checkDatabase(DBH,$merge_db,DBU,DBP)) { + echo "Cannot connect to database: $merge_db\n"; + return false; + } + +$m_info_ar = queryBoardInfo($board_name,false); +if ($m_info_ar === false or !is_array($m_info_ar)) { + echo "board missing from the merge database\n"; + return false; + } +$m_board_id = addslashes($m_info_ar['board_id']); + +if ($board_id !== $m_board_id) { + echo "board id mismatch\n"; + return false; + } +if (checkLock($m_board_id)) { + echo "ABORT: the merge database is locked\n"; + } + +// Lock and load! +if (!toggleLock($m_board_id,1)) { + echo "ABORT: cannot lock merge database.\n"; + return false; + } +if (!checkDatabase()) { + echo "checkStatus(): checkDatabase() failure\n"; + return false; + } +if (!toggleLock($board_id,1)) { + echo "ABORT: cannot lock database.\n"; + return false; + } + +// +// get list of posters from each db +// +$real_poster_ar = array(); +$merge_poster_ar = array(); + +$sql = "select distinct poster_id,poster_name from poster_ids"; +if (!$qid = db_query($sql)) { + echo "Could not query posters from database: " . DBN . "\n"; + toggleLock($board_id,0); + checkDatabase(DBH,$merge_db,DBU,DBP); + toggleLock($m_board_id,0); + return false; + } + +$num = db_num_rows($qid); +if ($num > 0) { + for ($j = 0; $j < $num; $j++) { + $poster_id = db_result($qid,$j,0); + $poster_name = db_result($qid,$j,1); + $real_poster_ar[$poster_name] = $poster_id; + } + db_free_result($qid); + } + +// Verify the 2nd database can be connected to and is sane. +if (!checkDatabase(DBH,$merge_db,DBU,DBP)) { + echo "Cannot connect to merge database\n"; + toggleLock($m_board_id,0); + checkDatabase(); + toggleLock($board_id,0); + return false; + } +$sql = "select distinct poster_id,poster_name from poster_ids"; +if (!$qid = db_query($sql)) { + echo "Could not query posters from database: $merge_db\n"; + toggleLock($m_board_id,0); + checkDatabase(); + toggleLock($board_id,0); + return false; + } +$num = db_num_rows($qid); +if ($num < 1) { + echo "No poster_ids in the merge database\n"; + toggleLock($m_board_id,0); + checkDatabase(); + toggleLock($board_id,0); + return false; + } +for ($j = 0; $j < $num; $j++) { + $poster_id = db_result($qid,$j,0); + $poster_name = db_result($qid,$j,1); + $merge_poster_ar[$poster_id] = $poster_name; + } +db_free_result($qid); + +// +// Need to change this in the future to loop through with a limit, +// not every machine will be able to load 100,000+ messages in an +// array. +// +$sql = "select message_id,poster_id,parent_id,thread_id,message_date,"; +$sql .= "message_subject,message_recs,message_text "; +$sql .= "from message_ids order by poster_id"; +if (!$qid = db_query($sql)) { + echo "Cannot query merge db for messages\n"; + return false; + } +$num = db_num_rows($qid); +if ($num < 1) { + toggleLock($m_board_id,0); + checkDatabase(); + toggleLock($board_id,0); + echo "No messages found in the merge database\n"; + return false; + } +$msg_ar = array(); +for($j=0; $j < $num; $j++) { + $msg_ar[] = db_fetch_array($qid); + } +db_free_result($qid); + +// develop translation arrays for the poster ids +if (!checkDatabase()) { + toggleLock($m_board_id,0); + echo "Cannot connect to database: " . DBN . "\n"; + return false; + } + +echo "Merging messages: Board($board_name) Messages($num)\n"; + +foreach($msg_ar as $row_ar) { + $mid = $row_ar['message_id']; + if (messageIdExists($board_id,$mid)) { + echo "SKIPPING: message exists: $mid\n"; + continue; + } + $mpid = $row_ar['poster_id']; + $parent = $row_ar['parent_id']; + $tid = $row_ar['thread_id']; + $md = $row_ar['message_date']; + $ms = addslashes($row_ar['message_subject']); + $mr = $row_ar['message_recs']; + $mt = addslashes($row_ar['message_text']); + if (!array_key_exists($mpid,$merge_poster_ar)) { + echo "SKIPPING: cannot locate merge poster name for pid $mpid\n"; + continue; + } else { + $merge_poster_name = $merge_poster_ar[$mpid]; + } + if (!array_key_exists($merge_poster_name,$real_poster_ar)) { + // create the new poster and append it to the array + $new_poster_id = createPosterId($merge_poster_name); + if ($new_poster_id === false or !is_numeric($new_poster_id)) { + $msg = "SKIPPING: could not create poster id for merge user: "; + $msg .= "$merge_poster_name\n"; + echo $msg; + continue; + } else { + $rpid = $new_poster_id; + $real_poster_ar[$merge_poster_name] = $new_poster_id; + } + } else { + $rpid = $real_poster_ar[$merge_poster_name]; + } + $sql = "insert into message_ids(message_id,board_id,poster_id,parent_id,"; + $sql .= "thread_id,message_date,message_subject,message_recs,"; + $sql .= "message_text) values($mid,$board_id,$rpid,$parent,$tid,'$md',"; + $sql .= "'$ms',$mr,'$mt')"; + if (QUIET !== true) { + echo "ID: $mid P:$merge_poster_name S:$ms R:$mr\n"; + } + if (DRYRUN !== true) { + if (!db_query($sql)) { + $msg = "\nMessage $mid SQL Error: " . mysql_error() . "\n\n"; + $msg .= "$sql\n\n"; + die($msg); + } + } + } + +// update counters +if (DRYRUN !== true) { + $sql = "select max(message_id) from message_ids"; + if (!$qid = db_query($sql)) { + echo "WARNING: could not update counters\n"; + } else { + $high = db_result($qid,0,0); + if (!updateCounters($board_id,$high)) { + echo "WARNING: could not update counters\n"; + } else { + echo "Updated counters\n"; + } + } + } + +// unlock everything +checkDatabase(DBH,$merge_db,DBU,DBP); +toggleLock($m_board_id,0); +checkDatabase(); +toggleLock($board_id,0); + +return true; + +} + +/***************************************************************************** + * * + *****************************************************************************/ function messageIdExists($board_id='',$message_id='') { $board_id = addslashes($board_id); $message_id = addslashes($message_id); -$sql = "select message_id from " . DBN . ".message_ids +$sql = "select message_id from message_ids where message_id=$message_id and board_id=$board_id limit 1"; if (!$qid = db_query($sql)) { return false; } if (db_num_rows($qid) == 1) { @@ -1035,7 +1375,7 @@ $poster_name = addslashes($poster_name); -$sql = "select poster_id from " . DBN . ".poster_ids +$sql = "select poster_id from poster_ids where poster_name='$poster_name' limit 1"; if (!$qid = db_query($sql)) { return false; } if (db_num_rows($qid) == 1) { @@ -1140,13 +1480,13 @@ $fl .= "message_date,message_subject,message_recs,message_text"; $vl = "$message_id,$board_id,$poster_id,$parent_id,$thread_id,"; $vl .= "'$ds','$subject',$msg_recs,'$msgtext'"; - $sql = "insert into " . DBN . ".message_ids($fl)\nvalues($vl)"; + $sql = "insert into message_ids($fl)\nvalues($vl)"; if (!db_query($sql)) { echo "ERROR: ID: $message_id: insert\n"; return false; } } else { - $sql = "update " . DBN . ".message_ids set board_id=$board_id"; + $sql = "update message_ids set board_id=$board_id"; $sql .= ",poster_id=$poster_id,parent_id=$parent_id,"; $sql .= "thread_id=$thread_id,message_date='$ds',"; $sql .= "message_text='$msgtext',message_subject='$subject',"; @@ -1173,158 +1513,31 @@ /***************************************************************************** * * *****************************************************************************/ -function processRecommendations($board_id,$ticker_id,$start='',$end='') { +function queryBoardInfo($board_name='',$initialize=true) { -global $board, $info_ar; +if ($board_name == '') { return false; } +$board_name = addslashes($board_name); -// Until we can figure out how long recommendations are allowed to -// be updated on yahoo boards, go back 500 messages as an arbitrary -// number. -if (!is_numeric($start) and !is_numeric($end)) { - $end = $info_ar['last_msg']; - if ($end <= 500) { - $start = 1; +if (!($initialize === true || $initialize === false)) { return false; } + +$sql = "select board_id,ticker_id,low_msg,high_msg,last_msg,locked +from board_ids where board_name='$board_name' limit 1"; +if (!$qid = db_query($sql)) { die(mysql_error()); return false; } +$num = db_num_rows($qid); +if ($num !== 1) { + // Attempt to initialize the board. Hmm, loopy? + if (! $initialize === true) { return false; } + echo "auto initializing board: $board_name\n"; + if (initializeBoard($board_name)) { + return queryBoardInfo($board_name,false); } else { - $start = $end - 500; + return false; } } -if (!is_numeric($start)) { - $start = $info_ar['last_msg'] - 500; - if ($start < 1) { $start = 1; } - } -if (!is_numeric($end)) { - $end = $info_ar['last_msg']; - } -if (($start > $end) or ($end > $info_ar['last_msg'])) { - toggleLock($board_id,0); - die("ABORT: invalid start($start)/end($end)\n"); - } +return db_fetch_array($qid); -// get list of existing message ids -$board_id = addslashes($board_id); -$start = addslashes($start); -$end = addslashes($end); -$sql = "select message_id from " . DBN . ".message_ids "; -$sql .= "where board_id=$board_id and message_id "; -$sql .= "between $start and $end order by message_id"; -if (!$qid = db_query($sql)) { - echo "ERROR: sql failure:\n$sql\n"; - return false; - } -$num = db_num_rows($qid); -if ($num < 1) { return false; } -$msg_ar = array(); -for($j=0; $j < $num; $j++) { - $msg_ar[] = db_result($qid,$j,0); - } -db_free_result($qid); - -echo "Updating recommendations: Board($board) Start($start) End($end)\n"; -foreach($msg_ar as $j) { - if (!$page = retrieveMsg($board_id,$ticker_id,$j)) { - echo "WARNING: ID: $j retrieval failure\n"; - continue; - } - if (DUMPHTML === true) { - if (!$fd = fopen("$j.html","w")) { - echo "WARNING: cannot open file: $j.html\n"; - } else { - foreach($page as $line) { - if (!fwrite($fd,$line . "\n")) { - echo "WARNING: could not write to file: $j.html\n"; - fclose($fd); - break; - } - } - fclose($fd); - if (QUIET !== true) { - echo "INFO: wrote $j.html\n"; - } - } - } - // account for yahoo outages - $maxunavail = 0; - $sleepmax = 3600; - $sleep = 10; - while (parseMsgUnavailable($page) === true) { - echo "WARNING: ID: $j unavailable\n"; - $maxunavail++; - if ($maxunavail > MAXMISSES) { - toggleLock($board_id,0); - die("ABORT: Hit MAXMISSES " . MAXMISSES . "\n"); - } - if ($sleep > $sleepmax) { - $sleep = 10; - } else { - $sleep = $sleep * 2; - } - if (QUIET !== true) { echo "INFO: Sleeping $sleep\n"; } - sleep($sleep); - } - if (!parseMsgExists($page)) { - echo "WARNING: ID: $j missing\n"; - $maxmisses++; - if ($maxmisses > MAXMISSES) { - toggleLock($board_id,0); - die("ABORT: Hit MAXMISSES " . MAXMISSES . ".\n"); - } - continue; - } else { - $maxmisses = 0; - } - - $msg_recs = parseMsgRecs($page); - if ($msg_recs === false) { - echo "ERROR: ID: $message_id: recs\n"; - continue; - } - - if (DRYRUN !== true) { - $msg_recs = addslashes($msg_recs); - $sql = "update " . DBN . ".message_ids "; - $sql .= "set message_recs=$msg_recs "; - $sql .= "where board_id=$board_id and message_id=$j limit 1"; - if (!db_query($sql)) { - echo "ERROR: ID: $j: update rec\n"; - } - } - if (QUIET !== true) { - echo "ID: $j R: $msg_recs\n"; - } - } - -return true; - -} - -/***************************************************************************** - * * - *****************************************************************************/ -function queryBoardInfo($board_name='',$initialize=true) { - -if ($board_name == '') { return false; } -$board_name = addslashes($board_name); - -if (!($initialize === true || $initialize === false)) { return false; } - -$sql = "select board_id,ticker_id,low_msg,high_msg,last_msg,locked -from " . DBN . ".board_ids where board_name='$board_name' limit 1"; -if (!$qid = db_query($sql)) { die(mysql_error()); return false; } -$num = db_num_rows($qid); -if ($num !== 1) { - // Attempt to initialize the board. Hmm, loopy? - if (! $initialize === true) { return false; } - if (initializeBoard($board_name)) { - return queryBoardInfo($board_name,false); - } else { - return false; - } - } - -return db_fetch_array($qid); - -} +} /***************************************************************************** * * @@ -1333,7 +1546,7 @@ $poster_name = addslashes($poster_name); -$sql = "select poster_id from " . DBN . ".poster_ids +$sql = "select poster_id from poster_ids where poster_name='$poster_name' limit 1"; if (!$qid = db_query($sql)) { return false; } if (db_num_rows($qid) == 1) { @@ -1496,12 +1709,295 @@ if (! $msg == '') { $text = "ABORT: sanityCheck() failed:\n"; $text .= $msg; - die($text); + echo $text; + return false; + } + +return true; + +} + +/***************************************************************************** + * * + *****************************************************************************/ +function suckMessages($board_name='',$start='',$end='') { + +if ($board_name == '') { + echo "What board do you want to suck?\n"; + return false; + } +if (!checkDatabase()) { + echo "checkDatabase() failure\n"; + return false; + } +// create the board if it does not exist +$info_ar = queryBoardInfo($board_name,true); +if ($info_ar === false or !is_array($info_ar)) { + echo "queryBoardInfo() failed\n"; + return false; } else { + $board_id = $info_ar['board_id']; + $ticker_id = $info_ar['ticker_id']; + } +if (checkLock($board_id)) { + echo "ABORT: board $board_name is locked\n"; + return false; + } + +// Sanitize start/end ranges first. +$error = false; +$errmsg = ''; +if (!empty($start) and !is_numeric($start)) { + $error = true; + $errmsg .= "Invalid start message number\n"; + } +if (!empty($end) and !is_numeric($end)) { + $error = true; + $errmsg .= "Invalid end message number\n"; + } + +// Figure out where to start/end if it was not specified on command line. +if (!is_numeric($start)) { + $start = $info_ar['last_msg'] + 1; + } +if (!is_numeric($end)) { + if (!$page = retrieveList($board_name)) { + echo "ABORT: cannot retrieve page list.\n"; + return false; + } + $end = parseHighMessage($page); + if (!is_numeric($end)) { + echo "ABORT: cannot determine high message number.\n"; + return false; + } + } +if ($start > $end) { + echo "ABORT: invalid start($start)/end($end)\n"; + return false; + } + +// Lock and load! +if (!toggleLock($board_id,1)) { + echo "ABORT: cannot lock board $board.\n"; + return false; + } + +echo "Retrieving messages: Board($board_name) Start($start) End($end)\n"; +for($j = $start; $j <= $end; $j++) { + if (!$page = retrieveMsg($board_id,$ticker_id,$j)) { + echo "WARNING: ID: $j retrieval failure\n"; + continue; + } + if (DUMPHTML === true) { + if (!$fd = fopen("$j.html","w")) { + echo "WARNING: cannot open file: $j.html\n"; + } else { + foreach($page as $line) { + if (!fwrite($fd,$line . "\n")) { + echo "WARNING: could not write to file: $j.html\n"; + fclose($fd); + break; + } + } + fclose($fd); + if (QUIET !== true) { + echo "INFO: wrote $j.html\n"; + } + } + } + // account for yahoo outages + $maxunavail = 0; + $sleepmax = 3600; + $sleep = 10; + while (parseMsgUnavailable($page) === true) { + echo "WARNING: ID: $j unavailable\n"; + $maxunavail++; + if ($maxunavail > MAXMISSES) { + toggleLock($board_id,0); + echo "ABORT: Hit MAXMISSES: " . MAXMISSES . "\n"; + return false; + } + if ($sleep > $sleepmax) { + $sleep = 10; + } else { + $sleep = $sleep * 2; + } + if (QUIET !== true) { echo "INFO: Sleeping $sleep\n"; } + sleep($sleep); + } + if (!parseMsgExists($page)) { + echo "WARNING: ID: $j missing\n"; + $maxmisses++; + if ($maxmisses > MAXMISSES) { + toggleLock($board_id,0); + echo "ABORT: Hit MAXMISSES " . MAXMISSES . ".\n"; + return false; + } + continue; + } else { + $maxmisses = 0; + } + processMessage($board_id,$j,$page); + } + +return true; + +} + +/***************************************************************************** + * * + *****************************************************************************/ +function suckRecommendations($board_name='',$start='',$end='') { + +if ($board_name == '') { + echo "What board name do you want to suck?\n"; + return false; + } +if (!checkDatabase()) { + echo "checkDatabase() failure\n"; + return false; + } + +$info_ar = queryBoardInfo($board_name,false); +if ($info_ar === false or !is_array($info_ar)) { + echo "queryBoardInfo() failed\n"; + return false; + } else { + $board_id = $info_ar['board_id']; + $ticker_id = $info_ar['ticker_id']; + } +if (checkLock($board_id)) { + echo "ABORT: board $board_name is locked\n"; + return false; + } +if (!toggleLock($board_id,1)) { + echo "ABORT: cannot lock board $board.\n"; + return false; + } +if (RECSALL === true) { + $start = 1; + $end = $info_ar['high_msg']; + } + +$msg = ''; +// Until we can figure out how long recommendations are allowed to +// be updated on yahoo boards, go back 500 messages as an arbitrary +// number. +if (!is_numeric($start) and !is_numeric($end)) { + $end = $info_ar['last_msg']; + if ($end <= 500) { + $start = 1; + } else { + $start = $end - 500; + } + } +if (!is_numeric($start)) { + $start = $info_ar['last_msg'] - 500; + if ($start < 1) { $start = 1; } + } +if (!is_numeric($end)) { + $end = $info_ar['last_msg']; + } +if (($start > $end) or ($end > $info_ar['last_msg'])) { + echo "invalid start($start)/end($end)\n"; + return false; + } + +// get list of existing message ids +$board_id = addslashes($board_id); +$start = addslashes($start); +$end = addslashes($end); +$sql = "select message_id from " . DBN . ".message_ids "; +$sql .= "where board_id=$board_id and message_id "; +$sql .= "between $start and $end order by message_id"; +if (!$qid = db_query($sql)) { + echo "ERROR: sql failure:\n$sql\n"; + return false; + } +$num = db_num_rows($qid); +if ($num < 1) { return false; } +$msg_ar = array(); +for($j=0; $j < $num; $j++) { + $msg_ar[] = db_result($qid,$j,0); + } +db_free_result($qid); + +echo "Updating recommendations: Board($board_name) Start($start) End($end)\n"; +foreach($msg_ar as $j) { + if (!$page = retrieveMsg($board_id,$ticker_id,$j)) { + echo "WARNING: ID: $j retrieval failure\n"; + continue; + } + if (DUMPHTML === true) { + if (!$fd = fopen("$j.html","w")) { + echo "WARNING: cannot open file: $j.html\n"; + } else { + foreach($page as $line) { + if (!fwrite($fd,$line . "\n")) { + echo "WARNING: could not write to file: $j.html\n"; + fclose($fd); + break; + } + } + fclose($fd); + if (QUIET !== true) { + echo "INFO: wrote $j.html\n"; + } + } + } + // account for yahoo outages + $maxunavail = 0; + $sleepmax = 3600; + $sleep = 10; + while (parseMsgUnavailable($page) === true) { + echo "WARNING: ID: $j unavailable\n"; + $maxunavail++; + if ($maxunavail > MAXMISSES) { + echo "ABORT: Hit MAXMISSES " . MAXMISSES . "\n"; + return false; + } + if ($sleep > $sleepmax) { + $sleep = 10; + } else { + $sleep = $sleep * 2; + } + if (QUIET !== true) { echo "INFO: Sleeping $sleep\n"; } + sleep($sleep); + } + if (!parseMsgExists($page)) { + echo "WARNING: ID: $j missing\n"; + $maxmisses++; + if ($maxmisses > MAXMISSES) { + echo "ABORT: Hit MAXMISSES " . MAXMISSES . ".\n"; + return false; + } + continue; + } else { + $maxmisses = 0; + } + + $msg_recs = parseMsgRecs($page); + if ($msg_recs === false) { + echo "ERROR: ID: $message_id: recs\n"; + continue; + } + + if (DRYRUN !== true) { + $msg_recs = addslashes($msg_recs); + $sql = "update " . DBN . ".message_ids "; + $sql .= "set message_recs=$msg_recs "; + $sql .= "where board_id=$board_id and message_id=$j limit 1"; + if (!db_query($sql)) { + echo "ERROR: ID: $j: update rec\n"; + } + } if (QUIET !== true) { - echo "INFO: sanityCheck() passed\n"; + echo "ID: $j R: $msg_recs\n"; } } + +return true; + } /***************************************************************************** @@ -1509,13 +2005,19 @@ *****************************************************************************/ function toggleLock($board_id='',$lock=1) { -if ($board_id == '' or !is_numeric($board_id)) { return false; } -if (!$lock == 1 and !$lock == 0) { return false; } +if ($board_id == '') { return false; } +if (!$lock == 1 and !$lock == 0) { return false; } $board_id = addslashes($board_id); $lock = addslashes($lock); -$sql = "update " . DBN . ".board_ids set locked=$lock -where board_id=$board_id limit 1"; + +if (is_numeric($board_id)) { + $where = "where board_id=$board_id"; + } else { + $where = "where board_name='$board_id'"; + } + +$sql = "update board_ids set locked=$lock $where"; if (!$qid = db_query($sql)) { return false; } if (! db_affected_rows() == 1) { return false; } @@ -1532,7 +2034,7 @@ $board_id = addslashes($board_id); $message_id = addslashes($message_id); -$sql = "select low_msg,high_msg from " . DBN . ".board_ids +$sql = "select low_msg,high_msg from board_ids where board_id=$board_id limit 1"; if (!$qid = db_query($sql)) { return false; } if (db_num_rows($qid) !== 1) { return false; } @@ -1541,7 +2043,7 @@ $low = $row_ar['low_msg']; $high = $row_ar['high_msg']; -$sql = "update " . DBN . ".board_ids set last_msg=$message_id"; +$sql = "update board_ids set last_msg=$message_id"; if ($message_id < $low or $low == 0) { $sql .= ",low_msg=$message_id"; } @@ -1552,7 +2054,7 @@ if (!db_query($sql)) { $msg = "ABORT: SQL Error:\n" . mysql_error() . "\n"; - die($msg); + echo $msg; return false; } diff -u -r -N yasuck-0.0.5.orig/includes/globals.php yasuck-0.0.5/includes/globals.php --- yasuck-0.0.5.orig/includes/globals.php 2004-09-24 11:45:16.000000000 -0500 +++ yasuck-0.0.5/includes/globals.php 2004-09-29 10:37:31.228677008 -0500 @@ -34,6 +34,7 @@ define(GAPMAX,15); // debug settings +define(DEBUG,false); define(DEBUGUA,false); // includes diff -u -r -N yasuck-0.0.5.orig/yasuck yasuck-0.0.5/yasuck --- yasuck-0.0.5.orig/yasuck 2004-09-24 10:45:38.000000000 -0500 +++ yasuck-0.0.5/yasuck 2004-09-29 14:26:26.290630208 -0500 @@ -7,111 +7,98 @@ *****************************************************************************/ require_once("includes/globals.php"); // process command line arguments -checkArgs($argv); -sanityCheck(); -CheckDatabase(); - -// query the sid -$info_ar = queryBoardInfo($board,true); -if ($info_ar === false or !is_array($info_ar)) { - die("ABORT: cannot retrieve information for board: $board\n"); - } -$board_id = $info_ar['board_id']; -$ticker_id = $info_ar['ticker_id']; - -// locking -if (checkLock($board_id)) { die("ABORT: board $board is locked\n"); } -if (!toggleLock($board_id,1)) { die("ABORT: cannot lock board $board.\n"); } - -// take care of rec refresh updates -if (RECSONLY === true) { - if (RECSALL === true) { - $start = 1; - $end = $info_ar['high_msg']; - } - processRecommendations($board_id,$ticker_id,$start,$end); - toggleLock($board_id,0); - echo "\n"; - exit(); - } - -// figure out where to start/end -if (!is_numeric($start)) { - $start = $info_ar['last_msg'] + 1; - } -if (!is_numeric($end)) { - if (!$page = retrieveList($board)) { - toggleLock($board_id,0); - die("ABORT: cannot retrieve page list.\n"); - } - $end = parseHighMessage($page); - if (!is_numeric($end)) { - toggleLock($board_id,0); - die("ABORT: cannot determine high message number.\n"); - } - } - -if ($start > $end) { - toggleLock($board_id,0); - die("ABORT: invalid start($start)/end($end)\n"); +$action = ''; +if (! checkArgs($argv) === true) { die(helpMessage()); } +if (!sanityCheck() === true) { die("ABORT: sanityCheck() failed\n"); } + +switch(ACTION) { + case "drop": + $rc = dropBoard(BOARD); + if ($rc === true) { + $status = "Done (success)\n"; + } else { + $status = "Done (failure)\n"; + } + echo $status; + exit(); + break; + case "get": + $rc = suckMessages(BOARD,START,END); + if ($rc === true) { + $status = "Done (success)\n"; + toggleLock(BOARD,0); + } else { + $status = "Done (failure)\n"; + } + echo $status; + exit(); + break; + case "help": + die(helpMessage()); + break; + case "init": + $rc = initializeDatabase(); + if ($rc === true) { + $status = "Done (success)\n"; + } else { + $status = "Done (failure)\n"; + } + echo $status; + exit(); + break; + case "listgaps": + $rc = listGaps(BOARD); + if ($rc === true) { + $status = "Done (success)\n"; + } else { + $status = "Done (failure)\n"; + } + echo $status; + exit(); + break; + case "merge": + $rc = mergeBoards(BOARD,MERGEDB,START,END); + if ($rc === true) { + $status = "Done (success)\n"; + } else { + $status = "Done (failure)\n"; + } + echo $status; + exit(); + break; + case "refresh": + $rc = suckRecommendations(BOARD,START,END); + if ($rc === true) { + $status = "Done (success)\n"; + toggleLock(BOARD,0); + } else { + $status = "Done (failure)\n"; + } + echo $status; + exit(); + break; + case "sanity": + $rc = sanityCheck(); + if ($rc === true) { + $status = "Done (success)\n"; + } else { + $status = "Done (failure)\n"; + } + echo $status; + exit(); + break; + case "status": + if (checkStatus(BOARD) === false) { + die("ABORT: checkStatus() failed\n"); + } + exit(); + break; + case "unlock": + die(lockOverride(BOARD)); + break; + default: + die(helpMessage()); + break; } -// start sucking -echo "Retrieving messages: Board($board) Start($start) End($end)\n"; -for($j = $start; $j <= $end; $j++) { - if (!$page = retrieveMsg($board_id,$ticker_id,$j)) { - echo "WARNING: ID: $j retrieval failure\n"; - continue; - } - if (DUMPHTML === true) { - if (!$fd = fopen("$j.html","w")) { - echo "WARNING: cannot open file: $j.html\n"; - } else { - foreach($page as $line) { - if (!fwrite($fd,$line . "\n")) { - echo "WARNING: could not write to file: $j.html\n"; - fclose($fd); - break; - } - } - fclose($fd); - if (QUIET !== true) { - echo "INFO: wrote $j.html\n"; - } - } - } - // account for yahoo outages - $maxunavail = 0; - $sleepmax = 3600; - $sleep = 10; - while (parseMsgUnavailable($page) === true) { - echo "WARNING: ID: $j unavailable\n"; - $maxunavail++; - if ($maxunavail > MAXMISSES) { - toggleLock($board_id,0); - die("ABORT: Hit MAXMISSES: " . MAXMISSES . "\n"); - } - if ($sleep > $sleepmax) { - $sleep = 10; - } else { - $sleep = $sleep * 2; - } - if (QUIET !== true) { echo "INFO: Sleeping $sleep\n"; } - sleep($sleep); - } - if (!parseMsgExists($page)) { - echo "WARNING: ID: $j missing\n"; - $maxmisses++; - if ($maxmisses > MAXMISSES) { - toggleLock($board_id,0); - die("ABORT: Hit MAXMISSES " . MAXMISSES . ".\n"); - } - continue; - } else { - $maxmisses = 0; - } - processMessage($board_id,$j,$page); - } -toggleLock($board_id,0); -if (QUIET !== true) { echo "Done\n"; } ?>