LotGDocker/lotgd-web/lotgd/moderate.php

291 lines
10 KiB
PHP
Raw Normal View History

2020-08-17 19:16:42 -04:00
<?php
// translator ready
// addnews ready
// mail ready
require_once("common.php");
require_once("lib/commentary.php");
require_once("lib/sanitize.php");
require_once("lib/http.php");
tlschema("moderate");
addcommentary();
check_su_access(SU_EDIT_COMMENTS);
require_once("lib/superusernav.php");
superusernav();
addnav("Other");
addnav("Commentary Overview","moderate.php");
addnav("Reset Seen Comments","moderate.php?seen=".rawurlencode(date("Y-m-d H:i:s")));
addnav("B?Player Bios","bios.php");
if ($session['user']['superuser'] & SU_AUDIT_MODERATION){
addnav("Audit Moderation","moderate.php?op=audit");
}
addnav("Review by Moderator");
addnav("Commentary");
addnav("Sections");
addnav("Modules");
addnav("Clan Halls");
$op = httpget("op");
if ($op=="commentdelete"){
$comment = httppost('comment');
if (httppost('delnban')>''){
$sql = "SELECT DISTINCT uniqueid,author FROM " . db_prefix("commentary") . " INNER JOIN " . db_prefix("accounts") . " ON acctid=author WHERE commentid IN ('" . join("','",array_keys($comment)) . "')";
$result = db_query($sql);
$untildate = date("Y-m-d H:i:s",strtotime("+3 days"));
$reason = httppost("reason");
$reason0 = httppost("reason0");
$default = "Banned for comments you posted.";
if ($reason0 != $reason && $reason0 != $default) $reason = $reason0;
if ($reason=="") $reason = $default;
while ($row = db_fetch_assoc($result)){
$sql = "SELECT * FROM " . db_prefix("bans") . " WHERE uniqueid = '{$row['uniqueid']}'";
$result2 = db_query($sql);
$sql = "INSERT INTO " . db_prefix("bans") . " (uniqueid,banexpire,banreason,banner) VALUES ('{$row['uniqueid']}','$untildate','$reason','".addslashes($session['user']['name'])."')";
$sql2 = "UPDATE " . db_prefix("accounts") . " SET loggedin=0 WHERE acctid={$row['author']}";
if (db_num_rows($result2)>0){
$row2 = db_fetch_assoc($result2);
if ($row2['banexpire'] < $untildate){
//don't enter a new ban if a longer lasting one is
//already here.
db_query($sql);
db_query($sql2);
}
}else{
db_query($sql);
db_query($sql2);
}
}
}
if (!isset($comment) || !is_array($comment)) $comment = array();
$sql = "SELECT " .
db_prefix("commentary").".*,".db_prefix("accounts").".name,".
db_prefix("accounts").".login, ".db_prefix("accounts").".clanrank,".
db_prefix("clans").".clanshort FROM ".db_prefix("commentary").
" INNER 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 commentid IN ('".join("','",array_keys($comment))."')";
$result = db_query($sql);
$invalsections = array();
while ($row = db_fetch_assoc($result)){
$sql = "INSERT LOW_PRIORITY INTO ".db_prefix("moderatedcomments").
" (moderator,moddate,comment) VALUES ('{$session['user']['acctid']}','".date("Y-m-d H:i:s")."','".addslashes(serialize($row))."')";
db_query($sql);
$invalsections[$row['section']] = 1;
}
$sql = "DELETE FROM " . db_prefix("commentary") . " WHERE commentid IN ('" . join("','",array_keys($comment)) . "')";
db_query($sql);
$return = httpget('return');
$return = cmd_sanitize($return);
$return = substr($return,strrpos($return,"/")+1);
if (strpos($return,"?")===false && strpos($return,"&")!==false){
$x = strpos($return,"&");
$return = substr($return,0,$x-1)."?".substr($return,$x+1);
}
foreach($invalsections as $key=>$dummy) {
invalidatedatacache("comments-$key");
}
//update moderation cache
invalidatedatacache("comments-or11");
redirect($return);
}
$seen = httpget("seen");
if ($seen>""){
$session['user']['recentcomments']=$seen;
}
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']);
$sql = "INSERT LOW_PRIORITY INTO ".db_prefix("commentary")." (commentid,postdate,section,author,comment) VALUES ('$id','$postdate','$section','$author','$comment')";
db_query($sql);
invalidatedatacache("comments-$section");
}
$sql = "DELETE FROM ".db_prefix("moderatedcomments")." WHERE modid IN ('".join("','",array_keys($unkeys))."')";
db_query($sql);
} else {
output("No items selected to undelete -- Please try again`n`n");
}
}
$sql = "SELECT DISTINCT acctid, name FROM ".db_prefix("accounts").
" INNER JOIN ".db_prefix("moderatedcomments").
" ON acctid=moderator ORDER BY name";
$result = db_query($sql);
addnav("Commentary");
addnav("Sections");
addnav("Modules");
addnav("Clan Halls");
addnav("Review by Moderator");
tlschema("notranslate");
while ($row = db_fetch_assoc($result)){
addnav(" ?".$row['name'],"moderate.php?op=audit&moderator={$row['acctid']}");
}
tlschema();
addnav("Commentary");
output("`c`bComment Auditing`b`c");
$ops = translate_inline("Ops");
$mod = translate_inline("Moderator");
$when = translate_inline("When");
$com = translate_inline("Comment");
$unmod = translate_inline("Unmoderate");
rawoutput("<form action='moderate.php?op=audit&subop=undelete' method='POST'>");
addnav("","moderate.php?op=audit&subop=undelete");
rawoutput("<table border='0' cellpadding='2' cellspacing='0'>");
rawoutput("<tr class='trhead'><td>$ops</td><td>$mod</td><td>$when</td><td>$com</td></tr>");
$limit = "75";
$where = "1=1 ";
$moderator = httpget("moderator");
if ($moderator>"") $where.="AND moderator=$moderator ";
$sql = "SELECT name, ".db_prefix("moderatedcomments").
".* FROM ".db_prefix("moderatedcomments")." LEFT JOIN ".
db_prefix("accounts").
" ON acctid=moderator WHERE $where ORDER BY moddate DESC LIMIT $limit";
$result = db_query($sql);
$i=0;
$clanrankcolors=array("`!","`#","`^","`&");
while ($row = db_fetch_assoc($result)){
$i++;
rawoutput("<tr class='".($i%2?'trlight':'trdark')."'>");
rawoutput("<td><input type='checkbox' name='mod[{$row['modid']}]' value='1'></td>");
rawoutput("<td>");
output_notl("%s", $row['name']);
rawoutput("</td>");
rawoutput("<td>");
output_notl("%s", $row['moddate']);
rawoutput("</td>");
rawoutput("<td>");
$comment = unserialize($row['comment']);
output_notl("`0(%s)", $comment['section']);
if ($comment['clanrank']>0)
output_notl("%s<%s%s>`0", $clanrankcolors[ceil($comment['clanrank']/10)],
$comment['clanshort'],
$clanrankcolors[ceil($comment['clanrank']/10)]);
output_notl("%s", $comment['name']);
output_notl("-");
output_notl("%s", comment_sanitize($comment['comment']));
rawoutput("</td>");
rawoutput("</tr>");
}
rawoutput("</table>");
rawoutput("<input type='submit' class='button' value='$unmod'>");
rawoutput("</form>");
}
addnav("Sections");
tlschema("commentary");
$vname = getsetting("villagename", LOCATION_FIELDS);
addnav(array("%s Square", $vname), "moderate.php?area=village");
if ($session['user']['superuser'] & ~SU_DOESNT_GIVE_GROTTO) {
addnav("Grotto","moderate.php?area=superuser");
}
addnav("Land of the Shades","moderate.php?area=shade");
addnav("Grassy Field","moderate.php?area=grassyfield");
$iname = getsetting("innname", LOCATION_INN);
// the inn name is a proper name and shouldn't be translated.
tlschema("notranslate");
addnav($iname,"moderate.php?area=inn");
tlschema();
addnav("MotD","moderate.php?area=motd");
addnav("Veterans Club","moderate.php?area=veterans");
addnav("Hunter's Lodge","moderate.php?area=hunterlodge");
addnav("Gardens","moderate.php?area=gardens");
addnav("Clan Hall Waiting Area","moderate.php?area=waiting");
if (getsetting("betaperplayer", 1) == 1 && @file_exists("pavilion.php")) {
addnav("Beta Pavilion","moderate.php?area=beta");
}
tlschema();
if ($session['user']['superuser'] & SU_MODERATE_CLANS){
addnav("Clan Halls");
$sql = "SELECT clanid,clanname,clanshort FROM " . db_prefix("clans") . " ORDER BY clanid";
$result = db_query($sql);
// these are proper names and shouldn't be translated.
tlschema("notranslate");
while ($row=db_fetch_assoc($result)){
addnav(array("<%s> %s", $row['clanshort'], $row['clanname']),
"moderate.php?area=clan-{$row['clanid']}");
}
tlschema();
} elseif ($session['user']['superuser'] & SU_EDIT_COMMENTS &&
getsetting("officermoderate", 0)) {
// the CLAN_OFFICER requirement was chosen so that moderators couldn't
// just get accepted as a member to any random clan and then proceed to
// wreak havoc.
// although this isn't really a big deal on most servers, the choice was
// made so that staff won't have to have another issue to take into
// consideration when choosing moderators. the issue is moot in most
// cases, as players that are trusted with moderator powers are also
// often trusted with at least the rank of officer in their respective
// clans.
if (($session['user']['clanid'] != 0) &&
($session['user']['clanrank'] >= CLAN_OFFICER)) {
addnav("Clan Halls");
$sql = "SELECT clanid,clanname,clanshort FROM " . db_prefix("clans") . " WHERE clanid='" . $session['user']['clanid'] . "'";
$result = db_query($sql);
// these are proper names and shouldn't be translated.
tlschema("notranslate");
if ($row=db_fetch_assoc($result)){
addnav(array("<%s> %s", $row['clanshort'], $row['clanname']),
"moderate.php?area=clan-{$row['clanid']}");
} else {
debug ("There was an error while trying to access your clan.");
}
tlschema();
}
}
addnav("Modules");
$mods = array();
$mods = modulehook("moderate", $mods);
reset($mods);
// These are already translated in the module.
tlschema("notranslate");
foreach ($mods as $area=>$name) {
addnav($name, "moderate.php?area=$area");
}
tlschema();
page_footer();
?>