upboard.php
1 <? 2 3 function upboard_tags() 4 { 5 // if you add tags to this, make sure to keep the numbers the same 6 // (they can be out of order) 7 static $tags = array( 8 0 => array("long" => "Hentai", "short" => "[H]"), 9 6 => array("long" => "Porn", "short" => '[P]'), 10 1 => array("long" => "Japanese", "short" => "[J]"), 11 2 => array("long" => "Anime", "short" => "[A]"), 12 3 => array("long" => "Game", "short" => "[G]"), 13 5 => array("long" => "Loop", "short" => "[L]"), 14 4 => array("long" => "Other", "short" => "[?]") 15 ); 16 17 return $tags; 18 } 19 20 function updatelog( $resno = 0, $rebuild = 0 ) 21 { 22 $tags = upboard_tags(); 23 24 $imgdir = IMG_DIR2; 25 $thumbdir = THUMB_DIR2; 26 $imgurl = STATIC_IMG_DIR2; 27 $sqlog = SQLLOG; // to make this a shite load easier 28 29 $find = false; 30 $resno = (int)$resno; 31 32 log_cache(); 33 34 if( $resno ) { 35 $result = mysql_board_call( "SELECT `no` FROM `$sqlog` WHERE `root` > 0 AND `no` = '$resno'" ); 36 if( $result ) { 37 $find = mysql_fetch_row( $result ); 38 mysql_free_result( $result ); 39 } 40 41 if( !$find ) { 42 $result2 = mysql_board_call( "SELECT `no`, `resto` FROM `$sqlog` WHERE `no` = '$resno'" ); 43 44 list( $chkno, $resto ) = mysql_fetch_row( $result2 ); 45 if( !$resto ) { 46 error( S_REPORTERR ); 47 } 48 49 mysql_free_result( $result2 ); 50 51 $result3 = mysql_board_call( "SELECT `no` FROM `$sqlog` WHERE `no` = '$resto'" ); 52 if( $result3 ) { 53 $chkfind = mysql_fetch_row( $result3 ); 54 mysql_free_result( $result3 ); 55 } 56 57 if( !$chkfind ) { 58 error( S_REPORTERR ); 59 } 60 } 61 } 62 63 if( $resno ) { 64 if( !$treeline = mysql_board_call( "SELECT * FROM `$sqlog` WHERE `root` > 0 AND `no` = '$resno' ORDER BY `root` DESC" ) ) { 65 echo S_SQLFAIL; 66 } 67 68 69 } else { 70 if( !$treeline = mysql_board_call( "SELECT * FROM `$sqlog` WHERE `root` > 0 ORDER BY `root` DESC" ) ) { 71 echo S_SQLFAIL; 72 } 73 } 74 75 if( $resno ) { 76 //logtime("Generating thread JSON"); 77 if( ENABLE_JSON ) generate_thread_json( $resno ); 78 79 //$treeline = array( $resno ); 80 //logtime("Formatting thread page"); 81 } else { 82 //logtime("Generating index JSON"); 83 if( ENABLE_JSON_INDEXES ) generate_index_json(); 84 if( ENABLE_JSON_CATALOG ) generate_board_catalogue(); 85 if( ENABLE_JSON_THREADS ) generate_board_threads_json(); 86 87 //$treeline = $log['THREADS']; 88 //logtime("Formatting index page"); 89 } 90 91 if( !$result = mysql_board_call( "SELECT MAX(`no`) FROM `$sqlog`" ) ) { 92 echo S_SQLFAIL; 93 } 94 95 $row = mysql_fetch_array( $result ); 96 $lastno = (int)$row[0]; 97 mysql_free_result( $result ); 98 99 $counttree = mysql_num_rows( $treeline ); 100 101 if( !$counttree ) { 102 $logfilename = SELF_PATH2_FILE; 103 $dat = ''; 104 105 head( $dat, $resno ); 106 form( $dat, $resno ); 107 print_page( $logfilename, $dat ); 108 } 109 110 $page = 0; 111 $dat = ''; 112 113 head( $dat, $resno ); 114 form( $dat, $resno ); 115 116 if( !$resno ) { 117 $st = $page; 118 } 119 120 $dat .= '<hr style="clear:both"><form name="delform" action="' . SELF_PATH_ABS . '" method="post" id="delform"><div class="board">'; 121 122 // here we go 123 if( !$resno ) { 124 $dat .= <<<HTML 125 <table class="flashListing"> 126 <tr> 127 <td class="postblock">No.</td> 128 <td class="postblock">Name</td> 129 <td class="postblock">File</td> 130 <td class="postblock">Tag</td> 131 <td class="postblock">Subject</td> 132 <td class="postblock">Size</td> 133 <td class="postblock">Date</td> 134 <td class="postblock">Replies</td> 135 <td class="postblock"></td> 136 </tr> 137 HTML; 138 } 139 140 $delarr = array(); 141 $limit = (int)round( DEF_PAGES * 0.83 ); 142 $lim = DEF_PAGES - $limit; 143 144 if( !$result = mysql_board_call( "SELECT COUNT(*) FROM `$sqlog` WHERE `resto` = '0'" ) ) { 145 echo S_SQLFAIL; 146 } 147 148 $row = mysql_fetch_array( $result ); 149 $countth = (int)$row[0]; 150 151 if( $limit < $countth ) { 152 if( !$result = mysql_board_call( "SELECT `no` FROM `$sqlog` WHERE `resto` = '0' ORDER BY `no` ASC LIMIT $lim" ) ) { 153 echo S_SQLFAIL; 154 } 155 156 while( $row = mysql_fetch_array( $result ) ) { 157 $delarr[] = (int)$row[0]; 158 } 159 } 160 161 mysql_free_result( $result ); 162 163 for( $i = $st; $i < $st + DEF_PAGES; $i++ ) { // NO PAGES FOR /f/ (apparently!) 164 //if( !mysql_fetch_assoc($treeline) ) continue; 165 166 $thistree = mysql_fetch_assoc( $treeline ); 167 if( !$thistree ) break; 168 169 extract( $thistree ); 170 //list($no,$sticky,$permasage,$closed,$now,$name,$email,$sub,$com,$host,$pwd,$filename,$ext,$w,$h,$tn_w,$tn_h,$tim,$time,$md5,$fsize,$root,$resto,$filedeleted,$tmd5,$id,$capcode)=mysql_fetch_row($treeline); 171 172 $tag_matches = array(); 173 $tag = 4; 174 175 if( preg_match( '/^(\d+)\|/', $sub, $tag_matches ) ) { 176 $tag = (int)( $tag_matches[1] ); 177 $sub = preg_replace( '/^(\d+)\|/', '', $sub ); 178 } 179 180 if( $resno ) { 181 if( !$no ) { 182 break; 183 } 184 185 186 $sub = str_replace( ',', ',', $sub ); 187 188 $emailstart = $emailend = ''; 189 //if( $email != '' ) { 190 // $email = emailencode($email); 191 // $emailstart = '<a href="mailto:' . $email . '" class="useremail">'; 192 // $emailend = '</a>'; 193 //} 194 195 // NEW CAPCODE STUFF 196 197 switch( $capcode ) { 198 case 'admin': 199 $capcodeStart = ' <strong class="capcode">## Admin</strong>'; 200 $capcode_class = ' capcodeAdmin'; 201 202 $capcode = ' <img src="' . $imgurl . 'adminicon.gif" alt="This user is the 4chan Administrator." title="This user is the 4chan Administrator." class="identityIcon">'; 203 $highlight = ''; 204 break; 205 206 case 'admin_highlight': 207 $capcodeStart = ' <strong class="capcode">## Admin</strong>'; 208 $capcode_class = ' capcodeAdmin'; 209 210 $capcode = ' <img src="' . $imgurl . 'adminicon.gif" alt="This user is the 4chan Administrator." title="This user is the 4chan Administrator." class="identityIcon">'; 211 $highlight = ' highlightPost'; 212 break; 213 214 case 'mod': 215 $capcodeStart = ' <strong class="capcode">## Mod</strong>'; 216 $capcode_class = ' capcodeMod'; 217 218 $capcode = ' <img src="' . $imgurl . 'modicon.gif" alt="This user is a 4chan Moderator." title="This user is a 4chan Moderator." class="identityIcon">'; 219 $highlight = ''; 220 break; 221 222 case 'developer': 223 $capcodeStart = ' <strong class="capcode">## Developer</strong>'; 224 $capcode_class = ' capcodeDeveloper'; 225 226 $capcode = ' <img src="' . $imgurl . 'developericon.gif" alt="This user is a 4chan Developer." title="This user is a 4chan Developer." class="identityIcon">'; 227 $highlight = ''; 228 break; 229 230 case 'manager': 231 $capcodeStart = ' <strong class="capcode hand id_manager" title="Highlight posts by Managers">## Manager</strong>'; 232 $capcode_class = ' capcodeManager'; 233 234 $capcode = ' <img src="' . $imgurl . 'managericon.gif" alt="Manager Icon" title="This user is a 4chan Manager." class="identityIcon retina">'; 235 $highlight = ''; 236 break; 237 238 case 'verified': 239 $capcodeStart = ' <strong class="capcode hand id_verified" title="Highlight posts by Verified Users">## Verified</strong>'; 240 $capcode_class = ' capcodeVerified'; 241 242 $capcode = ''; 243 $highlight = ''; 244 break; 245 246 default: 247 $capcode = $capcodeStart = $highlight = $capcode_class = ''; 248 break; 249 } 250 251 $com = auto_link( $com, $resno ); 252 253 $subshort = $sub; 254 if( mb_strlen( $sub ) > 28 ) { 255 $subshort = '<span title="' . $sub . '">' . mb_substr( $sub, 0, 25, 'UTF-8' ) . '(...)</span>'; 256 } 257 258 $file = ''; 259 if( $ext ) { 260 $img = IMG_DIR . $tim . $ext; 261 262 $displaysrc = $imgdir . rawurlencode( $filename ) . $ext; 263 264 $src = IMG_DIR . $filename . $ext; 265 266 $longname = $filename . $ext; 267 268 if( $fsize >= 1048576 ) { 269 $size = round( $fsize / 1048576, 2 ) . ' M'; 270 } elseif( $fsize >= 1024 ) { 271 $size = round( $fsize / 1048 ) . ' K'; 272 } else { 273 $size = $fsize . ' '; 274 } 275 276 if( $filedeleted ) { 277 $imgsrc = '[<b>File Deleted</b>]'; 278 $class = ''; 279 } else { 280 $imgsrc = '<span class="fileText" id="fT' . $no . '">' . S_PICNAME . ': <a data-width="' . $w . '" data-height="' . $h . '" href="' . $displaysrc . '" target="_blank">' . $longname . '</a>-(' . $size . 'B, ' . $w . 'x' . $h . ', ' . $tags[$tag]['long'] . ')'; 281 $class = ' class="fileInfo"'; 282 } 283 284 $imgClassStart = ( $imgsrc == '' ) ? '' : '<div class="fileInfo">'; 285 $imgClassEnd = ( $imgsrc == '' ) ? '' : '</div>'; 286 287 $file = <<<HTML 288 <div class="file" id="f$no"> 289 $imgClassStart 290 $imgsrc 291 $imgClassEnd 292 </div> 293 HTML; 294 } 295 296 // Main creatio 297 if( $sticky == 1 ) { 298 $threadmodes .= ' <img src="' . $imgurl . 'sticky.gif" alt="Sticky" title="Sticky" style="height: 18px; width: 18px;"/>'; 299 } 300 301 if( $closed == 1 ) { 302 $threadmodes .= ' <img src="' . $imgurl . 'closed.gif" alt="Closed" title="Closed" style="height: 18px; width: 18px;"/>'; 303 } 304 305 306 $href = ( $resno ) ? $no . PHP_EXT2 : RES_DIR2 . $no . PHP_EXT2; 307 $quote = ( $resno ) ? 'javascript:quote(\'' . $no . '\');' : $href . '#q' . $no; 308 309 $extra = ''; 310 311 $stickies = array(); 312 if( !$result = mysql_board_call( "SELECT `no` FROM `$sqlog` WHERE `sticky` = '1'" ) ) { 313 echo S_SQLFAIL; 314 } 315 316 while( $stickrow = mysql_fetch_row( $result ) ) { 317 list( $stickno ) = $stickrow; 318 $stickies[] = $stickno; 319 } 320 321 if( in_array( $no, $delarr ) ) { 322 if( in_array( $no, $stickies ) ) { 323 $stuck = 1; 324 } 325 326 if( $stuck != 1 ) { 327 $extra = '<span class="oldpost">' . S_OLD . '</span>'; 328 } 329 } 330 331 332 $dat .= <<<HTML 333 <div class="thread" id="t$no"> 334 <div class="postContainer opContainer" id="pc$no"> 335 <div id="p$no" class="post op$highlight"> 336 <div class="postInfoM mobile" id="pim$no"> 337 <span class="nameBlock$capcode_class"> 338 $emailstart<span class="name">$name</span>$capcodeStart$emailend$dispuid$countryFlag$threadmodes<br> 339 <span class="subject">$subshort</span> 340 </span> 341 342 <span class="dateTime postNum" data-utc="$time">$now<br><em><a href="$href#p$no">No.</a><a href="$quote">$no</a></em></span> 343 </div> 344 345 $file 346 347 <div class="postInfo desktop" id="pi$no"> 348 <input type="checkbox" name="$no" value="delete"> 349 <span class="subject">$sub</span> 350 <span class="nameBlock$capcode_class"> 351 $emailstart<span class="name">$name</span>$capcodeStart$emailend$dispuid$countryFlag 352 </span> 353 354 <span class="dateTime" data-utc="$time">$now</span> 355 356 <span class="postNum"> 357 <a href="$href#p$no" title="Link to this post">No.</a><a href="$quote" title="Reply to this post">$no</a>$threadmodes$postinfo_extra 358 </span> 359 360 </div> 361 362 <blockquote class="postMessage" id="m$no">$com</blockquote> 363 </div> 364 365 $postInfo 366 </div> 367 368 $extra 369 370 HTML; 371 372 if( !$resline = mysql_board_call( "SELECT * FROM `$sqlog` WHERE `resto` = '$no' ORDER BY `no`" ) ) { 373 echo S_SQLFAIL; 374 } 375 376 $countres = mysql_num_rows( $resline ); 377 $s = 0; 378 379 380 while( $resrow = mysql_fetch_assoc( $resline ) ) { 381 extract( $resrow ); 382 //list($no,$sticky,$permasage,$closed,$now,$name,$email,$sub,$com,$host,$pwd,$filename,$ext,$w,$h,$tn_w,$tn_h,$tim,$time,$md5,$fsize,$root,$resto)=$resrow; 383 384 385 if( !$no ) { 386 break; 387 } 388 389 $emailstart = $emailend = ''; 390 //if( $email != '' ) { 391 // $email = emailencode($email); 392 // $emailstart = '<a href="mailto:' . $email . '" class="useremail">'; 393 // $emailend = '</a>'; 394 //} 395 396 // NEW CAPCODE STUFF 397 398 switch( $capcode ) { 399 case 'admin': 400 $capcodeStart = ' <strong class="capcode">## Admin</strong>'; 401 $capcode_class = ' capcodeAdmin'; 402 403 $capcode = ' <img src="' . $imgurl . 'adminicon.gif" alt="This user is the 4chan Administrator." title="This user is the 4chan Administrator." class="identityIcon">'; 404 $highlight = ''; 405 break; 406 407 case 'admin_highlight': 408 $capcodeStart = ' <strong class="capcode">## Admin</strong>'; 409 $capcode_class = ' capcodeAdmin'; 410 411 $capcode = ' <img src="' . $imgurl . 'adminicon.gif" alt="This user is the 4chan Administrator." title="This user is the 4chan Administrator." class="identityIcon">'; 412 $highlight = ' highlightPost'; 413 break; 414 415 case 'mod': 416 $capcodeStart = ' <strong class="capcode">## Mod</strong>'; 417 $capcode_class = ' capcodeMod'; 418 419 $capcode = ' <img src="' . $imgurl . 'modicon.gif" alt="This user is a 4chan Moderator." title="This user is a 4chan Moderator." class="identityIcon">'; 420 $highlight = ''; 421 break; 422 423 case 'developer': 424 $capcodeStart = ' <strong class="capcode">## Developer</strong>'; 425 $capcode_class = ' capcodeDeveloper'; 426 427 $capcode = ' <img src="' . $imgurl . 'developericon.gif" alt="This user is a 4chan Developer." title="This user is a 4chan Developer." class="identityIcon">'; 428 $highlight = ''; 429 break; 430 431 case 'manager': 432 $capcodeStart = ' <strong class="capcode hand id_manager" title="Highlight posts by Managers">## Manager</strong>'; 433 $capcode_class = ' capcodeManager'; 434 435 $capcode = ' <img src="' . $imgurl . 'managericon.gif" alt="Manager Icon" title="This user is a 4chan Manager." class="identityIcon retina">'; 436 $highlight = ''; 437 break; 438 439 default: 440 $capcode = $capcodeStart = $highlight = $capcode_class = ''; 441 break; 442 } 443 444 $com = auto_link( $com, $no ); 445 446 $subshort = $sub; 447 448 if( mb_strlen( $sub ) > 28 ) { 449 450 $subshort = '<span title="' . $sub . '">' . mb_substr( $sub, 0, 25, 'UTF-8' ) . '(...)</span>'; 451 452 } 453 454 $href = ( $resno ) ? $resto . PHP_EXT2 : RES_DIR2 . $resto . PHP_EXT2; 455 $quote = ( $resno ) ? 'javascript:quote(\'' . $no . '\');' : $href . '#q' . $no; 456 457 458 $dat .= <<<HTML 459 460 461 462 <div class="postContainer replyContainer" id="pc$no"> 463 <div class="sideArrows" id="sa$no">>></div> 464 <div id="p$no" class="post reply$highlight"> 465 <div class="postInfoM mobile" id="pim$no"> 466 <span class="nameBlock$capcode_class"> 467 $emailstart<span class="name">$name</span>$capcodeStart$emailend$dispuid$countryFlag$threadmodes<br> 468 <span class="subject">$subshort</span> 469 </span> 470 471 <span class="dateTime postNum" data-utc="$time">$now<br><em><a href="$href#p$no" title="Link to this post">No.</a><a href="$quote" title="Reply to this post">$no</a></em></span> 472 </div> 473 474 <div class="postInfo desktop" id="pi$no"> 475 <input type="checkbox" name="$no" value="delete"> 476 <span class="subject">$sub</span> 477 <span class="nameBlock$capcode_class"> 478 $emailstart<span class="name">$name</span>$capcodeStart$emailend $dispuid$countryFlag 479 </span> 480 481 <span class="dateTime" data-utc="$time">$now</span> 482 483 <span class="postNum desktop"> 484 <a href="$href#p$no" title="Link to this post">No.</a><a href="$quote" title="Reply to this post">$no</a> 485 </span> 486 487 </div> 488 <blockquote class="postMessage" id="m$no">$com</blockquote> 489 </div> 490 </div> 491 HTML; 492 } 493 494 // end thread 495 $dat .= '</div><hr>'; 496 497 //clearstatcache(); 498 mysql_free_result( $resline ); 499 $p++; 500 break; 501 } else { 502 503 /** BUILD /f/ INDEX **/ 504 505 if( !$resline = mysql_board_call( "SELECT * FROM `$sqlog` WHERE `resto` = '$no' ORDER BY `no`" ) ) { 506 echo S_SQLFAIL; 507 } 508 509 $countres = mysql_num_rows( $resline ); 510 511 if( $fsize >= 1048576 ) { 512 $kbsize = round( ( $fsize / 1048576 ), 2 ) . ' M'; 513 } elseif( $fsize >= 1024 ) { 514 $kbsize = round( $fsize / 1024 ) . ' K'; 515 } else { 516 $kbsize = $fsize . ' '; 517 } 518 $kbsize .= 'B'; 519 520 $emailstart = $emailend = ''; 521 522 523 //if( $email != '' ) { 524 // $email = emailencode($email); 525 // $emailstart = '<a href="mailto:' . $email . '" class="useremail">'; 526 // $emailend = '</a>'; 527 //} 528 529 if( mb_strlen( $filename ) > 25 ) { 530 $shortname = mb_substr( $filename, 0, 25, 'UTF-8' ) . "(...)"; 531 } else { 532 $shortname = $filename; 533 } 534 535 if( $kbsize != '0 B' ) { 536 $class = ''; 537 if( in_array( $no, $delarr ) ) { 538 $class = 'class="oldpost"'; 539 } 540 541 542 $texttag = $tags[$tag]['short']; 543 544 if ($sub != '') { 545 $sub = str_replace(',', ',', $sub); 546 547 if (mb_strlen($sub) > 30) { 548 $shortsub = mb_substr($sub, 0, 30, 'UTF-8') . '(...)'; 549 } 550 else { 551 $shortsub = $sub; 552 } 553 } 554 else { 555 $com = str_replace(',', ',', $com); 556 $com = explode('<', $com)[0]; 557 if (mb_strlen($com) > 30) { 558 $shortsub = mb_substr($com, 0, 30, 'UTF-8') . '(...)'; 559 } 560 else { 561 $shortsub = $com; 562 } 563 } 564 565 $replink = RES_DIR2 . $no . PHP_EXT2; 566 567 $semantic_url = generate_href_context($sub, $com); 568 569 if ($semantic_url != '') { 570 $semantic_url = "/$semantic_url"; 571 } 572 573 $filelink = IMG_DIR2 . rawurlencode( $filename ) . '.swf'; 574 575 576 // NEW CAPCODE STUFF 577 578 if( $capcode === 'admin' ) { 579 580 $capcodeStart = ' <strong class="capcode capcodeAdmin">## Admin</strong>'; 581 582 $capcode_class = ' capcodeAdmin'; 583 584 585 $capcode = ' <img src="' . $imgurl . 'adminicon.gif" alt="This user is the 4chan Administrator." title="This user is the 4chan Administrator." class="identityIcon">'; 586 587 $highlight = ''; 588 589 } elseif( $capcode === 'mod' ) { 590 591 $capcodeStart = ' <strong class="capcode capcodeAdmin">## Mod</strong>'; 592 593 $capcode_class = ' capcodeMod'; 594 595 596 $capcode = ' <img src="' . $imgurl . 'modicon.gif" alt="This user is a 4chan Moderator." title="This user is a 4chan Moderator." class="identityIcon">'; 597 598 $highlight = ''; 599 600 } elseif( $capcode === 'admin_highlight' ) { 601 602 $capcodeStart = ' <strong class="capcode capcodeAdmin">## Admin</strong>'; 603 604 $capcode_class = ' capcodeAdmin'; 605 606 607 $capcode = ' <img src="' . $imgurl . 'adminicon.gif" alt="This user is the 4chan Administrator." title="This user is the 4chan Administrator." class="identityIcon">'; 608 609 $highlight = ' highlightPost'; 610 611 } else { 612 613 $capcode = $capcodeStart = $highlight = $capcode_class = ''; 614 615 } 616 617 $oldclass = in_array( $no, $delarr ) ? ' class="highlightPost"' : ''; 618 619 620 $dat .= <<<HTML 621 622 <tr$oldclass> 623 624 <td>$no</td> 625 626 <td class="name-col$capcode_class">$emailStart<span class="name">$name</span>$emailEnd$capcodeStart$capcode</td> 627 <td class="file-col">[<a href="$filelink" title="$filename" data-width="$w" data-height="$h" target="_blank">$shortname</a>]</td> 628 <td>$texttag</td> 629 <td class="subject"><span title="$sub">$shortsub</span></td> 630 <td>$kbsize</td> 631 <td>$now</td> 632 <td>$countres</td> 633 <td>[<a href="$replink$semantic_url">Reply</a>]</td> 634 635 </tr> 636 637 HTML; 638 } 639 640 //clearstatcache(); 641 mysql_free_result( $resline ); 642 } // end /f/ 643 } // no pages for /f/ 644 645 $lang = $resno ? S_FORM_REPLY : S_FORM_THREAD; 646 647 if( !$resno ) { 648 $dat .= '</table><hr></div>'; 649 } else { 650 $dat .= '<div class="navLinks navLinksBot desktop">[<a href="/' . BOARD_DIR . '/" accesskey="a">' . S_RETURN . '</a>] [<a href="#top">' . S_TOP . '</a>] </div><hr class="desktop">'; 651 $dat .= ' 652 <div class="mobile center"><a class="mobilePostFormToggle button" href="#">' . $lang . '</a></div> 653 </div>'; 654 } 655 656 657 if (!$resno) { 658 $dat .= '<div class="navLinks navLinksBot mobile"><span class="mobileib button"><a href="#top">' . S_TOP . '</a></span> <span class="mobileib button"><a href="#bottom_r" id="refresh_bottom">' . S_REFRESH . '</a></span></div><hr class="mobile">'; 659 } 660 else { 661 $dat .= '<div class="navLinks mobile"><span class="mobileib button"><a href="/' . BOARD_DIR . '/" accesskey="a">' . S_RETURN . '</a></span> <span class="mobileib button"><a href="#top">' . S_TOP . '</a></span> <span class="mobileib button"><a href="#bottom_r" id="refresh_bottom">' . S_REFRESH . '</a></span></div><hr class="mobile">'; 662 } 663 /* 664 if( AD_BOTTOM_ENABLE == 1 ) { 665 $bottomad = ""; 666 667 if( defined( "AD_BOTTOM_TEXT" ) && AD_BOTTOM_TEXT ) { 668 $bottomad .= '<div class="bottomad center ad-cnt">' . ad_text_for( AD_BOTTOM_TEXT ) . '</div>' . (defined('AD_BOTTOM_PLEA') ? AD_BOTTOM_PLEA : ''); 669 } else if( defined( "AD_BOTTOM_TABLE" ) && AD_BOTTOM_TABLE ) { 670 list( $bottomimg, $bottomlink ) = rid( AD_BOTTOM_TABLE, 1 ); 671 $bottomad .= "<div class=\"center\"><a href=\"$bottomlink\" target=\"_blank\"><img class=\"bottomad\" src=\"$bottomimg\" alt=\"\"></a></div>"; 672 } 673 674 if( $bottomad ) { 675 $dat .= "$bottomad<hr>"; 676 } 677 } 678 */ 679 680 /** 681 * ADS 682 */ 683 684 if (defined('AD_ADGLARE_BOTTOM') && AD_ADGLARE_BOTTOM) { 685 $dat .= '<div class="adg-rects desktop"><div class="adg adp-90" id=zone' . AD_ADGLARE_BOTTOM . '></div><hr></div>'; 686 } 687 688 if (defined('AD_ADGLARE_BOTTOM_MOBILE') && AD_ADGLARE_BOTTOM_MOBILE) { 689 $dat .= '<div class="adg-rects mobile"><div class="adg-m adp-250" id=zone' . AD_ADGLARE_BOTTOM_MOBILE . '></div><hr></div>'; 690 } 691 692 if (defined('AD_RC_BOTTOM') && AD_RC_BOTTOM) { 693 $dat .= '<div class="adg-rects desktop"><div class="adg adp-228" data-rc="' . AD_RC_BOTTOM . '" id="rcjsload_bottom"></div><hr></div>'; 694 } 695 696 if (defined('AD_RC_BOTTOM_MOBILE') && AD_RC_BOTTOM_MOBILE) { 697 $dat .= '<div class="adg-rects mobile"><div class="adg-m adp-50" data-rc="' . AD_RC_BOTTOM_MOBILE . '" id="rcjsload_bottom_m"></div><hr></div>'; 698 } 699 700 if (defined('AD_ADNIUM_BOTTOM_MOBILE') && AD_ADNIUM_BOTTOM_MOBILE) { 701 $dat .= '<div class="adg-rects mobile"><div class="adg-m adp-250" id="adn-' . AD_ADNIUM_BOTTOM_MOBILE . '" data-adn></div><hr></div>'; 702 } 703 704 $dat .= '<div class="bottomCtrl desktop"><span class="deleteform"><input type="hidden" name="mode" value="usrdel">' . S_REPDEL . $resredir . ' [<input type="checkbox" name="onlyimgdel" value="on">' . S_DELPICONLY . ']<input type="hidden" id="delPassword" name="pwd"> <input type="submit" value="' . S_DELETE . '"><input id="bottomReportBtn" type="button" value="Report"></span>'; 705 706 if( !defined( 'CSS_FORCE' ) ) { 707 $dat .= '<span class="stylechanger">Style: 708 <select id="styleSelector"> 709 <option value="Yotsuba New">Yotsuba</option> 710 <option value="Yotsuba B New">Yotsuba B</option> 711 <option value="Futaba New">Futaba</option> 712 <option value="Burichan New">Burichan</option> 713 <option value="Tomorrow">Tomorrow</option> 714 <option value="Photon">Photon</option> 715 </select> 716 </span>'; 717 } 718 719 $dat .= '</div></form>'; 720 721 foot( $dat ); 722 723 if( $page == 0 ) { 724 $logfilename = SELF_PATH2_FILE; 725 } 726 727 if( $resno ) { 728 $logfilename = RES_DIR . $resno . PHP_EXT; 729 print_page( $logfilename, $dat ); 730 731 if( !$rebuild ) { 732 updatelog(); 733 } 734 } else { 735 print_page( $logfilename, $dat ); 736 } 737 738 mysql_free_result( $treeline ); 739 } 740 741 function form( &$dat, $resno, $admin = '' ) 742 { 743 global $thread_unique_ips; 744 745 $maxbyte = MAX_KB * 1024; 746 $no = $resno; 747 $closed = 0; 748 $msg = $hidden = ''; 749 $tags = upboard_tags(); 750 751 if( $resno ) { 752 if( !$cchk = mysql_board_call( "select closed from `" . SQLLOG . "` where no=" . $resno ) ) { 753 echo S_SQLFAIL; 754 } 755 list( $closed ) = mysql_fetch_row( $cchk ); 756 757 $msg .= '<div class="navLinks mobile"> 758 <span class="mobileib button"><a href="/' . BOARD_DIR . '/" accesskey="a">' . S_RETURN . '</a></span> <span class="mobileib button"><a href="#bottom">' . S_BOTTOM . '</a></span> <span class="mobileib button"><a href="#top_r" id="refresh_top">' . S_REFRESH . '</a></span> 759 </div> 760 <div id="mpostform"><a href="#" class="mobilePostFormToggle mobile hidden button">' . S_FORM_REPLY . '</a></div>'; 761 } 762 else { 763 $msg .= ' 764 <div class="navLinks mobile"> 765 <span class="mobileib button"><a href="#bottom">' . S_BOTTOM . '</a></span> <span class="mobileib button"><a href="#top_r" id="refresh_top">' . S_REFRESH . '</a></span> 766 </div> 767 <div id="mpostform"><a href="#" class="mobilePostFormToggle mobile hidden button">' . S_FORM_THREAD . '</a></div>'; 768 } 769 770 if( $admin ) { 771 $hidden = '<input type="hidden" name="admin" value="' . ADMIN_PASS . '"/>'; 772 $msg = '<h4>' . S_NOTAGS . '</h4>'; 773 } 774 775 if( $closed != 1 ) { 776 $dat .= $msg; 777 form_ads( $dat ); 778 779 $dat .= ' 780 <form name="post" action="' . SELF_PATH_POST . '" method="post" enctype="multipart/form-data"> 781 <input type="hidden" name="MAX_FILE_SIZE" value="' . $maxbyte . '"> 782 <input type="hidden" name="mode" value="regist"> 783 <input id="postPassword" name="pwd" type="hidden">'; 784 785 if( $no ) { 786 $dat .= ' 787 <input type="hidden" name="resto" value="' . $no . '"/> 788 '; 789 } 790 791 $dat .= '<div id="togglePostFormLink" class="desktop">[<a href="#">' 792 . ($resno ? S_FORM_REPLY : S_FORM_THREAD) 793 . '</a>]</div><noscript><style type="text/css">#postForm { display: table !important; }</style></noscript><table class="postForm hideMobile" id="postForm"> 794 <tbody> 795 '; 796 797 // TODO: ADS 798 799 $spoilers = ''; 800 if( SPOILERS == 1 ) { 801 $spoilers = '<span class="desktop">[<label><input type="checkbox" name="spoiler" value="on" tabindex="8">' . S_SPOILERS . '</label>]</span>'; 802 } 803 804 if( FORCED_ANON == 1 ) { 805 $dat .= ' 806 <tr data-type="Options"> 807 <td>' . S_EMAIL . '</td> 808 <td><input type="hidden" name="name"><input type="hidden" name="sub"><input name="email" type="text" tabindex="2"><input type="submit" value="' . S_SUBMIT . '" tabindex="6"></td> 809 </tr> 810 '; 811 812 if( $spoilers ) { 813 814 if( !$stripm ) $dat .= ' 815 816 <tr class="mobile" data-type="Spoilers"> 817 <td>Spoilers</td> 818 <td class="mobileSpoiler">[<label><input type="checkbox" name="spoiler" value="on">' . S_SPOILERS . '</label>]</td> 819 </tr> 820 '; 821 } 822 } 823 else { 824 $dat .= ' 825 <tr data-type="Name"> 826 <td>' . S_NAME . '</td> 827 <td><input name="name" type="text" tabindex="1"></td> 828 </tr>'; 829 if ($resno) { 830 $dat .= ' 831 <tr data-type="Options"> 832 <td>' . S_EMAIL . '</td> 833 <td><input name="email" type="text" tabindex="2"><input type="submit" value="' . S_SUBMIT . '" tabindex="6"></td> 834 </tr>'; 835 } 836 else { 837 $dat .= ' 838 <tr data-type="Options"> 839 <td>' . S_EMAIL . '</td> 840 <td><input name="email" type="text" tabindex="2"></td> 841 </tr> 842 <tr data-type="Subject"> 843 <td>' . S_SUBJECT . '</td> 844 <td><input name="sub" type="text" tabindex="3"><input type="submit" value="' . S_SUBMIT . '" tabindex="6"></td> 845 </tr>'; 846 } 847 848 if( $spoilers ) { 849 850 if( !$stripm ) $dat .= ' 851 <tr class="mobile" data-type="Spoilers"> 852 <td>' . S_SPOILERS . '</td> 853 <td class="mobileSpoiler">[<label><input type="checkbox" name="spoiler" value="on">' . S_SPOILERS . '</label>]</td> 854 </tr> 855 856 '; 857 } 858 } 859 860 if( $admin ) { 861 $dat .= ' 862 <tr> 863 <td>Reply ID</td> 864 <td><input name="resto" type="text"/> [<label><input type="checkbox" name="age" value="1"/>Age</label></td> 865 </tr> 866 '; 867 } 868 869 //if( EXPANDING_POST_ ) 870 871 $dat .= ' 872 <tr data-type="Comment"> 873 <td>' . S_COMMENT . '</td> 874 <td><textarea name="com" cols="48" rows="4" wrap="soft"></textarea></td> 875 </tr> 876 '; 877 878 if( CAPTCHA ) { 879 $dat .= ' 880 <tr id="captchaFormPart"> 881 <td class="desktop">' . S_CAPTCHA . '</td> 882 <td colspan="2">' . captcha_form() . '<div class="passNotice">' . S_PASS_NOTICE . '</div></td> 883 </tr> 884 '; 885 } 886 887 if( !$resno ) { 888 $dat .= ' 889 <tr> 890 <td>' . S_UPLOADFILE . '</td> 891 <td><input id="postFile" name="upfile" type="file"/><div id="fileError"></div></td> 892 </tr> 893 894 <tr> 895 <td>Tag</td> 896 <td><select name="filetag"> 897 <option value="9999" selected="selected">Choose one:</option>'; 898 899 foreach( upboard_tags() as $tagval => $tagnames ) { 900 $dat .= '<option value="' . $tagval . '">' . $tagnames['long'] . '</option>'; 901 } 902 903 $dat .= '</select></td></tr>'; 904 } 905 906 if ($resno && SHOW_THREAD_UNIQUES) { 907 $unique = $thread_unique_ips; 908 if ($unique) { 909 $unique_plural = $unique > 1 ? 'are' : 'is'; 910 $unique = sprintf("<li> There $unique_plural " . S_UNIQUE_POSTS_TH . '</li>', $unique, $unique > 1 ? 's' : ''); 911 } 912 else { 913 $unique = ''; 914 } 915 } 916 elseif (SHOW_UNIQUES) { 917 $unique = sprintf('<li>' . S_UNIQUE_POSTS . '</li>', $GLOBALS['ipcount']); 918 } 919 else { 920 $unique = ''; 921 } 922 923 // XXX: mode=regist moved to the top 924 $dat .= ' 925 <tr class="rules"> 926 <td colspan="2"> 927 <ul class="rules"> 928 ' . S_RULES . ' 929 ' . $unique . ' 930 </ul> 931 </td> 932 </tr> 933 '; 934 935 $blotter = $resno ? '' : get_blotter(); 936 937 $dat .= ' 938 </tbody> 939 </table>' . $blotter . ' 940 </form> 941 ' . DONATE . ' 942 <script>with(document.post) {name.value=get_cookie("4chan_name"); email.value=get_cookie("4chan_email"); pwd.value=get_pass("4chan_pass"); }</script> 943 '; 944 } else { // Closed thread 945 form_ads( $dat ); 946 $dat .= '<div class="navLinks"> 947 [<a href="../' . SELF_PATH2 . '" accesskey="a">' . S_RETURN . '</a>] [<a href="#bottom">Bottom</a>] 948 </div> 949 <div class="closed">Thread closed.<br>You may not reply at this time.</div>'; 950 } 951 952 if( AD_MIDDLE_ENABLE == 1 ) { 953 $middlead = ""; 954 955 if( defined( "AD_MIDDLE_TEXT" ) && AD_MIDDLE_TEXT ) { 956 $middlead .= '<hr class="aboveMidAd"><div class="middlead center ad-cnt">' . ad_text_for( AD_MIDDLE_TEXT ) . '</div>' . (defined('AD_MIDDLE_PLEA') ? AD_MIDDLE_PLEA : ''); 957 } else if( defined( "AD_MIDDLE_TABLE" ) && AD_MIDDLE_TABLE ) { 958 list( $middleimg, $middlelink ) = rid( AD_MIDDLE_TABLE, 1 ); 959 $middlead .= "<hr><div class=\"center\"><a href=\"$middlelink\" target=\"_blank\"><img class=\"middlead\" src=\"$middleimg\" alt=\"\"></a></div>"; 960 } 961 962 if( $middlead ) { 963 $dat .= "$middlead"; 964 } 965 } 966 967 list($globalmsgtxt,$globalmsgdate) = global_msg_txt(); 968 969 if( $globalmsgtxt ) { 970 $dat .= "\n<hr><a href=\"#\" class=\"button redButton mobile hidden\" id=\"globalToggle\">View Important Announcement</a><div class=\"globalMessage hideMobile\" id=\"globalMessage\" data-utc=\"$globalmsgdate\">" . $globalmsgtxt . "</div>\n"; 971 } 972 973 if (defined('AD_ADGLARE_TOP') && AD_ADGLARE_TOP) { 974 $dat .= '<div class="adg-rects desktop"><hr><div class="adg adp-90" id=zone' . AD_ADGLARE_TOP . '></div></div>'; 975 } 976 else if (defined('AD_RC_TOP') && AD_RC_TOP) { 977 $dat .= '<div class="adg-rects desktop"><hr><div class="adg adp-228" data-rc="' . AD_RC_TOP . '" id="rcjsload_top"></div></div>'; 978 } 979 else if (defined('AD_ABC_TOP_DESKTOP') && AD_ABC_TOP_DESKTOP) { 980 list($_abc_left, $_abc_right) = explode(',', AD_ABC_TOP_DESKTOP); 981 $dat .= '<div class="adg-rects desktop"><hr><div class="adg adp-250 adp-row" data-abc="' . $_abc_left . '"></div><div class="adg adp-250 adp-row" data-abc="' . $_abc_right . '"></div></div>'; 982 } 983 984 if ($resno) { 985 $dat .= '<hr class="desktop" id="op"> 986 <div class="navLinks desktop"> 987 [<a href="/' . BOARD_DIR . '/" accesskey="a">' . S_RETURN . '</a>] [<a href="#bottom">' . S_BOTTOM . '</a>] 988 </div> 989 '; 990 } 991 } 992 993 ?>