<?php

/**
 * AVE.cms
 *
 * @package AVE.cms
 * @version 3.x
 * @filesource
 * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
 *
 */

if(!defined('BASE_DIR'))define('BASE_DIR', str_replace("\\", "/", dirname(dirname(__FILE__))));

function iptc_make_tag($rec, $data, $value)
{
	$length = strlen($value);
	$retval = chr(0x1C) . chr($rec) . chr($data);

	if($length < 0x8000)
	{
		$retval .= chr($length >> 8) .  chr($length & 0xFF);
	}
	else
	{
		$retval .= chr(0x80) .
				   chr(0x04) .
				   chr(($length >> 24) & 0xFF) .
				   chr(($length >> 16) & 0xFF) .
				   chr(($length >> 8) & 0xFF) .
				   chr($length & 0xFF);
	}

	return $retval . $value;
}

/**
 * Creates directory
 *
 * @param  string  $path Path to create
 * @param  integer $mode Optional permissions
 * @return boolean Success
 */
function _mkdir($path, $mode = 0777)
{
	$old = umask(0);
	$res = @mkdir($path, $mode);
	umask($old);

	return $res;
}

/**
 * Creates directories recursively
 *
 * @param  string  $path Path to create
 * @param  integer $mode Optional permissions
 * @return boolean Success
 */
function rmkdir($path, $mode = 0777)
{
	return is_dir($path) || (mkdir(dirname($path), $mode) && _mkdir($path, $mode));
}
require(dirname(__FILE__).'/config.php');

$allowedExt = array('jpg', 'jpeg', 'png', 'gif');

$imagefile=urldecode($_SERVER['REQUEST_URI']);

if(!empty($_REQUEST['thumb'])){
	$imagefile='/'.
		rtrim(
			dirname($_REQUEST['thumb'])
			.'/'.THUMBNAIL_DIR.'/'
			.(str_replace(
				'.',
				(empty($_REQUEST['mode']) ? '-c' : '-'.$_REQUEST['mode']).((empty($_REQUEST['width'])&& empty($_REQUEST['height'])) ? '128' : intval(@$_REQUEST['width'])).'x'.((empty($_REQUEST['width'])&& empty($_REQUEST['height'])) ? '128' : intval(@$_REQUEST['height'])).'.',
				basename($_REQUEST['thumb'])
				)
			),
		'/');
}

$baseDir = str_replace("\\", "/", dirname(dirname(__FILE__)));

if(file_exists($baseDir.$imagefile)){
	$img_data = @getimagesize($baseDir.$imagefile);
	header('Content-Type:' . $img_data['mime'], true);
	header("Last-Modified: ".gmdate("D, d M Y H:i:s".filemtime($baseDir.$imagefile))." GMT");
	header("Content-Length: " . (string) filesize($baseDir.$imagefile), true);
	readfile($baseDir.$imagefile);
	exit;
}

list(, $thumbPath) = explode('/' . UPLOAD_DIR . '/', dirname($imagefile), 2);

$lenThumbDir = strlen(THUMBNAIL_DIR);

if ($lenThumbDir && substr($thumbPath, -$lenThumbDir) != THUMBNAIL_DIR) exit(0);

$thumbPath = $baseDir . '/' . UPLOAD_DIR . '/' . $thumbPath;
$imagePath = $lenThumbDir ? dirname($thumbPath) : $thumbPath;

$thumbName = basename($imagefile);
$nameParts = explode('.', $thumbName);
$countParts = count($nameParts);

if ($countParts < 2 || !in_array(strtolower(end($nameParts)), $allowedExt)) exit(0);

$matches = array();
preg_match('/-(r|c|f|t)(\d+)x(\d+)(r)*$/i', $nameParts[$countParts-2], $matches);


if (!isset($matches[0]))
{
	header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
	exit(0);
}
if (isset($matches[4]))
{
	list($size, $method, $width, $height, $rotate) = $matches;
}
else
{
	list($size, $method, $width, $height) = $matches;
	$rotate = false;
}

$nameParts[$countParts-2] = substr($nameParts[$countParts-2], 0, -strlen($size));
$imageName = implode('.', $nameParts);

$save = true;
if (!file_exists("$imagePath/$imageName"))
{
	$l="$imagePath/$imageName";
	if(file_exists($l.'.tmp')){
		include_once(BASE_DIR.'/functions/func.common.php');
		$abs_path = dirname((!strstr($_SERVER['PHP_SELF'], $_SERVER['SCRIPT_NAME']) && (@php_sapi_name() == 'cgi')) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);
		define('ABS_PATH', rtrim(str_replace("\\", "/", $abs_path), '/') . '/');
		$url=trim(file_get_contents($l.'.tmp'),ABS_PATH);
		$img=CURL_file_get_contents($url);
		if($img){
			file_put_contents("$imagePath/$imageName",$img);
			setEXIFF("$imagePath/$imageName");
			$save = true;
		}
		@unlink($l.'.tmp');
	}

}

if (!file_exists("$imagePath/$imageName"))
{
	header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
	$imageName = 'noimage.gif';
	if (!file_exists("$imagePath/$imageName"))
	{
		$imagePath = $baseDir . '/' . UPLOAD_DIR . '/images';
	}
	if (!file_exists("$imagePath/$imageName")) exit(0);

	$save = false;
}

require $baseDir.'/class/class.thumbnail.php';

$thumb = new Image_Toolbox("$imagePath/$imageName");

switch ($method)
{
	case 'r':
		$thumb->newOutputSize((int)$width, (int)$height, 0, (boolean)$rotate);
		break;

	case 'c':
		$thumb->newOutputSize((int)$width, (int)$height, 1, (boolean)$rotate);
		break;

	case 'f':
		$thumb->newOutputSize((int)$width, (int)$height, 2, false, '#ffffff');
		break;
	case 't':
		$thumb->newOutputSize((int)$width, (int)$height, 3, false);
		break;
}

//Blend
$thumb->addImage(BASE_DIR . '/' . 'uploads/gallery/watermark.png');
$thumb->blend('right 0', 'bottom -10', IMAGE_TOOLBOX_BLEND_COPY, 100);

//Text
//$thumb->addText('Мой текст', BASE_DIR . '/inc/fonts/ft16.ttf', 16, '#709536', 'right -10', 'bottom -10'); 
//if ($width > 200){
//	$thumb->addImage(BASE_DIR . '/' . 'uploads/gallery/watermark.gif');
//	$thumb->blend('right -10', 'bottom -10', IMAGE_TOOLBOX_BLEND_COPY, 100);
//}

$thumb->output();

if ($save)
{
	if (!file_exists($thumbPath) && !mkdir($thumbPath, 0777)) exit(0);
	if ($thumb->save("$thumbPath/$thumbName"))
	{
		$old = umask(0);
		chmod("$thumbPath/$thumbName", 0777);
		umask($old);
	}
	if($thumb->_img['main']['type']==2){
		$image = getimagesize("$thumbPath/$thumbName", $info);
		if(!isset($info['APP13']))
		{
			if(!isset($AVE_DB)){
				@require(BASE_DIR . '/class/class.database.php');
				$sitename=@$AVE_DB->Query("SELECT site_name FROM " . PREFIX . "_settings LIMIT 1")->GetCell();
			}

			// установка IPTC тэгов
			$iptc = array(
				'2#120' => iconv("UTF-8","WINDOWS-1251",$sitename),
				'2#116' => "http://".$_SERVER['SERVER_NAME']
			);

			// Преобразование IPTC тэгов в двоичный код
			$data = '';

			foreach($iptc as $tag => $string)
			{
				$tag = substr($tag, 2);
				$data .= iptc_make_tag(2, $tag, $string);
			}

			// Встраивание IPTC данных
			$content = iptcembed($data, "$thumbPath/$thumbName");

			// запись нового изображения в файл
			$fp = fopen("$thumbPath/$thumbName", "wb");
			fwrite($fp, $content);
			fclose($fp);
		}
	}
}

?>