aaaaaa123456789 icon

Acid Logs code

aaaaaa123456789 | PRO | 02/27/12 06:25:53 AM UTC | 0 ⭐ | 416 👁️ | Never ⏰ | []
PHP |

10.06 KB

|

None

|

0 👍

/

0 👎

<?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