<?php
function database_connect() {
$result = 0;
$connection = mysql_connect(/* database host */, /* database user */, /* database pass*/) or $result = 1;
if ($result == 0)
mysql_select_db(/* database schema */, $connection) or $result = 2;
return $result;
}
function get_single_row_result($query) {
$resultset = mysql_query($query);
if (mysql_num_rows($resultset) > 1) $result = true;
else if (mysql_num_rows($resultset) != 1) $result = false;
else $result = mysql_fetch_array($resultset);
mysql_free_result($resultset);
return $result;
}
function get_log_password($logid) {
$logid = (string) (int) $logid;
$query = "SELECT passhash FROM log_header WHERE id = $logid";
$result = get_single_row_result($query);
if (!isset($result['passhash'])) return false;
return $result['passhash'];
}
function get_group_password($groupid) {
$groupid = (string) (int) $groupid;
$query = "SELECT passhash FROM log_group WHERE id = $groupid";
$result = get_single_row_result($query);
if (!isset($result['passhash'])) return false;
return $result['passhash'];
}
function get_logs_in_group($groupid) {
$groupid = (string) (int) $groupid;
$result = mysql_query("SELECT logid FROM log_assoc WHERE groupid = $groupid ORDER BY logid");
$logs = array('count' => 0);
$row = mysql_fetch_array($result);
while (is_array($row)) {
$logs[$logs['count']] = $row['logid'];
$logs['count'] ++;
$row = mysql_fetch_array($result);
}
mysql_free_result($result);
return $logs;
}
function get_log_data($logid) {
$logid = (string) (int) $logid;
$head = get_single_row_result("SELECT * FROM log_header WHERE id = $logid");
if ($head === false) return false;
$data = array(
'number' => $head['id'],
'date' => $head['startdate'],
'time' => $head['starttime'],
'offset' => $head['timeoffset'],
'hasoffset' => ($head['timeoffset'] !== null),
'description' => $head['description'],
'count' => 0
);
$resultset = mysql_query("SELECT * FROM log_data WHERE logid = $logid ORDER BY entryid");
$result = mysql_fetch_array($resultset);
while (is_array($result)) {
$data[$data['count']] = array(
'timestamp' => $result['chattime'],
'sender' => $result['chatter'],
'servermessage' => ($result['chatter'] === null),
'content' => $result['chattext']
);
$data['count'] ++;
$result = mysql_fetch_array($resultset);
}
mysql_free_result($resultset);
return $data;
}
function format_date($datevalue) {
$d = (int) $datevalue;
$day = $d % 100;
$month = ($d / 100) % 100;
$year = (int) ($d / 10000);
switch ($month) {
case 1: $monthname = "Jan"; break;
case 2: $monthname = "Feb"; break;
case 3: $monthname = "Mar"; break;
case 4: $monthname = "Apr"; break;
case 5: $monthname = "May"; break;
case 6: $monthname = "Jun"; break;
case 7: $monthname = "Jul"; break;
case 8: $monthname = "Aug"; break;
case 9: $monthname = "Sep"; break;
case 10: $monthname = "Oct"; break;
case 11: $monthname = "Nov"; break;
case 12: $monthname = "Dec"; break;
default: $monthname = "";
}
$fulldate = $monthname . " " . $day . ", " . $year;
return $fulldate;
}
function format_time($timevalue, $timeoffset) {
if ($timeoffset === null) $timeoffset = 0;
$timeoffset = (int) $timeoffset;
$houroffset = 0;
while (($timeoffset < 0) or ($timeoffset >= 60)) {
if ($timeoffset < 0) {
$houroffset --;
$timeoffset += 60;
} else {
$houroffset ++;
$timeoffset -= 60;
}
}
$n = (int) $timevalue;
$second = $n % 100;
$minute = ($n / 100) % 100;
$minute += $timeoffset;
$hour = (int) ($n / 10000);
$hour += $houroffset;
if ($minute >= 60) {
$minute -= 60;
$hour ++;
} else if ($minute < 0) {
$hour --;
$minute += 60;
}
if ($hour < 0) $hour += 24;
if ($hour >= 24) $hour -= 24;
if ($hour == 0) $hn = 12; else if ($hour > 12) $hn = $hour - 12; else $hn = $hour;
$hm = ($hour < 12) ? "am" : "pm";
$fulltime = $hn . ":" . ($minute < 10 ? "0" : "") . $minute . ":" . ($second < 10 ? "0" : "") . $second . $hm;
return $fulltime;
}
function log_header($logdata) {
$date = format_date($logdata['date']);
$time = format_time($logdata['time'], null);
$timestamp = $date . ', ' . $time;
$lognumber = $logdata['number'];
$text = $logdata['description'];
$text = htmlspecialchars($text);
$result = <<<HTMLcode_end
<font face="Tahoma" size="2">
<h4>Log number $lognumber</h4><br />
<i>$text</i><br />
Log recorded on $timestamp<br />
<br />
<table width="100%">
<col width="10%" align="right" valign="middle" />
<col width="15%" align="left" valign="middle" />
<col width="75%" align="left" valign="baseline" />
<tr>
<th>Timestamp</th>
<th>Chatter</th>
<th>Message</th>
</tr>
HTMLcode_end;
return $result;
}
function log_footer() {
return '</table></font><br /><hr /><br />';
}
function log_tablerow($timestamp, $timeoffset, $servermessage, $chatter, $text) {
$timedata = format_time($timestamp, $timeoffset);
if ($servermessage) {
$message = '<i>' . htmlspecialchars($text) . '</i>';
$chattercell = '<i>(server message)</i>';
} else {
$chattercell = htmlspecialchars($chatter);
$message = htmlspecialchars($text);
}
$tablerow = <<<HTMLcode_end
<tr>
<td>$timedata</td>
<td>$chattercell</td>
<td>$message</td>
</tr>
HTMLcode_end;
return $tablerow;
}
function password_page($basedata) {
$type = $basedata['type'];
$id = $basedata['number'];
return <<<HTMLcode_end
<html>
<head>
<title>Acid Logs -- Password needed!</title>
</head>
<body>
<center>
<b>This logs are password-protected.</b><br />
If you entered a password, you entered the wrong one.<br /><br />
(If you don't know the right one, ask me for it)<br /><br /><br />
<form action="http://logs.acidchat.comuf.com/chatlog.php" method="post">
<input type="hidden" name="type" value="$type" />
<input type="hidden" name="id" value="$id" />
Password: <input type="password" name="password" />
<input type="submit" value="View logs" />
</form>
</center>
</body>
</html>
HTMLcode_end;
}
function error_page() {
return <<<HTMLcode_end
<html>
<head>
<title>Acid Logs -- oops!</title>
</head>
<body>
<center>
<br /><br /><br />
Evil aliens are st-- wait, no, that's PR3.<br />
Well, truth is, we have a little database error.<br />
Just refresh the page, that should fix it. Tell me if it doesn't get fixed.<br />
Thanks!
</center>
</body>
</html>
HTMLcode_end;
}
function get_base_data() {
$type = $_REQUEST['type'];
$id = $_REQUEST['id'];
$pass = $_REQUEST['password'];
if (($type != 'group') and ($type != 'log')) return false;
$id = (int) $id;
if ($id <= 0) return false;
return array (
'type' => $type,
'number' => $id,
'password' => ((string) $pass)
);
}
function check_password($basedata) {
if ($basedata['type'] == 'group')
$passhash = get_group_password($basedata['number']);
else
$passhash = get_log_password($basedata['number']);
if ($passhash === false) return true;
$currpass = md5($basedata['password']);
return ($currpass == $passhash);
}
function log_contents_page($logid) {
$data = get_log_data($logid);
$header = log_header($data);
$content = '';
for ($pos = 0; $pos < $data['count']; $pos ++)
$content .= log_tablerow($data[$pos]['timestamp'], $data['offset'], $data[$pos]['servermessage'],
$data[$pos]['sender'], $data[$pos]['content']);
$footer = log_footer();
$page = $header . "\n" . $content . "\n" . $footer;
return $page;
}
function process_log_page($logid) {
$logdata = log_contents_page($logid);
return <<<HTMLcode_end
<html>
<head>
<title>Acid Logs -- log #$logid</title>
</head>
<body>
$logdata
</body>
</html>
HTMLcode_end;
}
function process_group_page($groupid) {
$groupid = (string) (int) $groupid;
$groupheader = <<<HTMLcode_end
<html>
<head>
<title>Acid Logs -- group #$groupid</title>
</head>
<body>
HTMLcode_end;
$data = get_single_row_result("SELECT * FROM log_group WHERE id = $groupid");
if ($data === false) return false;
$description = $data['description'];
$line1 = "<b>Log group number $groupid</b><br />";
if ($description !== null) $line2 = htmlspecialchars((string) $description);
$dataheader = $line1 . $line2 . "<br /><hr /><br />";
$page = $groupheader . "\n" . $dataheader . "\n";
$logs = get_logs_in_group($groupid);
for ($log = 0; $log < $logs['count']; $log ++)
$page .= log_contents_page($logs[$log]) . "\n";
$page .= "</body></html>";
return $page;
}
function process_required_page($basedata) {
if ($basedata['type'] == 'log')
return process_log_page($basedata['number']);
else
return process_group_page($basedata['number']);
}
function log_not_found() {
return <<<HTMLcode_end
<html>
<head>
<title>Acid Logs -- 404?</title>
<head>
<body>
<center>
<font size="+2"><b>Log not found.</b></font><br /><br />
Well, that's technically not a 404... but whatever.<br />
Make sure you enter the log number correctly, please.<br />
Tell me if a real log doesn't load. Thanks!
</center>
</body>
</html>
HTMLcode_end;
}
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';
echo "\n";
$status = database_connect();
if ($status > 0) die(error_page());
$data = get_base_data();
if ($data === false) die(log_not_found());
$passmatch = check_password($data);
if (!$passmatch) die(password_page($data));
$page = process_required_page($data);
if ($page === false) die(log_not_found());
echo $page;
?>
Comments