connect($sqlhost, $sqluser, $sqlpass) or die("
"; return "". str_replace($list, $list2, $text[0]) ."
"; } function doreplace2($msg, $options = null, $mood = 0) { // @TODO php7.4 or w/e null coalescing if ($options === null) $options = '0|0'; $mood = intval($mood); // options will contain smiliesoff|htmloff $options = explode("|", $options); $smiliesoff = $options[0]; $htmloff = $options[1]; $list = array("<", "\\\"" , "\\\\" , "\\'", "[", ":", ")", "_"); $list2 = array("<", "\"", "\\", "\'", "[", ":", ")", "_"); $msg=preg_replace_callback("'\[code\](.*?)\[/code\]'si", 'escape_codeblock',$msg); if ($htmloff) { $msg = str_replace("<", "<", $msg); $msg = str_replace(">", ">", $msg); } if (!$smiliesoff) { global $smilies; if(!$smilies) $smilies=readsmilies(); for($s=0;$smilies[$s][0];$s++){ $smilie=$smilies[$s]; $msg=str_replace($smilie[0],"". str_replace($list, $list2, $text[0]) ."
Originally posted by \\1
', $msg); $msg=str_replace('[quote]','',$msg); $msg=preg_replace("'\[sp=(.*?)\](.*?)\[/sp\]'si", '\\2', $msg); $msg=preg_replace("'\[abbr=(.*?)\](.*?)\[/abbr\]'si", '\\2', $msg); $msg=str_replace('[spoiler]','',$msg); $msg=str_replace('[spoileri]','',$msg); $msg=preg_replace("'\[(b|i|u|s)\]'si",'<\\1>',$msg); $msg=preg_replace("'\[/(b|i|u|s)\]'si",'\\1>',$msg); $msg=preg_replace("'\[img\](.*?)\[/img\]'si", '
',$msg); $msg=str_replace('[/quote]','', $msg); $msg=preg_replace("'\[url\](.*?)\[/url\]'si", '\\1', $msg); $msg=preg_replace("'\[url=(.*?)\](.*?)\[/url\]'si", '\\2', $msg); $msg=str_replace('http://nightkev.110mb.com/justus_layout.css','about:blank',$msg); do { $msg = preg_replace("/<(\/?)t(able|h|r|d)(.*?)>(\s+?)<(\/?)t(able|h|r|d)(.*?)>/si", "<\\1t\\2\\3><\\5t\\6\\7>", $msg, -1, $replaced); } while ($replaced >= 1); sbr(0,$msg); return $msg; } function settags($text, $tags) { if (!$tags) { return $text; } else { $text = dotags($text, array(), $tags); } return $text; } function doforumlist($id){ global $fonttag,$loguser,$power,$sql; $forumlinks="
'; 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 .= "
$fonttag Forum jump:
"; $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 .= filter_string($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); 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 .=" "; } $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 = 1){ if ($delay >= 0) { return "You will now be redirected to $msg..."; } else { return "Go back 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 ""; if($onuser['lastactivity'] <=$onlinetime) $namelink="($namelink)"; $onlineusers .="$namelink
{$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 boardmessage($text, $title = "Message") { global $header,$tblstart,$tccellh,$tccell1,$tblend,$footer,$startingtime; print " $header
$tblstart$tccellh>$title $tccell1 style='padding: 1em 0;'>$text $tblend $footer "; printtimedif($startingtime); die(); } function moodlist($sel = 0, $return = false) { global $loguserid, $log, $loguser; $sel = intval($sel); $moodlist = array( "(default)", "neutral", "angry", "tired/upset", "playful", "doom", "delight", "guru", "hope", "puzzled", "whatever", "hyperactive", "sadness", "bleh", "embarrassed", "amused", "afraid" ); if ($return) return $moodlist; $ret = "\n"; 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 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; $p=preg_replace("'position\s*:\s*fixed'si", "display:none", $p); //$p=preg_replace("':awesome:'","[unfunny]", $p); $p=preg_replace("':facepalm:'si",'',$p); $p=preg_replace("':facepalm2:'si",'
',$p); $p=preg_replace("':epicburn:'si",'
',$p); $p=preg_replace("':umad:'si",'
',$p); $p=preg_replace("':gamepro5:'si",'
',$p); $p=preg_replace("':headdesk:'si",'
',$p); $p=preg_replace("':rereggie:'si",'
',$p); $p=preg_replace("':tmyk:'si",'
',$p); $p=preg_replace("':jmsu:'si",'
',$p); $p=preg_replace("':noted:'si",'
',$p); $p=preg_replace("':apathy:'si",'
',$p); $p=preg_replace("':spinnaz:'si", '
', $p); $p=preg_replace("':trolldra:'si", '
', $p); $p=preg_replace("':reggie:'si",'
',$p); $p=preg_replace("'zeon'si",'shit',$p); if (filter_bool($hacks['comments'])) { $p=str_replace("", '-->', $p); } //$p=preg_replace("'(https?://.*?photobucket.com/)'si",'images/photobucket.png#\\1',$p); $p=preg_replace("'http://.{0,3}\.?tinypic\.com'si",'tinyshit',$p); $p=str_replace('',"",$p); $p=str_replace("tabindex=\"0\" ","title=\"the owner of this button is a fucking dumbass\" ",$p); // $p=str_replace("http://xkeeper.shacknet.nu:5/", 'http://xchan.shacknet.nu:5/', $p); // $p=preg_replace("'