jul/memberlist.php
Xkeeper 82905dc369
fix 'x.0 years' bug and add sort by last active to memberlist
[closes #45]

also adds tooltips (title tags) to the "registered on" and
"last active" fields in the memberlist, which contain
a relative-format time (e.g. '1 day 5 hrs. ago')
2018-12-11 15:19:20 -08:00

173 lines
5.3 KiB
PHP

<?php
require 'lib/function.php';
require 'lib/rpg.php';
require 'lib/layout.php';
function sortbyexp($a,$b) {
$cmpa = (($a['exp'] === 'NaN') ? -1 : intval($a['exp']));
$cmpb = (($b['exp'] === 'NaN') ? -1 : intval($b['exp']));
if ($cmpa==$cmpb) return $a['id']-$b['id'];
return $cmpb-$cmpa;
}
if($sex) $qsex="&sex=$sex";
if($pow) $qpow="&pow=$pow";
if($ppp) $qppp="&ppp=$ppp";
if($rpg) $qrpg="&rpg=1";
$q = $qppp.$qrpg;
if(!$ppp) $ppp=50;
if(!$page) $page=0;
$lnk='<a href=memberlist.php?sort';
$qwhere = array();
if($sex=='m') $qwhere[] = '(sex=0)';
if($sex=='f') $qwhere[] = '(sex=1)';
if($sex=='n') $qwhere[] = '(sex=2)';
if($pow!='') {
$pow = intval($pow);
if (($pow == 1 || $pow == 0) && $loguser['powerlevel'] < 3)
$pow = "IN (0, 1)";
elseif ($pow == 3 || $pow == 4) // merge admin + sysadmin (they appear the same)
$pow = "IN (3, 4)";
elseif ($pow == -1 || $pow == -2) // merge banned + permabanned
$pow = "IN (-1, -2)";
else
$pow = "= '$pow'";
$qwhere[] = "powerlevel $pow";
}
$where = 'WHERE '.((empty($qwhere)) ? '1' : implode(' AND ', $qwhere));
if (!in_array($sort, array('name','reg','exp','age','posts', 'act')))
$sort = 'posts';
$query='SELECT id,posts,regdate,lastactivity,name,minipic,sex,powerlevel,aka,r.* FROM users LEFT JOIN users_rpg r ON id=uid ';
if($sort=='name') $users1=$sql->query("$query$where ORDER BY name", MYSQL_ASSOC);
if($sort=='reg') $users1=$sql->query("$query$where ORDER BY regdate DESC", MYSQL_ASSOC);
if($sort=='act') $users1=$sql->query("$query$where ORDER BY lastactivity DESC", MYSQL_ASSOC);
if($sort=='exp') $users1=$sql->query("$query$where", MYSQL_ASSOC);
if($sort=='age') $users1=$sql->query("$query$where AND birthday ORDER BY birthday", MYSQL_ASSOC);
if($sort=='posts') $users1=$sql->query("$query$where ORDER BY posts DESC", MYSQL_ASSOC);
$numusers=mysql_num_rows($users1);
for($i=0;$user = $sql->fetch($users1);$i++){
$user['days'] = (ctime()-$user['regdate'])/86400;
$user['exp'] = calcexp($user['posts'],$user['days']);
$user['lvl'] = calclvl($user['exp']);
$users[] = $user;
}
if($sort=='exp')
usort($users,'sortbyexp');
$pagelinks=$smallfont.'Pages:';
for($i=0;$i<($numusers/$ppp);$i++)
$pagelinks.=($i==$page?' '.($i+1):" <a href=memberlist.php?sort=$sort$qsex$qpow$qrpg$qppp&page=$i>".($i+1).'</a>');
if($numusers>1) $s="s";
print "
$header<br>$tblstart
<tr>
$tccellh colspan=2>$numusers user$s found.
</tr><tr>
$tccell1s> Sort by:
$tccell2s>
$lnk=posts$q$qpow$qsex>Total posts</a> |
$lnk=exp$q$qpow$qsex>EXP</a> |
$lnk=name$q$qpow$qsex>User name</a> |
$lnk=reg$q$qpow$qsex>Registration date</a> |
$lnk=act$q$qpow$qsex>Last activity</a> |
$lnk=age$q$qpow$qsex>Age</a>
</tr><tr>
$tccell1s> Sex:
$tccell2s>
$lnk=$sort$q$qpow&sex=m>Male</a> |
$lnk=$sort$q$qpow&sex=f>Female</a> |
$lnk=$sort$q$qpow&sex=n>N/A</a> |
$lnk=$sort$q$qpow>All</a><tr>
</tr><tr>
$tccell1s> Powerlevel:
$tccell2s>
$lnk=$sort$q$qsex&pow=-1>Banned</a> |
$lnk=$sort$q$qsex&pow=0>Normal</a> |
". ($loguser['powerlevel'] >= 1 ? "$lnk=$sort$q$qsex&pow=1>Normal +</a> | " : "") ."
$lnk=$sort$q$qsex&pow=2>Moderator</a> |
$lnk=$sort$q$qsex&pow=3>Administrator</a> |
$lnk=$sort$q$qsex>All</a>
</tr>$tblend<br>$tblstart
<tr>
$tccellh width=30>#</td>
$tccellh width=16><img src=images/_.gif width=16 height=8></td>
$tccellh>Username</td>
";
if(!$rpg) {
print "
$tccellh width=200>Registered on</td>
$tccellh width=200>Last active</td>
$tccellh width=60>Posts</td>
$tccellh width=35>Level</td>
$tccellh width=100>EXP</td></tr>
";
}
else {
$items = $sql->getarraybykey("SELECT * FROM items", 'id');
$classes = $sql->getarraybykey("SELECT * FROM rpg_classes", 'id');
print "$tccellh width=35>Level</td>";
print "$tccellh width=90>Class</td>";
for($i=0;$i<9;$i++) print "$tccellh width=65>".$stat[$i].'</td>';
print "$tccellh width=80><img src=images/coin.gif></td>";
print "$tccellh width=60><img src=images/coin2.gif></td>";
print "</tr>";
}
$s = $ppp*$page;
for($u=0;$u < $ppp;$u++) {
$i = $s + $u;
$ulist.="<tr style=\"height:24px;\">";
$user = $users[$i];
if (!$user) break;
$userpicture='&nbsp';
if ($user['minipic'])
$userpicture="<img width=16 height=16 src='".str_replace('>','&gt;',$user['minipic'])."'>";
$userlink = getuserlink($user);
$ulist.="
$tccell2>".($i+1)."</td>
$tccell1l>{$userpicture}</td>
$tccell2l>{$userlink}</td>
";
if(!$rpg){
$ulist.="
$tccell2><span title='". timeunits2(ctime() - $user['regdate']) ." ago'>".date($dateformat,$user['regdate']+$tzoff)."</span></td>
$tccell2><span title='". timeunits2(ctime() - $user['lastactivity']) ." ago'>".date($dateformat,$user['lastactivity']+$tzoff)."</span></td>
$tccell1r>{$user['posts']}</td>
$tccell1r>{$user['lvl']}</td>
$tccell1r>{$user['exp']}</td>
";
}
else {
if (!($class = $classes[$user['class']]))
$class = array('name'=>'None');
$stats=getstats($user,$items,$class);
$ulist.="$tccell1>$user[lvl]</td>";
$ulist.="$tccell1>$class[name]</td>";
for($k=0;$k<9;$k++) $ulist.="$tccell1s>".$stats[$stat[$k]].'</td>';
$ulist.="$tccell1s>$stats[GP]</td>";
$ulist.="$tccell1s>$user[gcoins]</td>";
}
$ulist.="</tr>";
}
print "$ulist$tblend$pagelinks$footer";
printtimedif($startingtime);