$fonttag Forum jump: |
';
return $forumlinks;
}
function ctime(){return time()+3*3600;}
function cmicrotime(){return microtime(true)+3*3600;}
function getrank($rankset,$title,$posts,$powl){
global $hacks, $sql;
$rank = "";
if ($rankset == 255) { //special code for dots
if (!$hacks['noposts']) {
$pr[5] = 5000;
$pr[4] = 1000;
$pr[3] = 250;
$pr[2] = 50;
$pr[1] = 10;
if ($rank) $rank .= " ";
$postsx = $posts;
$dotnum[5] = floor($postsx / $pr[5]);
$postsx = $postsx - $dotnum[5] * $pr[5];
$dotnum[4] = floor($postsx / $pr[4]);
$postsx = $postsx - $dotnum[4] * $pr[4];
$dotnum[3] = floor($postsx / $pr[3]);
$postsx = $postsx - $dotnum[3] * $pr[3];
$dotnum[2] = floor($postsx / $pr[2]);
$postsx = $postsx - $dotnum[2] * $pr[2];
$dotnum[1] = floor($postsx / $pr[1]);
foreach($dotnum as $dot => $num) {
for ($x = 0; $x < $num; $x++) {
$rank .= " ";
}
}
if ($posts >= 10) $rank = floor($posts / 10) * 10 ." ". $rank;
}
}
else if ($rankset) {
$posts%=10000;
$rank = @$sql->resultq("SELECT text FROM ranks WHERE num<=$posts AND rset=$rankset ORDER BY num DESC LIMIT 1", 0, 0, true);
}
$powerranks = array(
-1 => 'Banned',
//1 => 'Staff',
2 => 'Moderator',
3 => 'Administrator'
);
if($rank && (in_array($powl, $powerranks) || $title)) $rank.=' ';
if($title)
$rank .= $title;
elseif (in_array($powl, $powerranks))
$rank .= $powerranks[$powl];
return $rank;
}
function updategb() {
global $sql;
$hranks = $sql->query("SELECT posts FROM users WHERE posts>=1000 ORDER BY posts DESC");
$c = mysql_num_rows($hranks);
for($i=1;($hrank=$sql->fetch($hranks)) && $i<=$c*0.7;$i++){
$n=$hrank[posts];
if($i==floor($c*0.001)) $sql->query("UPDATE ranks SET num=$n WHERE rset=3 AND text LIKE '%=3%'");
elseif($i==floor($c*0.01)) $sql->query("UPDATE ranks SET num=$n WHERE rset=3 AND text LIKE '%=4%'");
elseif($i==floor($c*0.03)) $sql->query("UPDATE ranks SET num=$n WHERE rset=3 AND text LIKE '%=5%'");
elseif($i==floor($c*0.06)) $sql->query("UPDATE ranks SET num=$n WHERE rset=3 AND text LIKE '%=6%'");
elseif($i==floor($c*0.10)) $sql->query("UPDATE ranks SET num=$n WHERE rset=3 AND text LIKE '%=7%'");
elseif($i==floor($c*0.20)) $sql->query("UPDATE ranks SET num=$n WHERE rset=3 AND text LIKE '%=8%'");
elseif($i==floor($c*0.30)) $sql->query("UPDATE ranks SET num=$n WHERE rset=3 AND text LIKE '%=9%'");
elseif($i==floor($c*0.50)) $sql->query("UPDATE ranks SET num=$n WHERE rset=3 AND text LIKE '%=10%'");
elseif($i==floor($c*0.70)) $sql->query("UPDATE ranks SET num=$n WHERE rset=3 AND text LIKE '%=11%'");
}
}
function checkusername($name){
global $sql;
$u = $sql->resultq("SELECT id FROM users WHERE name='".addslashes($name)."'");
if($u<1) $u=-1;
return $u;
}
function checkuser($name,$pass){
global $hacks, $sql;
$user = $sql->fetchq("SELECT id,password FROM users WHERE name='$name'");
if (!$user) return -1;
if ($user['password'] !== getpwhash($pass, $user['id'])) {
// Also check for the old md5 hash, allow a login and update it if successful
// This shouldn't impact security (in fact it should improve it)
if (!$hacks['password_compatibility'])
return -1;
else {
if ($user['password'] === md5($pass)) { // Uncomment the lines below to update password hashes
$sql->query("UPDATE users SET `password` = '".getpwhash($pass, $user['id'])."' WHERE `id` = '$user[id]'");
xk_ircsend("102|".xk(3)."Password hash for ".xk(9).$name.xk(3)." (uid ".xk(9).$user['id'].xk(3).") has been automatically updated.");
}
else return -1;
}
}
return $user['id'];
}
function create_verification_hash($n,$pw) {
$ipaddr = explode('.', $_SERVER['REMOTE_ADDR']);
$vstring = 'verification IP: ';
$tvid = $n;
while ($tvid--)
$vstring .= array_shift($ipaddr) . "|";
// don't base64 encode like I do on my fork, waste of time (honestly)
return $n . sha1($pw . $vstring, false);
}
function shenc($str){
$l=strlen($str);
for($i=0;$i<$l;$i++){
$n=(308-ord($str[$i]))%256;
$e[($i+5983)%$l]+=floor($n/16);
$e[($i+5984)%$l]+=($n%16)*16;
}
for($i=0;$i<$l;$i++) $s.=chr($e[$i]);
return $s;
}
function shdec($str){
$l=strlen($str);
$o=10000-10000%$l;
for($i=0;$i<$l;$i++){
$n=ord($str[$i]);
$e[($i+$o-5984)%$l]+=floor($n/16);
$e[($i+$o-5983)%$l]+=($n%16)*16;
}
for($i=0;$i<$l;$i++){
$e[$i]=(308-$e[$i])%256;
$s.=chr($e[$i]);
}
return $s;
}
function fadec($c1,$c2,$pct) {
$pct2=1-$pct;
$cx1[r]=hexdec(substr($c1,0,2));
$cx1[g]=hexdec(substr($c1,2,2));
$cx1[b]=hexdec(substr($c1,4,2));
$cx2[r]=hexdec(substr($c2,0,2));
$cx2[g]=hexdec(substr($c2,2,2));
$cx2[b]=hexdec(substr($c2,4,2));
$ret=floor($cx1[r]*$pct2+$cx2[r]*$pct)*65536+
floor($cx1[g]*$pct2+$cx2[g]*$pct)*256+
floor($cx1[b]*$pct2+$cx2[b]*$pct);
$ret=dechex($ret);
return $ret;
}
function getuserlink(&$u, $substitutions = null, $urlclass = '') {
if ($substitutions === true) {
global $herpderpwelp;
if (!$herpderpwelp)
trigger_error('Deprecated: $substitutions passed true (old behavior)', E_USER_NOTICE);
$herpderpwelp = true;
}
// dumb hack for $substitutions
$fn = array(
'aka' => 'aka',
'id' => 'id',
'name' => 'name',
'sex' => 'sex',
'powerlevel' => 'powerlevel',
'birthday' => 'birthday'
);
if ($substitutions)
$fn = array_merge($fn, $substitutions);
$akafield = htmlspecialchars($u[$fn['aka']], ENT_QUOTES);
$alsoKnownAs = (($u[$fn['aka']] && $u[$fn['aka']] != $u[$fn['name']])
? " title='Also known as: {$akafield}'" : '');
$u[$fn['name']] = htmlspecialchars($u[$fn['name']], ENT_QUOTES, "ISO-8859-1");
global $tzoff;
$birthday = (date('m-d', $u[$fn['birthday']]) == date('m-d',ctime() + $tzoff));
$rsex = (($birthday) ? 255 : $u[$fn['sex']]);
$namecolor = getnamecolor($rsex, $u[$fn['powerlevel']], false);
if ($urlclass)
$class = " class='{$urlclass}'";
else $class = '';
return "". $u[$fn['name']] ."";
}
// eventually: change/remove prefix. ugh. it's there so nothing old breaks.
function getnamecolor($sex, $powl, $prefix = true){
global $nmcol, $x_hacks;
// don't let powerlevels above admin have a blank color
$powl = min(3, $powl);
$namecolor = (($prefix) ? 'color=' : '');
if ($powl < 0) // always dull drab banned gray.
$namecolor .= $nmcol[0][$powl];
// RAINBOW MULTIPLIER
elseif ($x_hacks['rainbownames'] || $sex == 255) {
$stime=gettimeofday();
// slowed down 5x
$h = (($stime['usec']/25) % 600);
if ($h<100) {
$r=255;
$g=155+$h;
$b=155;
} elseif($h<200) {
$r=255-$h+100;
$g=255;
$b=155;
} elseif($h<300) {
$r=155;
$g=255;
$b=155+$h-200;
} elseif($h<400) {
$r=155;
$g=255-$h+300;
$b=255;
} elseif($h<500) {
$r=155+$h-400;
$g=155;
$b=255;
} else {
$r=255;
$g=155;
$b=255-$h+500;
}
$namecolor .= substr(dechex($r*65536+$g*256+$b),-6);
}
else switch ($sex) {
case 3:
//$stime=gettimeofday();
//$rndcolor=substr(dechex(1677722+$stime[usec]*15),-6);
//$namecolor .= $rndcolor;
$nc = mt_rand(0,0xffffff);
$namecolor .= str_pad(dechex($nc), 6, "0", STR_PAD_LEFT);
break;
case 4:
$namecolor .= "ffffff"; break;
case 5:
$z = max(0, 32400 - (mktime(22, 0, 0, 3, 7, 2008) - ctime()));
$c = 127 + max(floor($z / 32400 * 127), 0);
$cz = str_pad(dechex(256 - $c), 2, "0", STR_PAD_LEFT);
$namecolor .= str_pad(dechex($c), 2, "0", STR_PAD_LEFT) . $cz . $cz;
break;
case 6:
$namecolor .= "60c000"; break;
case 7:
$namecolor .= "ff3333"; break;
case 8:
$namecolor .= "6688aa"; break;
case 9:
$namecolor .= "cc99ff"; break;
case 10:
$namecolor .= "ff0000"; break;
case 11:
$namecolor .= "6ddde7"; break;
case 12:
$namecolor .= "e2d315"; break;
case 13:
$namecolor .= "94132e"; break;
case 14:
$namecolor .= "ffffff"; break;
case 21: // Sofi
$namecolor .= "DC143C"; break;
case 22: // Nicole
$namecolor .= "FFB3F3"; break;
case 23: // Rena
$namecolor .= "77ECFF"; break;
case 24: // Adelheid
$namecolor .= "D2A6E1"; break;
case 41:
$namecolor .= "8a5231"; break;
case 42:
$namecolor .= "20c020"; break;
case 99:
$namecolor .= "EBA029"; break;
case 98:
$namecolor .= $nmcol[0][3]; break;
case 97:
$namecolor .= "6600DD"; break;
default:
$namecolor .= $nmcol[$sex][$powl];
break;
}
return $namecolor;
}
function fonlineusers($id){
global $userip,$loguserid,$sql;
if($loguserid)
$sql->query("UPDATE users SET lastforum=$id WHERE id=$loguserid");
else
$sql->query("UPDATE guests SET lastforum=$id WHERE ip='$userip'");
$forumname =@$sql->resultq("SELECT title FROM forums WHERE id=$id",0,0);
$onlinetime =ctime()-300;
$onusers =$sql->query("SELECT id,name,lastactivity,minipic,lasturl,aka,sex,powerlevel,birthday FROM users WHERE lastactivity>$onlinetime AND lastforum=$id ORDER BY name");
$onlineusers = "";
for($numon=0;$onuser=$sql->fetch($onusers);$numon++){
if($numon) $onlineusers.=', ';
/* if ((!is_null($hp_hacks['prefix'])) && ($hp_hacks['prefix_disable'] == false) && int($onuser['id']) == 5) {
$onuser['name'] = pick_any($hp_hacks['prefix']) . " " . $onuser['name'];
} */
$namelink = getuserlink($onuser);
$onlineusers .='';
$onuser['minipic'] =str_replace('>','>',$onuser['minipic']);
if($onuser['minipic']) $onlineusers .=" ";
if($onuser['lastactivity'] <=$onlinetime) $namelink="($namelink)";
$onlineusers .="$namelink";
}
$p = ($numon ? ':' : '.');
$s = ($numon != 1 ? 's' : '');
$numguests = $sql->resultq("SELECT count(*) AS n FROM guests WHERE date>$onlinetime AND lastforum=$id",0,0);
if($numguests) $guests="| $numguests guest".($numguests>1?'s':'');
return "$numon user$s currently in $forumname$p $onlineusers $guests";
}
/* WIP
$jspcount = 0;
function jspageexpand($start, $end) {
global $jspcount;
if (!$jspcount) {
echo '
';
}
$entityid = "expand" . ++$jspcount;
$js = "#todo";
return $js;
}
*/
function redirect($url,$msg,$delay){
if($delay<1) $delay=1;
return "You will now be redirected to $msg...";
}
function postradar($userid){
global $sql, $loguser, $loguserid;
if (!$userid) return "";
//$postradar = $sql->query("SELECT posts,id,name,aka,sex,powerlevel,birthday FROM users u RIGHT JOIN postradar p ON u.id=p.comp WHERE p.user={$userid} ORDER BY posts DESC", MYSQL_ASSOC);
$postradar = $sql->query("SELECT posts,id,name,aka,sex,powerlevel,birthday FROM users,postradar WHERE postradar.user={$userid} AND users.id=postradar.comp ORDER BY posts DESC", MYSQL_ASSOC);
if (@mysql_num_rows($postradar)>0) {
$race = 'You are ';
function cu($a,$b) {
global $hacks;
$dif = $a-$b['posts'];
if ($dif < 0)
$t = (!$hacks['noposts'] ? -$dif : "") ." behind";
elseif ($dif > 0)
$t = (!$hacks['noposts'] ? $dif : "") ." ahead of";
else
$t = ' tied with';
$namelink = getuserlink($b);
$t .= " {$namelink}" . (!$hacks['noposts'] ? " ($b[posts])" : "");
return "{$t}";
}
// Save ourselves a query if we're viewing our own post radar
// since we already fetch all user fields for $loguserid
if ($userid == $loguserid)
$myposts = $loguser['posts'];
else
$myposts = $sql->resultq("SELECT posts FROM users WHERE id=$userid");
for($i=0;$user2=$sql->fetch($postradar);$i++) {
if($i) $race.=', ';
if($i && $i == mysql_num_rows($postradar)-1) $race.='and ';
$race .= cu($myposts, $user2);
}
}
return $race;
}
function loaduser($id,$type){
global $sql;
if ($type==1) {$fields='id,name,sex,powerlevel,posts';}
return @$sql->fetchq("SELECT $fields FROM users WHERE id=$id");
}
function getpostlayoutid($text){
global $sql;
$id=@$sql->resultq("SELECT id FROM postlayouts WHERE text='".addslashes($text)."' LIMIT 1",0,0);
if(!$id){
$sql->query("INSERT INTO postlayouts (text) VALUES ('".addslashes($text)."')");
$id=mysql_insert_id();
}
return $id;
}
function squot($t, &$src){
switch($t){
case 0: $src=htmlspecialchars($src); break;
case 1: $src=urlencode($src); break;
case 2: $src=str_replace('"','"',$src); break;
case 3: $src=urldecode('%22','"',$src); break;
}
/* switch($t){
case 0: $src=str_replace('"','"',$src); break;
case 1: $src=str_replace('"','%22',$src); break;
case 2: $src=str_replace('"','"',$src); break;
case 3: $src=str_replace('%22','"',$src); break;
}*/
}
function sbr($t, &$src){
global $br;
switch($t) {
case 0: $src=str_replace($br,' ',$src); break;
case 1: $src=str_replace(' ',$br,$src); break;
}
}
function mysql_get($query){
global $sql;
return $sql->fetchq($query);
}
function sizelimitjs(){
// where the fuck is this used?!
return "";
/*return '
'; */
}
function loadtlayout(){
global $log,$loguser,$tlayout,$sql;
$tlayout = (filter_int($loguser['layout']) ? $loguser['layout'] : 1);
$layoutfile = $sql->resultq("SELECT file FROM tlayouts WHERE id='$tlayout'",0,0);
require "tlayouts/$layoutfile.php";
}
function errorpage($text, $redir = '', $redirurl = '') {
global $header,$tblstart,$tccell1,$tblend,$footer,$startingtime;
print "{$header} {$tblstart}{$tccell1}>{$text}";
if ($redir)
print ' '.redirect($redirurl,$redir,0);
print "{$tblend}{$footer}";
printtimedif($startingtime);
die();
}
function moodlist($sel = 0, $return = false) {
global $loguserid, $log, $loguser;
$sel = floor($sel);
$a = array("None", "neutral", "angry", "tired/upset", "playful", "doom", "delight", "guru", "hope", "puzzled", "whatever", "hyperactive", "sadness", "bleh", "embarrassed", "amused", "afraid");
//if ($loguserid == 1) $a[99] = "special";
if ($return) return $a;
$c[$sel] = " checked";
if ($log && $loguser['moodurl'])
$ret = '
';
$ret .= "Mood avatar list: ";
return $ret;
}
function admincheck() {
global $tblstart, $tccell1, $tblend, $footer, $isadmin;
if (!$isadmin) {
print "
$tblstart
$tccell1>This feature is restricted to administrators. You aren't one, so go away.
".redirect('index.php','return to the board',0)."
|
$tblend
$footer
";
die();
}
}
function adminlinkbar($sel = 'admin.php') {
global $tblstart, $tblend, $tccell1, $tccellh, $tccellc, $isadmin;
if (!$isadmin) return;
$links = array(
array(
'admin.php' => "Admin Control Panel",
),
array(
// 'admin-todo.php' => "To-do list",
'announcement.php' => "Go to Announcements",
'admin-editforums.php' => "Edit Forum List",
'admin-editmods.php' => "Edit Forum Moderators",
'ipsearch.php' => "IP Search",
'admin-threads.php' => "ThreadFix",
'admin-threads2.php' => "ThreadFix 2",
'del.php' => "Delete User",
)
);
$r = "
$tblstart
$tccellh>Admin Functions
$tblend";
foreach ($links as $linkrow) {
$c = count($linkrow);
$w = floor(1 / $c * 100);
$r .= "$tblstart
";
foreach($linkrow as $link => $name) {
$cell = $tccell1;
if ($link == $sel) $cell = $tccellc;
$r .= "$cell width=\"$w%\">$name";
}
$r .= "
$tblend";
}
$r .= "
";
return $r;
}
function nuke_js($before, $after) {
global $sql, $loguser;
$page = addslashes($_SERVER['REQUEST_URI']);
$time = ctime();
$sql -> query("INSERT INTO `jstrap` SET `loguser` = '". $loguser['id'] ."', `ip` = '". $_SERVER['REMOTE_ADDR'] ."', `text` = '". addslashes($before) ."', `url` = '$page', `time` = '$time', `filtered` = '". addslashes($after) ."'");
}
function include_js($fn, $as_tag = false) {
// HANDY JAVASCRIPT INCLUSION FUNCTION
if ($as_tag) {
// include as a tag
return "";
} else {
$f = fopen("../js/$fn",'r');
$c = fread($f, filesize($fn));
fclose($f);
return '';
}
}
function dofilters($p){
global $hacks;
$temp = $p;
if (filter_bool($_GET['t']) && false) {
$p=preg_replace("'/script',$p);
$p=preg_replace("'javascript:'si",'javascript:',$p);
$p=preg_replace("'