SHARE
TWEET

Kusaba X post screening Mod Version 2 complete and revised

a guest Nov 16th, 2011 2,566 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Post screening for Kusaba X.
  2.  
  3. This mod will make it so all posts have to be approved by a mod or an admin before showing up. It works fine on imageboards and oekaki boards.
  4. With text boards, it doesn't block posts but mods can still delete them from the approve/deny panel.
  5.  
  6. This is version 2.
  7. (revised with all points required from part 1 and .tpl and corrected)
  8.  
  9. - post/image review now refreshes the html, so they work for mods to approve posts in bulk as well.
  10. - ability to enable or disable per board.
  11. - added something to appear in the templates to tell users when a board is screened or not.
  12.  
  13. Note that if you change a board from unscreened to screened in the board options, any posts that haven't been reviewed will be hidden again.
  14. You can just deny/delete any spam posts in the approve panel then bulk approve the rest of the posts to quickly clean and restore the board.
  15.  
  16. ############################## EDIT YOUR BOARDS TABLE
  17. add a new field to the boards table in your database:
  18. name: screened
  19. type: boolean, not null
  20. default: as defined 0
  21. drop in sql: ALTER TABLE `***boards` ADD `screened` BOOL NOT NULL DEFAULT '0' (where *** is your prefix)
  22.  
  23.  
  24. ############################## REPLACE IN MANAGE.CLASS.PHP
  25. ### function boardopts()
  26. ### function recentimages()
  27. ### function recentposts()
  28. ### These 2 functions are found in BOARD-POST.MANAGE.CLASS
  29. ### function regeneratepages()
  30. ### function regeneratethreads()
  31.  
  32.  
  33.         function boardopts() {
  34.                 global $tc_db, $tpl_page;
  35.                 $this->AdministratorsOnly();
  36.  
  37.                 $tpl_page .= '<h2>'. _gettext('Board options') . '</h2><br />';
  38.                 if (isset($_GET['updateboard']) && isset($_POST['order']) && isset($_POST['maxpages']) && isset($_POST['maxage']) && isset($_POST['messagelength'])) {
  39.       $this->CheckToken($_POST['token']);
  40.                         if (!$this->CurrentUserIsModeratorOfBoard($_GET['updateboard'], $_SESSION['manageusername'])) {
  41.                                 exitWithErrorPage(_gettext('You are not a moderator of this board.'));
  42.                         }
  43.                         $boardid = $tc_db->GetOne("SELECT HIGH_PRIORITY `id` FROM `" . KU_DBPREFIX . "boards` WHERE `name` = " . $tc_db->qstr($_GET['updateboard']) . " LIMIT 1");
  44.                         if ($boardid != '') {
  45.                                 if ($_POST['order'] >= 0 && $_POST['maxpages'] >= 0 && $_POST['markpage'] >= 0 && $_POST['maxage'] >= 0 && $_POST['messagelength'] >= 0 && ($_POST['defaultstyle'] == '' || in_array($_POST['defaultstyle'], explode(':', KU_STYLES)) || in_array($_POST['defaultstyle'], explode(':', KU_TXTSTYLES)))) {
  46.                                         $filetypes = array();
  47.                                         while (list($postkey, $postvalue) = each($_POST)) {
  48.                                                 if (substr($postkey, 0, 9) == 'filetype_') {
  49.                                                         $filetypes[] = substr($postkey, 9);
  50.                                                 }
  51.                                         }
  52.                                         $updateboard_enablecatalog = isset($_POST['enablecatalog']) ? '1' : '0';
  53.                                         $updateboard_enablenofile = isset($_POST['enablenofile']) ? '1' : '0';
  54.                                         $updateboard_redirecttothread = isset($_POST['redirecttothread']) ? '1' : '0';
  55.                                         $updateboard_enablereporting = isset($_POST['enablereporting']) ? '1' : '0';
  56.                                         $updateboard_enablecaptcha = isset($_POST['enablecaptcha']) ? '1' : '0';
  57.                                         $updateboard_forcedanon = isset($_POST['forcedanon']) ? '1' : '0';
  58.                                         $updateboard_trial = isset($_POST['trial']) ? '1' : '0';
  59.                                         $updateboard_popular = isset($_POST['popular']) ? '1' : '0';
  60.                                         $updateboard_enablearchiving = isset($_POST['enablearchiving']) ? '1' : '0';
  61.                                         $updateboard_showid = isset($_POST['showid']) ? '1' : '0';
  62.                                         $updateboard_compactlist = isset($_POST['compactlist']) ? '1' : '0';
  63.                                         $updateboard_locked = isset($_POST['locked']) ? '1' : '0';
  64.                                         $updateboard_screened = isset($_POST['screened'])? '1': '0';
  65.  
  66.                                         if (($_POST['type'] == '0' || $_POST['type'] == '1' || $_POST['type'] == '2' || $_POST['type'] == '3') && ($_POST['uploadtype'] == '0' || $_POST['uploadtype'] == '1' || $_POST['uploadtype'] == '2')) {
  67.                                                 if (!($_POST['uploadtype'] != '0' && $_POST['type'] == '3')) {
  68.                                                         if(count($_POST['allowedembeds']) > 0) {
  69.                                                                 $updateboard_allowedembeds = '';
  70.  
  71.                                                                 $results = $tc_db->GetAll("SELECT `filetype` FROM `" . KU_DBPREFIX . "embeds`");
  72.                                                                 foreach ($results as $line) {
  73.                                                                         if(in_array($line['filetype'], $_POST['allowedembeds'])) {
  74.                                                                                 $updateboard_allowedembeds .= $line['filetype'].',';
  75.                                                                         }
  76.                                                                 }
  77.                                                                 if ($updateboard_allowedembeds != '') {
  78.                                                                         $updateboard_allowedembeds = substr($updateboard_allowedembeds, 0, -1);
  79.                                                                 }
  80.                                                         }
  81.                                                         $tc_db->Execute("UPDATE `" . KU_DBPREFIX . "boards` SET `type` = " . $tc_db->qstr($_POST['type']) . " , `uploadtype` = " . $tc_db->qstr($_POST['uploadtype']) . " , `order` = " . $tc_db->qstr(intval($_POST['order'])) . " , `section` = " . $tc_db->qstr(intval($_POST['section'])) . " , `desc` = " . $tc_db->qstr($_POST['desc']) . " , `locale` = " . $tc_db->qstr($_POST['locale']) . " , `showid` = '" . $updateboard_showid . "' , `compactlist` = '" . $updateboard_compactlist . "' , `locked` = '" . $updateboard_locked . "' ,`screened` = '" . $updateboard_screened . "' , `maximagesize` = " . $tc_db->qstr($_POST['maximagesize']) . " , `messagelength` = " . $tc_db->qstr($_POST['messagelength']) . " , `maxpages` = " . $tc_db->qstr($_POST['maxpages']) . " , `maxage` = " . $tc_db->qstr($_POST['maxage']) . " , `markpage` = " . $tc_db->qstr($_POST['markpage']) . " , `maxreplies` = " . $tc_db->qstr($_POST['maxreplies']) . " , `image` = " . $tc_db->qstr($_POST['image']) . " , `includeheader` = " . $tc_db->qstr($_POST['includeheader']) . " , `redirecttothread` = '" . $updateboard_redirecttothread . "' , `anonymous` = " . $tc_db->qstr($_POST['anonymous']) . " , `forcedanon` = '" . $updateboard_forcedanon . "' , `embeds_allowed` = " . $tc_db->qstr($updateboard_allowedembeds) . " , `trial` = '" . $updateboard_trial . "' , `popular` = '" . $updateboard_popular . "' , `defaultstyle` = " . $tc_db->qstr($_POST['defaultstyle']) . " , `enablereporting` = '" . $updateboard_enablereporting . "', `enablecaptcha` = '" . $updateboard_enablecaptcha . "' , `enablenofile` = '" . $updateboard_enablenofile . "' , `enablearchiving` = '" . $updateboard_enablearchiving . "', `enablecatalog` = '" . $updateboard_enablecatalog . "' , `loadbalanceurl` = " . $tc_db->qstr($_POST['loadbalanceurl']) . " , `loadbalancepassword` = " . $tc_db->qstr($_POST['loadbalancepassword']) . " WHERE `name` = " . $tc_db->qstr($_GET['updateboard']) . "");
  82.                                                         $tc_db->Execute("DELETE FROM `" . KU_DBPREFIX . "board_filetypes` WHERE `boardid` = '" . $boardid . "'");
  83.                                                         foreach ($filetypes as $filetype) {
  84.                                                                 $tc_db->Execute("INSERT INTO `" . KU_DBPREFIX . "board_filetypes` ( `boardid`, `typeid` ) VALUES ( '" . $boardid . "', " . $tc_db->qstr($filetype) . " )");
  85.                                                         }
  86.                                                         require_once KU_ROOTDIR . 'inc/classes/menu.class.php';
  87.                                                         $menu_class = new Menu();
  88.                                                         $menu_class->Generate();
  89.                                                         if (isset($_POST['submit_regenerate'])) {
  90.                                                                 $board_class = new Board($_GET['updateboard']);
  91.                                                                 $board_class->RegenerateAll();
  92.                                                         }
  93.                                                         $tpl_page .= _gettext('Update successful.');
  94.                                                         management_addlogentry(_gettext('Updated board configuration') . " - /" . $_GET['updateboard'] . "/", 4);
  95.                                                        
  96.                                                 } else {
  97.                                                         $tpl_page .= _gettext('Sorry, embed may only be enabled on normal imageboards.');
  98.                                                 }
  99.                                         } else {
  100.                                                 $tpl_page .= _gettext('Sorry, a generic error has occurred.');
  101.                                         }
  102.                                 } else {
  103.                                         $tpl_page .= _gettext('Integer values must be entered correctly.');
  104.                                 }
  105.                         } else {
  106.                                 $tpl_page .= _gettext('Unable to locate a board named') . ' <strong>'. $_GET['updateboard'] . '</strong>.';
  107.                         }
  108.                 } elseif (isset($_POST['board'])) {
  109.                         if (!$this->CurrentUserIsModeratorOfBoard($_POST['board'], $_SESSION['manageusername'])) {
  110.                                 exitWithErrorPage(_gettext('You are not a moderator of this board.'));
  111.                         }
  112.                         $resultsboard = $tc_db->GetAll("SELECT HIGH_PRIORITY * FROM `" . KU_DBPREFIX . "boards` WHERE `name` = " . $tc_db->qstr($_POST['board']) . "");
  113.                         if (count($resultsboard) > 0) {
  114.                                 foreach ($resultsboard as $lineboard) {
  115.                                         $tpl_page .= '<div class="container">
  116.                                         <form action="?action=boardopts&updateboard='.urlencode($_POST['board']).'" method="post">
  117.          <input type="hidden" name="token" value="' . $_SESSION['token'] . '" />';
  118.                                         /* Directory */
  119.                                         $tpl_page .= '<label for="board">'. _gettext('Directory') .':</label>
  120.                                         <input type="text" name="board" value="'.$_POST['board'].'" disabled />
  121.                                         <div class="desc">'. _gettext('The directory of the board.') .'</div><br />';
  122.  
  123.                                         /* Description */
  124.                                         $tpl_page .= '<label for="desc">'. _gettext('Description') .':</label>
  125.                                         <input type="text" name="desc" value="'.$lineboard['desc'].'" />
  126.                                         <div class="desc">'. _gettext('The name of the board.') .'</div><br />';
  127.  
  128.                                         /* Locale */
  129.                                         $tpl_page .= '<label for="locale">'. _gettext('Locale') .':</label>
  130.                                         <input type="text" name="locale" value="'.$lineboard['locale'].'" />
  131.                                         <div class="desc">'. _gettext('Locale to use on this board. Leave blank to use the locale defined in config.php') .'</div><br />';
  132.  
  133.                                         /* Board type */
  134.                                         $tpl_page .= '<label for="type">'. _gettext('Board type') .':</label>
  135.                                         <select name="type">
  136.                                         <option value="0"';
  137.                                         if ($lineboard['type'] == '0') { $tpl_page .= ' selected="selected"'; }
  138.                                         $tpl_page .= '>'. _gettext('Normal imageboard') .'</option>
  139.                                         <option value="1"';
  140.                                         if ($lineboard['type'] == '1') { $tpl_page .= ' selected="selected"'; }
  141.                                         $tpl_page .= '>'. _gettext('Text board') .'</option><option value="2"';
  142.                                         if ($lineboard['type'] == '2') { $tpl_page .= ' selected="selected"'; }
  143.                                         $tpl_page .= '>'. _gettext('Oekaki imageboard') .'</option><option value="3"';
  144.                                         if ($lineboard['type'] == '3') { $tpl_page .= ' selected="selected"'; }
  145.                                         $tpl_page .= '>'. _gettext('Upload imageboard') .'</option>
  146.                                         </select>
  147.                                         <div class="desc">'. _gettext('The type of posts which will be accepted on this board. A normal imageboard will feature image and extended format posts, a text board will have no images, an Oekaki board will allow users to draw images and use them in their posts, and an Upload imageboard will be styled more towards file uploads.') .' '. _gettext('Default') .': <strong>Normal Imageboard</strong></div><br />';
  148.  
  149.                                         /* Upload type */
  150.                                         $tpl_page .= '<label for="uploadtype">'. _gettext('Upload type') .':</label>
  151.                                         <select name="uploadtype">
  152.                                         <option value="0"';
  153.                                         if ($lineboard['uploadtype'] == '0') {
  154.                                                 $tpl_page .= ' selected="selected"';
  155.                                         }
  156.                                         $tpl_page .= '>'. _gettext('No embedding') .'</option>
  157.                                         <option value="1"';
  158.                                         if ($lineboard['uploadtype'] == '1') {
  159.                                                 $tpl_page .= ' selected="selected"';
  160.                                         }
  161.                                         $tpl_page .= '>'. _gettext('Images and embedding') .'</option>
  162.                                         <option value="2"';
  163.                                         if ($lineboard['uploadtype'] == '2') {
  164.                                                 $tpl_page .= ' selected="selected"';
  165.                                         }
  166.                                         $tpl_page .= '>'. _gettext('Embedding only') .'</option>
  167.                                         </select>
  168.                                         <div class="desc">'. _gettext('Whether or not to allow embedding of videos.') .' '. _gettext('Default') .'.: <strong>'. _gettext('No Embedding') .'</strong></div><br />';
  169.  
  170.                                         /* Order */
  171.                                         $tpl_page .= '<label for="order">'. _gettext('Order') .':</label>
  172.                                         <input type="text" name="order" value="'.$lineboard['order'].'" />
  173.                                         <div class="desc">'. _gettext('Order to show board in menu list, in ascending order.') .' '. _gettext('Default') .': <strong>0</strong></div><br />';
  174.  
  175.                                         /* Section */
  176.                                         $tpl_page .= '<label for="section">'. _gettext('Section') .':</label>' .
  177.                                         $this->MakeSectionListDropdown('section', $lineboard['section']) .
  178.                                         '<div class="desc">'. _gettext('The section the board is in. This is used for displaying the list of boards on the top and bottom of pages.') .'<br />'. _gettext('If this is set to <em>Select a Board</em>, <strong>it will not be shown in the menu</strong>.') .'</div><br />';
  179.  
  180.                                         /* Load balancer URL */
  181.                                         $tpl_page .= '<label for="loadbalanceurl">'. _gettext('Load balance URL') .':</label>
  182.                                         <input type="text" name="loadbalanceurl" value="'.$lineboard['loadbalanceurl'].'" />
  183.                                         <div class="desc">'. _gettext('The full http:// URL to the load balance script for this board. The script will handle file uploads, and creation of thumbnails. Only one script per board can be used, and there must be a src and thumb dir in the same folder as the script. Set to nothing to disable.') .'</div><br />';
  184.  
  185.                                         /* Load balancer password */
  186.                                         $tpl_page .= '<label for="loadbalancepassword">'. _gettext('Load balance password') .':</label>
  187.                                         <input type="text" name="loadbalancepassword" value="'.$lineboard['loadbalancepassword'].'" />
  188.                                         <div class="desc">'. _gettext('The password which will be passed to the script above. The script must have this same password entered at the top, in the configuration area.') .'</div><br />';
  189.  
  190.                                         /* Allowed filetypes */
  191.                                         $tpl_page .= '<label>'. _gettext('Allowed filetypes') .':</label>
  192.                                         <div class="desc">'. _gettext('What filetypes users are allowed to upload.') .'</div><br />';
  193.                                         $filetypes = $tc_db->GetAll("SELECT HIGH_PRIORITY `id`, `filetype` FROM `" . KU_DBPREFIX . "filetypes` ORDER BY `filetype` ASC");
  194.                                         foreach ($filetypes as $filetype) {
  195.                                                 $tpl_page .= '<label for="filetype_'. $filetype['id'] . '">'. strtoupper($filetype['filetype']) . '</label><input type="checkbox" name="filetype_'. $filetype['id'] . '"';
  196.                                                 $filetype_isenabled = $tc_db->GetOne("SELECT HIGH_PRIORITY COUNT(*) FROM `" . KU_DBPREFIX . "board_filetypes` WHERE `boardid` = '" . $lineboard['id'] . "' AND `typeid` = '" . $filetype['id'] . "' LIMIT 1");
  197.                                                 if ($filetype_isenabled == 1) {
  198.                                                         $tpl_page .= ' checked';
  199.                                                 }
  200.                                                 $tpl_page .= ' /><br />';
  201.                                         }
  202.  
  203.                                         /* Allowed embeds */
  204.                                         $tpl_page .= '<label>'. _gettext('Allowed embeds') .':</label>
  205.                                         <div class="desc">'. _gettext('What embed sites are allowed on this board. Only useful on board with embedding enabled.') .'</div><br />';
  206.                                         $embeds = $tc_db->GetAll("SELECT HIGH_PRIORITY `id`, `filetype`, `name` FROM `" . KU_DBPREFIX . "embeds` ORDER BY `filetype` ASC");
  207.                                         foreach ($embeds as $embed) {
  208.                                                 $tpl_page .= '<label for="allowedembeds[]">'. $embed['name'] . '</label><input type="checkbox" name="allowedembeds[]" value="'. $embed['filetype'] . '"';
  209.                                                 if (in_array($embed['filetype'], explode(',', $lineboard['embeds_allowed']))) {
  210.                                                         $tpl_page .= ' checked';
  211.                                                 }
  212.                                                 $tpl_page .= ' /><br />';
  213.                                         }
  214.  
  215.                                         /* Maximum image size */
  216.                                         $tpl_page .= '<label for="maximagesize">'. _gettext('Maximum image size') .':</label>
  217.                                         <input type="text" name="maximagesize" value="'.$lineboard['maximagesize'].'" />
  218.                                         <div class="desc">'. _gettext('Maxmimum size of uploaded images, in <strong>bytes</strong>.') . ' '. _gettext('Default') .': <strong>1024000</strong></div><br />';
  219.  
  220.                                         /* Maximum message length */
  221.                                         $tpl_page .= '<label for="messagelength">'. _gettext('Maximum message length') .':</label>
  222.                                         <input type="text" name="messagelength" value="'.$lineboard['messagelength'].'" />
  223.                                         <div class="desc">'. _gettext('Default') .': <strong>8192</strong></div><br />';
  224.  
  225.                                         /* Maximum board pages */
  226.                                         $tpl_page .= '<label for="maxpages">'. _gettext('Maximum board pages') .':</label>
  227.                                         <input type="text" name="maxpages" value="'.$lineboard['maxpages'].'" />
  228.                                         <div class="desc">'. _gettext('Default') .': <strong>11</strong></div><br />';
  229.  
  230.                                         /* Maximum thread age */
  231.                                         $tpl_page .= '<label for="maxage">'. _gettext('Maximum thread age (Hours)') .':</label>
  232.                                         <input type="text" name="maxage" value="'.$lineboard['maxage'].'" />
  233.                                         <div class="desc">'. _gettext('Default') .': <strong>0</strong></div><br />';
  234.  
  235.                                         /* Mark page */
  236.                                         $tpl_page .= '<label for="maxage">'. _gettext('Mark page') .':</label>
  237.                                         <input type="text" name="markpage" value="'.$lineboard['markpage'].'" />
  238.                                         <div class="desc">'. _gettext('Threads which reach this page or further will be marked to be deleted in two hours.') .' '. _gettext('Default') .': <strong>9</strong></div><br />';
  239.  
  240.                                         /* Maximum thread replies */
  241.                                         $tpl_page .= '<label for="maxreplies">'. _gettext('Maximum thread replies') .':</label>
  242.                                         <input type="text" name="maxreplies" value="'.$lineboard['maxreplies'].'" />
  243.                                         <div class="desc">'. _gettext('The number of replies a thread can have before autosaging to the back of the board.') . ' '. _gettext('Default') .': <strong>200</strong></div><br />';
  244.  
  245.                                         /* Header image */
  246.                                         $tpl_page .= '<label for="image">'. _gettext('Header image') .':</label>
  247.                                         <input type="text" name="image" value="'.$lineboard['image'].'" />
  248.                                         <div class="desc">'. _gettext('Overrides the header set in the config file. Leave blank to use configured global header image. Needs to be a full url including http://. Set to none to show no header image.') .'</div><br />';
  249.  
  250.                                         /* Include header */
  251.                                         $tpl_page .= '<label for="includeheader">'. _gettext('Include header') .':</label>
  252.                                         <textarea name="includeheader" rows="12" cols="80">'.htmlspecialchars($lineboard['includeheader']).'</textarea>
  253.                                         <div class="desc">'. _gettext('Raw HTML which will be inserted at the top of each page of the board.') .'</div><br />';
  254.  
  255.                                         /* Anonymous */
  256.                                         $tpl_page .= '<label for="anonymous">'. _gettext('Anonymous') .':</label>
  257.                                         <input type="text" name="anonymous" value="'. $lineboard['anonymous'] . '" />
  258.                                         <div class="desc">'. _gettext('Name to display when a name is not attached to a post.') . ' '. _gettext('Default') .': <strong>'. _gettext('Anonymous') .'</strong></div><br />';
  259.                                        
  260.                                         /* Post Screening */
  261.                                        
  262.                                         $tpl_page .= '<label for="screened">'. _gettext('Screened') .':</label>
  263.                                         <input type="checkbox" name="screened" ';
  264.                                         if ($lineboard['screened'] == '1') {
  265.                                                 $tpl_page .= 'checked ';
  266.                                         }
  267.                                         $tpl_page .= ' />
  268.                                         <div class="desc">'. _gettext('Only display posts after mod or admin approval') .'</div><br />';
  269.  
  270.                                         /* Locked */
  271.                                         $tpl_page .= '<label for="locked">'. _gettext('Locked') .':</label>
  272.                                         <input type="checkbox" name="locked" ';
  273.                                         if ($lineboard['locked'] == '1') {
  274.                                                 $tpl_page .= 'checked ';
  275.                                         }
  276.                                         $tpl_page .= ' />
  277.                                         <div class="desc">'. _gettext('Only moderators of the board and admins can make new posts/replies') .'</div><br />';
  278.  
  279.                                         /* Show ID */
  280.                                         $tpl_page .= '<label for="showid">'. _gettext('Show ID') .':</label>
  281.                                         <input type="checkbox" name="showid" ';
  282.                                         if ($lineboard['showid'] == '1') {
  283.                                                 $tpl_page .= 'checked ';
  284.                                         }
  285.                                         $tpl_page .= ' />
  286.                                         <div class="desc">'. _gettext('If enabled, each post will display the poster\'s ID, which is a representation of their IP address.') .'</div><br />';
  287.  
  288.                                         /* Show ID */
  289.                                         $tpl_page .= '<label for="compactlist">'. _gettext('Compact list') .':</label>
  290.                                         <input type="checkbox" name="compactlist" ';
  291.                                         if ($lineboard['compactlist'] == '1') {
  292.                                                 $tpl_page .= 'checked ';
  293.                                         }
  294.                                         $tpl_page .= ' />
  295.                                         <div class="desc">'. _gettext('Text boards only. If enabled, the list of threads displayed on the front page will be formatted differently to be compact.') . '</div><br />';
  296.  
  297.                                         /* Enable reporting */
  298.                                         $tpl_page .= '<label for="enablereporting">'. _gettext('Enable reporting') .':</label>
  299.                                         <input type="checkbox" name="enablereporting"';
  300.                                         if ($lineboard['enablereporting'] == '1') {
  301.                                                 $tpl_page .= ' checked';
  302.                                         }
  303.                                         $tpl_page .= ' />'. "\n" .
  304.                                         '<div class="desc">'. _gettext('Reporting allows users to report posts, adding the post to the report list.') .' '. _gettext('Default') .': <strong>'. _gettext('Yes') .'</strong></div><br />';
  305.  
  306.                                         /* Enable captcha */
  307.                                         $tpl_page .= '<label for="enablecaptcha">'. _gettext('Enable captcha') .':</label>
  308.                                         <input type="checkbox" name="enablecaptcha"';
  309.                                         if ($lineboard['enablecaptcha'] == '1') {
  310.                                                 $tpl_page .= ' checked';
  311.                                         }
  312.                                         $tpl_page .= ' />
  313.                                         <div class="desc">'. _gettext('Enable/disable captcha system for this board. If captcha is enabled, in order for a user to post, they must first correctly enter the text on an image.') .' '. _gettext('Default') .': <strong>'. _gettext('No') .'</strong></div><br />';
  314.  
  315.                                         /* Enable archiving */
  316.                                         $tpl_page .= '<label for="enablearchiving">'. _gettext('Enable archiving') .':</label>
  317.                                         <input type="checkbox" name="enablearchiving"';
  318.                                         if ($lineboard['enablearchiving'] == '1') {
  319.                                                 $tpl_page .= ' checked';
  320.                                         }
  321.                                         $tpl_page .= ' />
  322.                                         <div class="desc">'. _gettext('Enable/disable thread archiving for this board (not available if load balancer is used). If enabled, when a thread is pruned or deleted through this panel with the archive checkbox checked, the thread and its images will be moved into the arch directory, found in the same directory as the board. To function properly, you must create and set proper permissions to /boardname/arch, /boardname/arch/res, /boardname/arch/src, and /boardname/arch/thumb') .' '. _gettext('Default') .': <strong>'. _gettext('No') .'</strong></div><br />';
  323.  
  324.                                         /* Enable catalog */
  325.                                         $tpl_page .= '<label for="enablecatalog">'. _gettext('Enable catalog') .':</label>
  326.                                         <input type="checkbox" name="enablecatalog"';
  327.                                         if ($lineboard['enablecatalog'] == '1') {
  328.                                                 $tpl_page .= ' checked';
  329.                                         }
  330.                                         $tpl_page .= ' />
  331.                                         <div class="desc">'. _gettext('If set to yes, a catalog.html file will be built with the other files, displaying the original picture of every thread in a box. This will only work on normal/oekaki imageboards.') .' '. _gettext('Default') .': <strong>'. _gettext('Yes') .'</strong></div><br />';
  332.  
  333.                                         /* Enable "no file" posting */
  334.                                         $tpl_page .= '<label for="enablenofile">'. _gettext('Enable \'no file\' posting') .':</label>
  335.                                         <input type="checkbox" name="enablenofile"';
  336.                                         if ($lineboard['enablenofile'] == '1') {
  337.                                                 $tpl_page .= ' checked';
  338.                                         }
  339.                                         $tpl_page .= ' />
  340.                                         <div class="desc">'. _gettext('If set to yes, new threads will not require an image to be posted.') . ' '. _gettext('Default') .': <strong>'. _gettext('No') .'</strong></div><br />';
  341.  
  342.                                         /* Redirect to thread */
  343.                                         $tpl_page .= '<label for="redirecttothread">'. _gettext('Redirect to thread') .':</label>
  344.                                         <input type="checkbox" name="redirecttothread"';
  345.                                         if ($lineboard['redirecttothread'] == '1') {
  346.                                                 $tpl_page .= ' checked';
  347.                                         }
  348.                                         $tpl_page .= ' />
  349.                                         <div class="desc">'. _gettext('If set to yes, users will be redirected to the thread they replied to/posted after posting. If set to no, users will be redirected to the first page of the board.') . ' '. _gettext('Default') .': <strong>'.('No') .'</strong></div><br />';
  350.  
  351.                                         /* Forced anonymous */
  352.                                         $tpl_page .= '<label for="forcedanon">'. _gettext('Forced anonymous') .':</label>
  353.                                         <input type="checkbox" name="forcedanon"';
  354.                                         if ($lineboard['forcedanon'] == '1') {
  355.                                                 $tpl_page .= ' checked';
  356.                                         }
  357.                                         $tpl_page .= ' />
  358.                                         <div class="desc">'. _gettext('If set to yes, users will not be allowed to enter a name, making everyone appear as Anonymous') . ' '. _gettext('Default') .': <strong>'. _gettext('No') .'</strong></div><br />';
  359.  
  360.                                         /* Trial */
  361.                                         $tpl_page .= '<label for="trial">'. _gettext('Trial') .':</label>
  362.                                         <input type="checkbox" name="trial"';
  363.                                         if ($lineboard['trial'] == '1') {
  364.                                                 $tpl_page .= ' checked';
  365.                                         }
  366.                                         $tpl_page .= ' />
  367.                                         <div class="desc">'. _gettext('If set to yes, this board will appear in italics in the menu') . ' '. _gettext('Default') .': <strong>'. _gettext('No') .'</strong></div><br />';
  368.  
  369.                                         /* Popular */
  370.                                         $tpl_page .= '<label for="popular">'. _gettext('Popular') .':</label>
  371.                                         <input type="checkbox" name="popular"';
  372.                                         if ($lineboard['popular'] == '1') {
  373.                                                 $tpl_page .= ' checked';
  374.                                         }
  375.                                         $tpl_page .= ' />
  376.                                         <div class="desc">'. _gettext('If set to yes, this board will appear in bold in the menu') . ' '. _gettext('Default') .': <strong>'. _gettext('No') .'</strong></div><br />';
  377.  
  378.                                         /* Default style */
  379.                                         $tpl_page .= '<label for="defaultstyle">'. _gettext('Default style') .':</label>
  380.                                         <select name="defaultstyle">
  381.  
  382.                                         <option value=""';
  383.                                         $tpl_page .= ($lineboard['defaultstyle'] == '') ? ' selected="selected"' : '';
  384.                                         $tpl_page .= '>'. _gettext('Use Default') .'</option>';
  385.  
  386.                                         $styles = explode(':', KU_STYLES);
  387.                                         foreach ($styles as $stylesheet) {
  388.                                                 $tpl_page .= '<option value="'. $stylesheet . '"';
  389.                                                 $tpl_page .= ($lineboard['defaultstyle'] == $stylesheet) ? ' selected="selected"' : '';
  390.                                                 $tpl_page .= '>'. ucfirst($stylesheet) . '</option>';
  391.                                         }
  392.  
  393.                                         $stylestxt = explode(':', KU_TXTSTYLES);
  394.                                         foreach ($stylestxt as $stylesheet) {
  395.                                                 $tpl_page .= '<option value="'. $stylesheet . '"';
  396.                                                 $tpl_page .= ($lineboard['defaultstyle'] == $stylesheet) ? ' selected="selected"' : '';
  397.                                                 $tpl_page .= '>[TXT] '. ucfirst($stylesheet) . '</option>';
  398.                                         }
  399.  
  400.                                         $tpl_page .= '</select>
  401.                                         <div class="desc">'. _gettext('The style which will be set when the user first visits the board.') .' '. _gettext('Default') .': <strong>'. _gettext('Use Default') .'</strong></div><br />';
  402.  
  403.                                         /* Submit form */
  404.                                         $tpl_page .= '<input type="submit" name="submit_regenerate" value="'. _gettext('Update and regenerate board') .'" /><br /><input type="submit" name="submit_noregenerate" value="'. _gettext('Update without regenerating board') .'" />
  405.  
  406.                                         </form>
  407.                                         </div><br />';
  408.                                 }
  409.                         } else {
  410.                                 $tpl_page .= _gettext('Unable to locate a board named') . ' <strong>'. $_POST['board'] . '</strong>.';
  411.                         }
  412.                 } else {
  413.                         $tpl_page .= '<form action="?action=boardopts" method="post">
  414.                         <label for="board">'. _gettext('Board') .':</label>' .
  415.                         $this->MakeBoardListDropdown('board', $this->BoardList($_SESSION['manageusername'])) .
  416.                         '<input type="submit" value="'. _gettext('Go') .'" />
  417.                         </form>';
  418.                 }
  419.         }
  420.        
  421.         function RegeneratePages() {
  422.                 global $tc_db, $CURRENTLOCALE;
  423.                
  424.                 $this->InitializeDwoo();
  425.                 $results = $tc_db->GetAll("SELECT `filetype` FROM `" . KU_DBPREFIX . "embeds`");
  426.                 foreach ($results as $line) {
  427.                         $this->board['filetypes'][] .= $line[0];
  428.                 }
  429.                 $this->dwoo_data->assign('filetypes', $this->board['filetypes']);
  430.                 $maxpages = $this->board['maxpages'];
  431.                
  432.                 $is_screened_board = $tc_db->GetOne("SELECT `screened` FROM `" . KU_DBPREFIX . "boards` WHERE `id` = " . $this->board['id']);
  433.                
  434.                 if($is_screened_board == 1){
  435.                         $screened_query = " AND `reviewed` = 1 ";
  436.                 }
  437.                 else{
  438.                         $screened_query = null;
  439.                 }
  440.                
  441.                 $numposts = $tc_db->GetAll("SELECT COUNT(*) FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $this->board['id'] . " AND `parentid` = 0 ".$screened_query." AND `IS_DELETED` = 0");
  442.  
  443.                 if ($this->board['type'] == 1) {
  444.                         $postsperpage = KU_THREADSTXT;
  445.                 } elseif ($this->board['type'] == 3) {
  446.                         $postsperpage = 30;
  447.                 } else {
  448.                         $postsperpage = KU_THREADS;
  449.                 }
  450.                 $i = 0;
  451.                 $liststooutput = 0;
  452.                 $totalpages = calculatenumpages($this->board['type'], ($numposts[0][0]-1));
  453.                 if ($totalpages == '-1') {
  454.                         $totalpages = 0;
  455.                 }
  456.                 $this->dwoo_data->assign('numpages', $totalpages);
  457.                 while ($i <= $totalpages) {
  458.                         $newposts = Array();
  459.                         $this->dwoo_data->assign('thispage', $i);
  460.                         $threads = $tc_db->GetAll("SELECT * FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $this->board['id'] . " AND `parentid` = 0 AND `IS_DELETED` = 0 ".$screened_query." ORDER BY `stickied` DESC, `bumped` DESC LIMIT ". ($postsperpage)." OFFSET ". $postsperpage * $i);
  461.  
  462.                         $executiontime_start_page = microtime_float();
  463.                         foreach ($threads as $k=>$thread) {
  464.                                 // If the thread is on the page set to mark, && hasn't been marked yet, mark it
  465.                                 if ($thread['deleted_timestamp'] == 0 && $this->board['markpage'] > 0 && $i >= $this->board['markpage']) {
  466.                                         $tc_db->Execute("UPDATE `".KU_DBPREFIX."posts` SET `deleted_timestamp` = '" . (time() + 7200) . "' WHERE `boardid` = " . $tc_db->qstr($this->board['id'])." AND `id` = '" . $thread['id'] . "'");
  467.                                         clearPostCache($thread['id'], $this->board['name']);
  468.                                         $this->RegenerateThreads($thread['id']);
  469.                                         $this->dwoo_data->assign('replythread', 0);
  470.                                 }
  471.                                 $thread = $this->BuildPost($thread, true);
  472.                                
  473.                                 if ($this->board['type'] != 3) {
  474.                                         $omitids = '';
  475.                                         $posts = $tc_db->GetAll("SELECT * FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $this->board['id']." ".$screened_query." AND `parentid` = ".$thread['id']." " . (($this->board['type'] != 1) ? ("AND `IS_DELETED` = 0") : ("")) . " ORDER BY `id` DESC LIMIT ".(($thread['stickied'] == 1) ? (KU_REPLIESSTICKY) : (KU_REPLIES)));
  476.                                         foreach ($posts as $key=>$post) {
  477.                                                 $omitids .= $post['id'].",";
  478.                                                 $posts[$key] = $this->BuildPost($post, true);
  479.                                         }
  480.  
  481.                                         $posts = array_reverse($posts);
  482.                                         $omitids = substr($omitids, 0, -1);
  483.                                         array_unshift($posts, $thread);
  484.                                         $newposts[] = $posts;
  485.                                 } else {
  486.                                         if (!$thread['tag']) $thread['tag'] = '*';
  487.                                         $newposts[] = $thread;
  488.                                 }
  489.                                 $replycount = Array();
  490.                                 if ($this->board['type'] == 1 || $this->board['type'] == 3 ) {
  491.                                         $replycount = $tc_db->GetAll("SELECT COUNT(`id`) FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $tc_db->qstr($this->board['id'])." ".$screened_query." AND `parentid` = " . $thread['id']);
  492.                                 } else {
  493.                                         $replycount = $tc_db->GetAll("SELECT COUNT(`id`) AS replies, SUM(CASE WHEN `file_md5` = '' THEN 0 ELSE 1 END) AS files FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $this->board['id']."  AND `parentid` = ".$thread['id']." AND `is_deleted` = 0 ".$screened_query." AND `id` NOT IN (" . $omitids . ")");
  494.                                 }
  495.                                 // Workaround for upload boards
  496.                                 if ($this->board['type'] == 3) {
  497.                                         $newposts[$k]['replies'] = $replycount[0][0];
  498.                                 } else {
  499.                                         $newposts[$k][0]['replies'] = $replycount[0][0];
  500.                                         $newposts[$k][0]['images'] = (isset($replycount[0][1]) ? $replycount[0][1] : '');
  501.                                 }
  502.                         }
  503.                         if ($this->board['type'] == 0 && !isset($embeds)) {
  504.                                 $embeds = $tc_db->GetAll("SELECT * FROM `" . KU_DBPREFIX . "embeds`");
  505.                                 $this->dwoo_data->assign('embeds', $embeds);
  506.                         }
  507.                         if (!isset($header)){
  508.                                 $header = $this->PageHeader();
  509.                                 $header = str_replace("<!sm_threadid>", 0, $header);
  510.                         }
  511.                         if (!isset($postbox)) {
  512.                                 $postbox = $this->Postbox();
  513.                                 $postbox = str_replace("<!sm_threadid>", 0, $postbox);
  514.                         }
  515.                         $this->dwoo_data->assign('posts', $newposts);
  516.                         $this->dwoo_data->assign('file_path', getCLBoardPath($this->board['name'], $this->board['loadbalanceurl_formatted'], ''));
  517.  
  518.                         $content = $this->dwoo->get(KU_TEMPLATEDIR . '/' . $this->board['text_readable'] . '_board_page.tpl', $this->dwoo_data);
  519.                         $footer = $this->Footer(false, (microtime_float() - $executiontime_start_page), (($this->board['type'] == 1) ? (true) : (false)));
  520.                         $content = $header.$postbox.$content.$footer;
  521.  
  522.                         $content = str_replace("\t", '',$content);
  523.                         $content = str_replace("&nbsp;\r\n", '&nbsp;',$content);
  524.  
  525.                         if ($i == 0) {
  526.                                 $page = KU_BOARDSDIR.$this->board['name'].'/'.KU_FIRSTPAGE;
  527.                                 $this->PrintPage($page, $content, $this->board['name']);
  528.                         } else {
  529.                                 $page = KU_BOARDSDIR.$this->board['name'].'/'.$i.'.html';
  530.                                 $this->PrintPage($page, $content, $this->board['name']);
  531.                         }
  532.                         $i++;
  533.                 }
  534.                 // If text board, rebuild thread list html files
  535.                 if ($this->board['type'] == 1) {
  536.                         $numpostsleft = $tc_db->GetOne("SELECT COUNT(*) FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $this->board['id'] . " AND `IS_DELETED` = 0 AND `parentid` = 0");
  537.                         $liststooutput = floor(($numpostsleft-1) / 40);
  538.                         $this->dwoo_data->assign('numpages', $liststooutput+1);
  539.                         $listpage = 0;
  540.                         $currentpostwave = 0;
  541.                         while ($numpostsleft>0) {
  542.                                 $this->dwoo_data->assign('thispage', $listpage+1);
  543.                                 $executiontime_start_list = microtime_float();
  544.                                 $page = $this->PageHeader(0, $currentpostwave, $liststooutput);
  545.                                 $this->Footer(false, (microtime_float()-$executiontime_start_list), true);
  546.                                 if ($listpage==0) {
  547.                                         $this->PrintPage(KU_BOARDSDIR.$this->board['name'].'/list.html', $page, $this->board['name']);
  548.                                 } else {
  549.                                         $this->PrintPage(KU_BOARDSDIR.$this->board['name'].'/list'.($listpage+1).'.html', $page, $this->board['name']);
  550.                                 }
  551.                                 $currentpostwave += 40;
  552.                                 $numpostsleft -= 40;
  553.                                 $listpage++;
  554.                         }
  555.                 }
  556.                 // If the board has catalog mode enabled, build it
  557.                 if ($this->board['enablecatalog'] == 1 && ($this->board['type'] == 0 || $this->board['type'] == 2)) {
  558.                         $executiontime_start_catalog = microtime_float();
  559.                         $catalog_head = $this->PageHeader().
  560.                         '&#91;<a href="' . KU_BOARDSFOLDER . $this->board['name'] . '/">'._gettext('Return').'</a>&#93; <div class="catalogmode">'._gettext('Catalog Mode').'</div>' . "\n" .
  561.                         '<table border="1" align="center">' . "\n" . '<tr>' . "\n";
  562.                         $catalog_page = '';
  563.                         $results = $tc_db->GetAll("SELECT `id` , `subject` , `file` , `file_type` FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $this->board['id'] . " AND `IS_DELETED` = 0 AND `parentid` = 0 ".$screened_query." ORDER BY `stickied` DESC, `bumped` DESC");
  564.                         $numresults = count($results);
  565.                         if ($numresults > 0) {
  566.                                 $celnum = 0;
  567.                                 $trbreak = 0;
  568.                                 $row = 1;
  569.                                 // Calculate the number of rows we will actually output
  570.                                 $maxrows = max(1, (($numresults - ($numresults % 12)) / 12));
  571.                                 foreach ($results as $line) {
  572.                                         $celnum++;
  573.                                         $trbreak++;
  574.                                         if ($trbreak == 13 && $celnum != $numresults) {
  575.                                                 $catalog_page .= '</tr>' . "\n" . '<tr>' . "\n";
  576.                                                 $row++;
  577.                                                 $trbreak = 1;
  578.                                         }
  579.                                         if ($row <= $maxrows) {
  580.                                                 $replies = $tc_db->GetOne("SELECT COUNT(*) FROM `".KU_DBPREFIX."posts` WHERE `boardid` = " . $this->board['id'] . " AND `IS_DELETED` = 0 ".$screened_query." AND `parentid` = " . $line['id']);
  581.                                                 $catalog_page .= '<td valign="middle">' . "\n" .
  582.                                                 '<a href="' . KU_BOARDSFOLDER . $this->board['name'] . '/res/' . $line['id'] . '.html"';
  583.                                                 if ($line['subject'] != '') {
  584.                                                         $catalog_page .= ' title="' . $line['subject'] . '"';
  585.                                                 }
  586.                                                 $catalog_page .= '>';
  587.                                                 if ($line['file'] != '' && $line['file'] != 'removed') {
  588.                                                         if ($line['file_type'] == 'jpg' || $line['file_type'] == 'png' || $line['file_type'] == 'gif') {
  589.                                                                 $file_path = getCLBoardPath($this->board['name'], $this->board['loadbalanceurl_formatted'], $this->archive_dir);
  590.                                                                 $catalog_page .= '<img src="' . $file_path . '/thumb/' . $line['file'] . 'c.' . $line['file_type'] . '" alt="' . $line['id'] . '" border="0" />';
  591.                                                         } else {
  592.                                                                 $catalog_page .= _gettext('File');
  593.                                                         }
  594.                                                 } elseif ($line['file'] == 'removed') {
  595.                                                         $catalog_page .= 'Rem.';
  596.                                                 } else {
  597.                                                         $catalog_page .= _gettext('None');
  598.                                                 }
  599.                                                 $catalog_page .= '</a><br />' . "\n" . '<small>' . $replies . '</small>' . "\n" . '</td>' . "\n";
  600.                                         }
  601.                                 }
  602.                         } else {
  603.                                 $catalog_page .= '<td>' . "\n" .
  604.                                 _gettext('No threads.') . "\n" .
  605.                                 '</td>' . "\n";
  606.                         }
  607.  
  608.                         $catalog_page .= '</tr>' . "\n" . '</table><br /><hr />' .
  609.                         $this->Footer(false, (microtime_float()-$executiontime_start_catalog));
  610.  
  611.                         $this->PrintPage(KU_BOARDSDIR . $this->board['name'] . '/catalog.html', $catalog_head.$catalog_page, $this->board['name']);
  612.                 }
  613.                 // Delete old pages
  614.                 $dir = KU_BOARDSDIR.$this->board['name'];
  615.                 $files = glob ("$dir/*.html");
  616.                 if (is_array($files)) {
  617.                         foreach ($files as $htmlfile) {
  618.                                 if (preg_match("/[0-9+].html/", $htmlfile)) {
  619.                                         if (substr(basename($htmlfile), 0, strpos(basename($htmlfile), '.html'))>$totalpages) {
  620.                                                 unlink($htmlfile);
  621.                                         }
  622.                                 }
  623.                                 if (preg_match("/list[0-9+].html/", $htmlfile)) {
  624.                                         if (substr(basename($htmlfile), 4, strpos(basename($htmlfile), '.html'))>($liststooutput+1)) {
  625.                                                 unlink($htmlfile);
  626.                                         }
  627.                                 }
  628.                                 if (preg_match("/catalog.html/", $htmlfile)) {
  629.                                         if (!($this->board['enablecatalog'] == 1 && ($this->board['type'] == 0 || $this->board['type'] == 2))) {
  630.                                                 unlink($htmlfile);
  631.                                         }
  632.                                 }
  633.                         }
  634.                 }
  635.         }
  636.  
  637.         /**
  638.          * Regenerate each thread's corresponding html file, starting with the most recently bumped
  639.          */
  640.         function RegenerateThreads($id = 0) {
  641.                 global $tc_db, $CURRENTLOCALE;
  642.                 require_once(KU_ROOTDIR."lib/dwoo.php");
  643.                 if (!isset($this->dwoo)) { $this->dwoo = New Dwoo; $this->dwoo_data = new Dwoo_Data(); $this->InitializeDwoo(); }
  644.                 $embeds = Array();
  645.                 $numimages = 0;
  646.                
  647.                 $is_screened_board = $tc_db->GetOne("SELECT `screened` FROM `" . KU_DBPREFIX . "boards` WHERE `id` = " . $this->board['id']);
  648.                
  649.                 if($is_screened_board == 1){
  650.                         $screened_query = " AND `reviewed` = 1 ";
  651.                 }
  652.                 else{
  653.                         $screened_query = null;
  654.                 }
  655.                
  656.                 if ($this->board['type'] != 1 && !$embeds) {
  657.                                 $embeds = $tc_db->GetAll("SELECT * FROM `" . KU_DBPREFIX . "embeds`");
  658.                                 $this->dwoo_data->assign('embeds', $embeds);
  659.                                 foreach ($embeds as $embed) {
  660.                                         $this->board['filetypes'][] .= $embed['filetype'];
  661.                                 }
  662.                                 $this->dwoo_data->assign('filetypes', $this->board['filetypes']);
  663.                 }
  664.                 if ($id == 0) {
  665.                         // Build every thread
  666.                         $header = $this->PageHeader(1);
  667.                         if ($this->board['type'] != 2){
  668.                                 $postbox = $this->Postbox(1);
  669.                         }
  670.                         $threads = $tc_db->GetAll("SELECT * FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $this->board['id'] . " AND `parentid` = 0 ".$screened_query." AND `IS_DELETED` = 0 ORDER BY `id` DESC");
  671.  
  672.                         if (count($threads) > 0) {
  673.                                 foreach($threads as $thread) {
  674.                                         $numimages = 0;
  675.                                         $executiontime_start_thread = microtime_float();
  676.                                         $posts = $tc_db->GetAll("SELECT * FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $this->board['id'] . " AND (`id` = " . $thread['id'] . " OR `parentid` = " . $thread['id'] . ") " . (($this->board['type'] != 1) ? ($screened_query." AND `IS_DELETED` = 0") : ("")) . " ORDER BY `id` ASC");
  677.                                         if ($this->board['type'] != 1 || ((isset($posts[0]['IS_DELETED']) && $posts[0]['IS_DELETED'] == 0) || (isset($posts[0]['is_deleted']) && $posts[0]['is_deleted'] == 0))) {
  678.                                                 // There might be a chance that the post was deleted during another RegenerateThreads() session, if there are no posts, move on to the next thread.
  679.                                                 if(count($posts) > 0){
  680.                                                         foreach ($posts as $key=>$post) {
  681.                                                                 if($screened_query == 1){
  682.                                                                         if (($post['file_type'] == 'jpg' || $post['file_type'] == 'gif' || $post['file_type'] == 'png') && $post['parentid'] != 0 && $post['reviewed'] == 1) {
  683.                                                                                 $numimages++;
  684.                                                                         }
  685.                                                                 }
  686.                                                                 else{
  687.                                                                
  688.                                                                         if (($post['file_type'] == 'jpg' || $post['file_type'] == 'gif' || $post['file_type'] == 'png') && $post['parentid'] != 0 ) {
  689.                                                                                 $numimages++;
  690.                                                                         }
  691.                                                                
  692.                                                                 }
  693.                                                                 $posts[$key] = $this->BuildPost($post, false);
  694.                                                         }
  695.  
  696.                                                         $header_replaced = str_replace("<!sm_threadid>", $thread['id'], $header);
  697.                                                         $this->dwoo_data->assign('numimages', $numimages);
  698.                                                         $this->dwoo_data->assign('replythread', $thread['id']);
  699.                                                         $this->dwoo_data->assign('posts', $posts);
  700.                                                         $this->dwoo_data->assign('file_path', getCLBoardPath($this->board['name'], $this->board['loadbalanceurl_formatted'], ''));
  701.                                                         if ($this->board['type'] != 2){
  702.                                                                 $postbox_replaced = str_replace("<!sm_threadid>", $thread['id'], $postbox);
  703.                                                         }
  704.                                                         else {
  705.                                                                 $postbox_replaced = $this->Postbox($thread['id']);
  706.                                                         }
  707.                                                         $reply   = $this->dwoo->get(KU_TEMPLATEDIR . '/' . $this->board['text_readable'] . '_reply_header.tpl', $this->dwoo_data);
  708.                                                         $content = $this->dwoo->get(KU_TEMPLATEDIR . '/' . $this->board['text_readable'] . '_thread.tpl', $this->dwoo_data);
  709.                                                         if (!isset($footer)) $footer = $this->Footer(false, (microtime_float() - $executiontime_start_thread), (($this->board['type'] == 1) ? (true) : (false)));
  710.                                                         $content = $header_replaced.$reply.$postbox_replaced.$content.$footer;
  711.  
  712.                                                         $content = str_replace("\t", '',$content);
  713.                                                         $content = str_replace("&nbsp;\r\n", '&nbsp;',$content);
  714.  
  715.                                                         $this->PrintPage(KU_BOARDSDIR . $this->board['name'] . $this->archive_dir . '/res/' . $thread['id'] . '.html', $content, $this->board['name']);
  716.                                                         if (KU_FIRSTLAST) {
  717.  
  718.                                                                 $replycount = (count($posts)-1);
  719.                                                                 if ($replycount > 50) {
  720.                                                                         $this->dwoo_data->assign('replycount', $replycount);
  721.                                                                         $this->dwoo_data->assign('modifier', "last50");
  722.  
  723.                                                                         // Grab the last 50 replies
  724.                                                                         $posts50 = array_slice($posts, -50, 50);
  725.  
  726.                                                                         // Add on the OP
  727.                                                                         array_unshift($posts50, $posts[0]);
  728.                                                                        
  729.                                                                         $this->dwoo_data->assign('posts', $posts50);
  730.  
  731.                                                                         $content = $this->dwoo->get(KU_TEMPLATEDIR . '/img_thread.tpl', $this->dwoo_data);
  732.                                                                         $content = $header_replaced.$reply.$postbox_replaced.$content.$footer;
  733.                                                                         $content = str_replace("\t", '',$content);
  734.                                                                         $content = str_replace("&nbsp;\r\n", '&nbsp;',$content);
  735.  
  736.                                                                         unset($posts50);
  737.  
  738.                                                                         $this->PrintPage(KU_BOARDSDIR . $this->board['name'] . $this->archive_dir . '/res/' . $thread['id'] . '+50.html', $content, $this->board['name']);
  739.                                                                         if ($replycount > 100) {
  740.                                                                                 $this->dwoo_data->assign('modifier', "first100");
  741.  
  742.                                                                                 // Grab the first 100 posts
  743.                                                                                 $posts100 = array_slice($posts, 0, 100);
  744.  
  745.                                                                                 $this->dwoo_data->assign('posts', $posts100);
  746.  
  747.                                                                                 $content = $this->dwoo->get(KU_TEMPLATEDIR . '/img_thread.tpl', $this->dwoo_data);
  748.                                                                                 $content = $header_replaced.$reply.$postbox_replaced.$content.$footer;
  749.                                                                                 $content = str_replace("\t", '',$content);
  750.                                                                                 $content = str_replace("&nbsp;\r\n", '&nbsp;',$content);
  751.  
  752.                                                                                 unset($posts100);
  753.                                                                                
  754.                                                                                 $this->PrintPage(KU_BOARDSDIR . $this->board['name'] . $this->archive_dir . '/res/' . $thread['id'] . '-100.html', $content, $this->board['name']);
  755.                                                                         }
  756.                                                                         $this->dwoo_data->assign('modifier', "");
  757.                                                                 }
  758.                                                         }
  759.                                                 }
  760.                                         }
  761.                                 }
  762.                         }
  763.                 } else {
  764.                         $executiontime_start_thread = microtime_float();
  765.                         // Build only that thread
  766.                         $thread = $tc_db->GetAll("SELECT * FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $this->board['id'] . " AND (`id` = " . $id . " OR `parentid` = " . $id . ") " . (($this->board['type'] != 1) ? ($screened_query." AND `IS_DELETED` = 0") : ("")) . " ORDER BY `id` ASC");
  767.                         if ($this->board['type'] != 1 || ((isset($thread[0]['IS_DELETED']) && $thread[0]['IS_DELETED'] == 0) || (isset($thread[0]['is_deleted']) && $thread[0]['is_deleted'] == 0))) {
  768.                                 foreach ($thread as $key=>$post) {
  769.                                         if (($post['file_type'] == 'jpg' || $post['file_type'] == 'gif' || $post['file_type'] == 'png') && $post['parentid'] != 0) {
  770.                                                 $numimages++;
  771.                                         }
  772.                                         $thread[$key] = $this->BuildPost($post, false);
  773.                                 }
  774.                                 $header = $this->PageHeader($id);
  775.                                 $postbox = $this->Postbox($id);
  776.                                 $this->dwoo_data->assign('numimages', $numimages);
  777.                                 $header = str_replace("<!sm_threadid>", $id, $header);
  778.  
  779.                                 $this->dwoo_data->assign('replythread', $id);
  780.                                 if ($this->board['type'] != 2){
  781.                                         $postbox = str_replace("<!sm_threadid>", $id, $postbox);
  782.                                 }
  783.  
  784.                                 $this->dwoo_data->assign('threadid', $thread[0]['id']);
  785.                                 $this->dwoo_data->assign('posts', $thread);
  786.                                 $this->dwoo_data->assign('file_path', getCLBoardPath($this->board['name'], $this->board['loadbalanceurl_formatted'], ''));
  787.                                
  788.                                 $postbox = $this->dwoo->get(KU_TEMPLATEDIR . '/' . $this->board['text_readable'] . '_reply_header.tpl', $this->dwoo_data).$postbox;
  789.                                 $content = $this->dwoo->get(KU_TEMPLATEDIR . '/' . $this->board['text_readable'] . '_thread.tpl', $this->dwoo_data);
  790.                                
  791.                                 if (!isset($footer)) $footer = $this->Footer(false, (microtime_float() - $executiontime_start_thread), (($this->board['type'] == 1) ? (true) : (false)));
  792.                                 $content = $header.$postbox.$content.$footer;
  793.  
  794.                                 $content = str_replace("\t", '',$content);
  795.                                 $content = str_replace("&nbsp;\r\n", '&nbsp;',$content);
  796.  
  797.                                 $this->PrintPage(KU_BOARDSDIR . $this->board['name'] . $this->archive_dir . '/res/' . $id . '.html', $content, $this->board['name']);
  798.                                 if (KU_FIRSTLAST) {
  799.                                         $replycount = $tc_db->GetOne("SELECT COUNT(`id`) FROM `" . KU_DBPREFIX . "posts` WHERE `boardid` = " . $this->board['id'] . " AND `parentid` = " . $id . " ".$screened_query." AND `IS_DELETED` = 0");
  800.                                         if ($replycount > 50) {
  801.                                                 $this->dwoo_data->assign('replycount', $replycount);
  802.                                                 $this->dwoo_data->assign('modifier', "last50");
  803.  
  804.                                                 // Grab the last 50 replies
  805.                                                 $posts50 = array_slice($thread, -50, 50);
  806.  
  807.                                                 // Add the thread to the top of this, since it wont be included in the result
  808.                                                 array_unshift($posts50, $thread[0]);
  809.  
  810.                                                 $this->dwoo_data->assign('posts', $posts50);
  811.  
  812.                                                 $content = $this->dwoo->get(KU_TEMPLATEDIR . '/img_thread.tpl', $this->dwoo_data);
  813.                                                 $content = $header.$reply.$postbox.$content.$footer;
  814.                                                 $content = str_replace("\t", '',$content);
  815.                                                 $content = str_replace("&nbsp;\r\n", '&nbsp;',$content);
  816.  
  817.                                                 unset($posts50);                                       
  818.  
  819.                                                 $this->PrintPage(KU_BOARDSDIR . $this->board['name'] . $this->archive_dir . '/res/' . $id . '+50.html', $content, $this->board['name']);
  820.                                                 if ($replycount > 100) {
  821.                                                         $this->dwoo_data->assign('modifier', "first100");
  822.  
  823.                                                         // Grab the first 100 posts
  824.                                                         $posts100 = array_slice($thread, 0, 100);
  825.  
  826.                                                         $this->dwoo_data->assign('posts', $posts100);
  827.  
  828.                                                         $this->dwoo_data->assign('posts', $posts);
  829.                                                         $content = $this->dwoo->get(KU_TEMPLATEDIR . '/img_thread.tpl', $this->dwoo_data);
  830.                                                         $content = $header.$reply.$postbox.$content.$footer;
  831.                                                         $content = str_replace("\t", '',$content);
  832.                                                         $content = str_replace("&nbsp;\r\n", '&nbsp;',$content);
  833.  
  834.                                                         unset($posts100);
  835.  
  836.                                                         $this->PrintPage(KU_BOARDSDIR . $this->board['name'] . $this->archive_dir . '/res/' . $id . '-100.html', $content, $this->board['name']);
  837.                                                 }
  838.                                                 $this->dwoo_data->assign('modifier', "");
  839.                                         }
  840.                                 }
  841.                         }
  842.                 }
  843.         }
  844.        
  845.        
  846.         /* View recently uploaded images */
  847.         function recentimages() {
  848.                 global $tc_db, $tpl_page;
  849.                 $this->ModeratorsOnly();
  850.  
  851.                 if (!isset($_SESSION['imagesperpage'])) {
  852.                         $_SESSION['imagesperpage'] = 50;
  853.                 }
  854.  
  855.                 if (isset($_GET['show'])) {
  856.                         if ($_GET['show'] == '25' || $_GET['show'] == '50' || $_GET['show'] == '75' || $_GET['show'] == '100') {
  857.                                 $_SESSION['imagesperpage'] = $_GET['show'];
  858.                         }
  859.                 }
  860.  
  861.                 $tpl_page .= '<h2>'. _gettext('Recently uploaded images') . '</h2><br />
  862.                 '._gettext('Number of images to show per page').': <a href="?action=recentimages&show=25">25</a>, <a href="?action=recentimages&show=50">50</a>, <a href="?action=recentimages&show=75">75</a>, <a href="?action=recentimages&show=100">100</a> '._gettext('(note that this is a rough limit, more may be shown)').'<br />';
  863.                 if (isset($_POST['clear'])) {
  864.                         if ($_POST['clear'] != '') {
  865.                                 $clear_decrypted = md5_decrypt($_POST['clear'], KU_RANDOMSEED);
  866.                                 if ($clear_decrypted != '') {
  867.                                         $clear_unserialized = unserialize($clear_decrypted);
  868.  
  869.                                         foreach ($clear_unserialized as $clear_sql) {
  870.                                                 $tc_db->Execute($clear_sql);
  871.                                         }
  872.                                        
  873.                                         $results = $tc_db->GetAll("SELECT HIGH_PRIORITY `id`, `name` FROM `" . KU_DBPREFIX . "boards`");
  874.  
  875.                                         foreach ($results as $line) {
  876.                                                 $board_class = new Board($line['name']);
  877.                                                 $board_class->RegenerateAll();
  878.                                                 unset($board_class);
  879.                                                 flush();
  880.                                         }
  881.                                        
  882.                                         $tpl_page .= _gettext('Successfully marked previous images as reviewed.').'<hr />';
  883.                                 }
  884.                         }
  885.                 }
  886.  
  887.                 $dayago = (time() - 86400);
  888.                 $imagesshown = 0;
  889.                 $reviewsql_array = array();
  890.  
  891.                 if ($imagesshown <= $_SESSION['imagesperpage']) {
  892.                         $results = $tc_db->GetAll("SELECT HIGH_PRIORITY `" . KU_DBPREFIX . "boards`.`name` AS `boardname`, `" . KU_DBPREFIX . "posts`.`boardid` AS boardid, `" . KU_DBPREFIX . "posts`.`id` AS id, `" . KU_DBPREFIX . "posts`.`parentid` AS parentid, `" . KU_DBPREFIX . "posts`.`file` AS file, `" . KU_DBPREFIX . "posts`.`file_type` AS file_type, `" . KU_DBPREFIX . "posts`.`thumb_w` AS thumb_w, `" . KU_DBPREFIX . "posts`.`thumb_h` AS thumb_h FROM `" . KU_DBPREFIX . "posts`, `" . KU_DBPREFIX ."boards` WHERE (`file_type` = 'jpg' OR `file_type` = 'gif' OR `file_type` = 'png') AND `reviewed` = 0 AND `IS_DELETED` = 0 AND `" . KU_DBPREFIX . "boards`.`id` = `" . KU_DBPREFIX . "posts`.`boardid` ORDER BY `timestamp` DESC LIMIT " . intval($_SESSION['imagesperpage']));
  893.                         if (count($results) > 0) {
  894.                                 $reviewsql = "UPDATE `" . KU_DBPREFIX . "posts` SET `reviewed` = 1 WHERE ";
  895.                                 $tpl_page .= '<table border="1">'. "\n";
  896.                                 foreach ($results as $line) {
  897.                                         $reviewsql .= '(`boardid` = '.$line['boardid'] .' AND `id` = '. $line['id'] . ') OR ';
  898.                                         $real_parentid = ($line['parentid'] == 0) ? $line['id'] : $line['parentid'];
  899.                                         $tpl_page .= '<tr><td><a href="'. KU_BOARDSPATH . '/'. $line['boardname'] . '/res/'. $real_parentid . '.html#'. $line['id'] . '">/'. $line['boardname'] . '/'. $line['id'] . '</td><td><a href="'. KU_BOARDSPATH . '/'. $line['boardname'] . '/res/'. $real_parentid . '.html#'. $line['id'] . '"><img src="'. KU_BOARDSPATH . '/'. $line['boardname'] . '/thumb/'. $line['file'] . 's.'. $line['file_type'] . '" width="'. $line['thumb_w'] . '" height="'. $line['thumb_h'] . '" border="0"></a></td></tr>';
  900.                                 }
  901.                                 $tpl_page .= '</table>';
  902.  
  903.                                 $reviewsql = substr($reviewsql, 0, -3);
  904.                                 $reviewsql_array[] = $reviewsql;
  905.                                 $imagesshown += count($results);
  906.                         }
  907.                 }
  908.  
  909.                 if ($imagesshown > 0) {
  910.                         $tpl_page .= '<br /><br />'. sprintf(_gettext('%s images shown.'), $imagesshown). '<br />';
  911.                         $tpl_page .= '<form action="?action=recentimages" method="post">
  912.                         <input type="hidden" name="clear" value="'. md5_encrypt(serialize($reviewsql_array), KU_RANDOMSEED) . '" />
  913.                         <input type="submit" value="'. _gettext('Clear All On Page As Reviewed') .'" />
  914.                         </form><br />';
  915.                 } else {
  916.                         $tpl_page .= '<br /><br />'. _gettext('No recent images currently need review.') ;
  917.                 }
  918.         }
  919.  
  920.         /* View recently posted posts */
  921.         function recentposts() {
  922.                 global $tc_db, $tpl_page;
  923.                 $this->ModeratorsOnly();
  924.  
  925.                 if (!isset($_SESSION['postsperpage'])) {
  926.                         $_SESSION['postsperpage'] = 50;
  927.                 }
  928.  
  929.                 if (isset($_GET['show'])) {
  930.                         if ($_GET['show'] == '25' || $_GET['show'] == '50' || $_GET['show'] == '75' || $_GET['show'] == '100') {
  931.                                 $_SESSION['postsperpage'] = $_GET['show'];
  932.                         }
  933.                 }
  934.  
  935.                 $tpl_page .= '<h2>'. _gettext('Recent posts') . '</h2><br />
  936.                 '._gettext('Number of posts to show per page').': <a href="?action=recentposts&show=25">25</a>, <a href="?action=recentposts&show=50">50</a>, <a href="?action=recentposts&show=75">75</a>, <a href="?action=recentposts&show=100">100</a> '._gettext('(note that this is a rough limit, more may be shown)').'<br />';
  937.                 if (isset($_POST['clear'])) {
  938.                         if ($_POST['clear'] != '') {
  939.                                 $clear_decrypted = md5_decrypt($_POST['clear'], KU_RANDOMSEED);
  940.                                 if ($clear_decrypted != '') {
  941.                                         $clear_unserialized = unserialize($clear_decrypted);
  942.  
  943.                                         foreach ($clear_unserialized as $clear_sql) {
  944.                                                 $tc_db->Execute($clear_sql);
  945.                                         }
  946.                                        
  947.                                 $results = $tc_db->GetAll("SELECT HIGH_PRIORITY `id`, `name` FROM `" . KU_DBPREFIX . "boards`");
  948.  
  949.                                 foreach ($results as $line) {
  950.                                         $board_class = new Board($line['name']);
  951.                                         $board_class->RegenerateAll();
  952.                                         unset($board_class);
  953.                                         flush();
  954.                                 }
  955.                                        
  956.                                         $tpl_page .= _gettext('Successfully marked previous posts as reviewed.').'<hr />';
  957.                                 }
  958.                         }
  959.                 }
  960.  
  961.                 $dayago = (time() - 86400);
  962.                 $postsshown = 0;
  963.                 $reviewsql_array = array();
  964.  
  965.                 $boardlist = $this->BoardList($_SESSION['manageusername']);
  966.                 if ($postsshown <= $_SESSION['postsperpage']) {
  967.                         $results = $tc_db->GetAll("SELECT HIGH_PRIORITY `" . KU_DBPREFIX . "boards`.`name` AS `boardname`, `" . KU_DBPREFIX . "posts`.`boardid` AS boardid, `" . KU_DBPREFIX . "posts`.`id` AS id, `" . KU_DBPREFIX . "posts`.`parentid` AS parentid, `" . KU_DBPREFIX . "posts`.`message` AS message, `" . KU_DBPREFIX . "posts`.`ip` AS ip FROM `" . KU_DBPREFIX . "posts`, `" . KU_DBPREFIX ."boards` WHERE `" . KU_DBPREFIX . "posts`.`timestamp` > " . $dayago . " AND `reviewed` = 0 AND `IS_DELETED` = 0 AND `" . KU_DBPREFIX . "boards`.`id` = `" . KU_DBPREFIX . "posts`.`boardid` ORDER BY `timestamp` DESC LIMIT " . intval($_SESSION['postsperpage']));
  968.                         if (count($results) > 0) {
  969.                                 $reviewsql = "UPDATE `" . KU_DBPREFIX . "posts` SET `reviewed` = 1 WHERE ";
  970.                                 $tpl_page .= '<table id="iptable" class="tablesorter"><thead>'. "\n";
  971.                                 $tpl_page .= '<tr><th width="75px">'._gettext('Post Number').'</th><th>'._gettext('Post Message').'</th><th width="100px">'._gettext('Poster IP').'</th></tr></thead><tbody>'. "\n";
  972.                                 foreach ($results as $line) {
  973.                                         $reviewsql .= '(`boardid` = '.$line['boardid'] .' AND `id` = '. $line['id'] . ') OR ';
  974.                                         $real_parentid = ($line['parentid'] == 0) ? $line['id'] : $line['parentid'];
  975.                                         $tpl_page .= '<tr><td><a href="'. KU_BOARDSPATH . '/'. $line['boardname'] . '/res/'. $real_parentid . '.html#'. $line['id'] . '">/'. $line['boardname'] . '/'. $line['id'] . '</td><td>'. stripslashes($line['message']) . '</td><td><a href="http://chan.boxxyforever.com/manage_page.php?action=ipsearch&ip='. md5_decrypt($line['ip'], KU_RANDOMSEED) . '&board=all">'. md5_decrypt($line['ip'], KU_RANDOMSEED) .'</a></tr>';
  976.                                 }
  977.                                 $tpl_page .= '</tbody></table>';
  978.  
  979.                                 $reviewsql = substr($reviewsql, 0, -3) . ' LIMIT '. count($results);
  980.                                 $reviewsql_array[] = $reviewsql;
  981.                                 $postsshown += count($results);
  982.                         }
  983.                 }
  984.  
  985.                 if ($postsshown > 0) {
  986.                         $tpl_page .= '<br /><br />'. sprintf(_gettext('%s posts shown.'), $postsshown) .'<br />
  987.                         <form action="?action=recentposts" method="post">
  988.                         <input type="hidden" name="clear" value="'. md5_encrypt(serialize($reviewsql_array), KU_RANDOMSEED) . '" />
  989.                         <input type="submit" value="'. _gettext('Clear All On Page As Reviewed') .'" />
  990.                         </form><br />';
  991.                 } else {
  992.                         $tpl_page .= '<br /><br />'. _gettext('No recent posts currently need review.') ;
  993.                 }
  994.         }
  995.        
  996.  
  997.  
  998. ############################## ADD THIS TO MANAGE.CLASS.PHP
  999. ### make sure it's inside the final bracket so it's within the class
  1000. ### function approveposts()
  1001.  
  1002.         function approveposts(){
  1003.                 global $tc_db, $tpl_page;
  1004.                 $this->ModeratorsOnly();
  1005.                
  1006.                 $tpl_page .= '<h2>'. _gettext('Approve recent posts/images') . '</h2><br />';
  1007.                
  1008.                 // update reviewed posts
  1009.                 if(isset($_POST['postnum']) && $_POST['approveordenypost'] == ('approvepost'.$_POST['postnum'])){
  1010.                         $this->CheckToken($_POST['token']);
  1011.                         $board = $_POST['approveboard'];
  1012.                         $thread = $_POST['approvethread'];
  1013.                         $postnum = $_POST['postnum'];
  1014.                         $board_class = new Board($board);
  1015.                        
  1016.                         $boardid = $tc_db->GetOne("SELECT HIGH_PRIORITY `id` FROM `". KU_DBPREFIX . "boards` WHERE `name` = ".$tc_db->qstr($board));
  1017.                         $is_screened_board = $tc_db->GetOne("SELECT `screened` FROM `" . KU_DBPREFIX . "boards` WHERE `id` = " . $boardid);
  1018.                        
  1019.                         if($this->CurrentUserIsModeratorOfBoard($board, $_SESSION['manageusername']) || $this->CurrentUserIsAdministrator()){
  1020.  
  1021.                                 if($boardid && $is_screened_board==1){
  1022.                                
  1023.                                         $parent = $tc_db->GetOne("SELECT HIGH_PRIORITY `parentid` FROM `". KU_DBPREFIX . "posts` WHERE `boardid` = ".$tc_db->qstr($boardid)." AND `id` = ".$tc_db->qstr($postnum));
  1024.                                        
  1025.                                         if($tc_db->Execute("UPDATE `" . KU_DBPREFIX . "posts` SET `reviewed` = 1 WHERE `parentid` = ".$tc_db->qstr($parent) ." AND `boardid` = ".$tc_db->qstr($boardid) ." AND `id` = ". $tc_db->qstr($postnum))){
  1026.                                        
  1027.                                                 $board_class->RegenerateThreads();
  1028.                                                 $board_class->RegeneratePages();
  1029.                                                 unset($board_class);
  1030.                                                
  1031.                                                 $tpl_page.='post /'.$board.'/'.$parent.'#'.$postnum.' approved.<br />';
  1032.                                         }
  1033.                                         else{
  1034.                                                 $tpl_page.='there was an error.';
  1035.                                         }
  1036.                                 }
  1037.                                 else{
  1038.                                         exitWithErrorPage(_gettext('Invalid board.'));
  1039.                                 }
  1040.                         }
  1041.                         else{
  1042.                                 exitWithErrorPage('/'. $board . '/: '. _gettext('You can only approve posts from boards you moderate.'));
  1043.                         }
  1044.                 }
  1045.                
  1046.                 // set delete for rejected posts (doesn't update the table but shows success)
  1047.                
  1048.                 else if(isset($_POST['postnum']) && $_POST['approveordenypost'] == ('denypost'.$_POST['postnum'])){
  1049.                         $this->CheckToken($_POST['token']);
  1050.                         $board = $_POST['approveboard'];
  1051.                         $thread = $_POST['approvethread'];
  1052.                         $postnum = $_POST['postnum'];
  1053.                         $board_class = new Board($board);
  1054.                                                
  1055.                         $boardid = $tc_db->GetOne("SELECT HIGH_PRIORITY `id` FROM `". KU_DBPREFIX . "boards` WHERE `name` = ".$tc_db->qstr($board));
  1056.                         $is_screened_board = $tc_db->GetOne("SELECT `screened` FROM `" . KU_DBPREFIX . "boards` WHERE `id` = " . $boardid);
  1057.                        
  1058.                         if($this->CurrentUserIsModeratorOfBoard($board, $_SESSION['manageusername']) || $this->CurrentUserIsAdministrator()){
  1059.                                
  1060.                                 $boardid = $tc_db->GetOne("SELECT HIGH_PRIORITY `id` FROM `". KU_DBPREFIX . "boards` WHERE `name` = ".$tc_db->qstr($board));
  1061.                                
  1062.                                 if($boardid && $is_screened_board==1){
  1063.                                        
  1064.                                         $parent = $tc_db->GetOne("SELECT HIGH_PRIORITY `parentid` FROM `". KU_DBPREFIX . "posts` WHERE `boardid` = ".$tc_db->qstr($boardid)." AND `id` = ".$tc_db->qstr($postnum));
  1065.                                
  1066.                                         if($tc_db->Execute("UPDATE `" . KU_DBPREFIX . "posts` SET `reviewed` = 1, `IS_DELETED` = 1 WHERE `parentid` = ".$tc_db->qstr($parent) ." AND `boardid` = ".$tc_db->qstr($boardid) ." AND `id` = ". $tc_db->qstr($postnum))){
  1067.                                                 $tpl_page.='post /'.$board.'/'.$parent.'#'.$postnum.' denied and marked as deleted.<br />';
  1068.                                         }
  1069.                                         else{
  1070.                                                 $tpl_page.='there was an error.';
  1071.                                         }
  1072.                                        
  1073.                                         $board_class->RegenerateThreads();
  1074.                                         $board_class->RegeneratePages();
  1075.                                         unset($board_class);
  1076.                                 }
  1077.                         }
  1078.                         else{
  1079.                                 exitWithErrorPage('/'. $board . '/: '. _gettext('You can only deny posts from boards you moderate.'));
  1080.                         }
  1081.  
  1082.                 }
  1083.                
  1084.                 // get all unreviewed posts
  1085.                 $results = $tc_db->GetAll("SELECT HIGH_PRIORITY * FROM `". KU_DBPREFIX . "posts` WHERE `reviewed` = 0 AND `IS_DELETED` = 0 ORDER BY `timestamp` DESC");
  1086.                                
  1087.                 // display as a table
  1088.                 if(count($results)>0){
  1089.                
  1090.                         $tpl_page .= '<table style="width:100%"><thead><th>Board/Post</th><th>Mod Functions</th><th>Image</th><th>Message</th><th>Action</th></thead><tbody>'. "\n";
  1091.                        
  1092.                         foreach ($results as $line) {
  1093.                                
  1094.                                         $real_parentid = ($line['parentid'] == 0) ? $line['id'] : $line['parentid'];
  1095.                                         $boardname = $tc_db->GetOne("SELECT `name` FROM `". KU_DBPREFIX . "boards` WHERE `id` = ".$line['boardid']);
  1096.                                         $is_screened_board = $tc_db->GetOne("SELECT `screened` FROM `" . KU_DBPREFIX . "boards` WHERE `id` = " . $line['boardid']);
  1097.                                        
  1098.                                 if(($this->CurrentUserIsModeratorOfBoard($boardname, $_SESSION['manageusername']) || $this->CurrentUserIsAdministrator()) && ($is_screened_board == 1)){       
  1099.                                         $decip = md5_decrypt($line['ip'],KU_RANDOMSEED);
  1100.                                         $tpl_page.='
  1101.                                         <tr><td><a href="'. KU_BOARDSPATH . '/'. $boardname . '/res/'. $real_parentid . '.html#'. $line['id'] . '">/'. $boardname . '/'. $line['id'] . '</td><td style="text-align:center"><b>'.$decip.'</b><br> <a href="manage_page.php?action=deletepostsbyip&ip='.$decip.'">Delete</a> /
  1102.                                         <a href="manage_page.php?action=ipsearch&ip='.$decip.'">Search</a> By IP<br /><a href="manage_page.php?action=delposts&boarddir='.$boardname.'&delthreadid='.$line['id'].'">Delete</a> & <a href="manage_page.php?action=bans&banboard='.$boardname.'&banpost='.$line['id'].'">Ban</a><br /><a href="manage_page.php?action=bans&banboard='.$boardname.'&banpost='.$line['id'].'&instant=y">Instant Permaban</a><br>
  1103.                                         <a href="manage_page.php?action=delposts&boarddir='.$boardname.'&delthreadid='.$real_parentid.'&postid='.$line['id'].'&cp=y">Child Porn</a>
  1104.                                         <td><a href="'. KU_BOARDSPATH . '/'. $boardname . '/res/'. $real_parentid . '.html#'. $line['id'] . '">
  1105.                                         <img src="'. KU_BOARDSPATH . '/'. $boardname . '/thumb/'. $line['file'] . 's.'. $line['file_type'] . '" width="'. $line['thumb_w'] . '" height="'. $line['thumb_h'] . '" border="0"></a>
  1106.                                         </td><td>'.$line['message'].'</td><td>
  1107.                                         <form action="?action=approveposts" method="post">
  1108.                                         <input type="hidden" name="token" value="'.$_SESSION['token'].'">
  1109.                                         <input type="hidden" name="approveboard" value="'.$boardname.'">
  1110.                                         <input type="hidden" name="approvethread" value="'.$real_parentid.'">
  1111.                                         <select name="approveordenypost">
  1112.                                         <option value="approvepost'.$line['id'].'">Approve Post</option>
  1113.                                         <option selected value="denypost'.$line['id'].'">Deny Post</option>
  1114.                                         </select>
  1115.                                         <input type="hidden" name="postnum" value="'.$line['id'].'">
  1116.                                         <input type="submit" value="Submit">
  1117.                                         </form>
  1118.                                         </td></tr>';
  1119.                                 }
  1120.                         }
  1121.                        
  1122.                         $tpl_page .= '</tbody></table>'. "\n";
  1123.                 }
  1124.                 else{
  1125.                         $tpl_page.= 'no posts currently need approval.';
  1126.                 }
  1127.                
  1128.         }
  1129. ##############################
  1130. ### in IMG-POST-BOX.TPL do this
  1131. ### find this in the post box template:
  1132. {if $board.enablecatalog eq 1}
  1133. <a href="{%KU_BOARDSFOLDER}{$board.name}/catalog.html">{t}View catalog{/t}</a>
  1134. {/if}
  1135. </li>
  1136.  
  1137.  
  1138. and right after it add:
  1139.  
  1140. {if $board.screened eq 1}
  1141. <div style="display:block" class="screenedpostactive">Post screening is enabled. All posts and replies must be approved by staff before appearing on this board. </div>
  1142. {/if}
  1143.  
  1144. ############################## #important# ADD A MENU LINE TO MANAGE_MENU.PHP
  1145. ### inside the section marked under //Moderation so mods can get to it.
  1146.  
  1147. <li><a href="manage_page.php?action=approveposts">' . _gettext('Approve/Deny') . '</a></li>
  1148.  
  1149.  
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top