jul/index.php

339 lines
12 KiB
PHP

<?php
if (isset($_GET['u']) && $_GET['u']) {
header("Location: profile.php?id=". $_GET['u']);
die();
} elseif (isset($_GET['p']) && $_GET['p']) {
header("Location: thread.php?pid=". $_GET['p'] ."#". $_GET['p']);
die();
} elseif (isset($_GET['t']) && $_GET['t']) {
header("Location: thread.php?id=". $_GET['t']);
die();
}
/*
if ($_GET["letitsnow"]) {
if (!array_key_exists('snowglobe', $_COOKIE)) {
$_COOKIE['snowglobe'] = 1;
}
if (!is_int($_COOKIE['snowglobe'])) {
die("no.");
}
if ($_COOKIE['snowglobe'] == 0) {
$_COOKIE['snowglobe'] = 1;
} elseif ($_COOKIE['snowglobe'] == 1) {
$_COOKIE['snowglobe'] = 0;
}
header("Location: /index.php");
}
*/
require 'lib/function.php';
require 'lib/layout.php';
if (false && $x_hacks['smallbrowse'] == 1) {
require 'mobile/index.php'; // alternate markup for mobile clients.
} else {
if (filter_string($_GET['action']) == 'markforumread' and $log) {
$sql->query("DELETE FROM forumread WHERE user=$loguserid AND forum='$forumid'");
$sql->query("DELETE FROM `threadsread` WHERE `uid` = '$loguserid' AND `tid` IN (SELECT `id` FROM `threads` WHERE `forum` = '$forumid')");
$sql->query("INSERT INTO forumread (user,forum,readdate) VALUES ($loguserid,$forumid,".ctime().')');
return header("Location: index.php");
}
if (filter_string($_GET['action']) == 'markallforumsread' and $log) {
$sql->query("DELETE FROM forumread WHERE user=$loguserid");
$sql->query("DELETE FROM `threadsread` WHERE `uid` = '$loguserid'");
$sql->query("INSERT INTO forumread (user,forum,readdate) SELECT $loguserid,id,".ctime().' FROM forums');
return header("Location: index.php");
}
$postread = readpostread($loguserid);
$users1 = $sql->query("SELECT id,name,birthday,sex,powerlevel,aka FROM users WHERE FROM_UNIXTIME(birthday,'%m-%d')='".date('m-d',ctime() + $tzoff)."' AND birthday ORDER BY name");
$blist = "";
for ($numbd=0;$user=$sql->fetch($users1);$numbd++) {
if(!$numbd) $blist="<tr>$tccell2s colspan=5>Birthdays for ".date('F j',ctime() + $tzoff).': ';
else $blist.=', ';
$users[$user['id']]=$user;
$y=date('Y',ctime())-date('Y',$user['birthday']);
$userurl = getuserlink($user);
$blist.= "$userurl ($y)";
}
$onlinetime=ctime()-300;
$onusers=$sql->query("SELECT id,name,powerlevel,lastactivity,sex,minipic,aka,birthday FROM users WHERE lastactivity>$onlinetime OR lastposttime>$onlinetime ORDER BY name");
$numonline=mysql_num_rows($onusers);
$numguests=$sql->resultq("SELECT count(*) FROM guests WHERE date>$onlinetime",0,0);
if ($numguests) $guestcount=" | <nobr>$numguests guest".($numguests>1?"s":"");
$onlineusersa = array();
for ($numon=0; $onuser = $sql->fetch($onusers);$numon++) {
//$namecolor=explode("=", getnamecolor($onuser['sex'],$onuser['powerlevel']));
//$namecolor=$namecolor[1];
//$namelink="<a href=profile.php?id=$onuser[id] style='color: #$namecolor'>$onuser[name]</a>";
$namelink = getuserlink($onuser);
if($onuser['minipic']) {
$onuser['minipic']='<img width="16" height="16" src="'.str_replace('"','%22',$onuser['minipic']).'" align="absmiddle"> ';
}
if($onuser['lastactivity']<=$onlinetime) {
$namelink="($namelink)";
}
$onlineusersa[]="$onuser[minipic]$namelink";
}
$onlineusers = "";
if ($onlineusersa) $onlineusers = ': '. implode(", ", $onlineusersa);
$logmsg = "";
if($log){
$headlinks.=' - <a href=index.php?action=markallforumsread>Mark all forums read</a>';
$header=makeheader($header1,$headlinks,$header2);
$myurl = getuserlink($loguser);
$logmsg = "You are logged in as $myurl.";
}
$lastuser = $sql->fetchq('SELECT id,name,sex,powerlevel,aka,birthday FROM users ORDER BY id DESC LIMIT 1');
$lastuserurl = getuserlink($lastuser);
$posts = $sql->fetchq('SELECT (SELECT COUNT( * ) FROM posts WHERE date>'.(ctime()-3600).') AS h, (SELECT COUNT( * ) FROM posts WHERE date>'.(ctime()-86400).') AS d');
$count = $sql->fetchq('SELECT (SELECT COUNT( * ) FROM users) AS u, (SELECT COUNT(*) FROM threads) as t, (SELECT COUNT(*) FROM posts) as p');
$misc = $sql->fetchq('SELECT * FROM misc');
if($posts['d']>$misc['maxpostsday']) $sql->query("UPDATE misc SET maxpostsday=$posts[d],maxpostsdaydate=".ctime());
if($posts['h']>$misc['maxpostshour']) $sql->query("UPDATE misc SET maxpostshour=$posts[h],maxpostshourdate=".ctime());
if($numonline>$misc['maxusers']) $sql->query("UPDATE misc SET maxusers=$numonline,maxusersdate=".ctime().",maxuserstext='".addslashes($onlineusers)."'");
/*// index sparkline
$sprkq = mysql_query('SELECT COUNT(id),date FROM posts WHERE date >="'.(time()-3600).'" GROUP BY (date % 60) ORDER BY date');
$sprk = array();
while ($r = mysql_fetch_row($sprkq)) {
array_push($sprk,$r[0]);
}
// print_r($sprk);
$sprk = implode(",",$sprk); */
if (filter_bool($_GET['oldcounter']))
$statsblip = "$posts[d] posts during the last day, $posts[h] posts during the last hour.";
else {
$nthreads = $sql->resultq("SELECT COUNT(*) FROM `threads` WHERE `lastpostdate` > '". (ctime() - 86400) ."'");
$nusers = $sql->resultq("SELECT COUNT(*) FROM `users` WHERE `lastposttime` > '". (ctime() - 86400) ."'");
$tthreads = ($nthreads === 1) ? "thread" : "threads";
$tusers = ($nusers === 1) ? "user" : "users";
$statsblip = "$nusers $tusers active in $nthreads $tthreads during the last day.";
}
print "$header
<br>
$tblstart
$tccell1s><table width=100%><td>$logmsg</td><td align=right>$count[u] registered users<br>Latest registered user: $lastuserurl</table>
$blist<tr>
$tccell2s>$count[t] threads and $count[p] posts in the board | $statsblip<tr>
$tccell1s>$numonline user".($numonline!=1?'s':'')." currently online$onlineusers$guestcount
";
// Displays total PMs along with unread unlike layout.php
$new = '&nbsp;';
if($log) {
$pms = $sql->getresultsbykey("SELECT msgread, COUNT(*) num FROM pmsgs WHERE userto=$loguserid GROUP BY msgread", 'msgread', 'num');
$pms[0] = intval($pms[0] ?? 0); // unread
$pms[1] = intval($pms[1] ?? 0); // read
$totalpms = $pms[0] + $pms[1];
if ($totalpms) {
if ($pms[0]) $new = $statusicons['new'];
$pmsg = $sql->fetchq("SELECT date,u.id uid,name,sex,powerlevel,aka
FROM pmsgs p LEFT JOIN users u ON u.id=p.userfrom
WHERE userto=$loguserid". ($pms[0] ? " AND msgread=0": "") ."
ORDER BY p.id DESC
LIMIT 1");
$namelink = getuserlink($pmsg, array('id'=>'uid'));
$lastmsg = "Last ". (($pms[0]) ? "unread " : "") ."message from $namelink on ".date($dateformat,$pmsg['date']+$tzoff);
}
$privatebox="
$tblstart<tr>
$tccellhs colspan=2>Private messages</tr><tr>
$tccell1>$new</td>
$tccell2l><a href='private.php'>Private messages</a> -- You have $totalpms private messages (".intval($pms[0])." new). $lastmsg</td></tr>
$tblend<br>
";
}
// Display recent active threads
// Part of this was lifted from latestposts.php and tweaked to show threads instead of posts
$data = $sql->query("
SELECT
t.id as id,
t.lastposter,
t.lastpostdate as date,
f.title as ftitle,
t.forum as fid,
t.title as title,
u.id as user,
u.name as uname,
u.sex as usex,
u.powerlevel as upowerlevel
FROM `threads` t
LEFT JOIN `forums` f ON t.forum = f.id
LEFT JOIN `users` u ON t.lastposter = u.id
WHERE f.minpower <= '". $loguser['powerlevel'] ."' AND f.id <> 99 /* heh */
ORDER BY t.lastpostdate DESC
LIMIT 5
");
$recent_threads = "
$tblstart
<tr>
$tccellc colspan='4'><a href='latestposts.php'>Recently active threads</a>
</tr>
<tr>
$tccellh width='25%'>Forum
$tccellh width='45%'>Thread
$tccellh width='20%'>User
$tccellh width='10%'>Time
</tr>
";
while ($in = $sql->fetch($data, MYSQL_ASSOC)) {
$recent_threads .= "<tr>
$tccell2><a href='forum.php?id=". $in['fid'] ."'>". $in['ftitle'] ."</a></td>
$tccell1l><a href='thread.php?id=". $in['id'] ."&end=1'>". $in['title'] ."</a></td>
$tccell1><a href='profile.php?id=". $in['user'] ."'><font ". getnamecolor($in['usex'], $in['upowerlevel']) .">". $in['uname'] ."</font></a></td>
$tccell2>". timeunits(ctime() - $in['date']) ."</td>
</tr>\n";
}
$recent_threads .= "
$tblend<br>";
// Hopefully this version won't break horribly if breathed on wrong
$forumlist="
<tr>
$tccellh>&nbsp;</td>
$tccellh>Forum</td>
$tccellh width=80>Threads</td>
$tccellh width=80>Posts</td>
$tccellh width=15%>Last post</td>
</tr>
";
$forumquery = $sql->query("SELECT f.*,u.id AS uid,name,sex,powerlevel,aka,birthday FROM forums f LEFT JOIN users u ON f.lastpostuser=u.id WHERE (!minpower OR minpower<=$power) AND f.hidden = '0' ORDER BY catid,forder");
$catquery = $sql->query("SELECT id,name FROM categories WHERE (!minpower OR minpower<=$power) ORDER BY id");
$modquery = $sql->query("SELECT u.id id,name,sex,powerlevel,aka,forum,birthday FROM users u INNER JOIN forummods m ON u.id=m.user ORDER BY name");
$categories = array();
$forums = array();
$mods = array();
while ($res = $sql->fetch($catquery))
$categories[] = $res;
while ($res = $sql->fetch($forumquery))
$forums[] = $res;
while ($res = $sql->fetch($modquery))
$mods[] = $res;
// Quicker (?) new posts calculation that's hopefully accurate v.v
if ($log) {
$qadd = array();
foreach ($forums as $forum) $qadd[] = "(lastpostdate > '{$postread[$forum['id']]}' AND forum = '{$forum['id']}')\r\n";
$qadd = implode(' OR ', $qadd);
$forumnew = $sql->getresultsbykey("SELECT forum, COUNT(*) AS unread FROM threads t LEFT JOIN threadsread tr ON (tr.tid = t.id AND tr.uid = $loguser[id])
WHERE (`read` IS NULL OR `read` != 1) AND ($qadd) GROUP BY forum", 'forum', 'unread');
}
$cat = filter_int($_GET['cat']);
foreach ($categories as $category) {
$forumlist.="<tr><td class='tbl tdbgc center font' colspan=5><a href=index.php?cat=$category[id]>$category[name]</a></td></tr>";
if($cat && $cat != $category['id'])
continue;
foreach ($forums as $forumplace => $forum) {
if ($forum['catid'] != $category['id'])
continue;
$m = 0;
$modlist = "";
foreach ($mods as $modplace => $mod) {
if ($mod['forum'] != $forum['id'])
continue;
$namelink = getuserlink($mod);
$modlist.=($m++?', ':'').$namelink;
unset($mods[$modplace]);
}
if ($m)
$modlist="(moderated by: $modlist)";
$namelink = getuserlink($forum, array('id'=>'uid'));
if($forum['numposts']){
$forumlastpost="<nobr>". date($dateformat,$forum['lastpostdate']+$tzoff);
$by="$smallfont<br>by $namelink". ($forum['lastpostid'] ? " <a href='thread.php?pid=". $forum['lastpostid'] ."#". $forum['lastpostid'] ."'>". $statusicons['getlast'] ."</a>" : "") ."</nobr></font>";
} else {
$forumlastpost=getblankdate();
$by='';
}
$new='&nbsp;';
if ($forum['numposts']) {
if ($log && intval($forumnew[$forum['id']] ?? 0) > 0) {
$new = $statusicons['new'] ."<br>". generatenumbergfx(intval($forumnew[$forum['id']]));
}
elseif (!$log && $forum['lastpostdate']>ctime()-3600) {
$new = $statusicons['new'];
}
}
/*
if ($log && $forum['lastpostdate'] > $postread[$forum['id']]) {
$newcount = $sql->resultq("SELECT COUNT(*) FROM `threads` WHERE `id` NOT IN (SELECT `tid` FROM `threadsread` WHERE `uid` = '$loguser[id]' AND `read` = 1) AND `lastpostdate` > '". $postread[$forum['id']] ."' AND `forum` = '$forum[id]'");
}
if ((($forum['lastpostdate'] > $postread[$forum['id']] and $log) or (!$log and $forum['lastpostdate']>ctime()-3600)) and $forum['numposts']) {
$new = $statusicons['new'] ."<br>". generatenumbergfx($newcount);
}
*/
$forumlist.="
<tr>
$tccell1>$new</td>
$tccell2l><a href=forum.php?id=$forum[id]>$forum[title]</a><br>
$smallfont$forum[description]<br>$modlist</td>
$tccell1>$forum[numthreads]</td>
$tccell1>$forum[numposts]</td>
$tccell2><span class='lastpost'>$forumlastpost</span> $by
</tr>
";
unset($forums[$forumplace]);
}
}
print "
$tblend
<br>$privatebox
$recent_threads
$tblstart
$forumlist
$tblend
$footer";
printtimedif($startingtime);
}