/inc/func/posts.php
PHP | 255 lines | 171 code | 28 blank | 56 comment | 50 complexity | 9672228bafc24d7f2ecfbee944f51cfb MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1
- <?php
- /**
- * Display the embedded video
- *
- * @param array $post Post data
- * @return string Embedded video
- */
- function embeddedVideoBox($post) {
- global $tc_db;
- $results = $tc_db->GetAll("SELECT HIGH_PRIORITY * FROM `" . KU_DBPREFIX . "embeds`");
-
- $output = '<span style="float: left;">' . "\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 .= '</span> ' . "\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);
- }
- }
-
- ?>