<?php

// Из файла file.js делаем file_v123456789.js добавив время
function getScript($path)
{
    if (file_exists($_SERVER['DOCUMENT_ROOT'].$path))
    {
        return '<script src="'.beforeLast($path,'.').'_v'.filectime($_SERVER['DOCUMENT_ROOT'].$path).'.'.afterLast($path,'.').'"></script>'."\n";
    }
    return '';
}

//Функция для перевода текста без применения GetText "trt("
function trt($text)
{
    global $db,$Schema,$language_id;

    $result='';
    $sql='select translation from '.$Schema.'_translations where del=false and language_id='.$language_id.' and identifier=\''.$text.'\';';
    //$sql='select translation from main._translations where del=false and language_id=(select id from main._languages where short_name=\''.$language_id.'\') and identifier=\''.$text.'\';';
    $res = NULL;
    try
    {
        $res = $db->query($sql);
    }catch (Exception $e)
    {
        echo $e->getMessage();
    }
    if($res!=NULL && $res->rowCount()>0)
    {
        while ($row = $res->fetch(PDO::FETCH_NUM))
        {
            $result=$row[0];
        }
    }else
    {
        $result=str_replace("_", " ", $text);
    }
    return $result;
}

//Перевод для строки в которой встречаются подстроки вида: trt('')
function trts($text)
{
    $result='';
    $pLen=4; //Длина преамбулы trt(
    $cut=0;
    $from = 0; // Позиция поиска для итерации
    while (true)
    {
        $pos1 = strpos($text, 'trt(', $from); //')
        if($pos1 !== false)
        {
            $from = $pos1+$pLen+1;
            $pos2 =  false;
            if($text[$pos1+$pLen] == '"')  $pos2 = strpos($text, '")', $from);
            if($text[$pos1+$pLen] == '\'') $pos2 = strpos($text, '\')', $from);
            if($pos2 !== false)
            {
                $result.=substr($text, $cut, $pos1 - $cut );
                $toTranslate=substr($text, $pos1+$pLen+1, $pos2 - $pos1 - $pLen-1 );
                $result.=trt($toTranslate);
                $cut=$pos2+2;
                $from = $pos2;
            }
        }else break;
    }
    $result.=substr($text, $cut); //Копируем остатки
    return $result;
}

//Выбираю из текста ${конкретные} слова для перевода
function trs($text)
{
    if(!$text) return '';
    $pos1=0;
    while(true)
    {
        $pos1 = strpos($text, '${',$pos1);
        if($pos1 !== false)
        {
            $pos2 = strpos($text, '}', $pos1);
            if($pos1 !== false)
            {
                $sub=substr($text,$pos1+2,$pos2-$pos1-2);
                $text=substr($text,0, $pos1).trt($sub).substr($text,$pos2+1);
            }else
            {
                break;
            }
        }else
        {
            break;
        }
    }
    return $text;
}

//Получить разрешения для текущего пользователя
function getAccess($key)
{
    global $db;

    $result=false;
    $sql="select main.p_getaccess(:user_id,:key) as acc;";
    $stmt = $db->prepare($sql);
    if(isset($_SESSION['USER_ID']))
        $stmt->bindValue(':user_id', $_SESSION['USER_ID'], PDO::PARAM_INT);
    else
        $stmt->bindValue(':user_id', 0, PDO::PARAM_INT);
    $stmt->bindValue(':key', $key, PDO::PARAM_STR);
    $res=null;
    try
    {
        $res=$stmt->execute();
    }catch (Exception $e)
    {
        echo $e->getMessage();
    }
    if($res && $stmt->rowCount()>0)
    {
        while ($row = $stmt->fetch(PDO::FETCH_NUM))
        {
            $result=$row[0];
        }
    }
    return $result;
}

function delPHPExt($fName)
{
	$pos = strrpos($fName, '.')+1;
	if(strtolower(substr($fName,$pos))=='php')
	{
		return substr($fName,0,$pos).'VIRUS';
	}else {
		return $fName;
	}
}

function getURLText($url,$data)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, trim($url));
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
    curl_setopt($ch, CURLOPT_HEADER,0); //Change this to a 1 to return headers
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $data = trim(curl_exec($ch));
    curl_close($ch);
    return $data;
}

// array imageResize (string $src, string $dest, integer $width, integer $height);
//  $src             - имя исходного файла
//  $dest            - имя генерируемого файла
//  $width, $height  - максимальные ширина и высота генерируемого изображения
// возвращает массив (0=>$width, 1=>$height) с шириной и высотой получившегося изображения
function imageResize ($src, $dest, $width, $height)
{
	if (!file_exists($src)) return false;
	if (($size=getimagesize($src))===false) return false;
	$format=strtolower(substr($size['mime'],strpos($size['mime'],'/')+1));
	$icfunc='imagecreatefrom'.$format;
	if (!function_exists($icfunc)) return false;
	$x_ratio=$width/$size[0];
	$y_ratio=$height/$size[1];
	$ratio=min($x_ratio, $y_ratio);
	$use_x_ratio=($x_ratio==$ratio);
	$new_width=$use_x_ratio?$width:floor($size[0]*$ratio);
	$new_height=!$use_x_ratio?$height:floor($size[1]*$ratio);
	$new_left=$use_x_ratio?0:floor(($width-$new_width)/2);
	$new_top=!$use_x_ratio?0:floor(($height-$new_height)/2);
	$isrc=$icfunc($src);
	$idest=imagecreatetruecolor($new_width, $new_height);
	imagecopyresampled($idest, $isrc, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1]);

	//Пишем в файл
	if ($format=='jpeg') imagejpeg($idest, $dest, 70);
	else if ($format=='gif') imagegif($idest, $dest);
	else imagepng($idest, $dest, 7);

	imagedestroy($isrc);
	imagedestroy($idest);
	return array($new_width, $new_height);
}
//Залить недостающие края заданным цветом (использую для фото без прозрачности для удобства в HTML верстке)
function imageFillBorder($src, $dest, $width, $height){
    if (!file_exists($src)) return false;
    if (($size=getimagesize($src))===false) return false;
    $format=strtolower(substr($size['mime'],strpos($size['mime'],'/')+1));

    // создание jpg изображения
    if ($format=='jpeg')
    {
        if(!$oldImg = imagecreatefromjpeg($src))
        {
            error_log('Error imagecreatefromjpeg '.$_SERVER['REQUEST_URI']);
        }
    }else if ($format=='gif') $oldImg = imagecreatefromgif($src);
    else $oldImg = imagecreatefrompng($src);

    //Создаю новое изображение
    $newImg=imagecreatetruecolor($width, $height);
    $background_color = imagecolorallocate($newImg, 255, 255, 255);
    imagefill($newImg, 0, 0, $background_color);

    //Ищем центр
    $x = ($width - imagesx($oldImg)) / 2;
    $y = ($height - imagesy($oldImg)) / 2;

    imagecopy($newImg, $oldImg, $x, $y, 0, 0, imagesx($oldImg), imagesy($oldImg));

    //Пишем в файл
    if ($format=='jpeg') imagejpeg($newImg,$dest);
    else if ($format=='gif') imagegif($newImg,$dest);
    else imagepng($newImg,$dest);

    // освобождаем память
    imagedestroy($oldImg);
    imagedestroy($newImg);
}

//Водяной знак (размножит по поверхности одного изображения другое)
function watermark($src,$stm)
{
	if (!file_exists($src) || !file_exists($stm)) return false;
	if (($size=getimagesize($src))===false) return false;
	$format=strtolower(substr($size['mime'],strpos($size['mime'],'/')+1));

	// создание водяного знака в формате png
	$watermark = imagecreatefrompng($stm);
	// получаем ширину и высоту
	$watermark_width = imagesx($watermark);
	$watermark_height = imagesy($watermark);

	// создание jpg изображения
	if ($format=='jpeg')
	{	
		if(!$image = imagecreatefromjpeg($src))
		{
			error_log('Error imagecreatefromjpeg '.$_SERVER['REQUEST_URI']);
		}
	}else if ($format=='gif') $image = imagecreatefromgif($src);
	else $image = imagecreatefrompng($src);


	//Выясняем количество повторов по оси X и по Y
	$dx=ceil($size[0] / $watermark_width);
	$dy=ceil($size[1] / $watermark_height);

	imagealphablending($image, true);
	imagealphablending($watermark, true);

	// создаём новое изображение
	for($y=0;$y<$dy;$y++)
		for($x=0;$x<$dx;$x++)
			imagecopy($image, $watermark, $x * $watermark_width, $y * $watermark_height, 0, 0, $watermark_width, $watermark_height);

	//Пишем в файл
	if ($format=='jpeg') imagejpeg($image,$src);
	else if ($format=='gif') imagegif($image,$src);
	else imagepng($image,$src);

	// освобождаем память
	imagedestroy($image);
	imagedestroy($watermark);
}



//вернёт только цифры
function getInt($str)
{
	$res='';
	for($i=0;$i<strlen($str);$i++)
	{
		if($str[$i]=='-'||$str[$i]=='0'||$str[$i]=='1'||$str[$i]=='2'||$str[$i]=='3'||$str[$i]=='4'||$str[$i]=='5'||$str[$i]=='6'||$str[$i]=='7'||$str[$i]=='8'||$str[$i]=='9')
			$res.=$str[$i];
	}
	return $res;
}

//вернёт только цифры
function getUInt($str)
{
	$res='';
	for($i=0;$i<strlen($str);$i++)
	{
		if($str[$i]=='0'||$str[$i]=='1'||$str[$i]=='2'||$str[$i]=='3'||$str[$i]=='4'||$str[$i]=='5'||$str[$i]=='6'||$str[$i]=='7'||$str[$i]=='8'||$str[$i]=='9')
			$res.=$str[$i];
	}
	return $res;
}

//вернёт только цифры
function getPhoneNum($str)
{
	$res='';
	for($i=0;$i<strlen($str);$i++)
	{
		if($str[$i]=='+'||$str[$i]=='0'||$str[$i]=='1'||$str[$i]=='2'||$str[$i]=='3'||$str[$i]=='4'||$str[$i]=='5'||$str[$i]=='6'||$str[$i]=='7'||$str[$i]=='8'||$str[$i]=='9')
			$res.=$str[$i];
	}
	return $res;
}

function translit($str)
{
	$rus = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');
	$lat = array('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', 'y', 'y', 'y', 'e', 'yu', 'ya');
	return str_replace($rus, $lat, $str);
}

//Расширение файла транслитерованное в строчных буквах
function getExtension($fileName)
{
	return strtolower(translit(substr($fileName, strrpos($fileName, '.') + 1)));
}

//Проверка емайла на валидность
function is_email($email)
{
	if (function_exists("filter_var"))
	{
		$s=filter_var($email, FILTER_VALIDATE_EMAIL);
		return !empty($s);
	}
	$p = '/^[a-z0-9!#$%&*+-=?^_`{|}~]+(\.[a-z0-9!#$%&*+-=?^_`{|}~]+)*';
	$p.= '@([-a-z0-9]+\.)+([a-z]{2,3}';
	$p.= '|info|arpa|aero|coop|name|museum|mobi)$/ix';
	return preg_match($p, $email);
}

function deleteTempFiles($dir)
{
	$time_sec=time(); // текущее время
	if (is_dir($dir))
	{
		$dh = opendir($dir);
		if ($dh)
		{
			while (($file = readdir($dh)) !== false)
			{
				if($file == '..' || $file == '.') continue;
				$time_file=filemtime($dir.$file); // время изменения файла
				$time=$time_sec-$time_file; // тепрь узнаем сколько прошло времени (в секундах)
				if($time>24*60*60) unlink($dir.$file);
			}
			closedir($dh);
		}
	}
}

function getFilesTree($dir,$cut="",$result = null){
    if($result==null)
        $result = new stdClass();

    if (is_dir($dir))
    {
        $result->list = array();

        $dh = opendir($dir);
        if ($dh)
        {
            while (($file = readdir($dh)) !== false)
            {
                if($file == '..' || $file == '.') continue;

                if(is_dir($dir.DIRECTORY_SEPARATOR.$file)){
                    $sub = new stdClass();
                    $sub->name=$file;
                    $sub->path=$dir.DIRECTORY_SEPARATOR.$file;
                    if($cut) $sub->path = str_replace($cut, "",$sub->path);
                    array_push($result->list, $sub);
                    getFilesTree($dir.DIRECTORY_SEPARATOR.$file, $cut, $sub);
                }else{
                    $sub = new stdClass();
                    $sub->name=$file;
                    $sub->path=$dir.DIRECTORY_SEPARATOR.$file;
                    if($cut) $sub->path = str_replace($cut, "",$sub->path);
                    array_push($result->list, $sub);
                }

            }
            closedir($dh);
        }
    }
    return $result;
}

//Генерация пароля
function getPassword($max)
{
	$chars="qazxswedcvfrtgbnhyujmkiolp1234567890";
	$size=StrLen($chars)-1;
	$password='';
	while($max--)
		$password.=$chars[rand(0,$size)];
	return $password;
}

//Полный путь к текущему URL включая http и название скрипта
function selfURL()
{
	if(!isset($_SERVER['REQUEST_URI'])){ $suri = $_SERVER['PHP_SELF']; }
	else { $suri = $_SERVER['REQUEST_URI']; }
    $s = empty($_SERVER["HTTPS"]) ? '' : (($_SERVER["HTTPS"] == "on") ? "s" : "");
    $sp=strtolower($_SERVER["SERVER_PROTOCOL"]);
    $pr =    substr($sp,0,strpos($sp,"/")).$s;
    $pt = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
    return $pr."://".$_SERVER['SERVER_NAME'].$pt.$suri;
}

//Путь без файла пример: http://truemisha.ru 
function selfDomain()
{
    //if(!isset($_SERVER['REQUEST_URI'])) $suri = $_SERVER['PHP_SELF'];
    //else $suri = $_SERVER['REQUEST_URI'];
    $s = empty($_SERVER["HTTPS"]) ? '' : (($_SERVER["HTTPS"] == "on") ? "s" : "");
    $sp=strtolower($_SERVER["SERVER_PROTOCOL"]);
    $pr =    substr($sp,0,strpos($sp,"/")).$s;
    $pt = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
    return $pr."://".$_SERVER['SERVER_NAME'].$pt;//.$suri;	
}

//Строка до последнего найденого символа если символа нет то всю строку
function beforeLast(&$str,$ch)
{
	return substr($str, 0, strrpos($str, $ch));
}
//Строка после последнего найденого символа если символа нет то всю строку
function afterLast(&$str,$ch)
{
	return substr($str, strrpos($str, $ch)+strlen($ch));
}
//Строка до первого попавшегося символа
function beforeFirst(&$str,$ch)
{
	return substr($str, 0, strpos($str, $ch));
}
//Строка после первого попавшегося символа
function afterFirst(&$str,$ch)
{
	return substr($str, strpos($str, $ch)+strlen($ch));
}
/**
 * Вернёт подстроку если символа нет то всю строку
 * @param string $str
 * @param string $chr
 * @return string Подстрока
 */
function cutStr(&$str,$chr)
{
    $pos = strpos($str, $chr);
    if($pos===false)
    {
        return $str;
    }else
    {
        $buf = substr($str, 0, $pos);
        $str = substr($str, $pos + strlen($chr));
        return $buf;
    }
}

//Вырезаеи всё после заданого разделителя удаляя разделитель если разделителя нет возвращает всю строку
//$fstr - Разделитель
//$num - На каком разделителе остановиться
function cutAfterLast(&$sstr,$fstr,$num = 1)
{
	$sub='';
	$pos=strlen($sstr);
	for($i=0;$i<$num;$i++)
	{
		$pos = strripos($sstr, $fstr, $pos-strlen($sstr)-1);
		if($pos === false) { break; }
	}
	if($pos === false)
	{
		$sub=$sstr;
		$sstr='';
		return $sub;
	}else
	{
		$sub  = substr( $sstr , $pos + strlen($fstr));
		$sstr = substr( $sstr , 0, $pos);
		return $sub;
	}
}

//Зачем коментил?
//Отрезаем от строки всё до заданой подстроки если подстроки нет отрезается вся строка
function cutBeforeFirst(&$sstr,$fstr)
{
	$sub='';
	$pos = strpos($sstr, $fstr);
	if($pos === false)
	{
		$sub=$sstr;
		$sstr='';
		return $sub;
	}else
	{
		$sub  = substr( $sstr , 0, $pos);
		$sstr = substr( $sstr , $pos + strlen($fstr));
		return $sub;
	}	
}
