/ views / upboard.php
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( '&#44;', ',', $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">&gt;&gt;</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('&#44;', ',', $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('&#44;', ',', $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  ?>