max_strip_id() || (int)$comic < 1) { return false; } return $comic; } function validate_panel_id($comic, $panel) { $panels = get_num_panels($comic); if(!ctype_digit((string)$panel) || $panel === false || $panel > $panels || $panel < 1) { return false; } return $panel; } function validate_type_id($type) { if(!ctype_digit((string)$type) || $type < 1 || count_by_type($type) == 0) { return false; } } function get_num_panels($comic) { global $link; if(!validate_comic_id($comic)) { return false; } $rs = mysqli_query($link,'SELECT MAX(panel) FROM transcript WHERE strip = '.(int)$comic); return current(mysqli_fetch_row($rs)); } function build_panel_transcript($comic, $panel) { $query = 'SELECT speaker, speech FROM transcript WHERE strip = '.(int)$comic.' AND panel = '.(int)$panel.' AND speaker NOT LIKE "#%" ORDER BY line'; $qr = query_to_nested($query); return $qr; } function query_to_nested($query) { global $link; $ret = array(); $rs = mysqli_query($link,$query) or die(mysqli_error($link)); while($row = mysqli_fetch_assoc($rs)) { $ret[]= $row; } mysqli_free_result($rs); return $ret; } #Runs a query #Compresses the specified column in the returned columns into a single array function query_to_array($query, $col=0) { global $link; $ret = array(); $rs = mysqli_query($link,$query) or die(mysqli_error($link)); while($row = mysqli_fetch_array($rs)) { $ret[]= $row[0]; } mysqli_free_result($rs); return $ret; } function count_by_type($type) { global $link; $qr = mysqli_query($link,'SELECT COUNT(*) FROM strip WHERE type = '.(int)$type) or die(mysqli_error($link)); return current(mysqli_fetch_row($qr)); } function max_rant_id() { global $link; $qr = mysqli_query($link,'SELECT MAX(id) FROM rant WHERE published < NOW()') or die(mysqli_error($link)); return current(mysqli_fetch_row($qr)); } function max_transcript_strip_id() { global $link; $qr = mysqli_query($link,'SELECT MAX(strip) FROM transcript') or die(mysqli_error($link)); return current(mysqli_fetch_row($qr)); } function max_strip_id() { global $link; $qr = mysqli_query($link,'SELECT MAX(id) FROM strip WHERE published < NOW()') or die(mysqli_error($link)); return current(mysqli_fetch_row($qr)); } function load_strip($id) { global $link; $qr = mysqli_query($link,"SELECT UNIX_TIMESTAMP(s.published) as udate, s.title AS title, media.extension AS ext, s.type AS type, s.book AS book, s.page AS page, DATE_FORMAT(s.published, '%M %D, %Y') AS pubdate FROM media_t media, strip s WHERE s.media = media.id AND s.id = $id") or die(mysqli_error($link)); return mysqli_fetch_assoc($qr); } function load_transcript($id) { global $link; $qr = mysqli_query($link,"SELECT panel, speaker, speech FROM transcript WHERE strip = $id AND (transcript.speaker NOT LIKE \"#%\") ORDER BY panel, line") or die(mysqli_error($link)); return $qr; } function conditional_exit($mtime) { if(!PERFORM_CONDITIONAL_CACHE) return; $f_date = gmdate( 'D, d M Y H:i:s T', $mtime ); header("Last-Modified: $f_date"); if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] == $f_date) { header('HTTP/1.0 304 Not Modified'); exit(0); } } function mt_query($link,$sql) { global $link; $r = mysqli_query($link,$sql); if( !$r ) trigger_error("SQL Error", E_USER_ERROR); return $r; } function mtdie($errno, $errstr, $errfile, $errline, $errcontext) { $extra = ''; switch ($errno) { case E_NOTICE: break; case E_WARNING: // for SQL errors case E_USER_WARNING: case E_USER_NOTICE: case E_CORE_WARNING: case E_COMPILE_WARNING: case E_USER_ERROR: case E_ERROR: case E_PARSE: case E_CORE_ERROR: case E_COMPILE_ERROR: @header('Content-Type: text/html; charset=utf-8'); $message = "$errstr in $errfile at line $errline"; if (strcasecmp('sql', $errstr) == 0 ) { $message .= "\r\nSQL Error " .': ' . mysqli_error($link); } error_log( $message, 0 ); // Log to Syslog $message .= "\r\n\r\nBacktrace:"; $backtrace = array_reverse(debug_backtrace()); $i=2; $message .= "\r\n1: " . $err_context . " at $errfile:$errline"; foreach($backtrace as $k=>$call) { $message .= "\r\n" . str_pad("$i:", $i+4 ) . $call['function'] . '( ' . implode(', ', $call['args']) . ' ) at ' . $call['file'] . ':' . $call['line']; $i++; } $message .= "\r\n"; $message .= "\r\nRequest Details:" . "\r\nscript_url: " . $_SERVER["SCRIPT_URL"] . "\r\nquery_string: " . $_SERVER["QUERY_STRING"] . "\r\nremote_addr: " . $_SERVER["REMOTE_ADDR"] . "\r\nhttp_user_agent: " . $_SERVER["HTTP_USER_AGENT"]; print_r($message); error_log( "Megatokyo Site Error at " .date('Y-m-d H:i'). "\r\n\r\n$message\r\n", 1, SITE_CONTACT ); //, "Subject: Megatokyo Site Errors for " . date('Y-m-d') ); // Log to email // Log to user on screen ?>
- Administrators have been notified, we'll try to have things fixed shortly.
megatokyo the comic - copyright © 2000 - fred gallagher. all rights reserved.
'megatokyo' is a registered trademark of fredart studios llc.