function viewcommentary($section, $message = "Interject your own commentary?", $limit = 10, $talkline = "says", $schema = false) { global $session, $REQUEST_URI, $doublepost, $translation_namespace; global $emptypost; // *** DRAGONBG.COM CORE PATCH START *** if ($section) { rawoutput("<a name='{$section}'></a>"); // Let's add a hook for modules to block commentary sections $args = modulehook("blockcommentarea", array("section" => $section)); if (isset($args['block']) && $args['block'] == "yes") { return; } } // *** DRAGONBG.COM CORE PATCH END *** if ($schema === false) { $schema = $translation_namespace; } tlschema("commentary"); $nobios = array("motd.php" => true); if (!array_key_exists(basename($_SERVER['SCRIPT_NAME']), $nobios)) { $nobios[basename($_SERVER['SCRIPT_NAME'])] = false; } if ($nobios[basename($_SERVER['SCRIPT_NAME'])]) { $linkbios = false; } else { $linkbios = true; } if ($message == "X") { $linkbios = true; } if ($doublepost) { output("`\$`bDouble post?`b`0`n"); } if ($emptypost) { output("`\$`bWell, they say silence is a virtue.`b`0`n"); } // *** DRAGONBG.COM CORE PATCH START *** $clanrankcolors = array(CLAN_APPLICANT => "`!", CLAN_MEMBER => "`#", CLAN_OFFICER => "`^", CLAN_LEADER => "`&", CLAN_FOUNDER => "`\$"); $args = modulehook("clanrankcolors", array("clanrankcolors" => $clanrankcolors, "clanid" => $session['user']['clanid'])); $clanrankcolors = $args['clanrankcolors']; // *** DRAGONBG.COM CORE PATCH END *** // Needs to be here because scrolling through the commentary pages, entering a bio, then scrolling again forward // then re-entering another bio will lead to $com being smaller than 0 and this will lead to an SQL error later on. $com = (int) httpget("comscroll"); if ($com < 0) { $com = 0; } $cc = false; if (httpget("comscroll") !== false && (int) $session['lastcom'] == $com + 1) { $cid = (int) $session['lastcommentid']; } else { $cid = 0; } $session['lastcom'] = $com; if ($com > 0 || $cid > 0) { // Find newly added comments. // *** DRAGONBG.COM CORE PATCH START *** $sql = "SELECT COUNT(commentid) AS newadded FROM " . db_prefix("commentary") . " LEFT JOIN " . db_prefix("accounts") . " ON " . db_prefix("accounts") . ".acctid = " . db_prefix("commentary") . ".author WHERE " . ($section ? "section='{$section}' AND " : '') . "(" . db_prefix("accounts") . ".locked=0 or " . db_prefix('accounts') . ".locked is null) AND commentid > '{$cid}'"; $result = db_query($sql); $row = db_fetch_assoc($result); $newadded = $row['newadded']; // *** DRAGONBG.COM CORE PATCH END *** } else { $newadded = 0; } $commentbuffer = array(); if ($cid == 0) { $sql = "SELECT " . db_prefix("commentary") . ".*, " . db_prefix("accounts") . ".name, " . db_prefix("accounts") . ".acctid, " . db_prefix("accounts") . ".clanrank, " . db_prefix("clans") . ".clanshort FROM " . db_prefix("commentary") . " LEFT JOIN " . db_prefix("accounts") . " ON " . db_prefix("accounts") . ".acctid = " . db_prefix("commentary") . ".author LEFT JOIN " . db_prefix("clans") . " ON " . db_prefix("clans") . ".clanid=" . db_prefix("accounts") . ".clanid WHERE " . ($section ? "section='{$section}' AND " : '') . "( " . db_prefix("accounts") . ".locked=0 OR " . db_prefix("accounts") . ".locked is null ) " . "ORDER BY commentid DESC LIMIT " . $com * $limit . ",{$limit}"; // *** DRAGONBG.COM CORE PATCH END *** if ($com == 0 && strstr($_SERVER['REQUEST_URI'], "/moderate.php") !== $_SERVER['REQUEST_URI']) { $result = db_query_cached($sql, "comments-{$section}"); } else { $result = db_query($sql); } while ($row = db_fetch_assoc($result)) { $commentbuffer[] = $row; } } else { // *** DRAGONBG.COM CORE PATCH START *** $sql = "SELECT " . db_prefix("commentary") . ".*, " . db_prefix("accounts") . ".name, " . db_prefix("accounts") . ".acctid, " . db_prefix("accounts") . ".clanrank, " . db_prefix("clans") . ".clanshort FROM " . db_prefix("commentary") . " LEFT JOIN " . db_prefix("accounts") . " ON " . db_prefix("accounts") . ".acctid = " . db_prefix("commentary") . ".author LEFT JOIN " . db_prefix("clans") . " ON " . db_prefix("clans") . ".clanid=" . db_prefix("accounts") . ".clanid WHERE " . ($section ? "section='{$section}' AND " : '') . "( " . db_prefix("accounts") . ".locked=0 OR " . db_prefix("accounts") . ".locked is null ) " . "AND commentid > '{$cid}' " . "ORDER BY commentid ASC LIMIT {$limit}"; // *** DRAGONBG.COM CORE PATCH END *** $result = db_query($sql); while ($row = db_fetch_assoc($result)) { $commentbuffer[] = $row; } $commentbuffer = array_reverse($commentbuffer); } $rowcount = count($commentbuffer); if ($rowcount > 0) { $session['lastcommentid'] = $commentbuffer[0]['commentid']; } $counttoday = 0; $commentbuffer = modulehook("pagecommentary", $commentbuffer); // debug($commentbuffer); for ($i = 0; $i < $rowcount; $i++) { $row = $commentbuffer[$i]; $row['comment'] = comment_sanitize($row['comment']); $commentids[$i] = $row['commentid']; if (date("Y-m-d", strtotime($row['postdate'])) == date("Y-m-d")) { if ($row['name'] == $session['user']['name']) { $counttoday++; } } $x = 0; $ft = ""; for ($x = 0; strlen($ft) < 5 && $x < strlen($row['comment']); $x++) { if (substr($row['comment'], $x, 1) == "`" && strlen($ft) == 0) { $x++; } else { $ft .= substr($row['comment'], $x, 1); } } $link = "bio.php?char=" . $row['acctid'] . "&ret=" . URLEncode($_SERVER['REQUEST_URI']); if (substr($ft, 0, 2) == "::") { $ft = substr($ft, 0, 2); } elseif (substr($ft, 0, 1) == ":") { $ft = substr($ft, 0, 1); } elseif (substr($ft, 0, 3) == "/me") { $ft = substr($ft, 0, 3); } if ($row['clanrank']) { $row['name'] = ($row['clanshort'] > "" ? "{$clanrankcolors[$row['clanrank']]}<`2{$row['clanshort']}{$clanrankcolors[$row['clanrank']]}> `&" : "") . $row['name']; } if ($ft == "::" || $ft == "/me" || $ft == ":") { $x = strpos($row['comment'], $ft); if ($x !== false) { if ($linkbios) { $op[$i] = str_replace("&", "&", htmlentities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0<a href='{$link}' style='text-decoration: none'>\n`&{$row['name']}`0</a>\n`& " . str_replace("&", "&", htmlentities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n"; } else { $op[$i] = str_replace("&", "&", htmlentities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`&{$row['name']}`0`& " . str_replace("&", "&", htmlentities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n"; } $rawc[$i] = str_replace("&", "&", htmlentities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`&{$row['name']}`0`& " . str_replace("&", "&", htmlentities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n"; } } if ($ft == "/game" && !$row['name']) { $x = strpos($row['comment'], $ft); if ($x !== false) { $op[$i] = str_replace("&", "&", htmlentities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`&" . str_replace("&", "&", htmlentities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n"; } } if (!isset($op) || !is_array($op)) { $op = array(); } if (!array_key_exists($i, $op) || $op[$i] == "") { if ($linkbios) { $op[$i] = "`0<a href='{$link}' style='text-decoration: none'>`&{$row['name']}`0</a>`3 says, \"`#" . str_replace("&", "&", htmlentities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`3\"`0`n"; } elseif (substr($ft, 0, 5) == '/game' && !$row['name']) { $op[$i] = str_replace("&", "&", htmlentities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))); } else { $op[$i] = "`&{$row['name']}`3 says, \"`#" . str_replace("&", "&", htmlentities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`3\"`0`n"; } $rawc[$i] = "`&{$row['name']}`3 says, \"`#" . str_replace("&", "&", htmlentities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`3\"`0`n"; } if (!array_key_exists('timestamp', $session['user']['prefs'])) { $session['user']['prefs']['timestamp'] = 0; } $session['user']['prefs']['timeoffset'] = round($session['user']['prefs']['timeoffset'], 1); if ($session['user']['prefs']['timestamp'] == 1) { if (!isset($session['user']['prefs']['timeformat'])) { $session['user']['prefs']['timeformat'] = "[m/d h:ia]"; } $time = strtotime($row['postdate']) + $session['user']['prefs']['timeoffset'] * 60 * 60; $s = date("`7" . $session['user']['prefs']['timeformat'] . "`0 ", $time); $op[$i] = $s . $op[$i]; } elseif ($session['user']['prefs']['timestamp'] == 2) { $s = reltime(strtotime($row['postdate'])); $op[$i] = "`7({$s})`0 " . $op[$i]; } if ($message == "X") { $op[$i] = "`0({$row['section']}) " . $op[$i]; } if ($row['postdate'] >= $session['user']['recentcomments']) { $op[$i] = "<img src='images/new.gif' alt='>' width='3' height='5' align='absmiddle'> " . $op[$i]; } addnav("", $link); $auth[$i] = $row['author']; if (isset($rawc[$i])) { $rawc[$i] = full_sanitize($rawc[$i]); $rawc[$i] = htmlentities($rawc[$i], ENT_QUOTES, getsetting("charset", "ISO-8859-1")); } } $i--; $outputcomments = array(); $sect = "x"; $moderating = false; if ($session['user']['superuser'] & SU_EDIT_COMMENTS && $message == "X") { $moderating = true; } $del = translate_inline("Del"); $scriptname = substr($_SERVER['SCRIPT_NAME'], strrpos($_SERVER['SCRIPT_NAME'], "/") + 1); $pos = strpos($_SERVER['REQUEST_URI'], "?"); $return = $scriptname . ($pos == false ? "" : substr($_SERVER['REQUEST_URI'], $pos)); $one = strstr($return, "?") == false ? "?" : "&"; for (; $i >= 0; $i--) { $out = ""; if ($moderating) { if ($session['user']['superuser'] & SU_EDIT_USERS) { $out .= "`0[ <input type='checkbox' name='comment[{$commentids[$i]}]'> | <a href='user.php?op=setupban&userid=" . $auth[$i] . "&reason=" . rawurlencode($rawc[$i]) . "'>Ban</a> ] "; addnav("", "user.php?op=setupban&userid={$auth[$i]}&reason=" . rawurlencode($rawc[$i])); } else { $out .= "`0[ <input type='checkbox' name='comment[{$commentids[$i]}]'> ] "; } $matches = array(); preg_match("/[(]([^)]*)[)]/", $op[$i], $matches); $sect = trim($matches[1]); if (substr($sect, 0, 5) != "clan-" || $sect == $section) { if (substr($sect, 0, 4) != "pet-") { $out .= $op[$i]; if (!isset($outputcomments[$sect]) || !is_array($outputcomments[$sect])) { $outputcomments[$sect] = array(); } array_push($outputcomments[$sect], $out); } } } else { if ($session['user']['superuser'] & SU_EDIT_COMMENTS) { $out .= "`2[<a href='" . $return . $one . "removecomment={$commentids[$i]}§ion={$section}&returnpath=" . URLEncode($return) . "'>{$del}</a>`2]`0 "; addnav("", $return . $one . "removecomment={$commentids[$i]}§ion={$section}&returnpath=" . URLEncode($return) . ""); } $out .= $op[$i]; if (!array_key_exists($sect, $outputcomments) || !is_array($outputcomments[$sect])) { $outputcomments[$sect] = array(); } array_push($outputcomments[$sect], $out); } } if ($moderating) { $scriptname = substr($_SERVER['SCRIPT_NAME'], strrpos($_SERVER['SCRIPT_NAME'], "/") + 1); addnav("", "{$scriptname}?op=commentdelete&return=" . URLEncode($_SERVER['REQUEST_URI'])); $mod_Del1 = htmlentities(translate_inline("Delete Checked Comments"), ENT_COMPAT, getsetting("charset", "ISO-8859-1")); $mod_Del2 = htmlentities(translate_inline("Delete Checked & Ban (3 days)"), ENT_COMPAT, getsetting("charset", "ISO-8859-1")); $mod_Del_confirm = addslashes(htmlentities(translate_inline("Are you sure you wish to ban this user and have you specified the exact reason for the ban, i.e. cut/pasted their offensive comments?"), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))); $mod_reason = translate_inline("Reason:"); $mod_reason_desc = htmlentities(translate_inline("Banned for comments you posted."), ENT_COMPAT, getsetting("charset", "ISO-8859-1")); // *** DRAGONBG.COM CORE PATCH START *** output_notl("<form action='{$scriptname}?op=commentdelete&return=" . URLEncode($_SERVER['REQUEST_URI']) . "' method='POST' id='comments'>", true); // *** DRAGONBG.COM CORE PATCH END *** output_notl("<input type='submit' class='button' value=\"{$mod_Del1}\">", true); output_notl("<input type='submit' class='button' name='delnban' value=\"{$mod_Del2}\" onClick=\"return confirm('{$mod_Del_confirm}');\">", true); // *** DRAGONBG.COM CORE PATCH START *** $mod_checkall = htmlspecialchars(translate_inline("Check all")); // Check all - by Pr0t3ct0r output_notl('<script type="text/javascript">function checkall() { var isChecked = document.getElementById("CheckAllID").checked var f = document.getElementById("comments") for (var i=0;i<f.length;i++) { if (f.elements[i].type == "checkbox"){ f.elements[i].checked = isChecked } } }</script>', true); output_notl("<input type='checkbox' id='CheckAllID' onclick='checkall()' /> {$mod_checkall}", true); output_notl("`n{$mod_reason} <input name='reason0' id='reason0' size='40' value=\"{$mod_reason_desc}\" onChange=\"document.getElementById('reason').value=this.value;\">", true); // *** DRAGONBG.COM CORE PATCH END *** } //output the comments ksort($outputcomments); reset($outputcomments); $sections = commentarylocs(); $needclose = 0; while (list($sec, $v) = each($outputcomments)) { if ($sec != "x") { output_notl("`n<hr><a href='moderate.php?area=%s'>`b`^%s`0`b</a>`n", $sec, isset($sections[$sec]) ? $sections[$sec] : "({$sec})", true); addnav("", "moderate.php?area={$sec}"); } reset($v); while (list($key, $val) = each($v)) { $args = array('commentline' => $val, 'area' => $section); $args = modulehook("viewcommentary", $args); $val = $args['commentinfo'] . $args['commentline']; output_notl($val, true); } } $sql = "SELECT count(commentid) AS c FROM " . db_prefix("commentary") . " WHERE section='{$section}'"; $r = db_query($sql); $val = db_fetch_assoc($r); $val = round($val['c'] / $limit + 0.5, 0) - 1; rawoutput("<table cellpadding=0 cellspacing=5 width=100%><tr><td valign=\"top\" width=50%>"); // *** AJAX CHAT MOD START *** if (round($limit / 2, 0) - $counttoday < 3) { output("`)(You have %s posts left today)`n`0", round($limit / 2, 0) - $counttoday); } rawoutput('</div>'); // *** AJAX CHAT MOD END *** if ($moderating && $needclose) { modulehook("}collapse"); $needclose = 0; } if ($moderating) { output_notl("`n"); rawoutput("<input type='submit' class='button' value=\"{$mod_Del1}\">"); rawoutput("<input type='submit' class='button' name='delnban' value=\"{$mod_Del2}\" onClick=\"return confirm('{$mod_Del_confirm}');\">"); output_notl("`n%s ", $mod_reason); // *** DRAGONBG.COM CORE PATCH START *** rawoutput("<input name='reason' size='40' id='reason' value=\"{$mod_reason_desc}\" onchange=\"document.getElementById('reason0').value=this.value;\">"); // *** DRAGONBG.COM CORE PATCH END *** rawoutput("</form>"); output_notl("`n"); } if ($session['user']['loggedin']) { $args = modulehook("insertcomment", array("section" => $section)); if (array_key_exists("mute", $args) && $args['mute'] && !($session['user']['superuser'] & SU_EDIT_COMMENTS)) { output_notl("%s", $args['mutemsg']); } elseif ($counttoday < $limit / 2 || $session['user']['superuser'] & ~SU_DOESNT_GIVE_GROTTO || !getsetting('postinglimit', 1)) { if ($message != "X") { $message = "`n`@{$message}`n"; output($message); talkform($section, $talkline, $limit, $schema); } } else { $message = "`n`@{$message}`n"; output($message); output("Sorry, you've exhausted your posts in this section for now.`0`n"); } } $jump = false; if (!isset($session['user']['prefs']['nojump']) || $session['user']['prefs']['nojump'] == false) { $jump = true; } //new-style commentary display with page numbers if (!$cc) { db_free_result($result); } tlschema(); if ($needclose) { modulehook("}collapse"); } rawoutput("</td><td valign=\"top\" width=50%>"); $nlink = comscroll_sanitize($REQUEST_URI); $nlink = str_replace("?&", "?", $nlink); if (!strpos($nlink, "?")) { $nlink = str_replace("&", "?", $nlink); } $nlink .= "&refresh=1"; //reinstating back and forward links output_notl("`n"); $prev = translate_inline("<<"); $next = translate_inline(">>"); if ($rowcount >= $limit || $cid > 0) { $req = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . ($com + 1); $req = str_replace("?&", "?", $req); if (!strpos($req, "?")) { $req = str_replace("&", "?", $req); } $req .= "&refresh=1"; if ($jump) { $req .= "#{$section}"; } output_notl("<a href=\"{$req}\">{$prev}</a> ", true); addnav("", $req); } output_notl("<a href=\"{$nlink}\">Refresh Commentary</a>", true); if ($com > 0 || $cid > 0 && $newadded > $limit) { $req = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . ($com - 1); $req = str_replace("?&", "?", $req); if (!strpos($req, "?")) { $req = str_replace("&", "?", $req); } $req .= "&refresh=1"; if ($jump) { $req .= "#{$section}"; } output_notl(" <a href=\"{$req}\">{$next}</a>", true); addnav("", $req); } // addnav("", $nlink); output("`n`n`0Jump to commentary page:"); for ($i = $val; $i >= 0; $i--) { $nlink = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . $i; $nlink = str_replace("?&", "?", $nlink); if (!strpos($nlink, "?")) { $nlink = str_replace("&", "?", $nlink); } $nlink .= "&refresh=1"; if ($jump) { $nlink .= "#{$section}"; } $ndisp = 1 + $val - $i; if (httpget('comscroll') != $i) { output_notl("<a href=\"{$nlink}\">{$ndisp}</a> ", true); addnav("", $nlink); } else { output_notl("`@{$ndisp}`0 ", true); } } modulehook("commentaryoptions"); rawoutput("</td></tr></table"); // *** AJAX CHAT MOD START *** modulehook("viewcommentaryfooter"); // *** AJAX CHAT MOD END *** }
function viewcommentary($section, $message = "Interject your own commentary?", $limit = 10, $talkline = "says", $schema = false) { global $session, $REQUEST_URI, $doublepost, $translation_namespace; global $emptypost; rawoutput("<a name='{$section}'></a>"); // Let's add a hook for modules to block commentary sections $args = modulehook("blockcommentarea", array("section" => $section)); if (isset($args['block']) && $args['block'] == "yes") { return; } if ($schema === false) { $schema = $translation_namespace; } tlschema("commentary"); $nobios = array("motd.php" => true); if (!array_key_exists(basename($_SERVER['SCRIPT_NAME']), $nobios)) { $nobios[basename($_SERVER['SCRIPT_NAME'])] = false; } if ($nobios[basename($_SERVER['SCRIPT_NAME'])]) { $linkbios = false; } else { $linkbios = true; } if ($message == "X") { $linkbios = true; } if ($doublepost) { output("`\$`bDouble post?`b`0`n"); } if ($emptypost) { output("`\$`bWell, they say silence is a virtue.`b`0`n"); } $clanrankcolors = array("`!", "`#", "`^", "`&", "`\$"); // Needs to be here because scrolling through the commentary pages, entering a bio, then scrolling again forward // then re-entering another bio will lead to $com being smaller than 0 and this will lead to an SQL error later on. $com = (int) httpget("comscroll"); if ($com < 0) { $com = 0; } $cc = false; if (httpget("comscroll") !== false && (int) $session['lastcom'] == $com + 1) { $cid = (int) $session['lastcommentid']; } else { $cid = 0; } $session['lastcom'] = $com; if ($com > 0 || $cid > 0) { // Find newly added comments. $sql = "SELECT COUNT(commentid) AS newadded FROM " . db_prefix("commentary") . " LEFT JOIN " . db_prefix("accounts") . " ON " . db_prefix("accounts") . ".acctid = " . db_prefix("commentary") . ".author WHERE section='{$section}' AND " . "(" . db_prefix("accounts") . ".locked=0 or " . db_prefix('accounts') . ".locked is null) AND commentid > '{$cid}'"; $result = db_query($sql); $row = db_fetch_assoc($result); $newadded = $row['newadded']; } else { $newadded = 0; } $commentbuffer = array(); if ($cid == 0) { $sql = "SELECT " . db_prefix("commentary") . ".*, " . db_prefix("accounts") . ".name, " . db_prefix("accounts") . ".acctid, " . db_prefix("accounts") . ".clanrank, " . db_prefix("clans") . ".clanshort FROM " . db_prefix("commentary") . " LEFT JOIN " . db_prefix("accounts") . " ON " . db_prefix("accounts") . ".acctid = " . db_prefix("commentary") . ".author LEFT JOIN " . db_prefix("clans") . " ON " . db_prefix("clans") . ".clanid=" . db_prefix("accounts") . ".clanid WHERE section = '{$section}' AND " . "( " . db_prefix("accounts") . ".locked=0 OR " . db_prefix("accounts") . ".locked is null ) " . "ORDER BY commentid DESC LIMIT " . $com * $limit . ",{$limit}"; if ($com == 0 && strstr($_SERVER['REQUEST_URI'], "/moderate.php") !== $_SERVER['REQUEST_URI']) { $result = db_query_cached($sql, "comments-{$section}"); } else { $result = db_query($sql); } while ($row = db_fetch_assoc($result)) { $commentbuffer[] = $row; } } else { $sql = "SELECT " . db_prefix("commentary") . ".*, " . db_prefix("accounts") . ".name, " . db_prefix("accounts") . ".acctid, " . db_prefix("accounts") . ".clanrank, " . db_prefix("clans") . ".clanshort FROM " . db_prefix("commentary") . " LEFT JOIN " . db_prefix("accounts") . " ON " . db_prefix("accounts") . ".acctid = " . db_prefix("commentary") . ".author LEFT JOIN " . db_prefix("clans") . " ON " . db_prefix("clans") . ".clanid=" . db_prefix("accounts") . ".clanid WHERE section = '{$section}' AND " . "( " . db_prefix("accounts") . ".locked=0 OR " . db_prefix("accounts") . ".locked is null ) " . "AND commentid > '{$cid}' " . "ORDER BY commentid ASC LIMIT {$limit}"; $result = db_query($sql); while ($row = db_fetch_assoc($result)) { $commentbuffer[] = $row; } $commentbuffer = array_reverse($commentbuffer); } $rowcount = count($commentbuffer); if ($rowcount > 0) { $session['lastcommentid'] = $commentbuffer[0]['commentid']; } $counttoday = 0; for ($i = 0; $i < $rowcount; $i++) { $row = $commentbuffer[$i]; $row['comment'] = comment_sanitize($row['comment']); $commentids[$i] = $row['commentid']; if (date("Y-m-d", strtotime($row['postdate'])) == date("Y-m-d")) { if ($row['name'] == $session['user']['name']) { $counttoday++; } } $x = 0; $ft = ""; for ($x = 0; strlen($ft) < 5 && $x < strlen($row['comment']); $x++) { if (substr($row['comment'], $x, 1) == "`" && strlen($ft) == 0) { $x++; } else { $ft .= substr($row['comment'], $x, 1); } } $link = "bio.php?char=" . $row['acctid'] . "&ret=" . URLEncode($_SERVER['REQUEST_URI']); if (substr($ft, 0, 2) == "::") { $ft = substr($ft, 0, 2); } elseif (substr($ft, 0, 1) == ":") { $ft = substr($ft, 0, 1); } elseif (substr($ft, 0, 3) == "/me") { $ft = substr($ft, 0, 3); } $row['comment'] = holidayize($row['comment'], 'comment'); $row['name'] = holidayize($row['name'], 'comment'); if ($row['clanrank']) { $row['name'] = ($row['clanshort'] > "" ? "{$clanrankcolors[ceil($row['clanrank'] / 10)]}<`2{$row['clanshort']}{$clanrankcolors[ceil($row['clanrank'] / 10)]}> `&" : "") . $row['name']; } if ($ft == "::" || $ft == "/me" || $ft == ":") { $x = strpos($row['comment'], $ft); if ($x !== false) { if ($linkbios) { $op[$i] = str_replace("&", "&", HTMLEntities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0<a href='{$link}' style='text-decoration: none'>\n`&{$row['name']}`0</a>\n`& " . str_replace("&", "&", HTMLEntities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n"; } else { $op[$i] = str_replace("&", "&", HTMLEntities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`&{$row['name']}`0`& " . str_replace("&", "&", HTMLEntities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n"; } $rawc[$i] = str_replace("&", "&", HTMLEntities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`&{$row['name']}`0`& " . str_replace("&", "&", HTMLEntities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n"; } } if ($ft == "/game" && !$row['name']) { $x = strpos($row['comment'], $ft); if ($x !== false) { $op[$i] = str_replace("&", "&", HTMLEntities(substr($row['comment'], 0, $x), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`&" . str_replace("&", "&", HTMLEntities(substr($row['comment'], $x + strlen($ft)), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0`n"; } } if (!isset($op) || !is_array($op)) { $op = array(); } if (!array_key_exists($i, $op) || $op[$i] == "") { if ($linkbios) { $op[$i] = "`0<a href='{$link}' style='text-decoration: none'>`&{$row['name']}`0</a>`3 says, \"`#" . str_replace("&", "&", HTMLEntities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`3\"`0`n"; } elseif (substr($ft, 0, 5) == '/game' && !$row['name']) { $op[$i] = str_replace("&", "&", HTMLEntities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))); } else { $op[$i] = "`&{$row['name']}`3 says, \"`#" . str_replace("&", "&", HTMLEntities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`3\"`0`n"; } $rawc[$i] = "`&{$row['name']}`3 says, \"`#" . str_replace("&", "&", HTMLEntities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`3\"`0`n"; } if (!array_key_exists('timestamp', $session['user']['prefs'])) { $session['user']['prefs']['timestamp'] = 0; } $session['user']['prefs']['timeoffset'] = round($session['user']['prefs']['timeoffset'], 1); if ($session['user']['prefs']['timestamp'] == 1) { if (!isset($session['user']['prefs']['timeformat'])) { $session['user']['prefs']['timeformat'] = "[m/d h:ia]"; } $time = strtotime($row['postdate']) + $session['user']['prefs']['timeoffset'] * 60 * 60; $s = date("`7" . $session['user']['prefs']['timeformat'] . "`0 ", $time); $op[$i] = $s . $op[$i]; } elseif ($session['user']['prefs']['timestamp'] == 2) { $s = reltime(strtotime($row['postdate'])); $op[$i] = "`7({$s})`0 " . $op[$i]; } if ($message == "X") { $op[$i] = "`0({$row['section']}) " . $op[$i]; } if ($row['postdate'] >= $session['user']['recentcomments']) { $op[$i] = "<img src='images/new.gif' alt='>' width='3' height='5' align='absmiddle'> " . $op[$i]; } addnav("", $link); $auth[$i] = $row['author']; if (isset($rawc[$i])) { $rawc[$i] = full_sanitize($rawc[$i]); $rawc[$i] = htmlentities($rawc[$i], ENT_QUOTES, getsetting("charset", "ISO-8859-1")); } } $i--; $outputcomments = array(); $sect = "x"; $moderating = false; if ($session['user']['superuser'] & SU_EDIT_COMMENTS && $message == "X") { $moderating = true; } $del = translate_inline("Del"); $scriptname = substr($_SERVER['SCRIPT_NAME'], strrpos($_SERVER['SCRIPT_NAME'], "/") + 1); $pos = strpos($_SERVER['REQUEST_URI'], "?"); $return = $scriptname . ($pos == false ? "" : substr($_SERVER['REQUEST_URI'], $pos)); $one = strstr($return, "?") == false ? "?" : "&"; for (; $i >= 0; $i--) { $out = ""; if ($moderating) { if ($session['user']['superuser'] & SU_EDIT_USERS) { $out .= "`0[ <input type='checkbox' name='comment[{$commentids[$i]}]'> | <a href='user.php?op=setupban&userid=" . $auth[$i] . "&reason=" . rawurlencode($rawc[$i]) . "'>Ban</a> ] "; addnav("", "user.php?op=setupban&userid={$auth[$i]}&reason=" . rawurlencode($rawc[$i])); } else { $out .= "`0[ <input type='checkbox' name='comment[{$commentids[$i]}]'> ] "; } $matches = array(); preg_match("/[(]([^)]*)[)]/", $op[$i], $matches); $sect = trim($matches[1]); if (substr($sect, 0, 5) != "clan-" || $sect == $section) { if (substr($sect, 0, 4) != "pet-") { $out .= $op[$i]; if (!isset($outputcomments[$sect]) || !is_array($outputcomments[$sect])) { $outputcomments[$sect] = array(); } array_push($outputcomments[$sect], $out); } } } else { if ($session['user']['superuser'] & SU_EDIT_COMMENTS) { $out .= "`2[<a href='" . $return . $one . "removecomment={$commentids[$i]}§ion={$section}&returnpath=" . URLEncode($return) . "'>{$del}</a>`2]`0 "; addnav("", $return . $one . "removecomment={$commentids[$i]}§ion={$section}&returnpath=" . URLEncode($return) . ""); } $out .= $op[$i]; if (!array_key_exists($sect, $outputcomments) || !is_array($outputcomments[$sect])) { $outputcomments[$sect] = array(); } array_push($outputcomments[$sect], $out); } } if ($moderating) { $scriptname = substr($_SERVER['SCRIPT_NAME'], strrpos($_SERVER['SCRIPT_NAME'], "/") + 1); addnav("", "{$scriptname}?op=commentdelete&return=" . URLEncode($_SERVER['REQUEST_URI'])); $mod_Del1 = htmlentities(translate_inline("Delete Checked Comments"), ENT_COMPAT, getsetting("charset", "ISO-8859-1")); $mod_Del2 = htmlentities(translate_inline("Delete Checked & Ban (3 days)"), ENT_COMPAT, getsetting("charset", "ISO-8859-1")); $mod_Del_confirm = addslashes(htmlentities(translate_inline("Are you sure you wish to ban this user and have you specified the exact reason for the ban, i.e. cut/pasted their offensive comments?"), ENT_COMPAT, getsetting("charset", "ISO-8859-1"))); $mod_reason = translate_inline("Reason:"); $mod_reason_desc = htmlentities(translate_inline("Banned for comments you posted."), ENT_COMPAT, getsetting("charset", "ISO-8859-1")); output_notl("<form action='{$scriptname}?op=commentdelete&return=" . URLEncode($_SERVER['REQUEST_URI']) . "' method='POST'>", true); output_notl("<input type='submit' class='button' value=\"{$mod_Del1}\">", true); output_notl("<input type='submit' class='button' name='delnban' value=\"{$mod_Del2}\" onClick=\"return confirm('{$mod_Del_confirm}');\">", true); output_notl("`n{$mod_reason} <input name='reason0' size='40' value=\"{$mod_reason_desc}\" onChange=\"document.getElementById('reason').value=this.value;\">", true); } //output the comments ksort($outputcomments); reset($outputcomments); $sections = commentarylocs(); $needclose = 0; while (list($sec, $v) = each($outputcomments)) { if ($sec != "x") { if ($needclose) { modulehook("}collapse"); } output_notl("`n<hr><a href='moderate.php?area=%s'>`b`^%s`0`b</a>`n", $sec, isset($sections[$sec]) ? $sections[$sec] : "({$sec})", true); addnav("", "moderate.php?area={$sec}"); modulehook("collapse{", array("name" => "com-" . $sec)); $needclose = 1; } else { modulehook("collapse{", array("name" => "com-" . $section)); $needclose = 1; } reset($v); while (list($key, $val) = each($v)) { $args = array('commentline' => $val); $args = modulehook("viewcommentary", $args); $val = $args['commentline']; output_notl($val, true); } } if ($moderating && $needclose) { modulehook("}collapse"); $needclose = 0; } if ($moderating) { output_notl("`n"); rawoutput("<input type='submit' class='button' value=\"{$mod_Del1}\">"); rawoutput("<input type='submit' class='button' name='delnban' value=\"{$mod_Del2}\" onClick=\"return confirm('{$mod_Del_confirm}');\">"); output_notl("`n%s ", $mod_reason); rawoutput("<input name='reason' size='40' id='reason' value=\"{$mod_reason_desc}\">"); rawoutput("</form>"); output_notl("`n"); } if ($session['user']['loggedin']) { $args = modulehook("insertcomment", array("section" => $section)); if (array_key_exists("mute", $args) && $args['mute'] && !($session['user']['superuser'] & SU_EDIT_COMMENTS)) { output_notl("%s", $args['mutemsg']); } elseif ($counttoday < $limit / 2 || $session['user']['superuser'] & ~SU_DOESNT_GIVE_GROTTO || !getsetting('postinglimit', 1)) { if ($message != "X") { $message = "`n`@{$message}`n"; output($message); talkform($section, $talkline, $limit, $schema); } } else { $message = "`n`@{$message}`n"; output($message); output("Sorry, you've exhausted your posts in this section for now.`0`n"); } } $jump = false; if (!isset($session['user']['prefs']['nojump']) || $session['user']['prefs']['nojump'] == false) { $jump = true; } $firstu = translate_inline("<< First Unseen"); $prev = translate_inline("< Previous"); $ref = translate_inline("Refresh"); $next = translate_inline("Next >"); $lastu = translate_inline("Last Page >>"); if ($rowcount >= $limit || $cid > 0) { $sql = "SELECT count(commentid) AS c FROM " . db_prefix("commentary") . " WHERE section='{$section}' AND postdate > '{$session['user']['recentcomments']}'"; $r = db_query($sql); $val = db_fetch_assoc($r); $val = round($val['c'] / $limit + 0.5, 0) - 1; if ($val > 0) { $first = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . $val; $first = str_replace("?&", "?", $first); if (!strpos($first, "?")) { $first = str_replace("&", "?", $first); } $first .= "&refresh=1"; if ($jump) { $first .= "#{$section}"; } output_notl("<a href=\"{$first}\">{$firstu}</a>", true); addnav("", $first); } else { output_notl($firstu, true); } $req = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . ($com + 1); $req = str_replace("?&", "?", $req); if (!strpos($req, "?")) { $req = str_replace("&", "?", $req); } $req .= "&refresh=1"; if ($jump) { $req .= "#{$section}"; } output_notl("<a href=\"{$req}\">{$prev}</a>", true); addnav("", $req); } else { output_notl("{$firstu} {$prev}", true); } $last = appendlink(comscroll_sanitize($REQUEST_URI), "refresh=1"); // Okay.. we have some smart-ass (or stupidass, you guess) players // who think that the auto-reload firefox plugin is a good way to // avoid our timeouts. Won't they be surprised when I take that little // hack away. $last = appendcount($last); $last = str_replace("?&", "?", $last); if ($jump) { $last .= "#{$section}"; } //if (!strpos($last,"?")) $last = str_replace("&","?",$last); //debug($last); output_notl(" <a href=\"{$last}\">{$ref}</a> ", true); addnav("", $last); if ($com > 0 || $cid > 0 && $newadded > $limit) { $req = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . ($com - 1); $req = str_replace("?&", "?", $req); if (!strpos($req, "?")) { $req = str_replace("&", "?", $req); } $req .= "&refresh=1"; if ($jump) { $req .= "#{$section}"; } output_notl(" <a href=\"{$req}\">{$next}</a>", true); addnav("", $req); output_notl(" <a href=\"{$last}\">{$lastu}</a>", true); } else { output_notl("{$next} {$lastu}", true); } if (!$cc) { db_free_result($result); } tlschema(); if ($needclose) { modulehook("}collapse"); } }
function commentaryfooter($section, $message = "Interject your own commentary?", $limit = 25, $talkline = "says", $schema = false) { global $session, $REQUEST_URI, $doublepost, $translation_namespace; global $emptypost; global $chatloc, $moderating, $bottomcid; //Output page jumpers $com = httpget('comscroll'); if ($section == "all") { $sql = "SELECT count(commentid) AS c FROM " . db_prefix("commentary") . " WHERE section NOT LIKE 'dwelling%' AND section NOT LIKE 'clan%' AND section NOT LIKE 'pet-%'"; } else { $sql = "SELECT count(commentid) AS c FROM " . db_prefix("commentary") . " WHERE section='{$section}'"; } $r = db_query_cached($sql, "commentary/commentarycount_" . $section, 60); //$r = db_query($sql); $val = db_fetch_assoc($r); $rowcount = $val['c']; $val = round($val['c'] / $limit + 0.5, 0) - 1; $returnlink = URLEncode($_SERVER['REQUEST_URI']); $returnlink = URLEncode(buildcommentarylink("&frombio=true", $returnlink)); $hook = array("section" => $section, "message" => $message, "talkline" => $talkline, "returnlink" => $returnlink); $hook = modulehook("commentary_talkform", $hook); $section = $hook['section']; $message = $hook['message']; $talkline = $hook['talkline']; if ($session['user']['loggedin']) { if ($message != "X") { $message = "`n`@{$message}`0`n"; output($message, true); if (!$hook['blocktalkform']) { talkform($section, $talkline, $limit, $schema); } } } $jump = false; if (!isset($session['user']['prefs']['nojump']) || $session['user']['prefs']['nojump'] == false) { $jump = true; } //new-style commentary display with page numbers $nlink = buildcommentarylink("&refresh=1"); //reinstating back and forward links output_notl("`n"); $prev = translate_inline("`0<<"); $next = translate_inline("`0>>"); if ($rowcount >= $limit && $com != $val) { $req = buildcommentarylink("&comscroll=" . ($com + 1)); output_notl("<a href=\"{$req}\">{$prev}</a> ", true); addnav("", $req); } $cplink = buildcommentarylink("&comscroll=" . $com . "&refresh=1"); addnav("", $cplink); output_notl("`0<a href=\"{$cplink}\">Refresh</a> | <a href=\"{$nlink}\">Latest</a>", true); if ($com > 0) { $req = buildcommentarylink("&comscroll=" . ($com - 1)); output_notl(" <a href=\"{$req}\">{$next}</a>", true); addnav("", $req); } output_notl("`n"); if ($session['user']['prefs']['commentary_auto_update']) { $req = buildcommentarylink("&disable_auto_update=true"); addnav("", $req); output_notl(" <a href=\"{$req}\">Disable Auto-Update</a>", true); $jsec = strtolower($section); $jsec = str_replace("_", "", $jsec); $jsec = str_replace("-", "", $jsec); $jsec = str_replace(",", "0", $jsec); rawoutput("<div id =\"ajaxcommentarynoticediv" . $jsec . "\"></div>"); } else { $req = buildcommentarylink("&enable_auto_update=true"); output_notl(" <a href=\"{$req}\">Enable Auto-Update</a>", true); addnav("", $req); } $jsec = strtolower($section); $jsec = str_replace("_", "", $jsec); $jsec = str_replace("-", "", $jsec); $jsec = str_replace(",", "0", $jsec); rawoutput("<div id=\"typedisplay" . $jsec . "\"></div>"); addnav("", $nlink); output("`n`n`0Jump to commentary page: "); $start = microtime(true); $nlink = buildcommentarylink("&refresh=1&comscroll="); for ($i = $val; $i >= 0; $i--) { // $nlink = buildcommentarylink("&comscroll=".$i."&refresh=1"); $ndisp = 1 + $val - $i; if ($com != $i) { output_notl("<a href=\"" . $nlink . $i . "\">{$ndisp}</a> ", true); addnav("", $nlink . $i); } else { output_notl("`@{$ndisp}`0 ", true); } } $end = microtime(true); $tot = $end - $start; //debug("commentary footer page numbers loop: ".$tot); output_notl("`n"); if ($moderating) { // output("`bLast Comment ID shown on this page: %s`b`n",number_format($bottomcid)); } else { modulehook("commentaryoptions"); } }
function commentaryfooter($section, $message = "Interject your own commentary?", $limit = 25, $talkline = "says", $schema = false) { global $session, $REQUEST_URI, $doublepost, $translation_namespace; global $emptypost; global $chatloc, $chatsonpage, $moderating, $bottomcid; //Output page jumpers $com = httpget('comscroll'); if ($section == "all") { $sql = "SELECT count(commentid) AS c FROM " . db_prefix("commentary") . " WHERE section NOT LIKE 'dwelling%' AND section NOT LIKE 'clan%' AND section NOT LIKE 'pet-%'"; } else { $sql = "SELECT count(commentid) AS c FROM " . db_prefix("commentary") . " WHERE section='{$section}'"; } //$r = db_query_cached($sql,"commentarycount-".$section,300); $r = db_query($sql); $val = db_fetch_assoc($r); $rowcount = $val['c']; $val = round($val['c'] / $limit + 0.5, 0) - 1; if ($session['user']['loggedin']) { if ($message != "X") { $message = "`n`@{$message}`0`n"; output($message); talkform($section, $talkline, $limit, $schema); } } $jump = false; if (!isset($session['user']['prefs']['nojump']) || $session['user']['prefs']['nojump'] == false) { $jump = true; } //new-style commentary display with page numbers $nlink = buildcommentarylink("&refresh=1"); //reinstating back and forward links output_notl("`n"); $prev = translate_inline("`0<<"); $next = translate_inline("`0>>"); if ($rowcount >= $limit && $com != $val) { $req = buildcommentarylink("&comscroll=" . ($com + 1)); output_notl("<a href=\"{$req}\">{$prev}</a> ", true); addnav("", $req); } $cplink = buildcommentarylink("&comscroll=" . $com . "&refresh=1"); addnav("", $cplink); output_notl("`0<a href=\"{$cplink}\">Refresh</a> | <a href=\"{$nlink}\">Latest</a>", true); if ($com > 0) { $req = buildcommentarylink("&comscroll=" . ($com - 1)); output_notl(" <a href=\"{$req}\">{$next}</a>", true); addnav("", $req); } addnav("", $nlink); output("`n`n`0Jump to commentary page: "); for ($i = $val; $i >= 0; $i--) { $nlink = buildcommentarylink("&comscroll=" . $i . "&refresh=1"); $ndisp = 1 + $val - $i; if (httpget('comscroll') != $i) { output_notl("<a href=\"{$nlink}\">{$ndisp}</a> ", true); addnav("", $nlink); } else { output_notl("`@{$ndisp}`0 ", true); } } output_notl("`n"); if ($moderating) { // output("`bLast Comment ID shown on this page: %s`b`n",number_format($bottomcid)); } else { modulehook("commentaryoptions"); } }
} page_header("Comment Moderation"); if ($op == "") { $area = httpget('area'); $link = "moderate.php" . ($area ? "?area={$area}" : ""); $refresh = translate_inline("Refresh"); rawoutput("<form action='{$link}' method='POST'>"); rawoutput("<input type='submit' class='button' value='{$refresh}'>"); rawoutput("</form>"); addnav("", "{$link}"); if ($area == "") { talkform("X", "says"); commentdisplay("", "' or '1'='1", "X", 100); } else { commentdisplay("", $area, "X", 100); talkform($area, "says"); } } elseif ($op == "audit") { $subop = httpget("subop"); if ($subop == "undelete") { $unkeys = httppost("mod"); if ($unkeys && is_array($unkeys)) { $sql = "SELECT * FROM " . db_prefix("moderatedcomments") . " WHERE modid IN ('" . join("','", array_keys($unkeys)) . "')"; $result = db_query($sql); while ($row = db_fetch_assoc($result)) { $comment = unserialize($row['comment']); $id = addslashes($comment['commentid']); $postdate = addslashes($comment['postdate']); $section = addslashes($comment['section']); $author = addslashes($comment['author']); $comment = addslashes($comment['comment']);
function viewcommentary($section, $message = "Interject your own commentary?", $limit = 10, $talkline = "says", $schema = false) { global $session, $REQUEST_URI, $doublepost, $translation_namespace; global $emptypost; global $chatloc; $chatloc = $section; if ($section) { rawoutput("<a name='{$section}'></a>"); // Let's add a hook for modules to block commentary sections $args = modulehook("blockcommentarea", array("section" => $section)); if (isset($args['block']) && $args['block'] == "yes") { return; } } //stops people from clicking on Bio links in the MoTD $nobios = array("motd.php" => true); if (!array_key_exists(basename($_SERVER['SCRIPT_NAME']), $nobios)) { $nobios[basename($_SERVER['SCRIPT_NAME'])] = false; } if ($nobios[basename($_SERVER['SCRIPT_NAME'])]) { $linkbios = false; } else { $linkbios = true; } if ($doublepost) { output("`\$`bDouble post?`b`0`n"); } if ($emptypost) { output("`\$`bWell, they say silence is a virtue.`b`0`n"); } // Needs to be here because scrolling through the commentary pages, entering a bio, then scrolling again forward // then re-entering another bio will lead to $com being smaller than 0 and this will lead to an SQL error later on. $com = (int) httpget("comscroll"); if ($com < 0) { $com = 0; } $cc = false; if (httpget("comscroll") !== false && (int) $session['lastcom'] == $com + 1) { $cid = (int) $session['lastcommentid']; } else { $cid = 0; } $session['lastcom'] = $com; //getting clans takes up far too much in the way of resources. What we really need is a brand new commentary table with an info field, into which the clan ranks and icons and such can go. //Functionality that keeps information updated such as the player's name, their clan, whether or not they're banned etc. can go away. if (!$cid) { $cid = 1; } $sql = "SELECT * FROM " . db_prefix("commentary") . " WHERE commentid > '{$cid}' AND section='{$section}' ORDER BY commentid DESC LIMIT " . $com * $limit . ",{$limit}"; $result = db_query($sql); $commentbuffer = array(); while ($row = db_fetch_assoc($result)) { $row['info'] = @unserialize($row['info']); if (!is_array($row['info'])) { $row['info'] = array(); } $commentbuffer[] = $row; } debug($commentbuffer); $commentbuffer = modulehook("commentbuffer", $commentbuffer); debug($commentbuffer); $rowcount = count($commentbuffer); if ($rowcount > 0) { $session['lastcommentid'] = $commentbuffer[0]['commentid']; } //obtain return link $scriptname = substr($_SERVER['SCRIPT_NAME'], strrpos($_SERVER['SCRIPT_NAME'], "/") + 1); $pos = strpos($_SERVER['REQUEST_URI'], "?"); $return = $scriptname . ($pos == false ? "" : substr($_SERVER['REQUEST_URI'], $pos)); $one = strstr($return, "?") == false ? "?" : "&"; //figure out whether to handle absolute or relative time if (!array_key_exists('timestamp', $session['user']['prefs'])) { $session['user']['prefs']['timestamp'] = 0; } $session['user']['prefs']['timeoffset'] = round($session['user']['prefs']['timeoffset'], 1); //this array of userids means that with a single query we can figure out who's online and nearby $acctidstoquery = array(); //prepare the actual comment line part of the comment for ($i = 0; $i < $rowcount; $i++) { $thiscomment = ""; $row = $commentbuffer[$i]; $row['acctid'] = $row['author']; $acctidstoquery[] = $row['author']; $row['comment'] = comment_sanitize($row['comment']); if (substr($row['comment'], 0, 1) == ":" || substr($row['comment'], 0, 3) == "/me") { $row['skiptalkline'] = true; } if (substr($row['comment'], 0, 5) == "/game" && !$row['name'] || $row['info']['gamecomment']) { $row['gamecomment'] = true; $row['skiptalkline'] = true; $row['info']['icons'] = array(); } if ($linkbios) { $row['biolink'] = true; } if ($session['user']['superuser'] & SU_EDIT_COMMENTS) { $row['modlink'] = true; } if ($row['modlink']) { $thiscomment .= "`2[<a href='" . $return . $one . "removecomment=" . $row['commentid'] . "&returnpath=" . URLEncode($return) . "'>{$del}</a>`2] "; addnav("", $return . $one . "removecomment=" . $row['commentid'] . "&returnpath=" . URLEncode($return) . ""); } if ($row['biolink'] && !$row['gamecomment']) { $bio = "bio.php?char=" . $row['acctid'] . "&ret=" . URLEncode($_SERVER['REQUEST_URI']); $thiscomment .= "<a href=\"{$bio}\">`0" . $row['name'] . "`0</a> "; addnav("", $bio); } if (!$row['skiptalkline']) { $thiscomment .= $talkline . " \"`#"; } $thiscomment .= str_replace("&", "&", htmlentities($row['comment'], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))) . "`0\""; $commentbuffer[$i]['comment'] = $thiscomment; $commentbuffer[$i]['icons'] = $row['info']['icons']; $commentbuffer[$i]['time'] = strtotime($row['postdate']); if ($session['user']['prefs']['timestamp'] == 1) { if (!isset($session['user']['prefs']['timeformat'])) { $session['user']['prefs']['timeformat'] = "[m/d h:ia]"; } $time = strtotime($row['postdate']) + $session['user']['prefs']['timeoffset'] * 60 * 60; $s = date("`7" . $session['user']['prefs']['timeformat'] . "`0 ", $time); $commentbuffer[$i]['displaytime'] = $s; } elseif ($session['user']['prefs']['timestamp'] == 2) { $s = reltime(strtotime($row['postdate'])); $commentbuffer[$i]['displaytime'] = "`7({$s})`0 "; } } //get offline/online/nearby status $acctids = join(',', $acctidstoquery); $onlinesql = "SELECT acctid, laston, loggedin, chatloc FROM " . db_prefix("accounts") . " WHERE acctid IN ({$acctids})"; $onlineresult = db_query($onlinesql); $onlinestatus = array(); $offline = date("Y-m-d H:i:s", strtotime("-" . getsetting("LOGINTIMEOUT", 900) . " seconds")); while ($row = db_fetch_assoc($onlineresult)) { $onlinestatus[$row['acctid']] = $row; } for ($i = 0; $i < $rowcount; $i++) { $row = $commentbuffer[$i]; if ($onlinestatus[$row['author']]['laston'] < $offline || !$onlinestatus[$row['author']]['loggedin']) { $commentbuffer[$row]['online'] = 0; $commentbuffer[$row]['icons'][] = "images/offline.png"; } else { if ($onlinestatus[$row['author']]['chatloc'] == $chatloc) { $commentbuffer[$row]['online'] = 2; $commentbuffer[$row]['icons'][] = "images/nearby.png"; } else { $commentbuffer[$row]['online'] = 1; $commentbuffer[$row]['icons'][] = "images/online.png"; } } } $finaloutput = ""; //output the comments! for ($i = 0; $i < $rowcount; $i++) { $row = $commentbuffer[$i]; $icons = $row['icons']; foreach ($icons as $icon) { $finaloutput .= $icon; } $finaloutput .= $row['displaytime']; $finaloutput .= $row['comment']; output_notl("{$finaloutput}`n"); } // debug($commentbuffer); //output the comments // ksort($outputcomments); // reset($outputcomments); // $sections = commentarylocs(); // $needclose = 0; // while (list($sec,$v)=each($outputcomments)){ // if ($sec!="x") { // output_notl("`n<hr><a href='moderate.php?area=%s'>`b`^%s`0`b</a>`n",$sec, isset($sections[$sec]) ? $sections[$sec] : "($sec)", true); // addnav("", "moderate.php?area=$sec"); // } // reset($v); // while (list($key,$val)=each($v)){ // $args = array('commentline'=>$val,'area'=>$section); // $args = modulehook("viewcommentary", $args); // $val = $args['commentinfo'].$args['commentline']; // output_notl($val, true); // } // } //Output page jumpers // $sql = "SELECT count(commentid) AS c FROM " . db_prefix("commentary") . " WHERE section='$section'"; // $r = db_query($sql); // $val = db_fetch_assoc($r); // $val = round($val['c'] / $limit + 0.5,0) - 1; rawoutput("<table cellpadding=0 cellspacing=5 width=100%><tr><td valign=\"top\" width=50%>"); if ($session['user']['loggedin']) { if ($message != "X") { $message = "`n`@{$message}`n"; output($message); talkform($section, $talkline, $limit, $schema); } } $jump = false; if (!isset($session['user']['prefs']['nojump']) || $session['user']['prefs']['nojump'] == false) { $jump = true; } //new-style commentary display with page numbers // if (!$cc) db_free_result($result); // tlschema(); // if ($needclose) modulehook("}collapse"); rawoutput("</td><td valign=\"top\" width=50%>"); $nlink = comscroll_sanitize($REQUEST_URI); $nlink = str_replace("?&", "?", $nlink); if (!strpos($nlink, "?")) { $nlink = str_replace("&", "?", $nlink); } $nlink .= "&refresh=1"; //reinstating back and forward links output_notl("`n"); $prev = translate_inline("<<"); $next = translate_inline(">>"); if ($rowcount >= $limit || $cid > 0) { $req = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . ($com + 1); $req = str_replace("?&", "?", $req); if (!strpos($req, "?")) { $req = str_replace("&", "?", $req); } $req .= "&refresh=1"; if ($jump) { $req .= "#{$section}"; } output_notl("<a href=\"{$req}\">{$prev}</a> ", true); addnav("", $req); } output_notl("<a href=\"{$nlink}\">Refresh Commentary</a>", true); if ($com > 0 || $cid > 0 && $newadded > $limit) { $req = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . ($com - 1); $req = str_replace("?&", "?", $req); if (!strpos($req, "?")) { $req = str_replace("&", "?", $req); } $req .= "&refresh=1"; if ($jump) { $req .= "#{$section}"; } output_notl(" <a href=\"{$req}\">{$next}</a>", true); addnav("", $req); } // addnav("", $nlink); output("`n`n`0Jump to commentary page:"); for ($i = $val; $i >= 0; $i--) { $nlink = comscroll_sanitize($REQUEST_URI) . "&comscroll=" . $i; $nlink = str_replace("?&", "?", $nlink); if (!strpos($nlink, "?")) { $nlink = str_replace("&", "?", $nlink); } $nlink .= "&refresh=1"; if ($jump) { $nlink .= "#{$section}"; } $ndisp = 1 + $val - $i; if (httpget('comscroll') != $i) { output_notl("<a href=\"{$nlink}\">{$ndisp}</a> ", true); addnav("", $nlink); } else { output_notl("`@{$ndisp}`0 ", true); } } modulehook("commentaryoptions"); rawoutput("</td></tr></table"); // *** AJAX CHAT MOD START *** //modulehook("viewcommentaryfooter"); // *** AJAX CHAT MOD END *** }