<?php
/*
* What rolls down stairs alone or in pairs, Rolls over your neighbor's dog? What's great for a snack and fits on your back?
* It's Log, Log, Log!!
*
* Log class for handling discussion logs from the MUD.
* Mike Williams (2006) for MUD-Con.
*/
define ("RED","<font color=\"#ce0000\">");
define ("WHITE","<font color=\"#FFFFFF\">");
define ("BLACK","<font color=\"black\">");
define ("GRAY","<font color=\"#888888\">");
define ("CLEAR","</font>");
class log {
var $db;
function __construct($db) {
$this->db = $db;
}
/*
* List the channels.
*/
public function listChannels() {
echo "<table id=\"tbl_channels\" cellspacing=0 cellpadding=2>";
echo "<tr><th width=\"20%\">Channel Name</th><th width=\"10%\">Topics</th>";
echo "<th width=\"10%\">Posts</th><th width=\"80%\">Recent Topic</th></tr>";
$sql = "SELECT * FROM `channels`";
if ($result = $this->db->query($sql)) {
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$ch_id = $row['id'];
$ch_name = $row['name'];
$r_topic = $this->oneTopic($ch_id, $this->getRecentTopic($ch_id));
echo "<tr valign=\"top\"><td><a href=\"" . $_SERVER['PHP_SELF'] . "?do=topics&arg1=" . $ch_id . "\">" . $ch_name . "</a></td>";
echo "<td>" . $this->countTopics($ch_id) . "</td>";
echo "<td>" . $this->countPostsInChannel($ch_id) . "</td>";
if (!isset($r_topic['name']))
echo "<td> </td></tr>";
else
echo "<td><em>" . $r_topic['subject'] . "</em> by <strong>" . $r_topic['name'] . "</strong>.</td></tr>";
}
} else {
exit("Database error.");
}
echo "</table><br />";
}
/*
* List the topics in a channel.
*/
public function listTopics($chan_id) {
echo "<ul>";
$sql = "SELECT * FROM `topics` WHERE `chanId`='$chan_id' ORDER BY `name` ASC";
if ($result = $this->db->query($sql)) {
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
foreach($row as $key => $value)
$$key = $value;
echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?do=posts&arg1=" . $chan_id . "&arg2=" . $id . "\">" . $subject . "</a> (" . $this->countPostsInTopic($chanId, $id) . ") ";
echo "by <strong>" . $name . "</strong></li>";
}
} else {
exit("Database error.");
}
echo "</ul>";
if ($result->num_rows < 1)
echo "<strong>No topics have been created in this channel.</strong>";
}
public function listPosts($chan_id, $topic_id) {
$sql = "SELECT * FROM `Posts` WHERE `topicid`='$topic_id' AND `chanId`='$chan_id' ORDER BY `timestamp` ASC";
if ($result = $this->db->query($sql)) {
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
foreach($row as $key => $value)
$$key = $value;
echo RED . "[" . CLEAR . $timestamp . RED . "] " . CLEAR;
echo RED . "[" . CLEAR.$this->channelName($chan_id) . RED . "] [" . CLEAR . "T:" . $topic_id . RED . "][" . CLEAR . "P:" . $id . RED . "]" . CLEAR;
if ($replyid == -1) {
echo " " . $poster . " " . GRAY . "says" . CLEAR . RED . ":" . CLEAR . " " . $msg . "<br>\n";
} else {
$r_topic = $this->onePost($chan_id, $topic_id, $replyid);
echo " In reply to " . GRAY . $r_topic['poster'] . CLEAR.RED . "[" . CLEAR . "P:" . $replyid . RED . "] " . CLEAR . $poster .
" " . GRAY . "says" . CLEAR . RED . ":" . CLEAR . " " . $msg . "<br>\n";
}
}
} else {
exit("Database error.");
}
}
/*
* Return # of topics in a channel.
*/
protected function countTopics($chan_id) {
$sql = "SELECT * FROM `topics` WHERE `chanId`='$chan_id'";
if ($result = $this->db->query($sql)) {
return $result->num_rows;
}
return -1;
}
/*
* Return the # of posts in a given channel.
*/
protected function countPostsInChannel($chan_id) {
$sql = "SELECT * FROM `posts` WHERE `chanId`='$chan_id'";
if ($result = $this->db->query($sql)) {
return $result->num_rows;
}
return -1;
}
/*
* Return the # of posts in a topic.
*/
protected function countPostsInTopic($chan_id, $topic_id) {
$sql = "SELECT * FROM `posts` WHERE `chanId`='$chan_id' AND `topicid`='$topic_id'";
if ($result = $this->db->query($sql)) {
return $result->num_rows;
}
return -1;
}
/*
* Return an array of one post.
*/
protected function onePost($chan_id, $topic_id, $post_id) {
$data = array();
$sql = "SELECT * FROM `posts` WHERE `chanId`='$chan_id' AND `topicid`='$topic_id' AND `id`='$post_id' LIMIT 1";
if ($result = $this->db->query($sql)) {
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
foreach ($row as $key => $value) {
$data[$key] = $value;
}
}
}
return $data;
}
/*
* Return an array of one topic.
*/
protected function oneTopic($chan_id, $topic_id) {
$data = array();
$sql = "SELECT * FROM `topics` WHERE `chanId`='$chan_id' AND `id`='$topic_id' LIMIT 1";
if ($result = $this->db->query($sql)) {
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
foreach ($row as $key => $value) {
$data[$key] = $value;
}
}
}
return $data;
}
/*
* Return the topic id for the most recent topic in a channel.
*/
protected function getRecentTopic($chan_id) {
$sql = "SELECT * FROM `topics` WHERE `chanId`='$chan_id' ORDER BY `id` DESC LIMIT 1";
if ($result = $this->db->query($sql)) {
if ($row = $result->fetch_array(MYSQLI_ASSOC))
return $row['id'];
}
return -1;
}
protected function channelName($chan_id) {
$sql = "SELECT * FROM `channels` WHERE `id`='$chan_id'";
if ($result = $this->db->query($sql)) {
if ($row = $result->fetch_array(MYSQLI_ASSOC))
return $row['name'];
}
return null;
}
/*
* Tally up some numbers.
*/
public function showStats() {
$topics=0;
$posts=0;
$sql = "SELECT * FROM `topics`";
if ($result = $this->db->query($sql)) {
$topics = $result->num_rows;
}
$sql = "SELECT * FROM `posts`";
if ($result = $this->db->query($sql)) {
$posts = $result->num_rows;
}
echo "<br /><strong>Total Topics:</strong> " . $topics . ".<br />";
echo "<strong>Total Posts:</strong> " . $posts . ".<br /><br />";
}
}
?>