GetAll("SELECT HIGH_PRIORITY * FROM `" . KU_DBPREFIX . "embeds`"); $output = '' . "\n"; foreach ($results as $line) { if ($post['file_type'] == $line['filetype']) { $code = $line['code']; /*$width = $line['width']; $height = $line['height'];*/ $replace = array('SET_HEIGHT', 'SET_WIDTH', 'EMBED_ID'); $trueval = array($line['height'], $line['width'], $post['file']); $code = str_replace($replace, $trueval, $code); $output .= $code; } } $output .= ' ' . "\n"; return $output; } /** * Check if the supplied md5 file hash is currently recorded inside of the database, attached to a non-deleted post */ function checkMd5($md5, $board, $boardid) { global $tc_db; $matches = $tc_db->GetAll("SELECT `id`, `parentid` FROM `".KU_DBPREFIX."posts` WHERE `boardid` = " . $boardid . " AND `IS_DELETED` = 0 AND `file_md5` = ".$tc_db->qstr($md5)." LIMIT 1"); if (count($matches) > 0) { $real_parentid = ($matches[0][1] == 0) ? $matches[0][0] : $matches[0][1]; return array($real_parentid, $matches[0][0]); } return false; } /* Image handling */ /** * Create a thumbnail * * @param string $name File to be thumbnailed * @param string $filename Path to place the thumbnail * @param integer $new_w Maximum width * @param integer $new_h Maximum height * @return boolean Success/fail */ function createThumbnail($name, $filename, $new_w, $new_h) { if (KU_THUMBMETHOD == 'imagemagick') { $convert = 'convert ' . escapeshellarg($name); if (!KU_ANIMATEDTHUMBS) { $convert .= '[0] '; } $convert .= ' -resize ' . $new_w . 'x' . $new_h . ' -quality '; if (substr($filename, 0, -3) != 'gif') { $convert .= '70'; } else { $convert .= '90'; } $convert .= ' ' . escapeshellarg($filename); exec($convert); if (is_file($filename)) { return true; } else { return false; } } elseif (KU_THUMBMETHOD == 'gd') { $system=explode(".", $filename); $system = array_reverse($system); if (preg_match("/jpg|jpeg/", $system[0])) { $src_img=imagecreatefromjpeg($name); } else if (preg_match("/png/", $system[0])) { $src_img=imagecreatefrompng($name); } else if (preg_match("/gif/", $system[0])) { $src_img=imagecreatefromgif($name); } else { return false; } if (!$src_img) { exitWithErrorPage(_gettext('Unable to read uploaded file during thumbnailing.'), _gettext('A common cause for this is an incorrect extension when the file is actually of a different type.')); } $old_x = imageSX($src_img); $old_y = imageSY($src_img); if ($old_x > $old_y) { $percent = $new_w / $old_x; } else { $percent = $new_h / $old_y; } $thumb_w = round($old_x * $percent); $thumb_h = round($old_y * $percent); $dst_img = ImageCreateTrueColor($thumb_w, $thumb_h); fastImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y, $system); if (preg_match("/png/", $system[0])) { if (!imagepng($dst_img,$filename,0,PNG_ALL_FILTERS) ) { echo 'unable to imagepng.'; return false; } } else if (preg_match("/jpg|jpeg/", $system[0])) { if (!imagejpeg($dst_img, $filename, 70)) { echo 'unable to imagejpg.'; return false; } } else if (preg_match("/gif/", $system[0])) { if (!imagegif($dst_img, $filename)) { echo 'unable to imagegif.'; return false; } } imagedestroy($dst_img); imagedestroy($src_img); return true; } return false; } /* Author: Tim Eckel - Date: 12/17/04 - Project: FreeRingers.net - Freely distributable. */ /** * Faster method than only calling imagecopyresampled() * * @return boolean Success/fail */ function fastImageCopyResampled(&$dst_image, &$src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h, $system, $quality = 3) { /* Optional "quality" parameter (defaults is 3). Fractional values are allowed, for example 1.5. 1 = Up to 600 times faster. Poor results, just uses imagecopyresized but removes black edges. 2 = Up to 95 times faster. Images may appear too sharp, some people may prefer it. 3 = Up to 60 times faster. Will give high quality smooth results very close to imagecopyresampled. 4 = Up to 25 times faster. Almost identical to imagecopyresampled for most images. 5 = No speedup. Just uses imagecopyresampled, highest quality but no advantage over imagecopyresampled. */ if (empty($src_image) || empty($dst_image) || $quality <= 0) { return false; } if (preg_match("/png/", $system[0]) || preg_match("/gif/", $system[0])) { $colorcount = imagecolorstotal($src_image); if ($colorcount <= 256 && $colorcount != 0) { imagetruecolortopalette($dst_image,true,$colorcount); imagepalettecopy($dst_image,$src_image); $transparentcolor = imagecolortransparent($src_image); imagefill($dst_image,0,0,$transparentcolor); imagecolortransparent($dst_image,$transparentcolor); } else { imageAlphaBlending($dst_image, false); imageSaveAlpha($dst_image, true); //If the image has Alpha blending, lets save it } } if ($quality < 5 && (($dst_w * $quality) < $src_w || ($dst_h * $quality) < $src_h)) { $temp = imagecreatetruecolor ($dst_w * $quality + 1, $dst_h * $quality + 1); if (preg_match("/png/", $system[0])) { $background = imagecolorallocate($temp, 0, 0, 0); ImageColorTransparent($temp, $background); // make the new temp image all transparent imagealphablending($temp, false); // turn off the alpha blending to keep the alpha channel } imagecopyresized ($temp, $src_image, 0, 0, $src_x, $src_y, $dst_w * $quality + 1, $dst_h * $quality + 1, $src_w, $src_h); imagecopyresampled ($dst_image, $temp, $dst_x, $dst_y, 0, 0, $dst_w, $dst_h, $dst_w * $quality, $dst_h * $quality); imagedestroy ($temp); } else imagecopyresampled ($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); return true; } /* Link validator Will use cURL to attempt to visit a webpage, and then return based upon how the request was handled. Used for embedded videos to validate the ID is existant. Thanks phadeguy - http://www.zend.com/codex.php?id=1256&single=1 expects a link url as string returns an array of three elements: return_array[0] = HTTP version return_array[1] = Returned error number (200, 404, etc) return_array[2] = Returned error text ("OK", "File Not Found", etc) */ function check_link($link) { $main = array(); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $link); curl_setopt ($ch, CURLOPT_HEADER, 1); curl_setopt ($ch, CURLOPT_NOBODY, 1); // curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ch, CURLOPT_TIMEOUT, 10); curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); ob_start(); curl_exec ($ch); $stuff = ob_get_contents(); ob_end_clean(); curl_close ($ch); $parts = split("n",$stuff,2); $main = split(" ",$parts[0],3); return $main; } /** * Trim the threads to the page limit and delete posts which are older than limited */ function TrimToPageLimit($board) { global $tc_db; if ($board['maxage'] != 0) { // If the maximum thread age setting is not zero (do not delete old threads), find posts which are older than the limit, and delete them $results = $tc_db->GetAll("SELECT `id`, `timestamp` FROM `".KU_DBPREFIX."posts` WHERE `boardid` = " . $board['id'] . " AND `IS_DELETED` = 0 AND `parentid` = 0 AND `stickied` = 0 AND ((`timestamp` + " . ($board['maxage']*3600) . ") < " . time() . ")"); foreach($results AS $line) { // If it is older than the limit $post_class = new Post($line['id'], $board['name'], $board['id']); $post_class->Delete(true); } } if ($board['maxpages'] != 0) { // If the maximum pages setting is not zero (do not limit pages), find posts which are over the limit, and delete them $results = $tc_db->GetAll("SELECT `id`, `stickied` FROM `".KU_DBPREFIX."posts` WHERE `boardid` = " . $board['id'] . " AND `IS_DELETED` = 0 AND `parentid` = 0"); $results_count = count($results); if (calculatenumpages($board['type'], $results_count) >= $board['maxpages']) { $board['maxthreads'] = ($board['maxpages'] * KU_THREADS); $numthreadsover = ($results_count - $board['maxthreads']); if ($numthreadsover > 0) { $resultspost = $tc_db->GetAll("SELECT `id`, `stickied` FROM `".KU_DBPREFIX."posts` WHERE `boardid` = " . $board['id'] . " AND `IS_DELETED` = 0 AND `parentid` = 0 AND `stickied` = 0 ORDER BY `bumped` ASC LIMIT " . $numthreadsover); foreach($resultspost AS $linepost) { $post_class = new Post($linepost['id'], $board['name'], $board['id']); $post_class->Delete(true); } } } } // If the thread was marked for deletion more than two hours ago, delete it $results = $tc_db->GetAll("SELECT `id` FROM `".KU_DBPREFIX."posts` WHERE `boardid` = " . $board['id'] . " AND `IS_DELETED` = 0 AND `parentid` = 0 AND `stickied` = 0 AND `deleted_timestamp` > 0 AND (`deleted_timestamp` <= " . time() . ")"); foreach($results AS $line) { // If it is older than the limit $post_class = new Post($line['id'], $board['name'], $board['id']); $post_class->Delete(true); } } ?>