2009-09-15 01:14:44 +03:00
|
|
|
|
<?php
|
|
|
|
|
/*-------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* LiveStreet Engine Social Networking
|
|
|
|
|
* Copyright © 2008 Mzhelskiy Maxim
|
|
|
|
|
*
|
|
|
|
|
*--------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* Official site: www.livestreet.ru
|
|
|
|
|
* Contact e-mail: rus.engine@gmail.com
|
|
|
|
|
*
|
|
|
|
|
* GNU General Public License, version 2:
|
|
|
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
|
|
|
*
|
|
|
|
|
---------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
|
2013-08-08 14:00:37 +03:00
|
|
|
|
require_once Config::Get('path.framework.libs_vendor.server').'/LiveImage/Image.php';
|
2009-09-15 01:14:44 +03:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Модуль обработки изображений
|
|
|
|
|
* Использует библиотеку LiveImage
|
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @package engine.modules
|
|
|
|
|
* @since 1.0
|
2009-09-15 01:14:44 +03:00
|
|
|
|
*/
|
2010-05-27 17:02:43 +03:00
|
|
|
|
class ModuleImage extends Module {
|
2009-09-15 20:32:02 +03:00
|
|
|
|
/**
|
|
|
|
|
* Неопределенный тип ошибки при загрузке изображения
|
|
|
|
|
*/
|
|
|
|
|
const UPLOAD_IMAGE_ERROR = 1;
|
|
|
|
|
/**
|
|
|
|
|
* Ошибка избыточного размера при загрузке изображения
|
|
|
|
|
*/
|
|
|
|
|
const UPLOAD_IMAGE_ERROR_SIZE = 2;
|
|
|
|
|
/**
|
|
|
|
|
* Неизвестный тип изображения
|
|
|
|
|
*/
|
|
|
|
|
const UPLOAD_IMAGE_ERROR_TYPE = 4;
|
|
|
|
|
/**
|
|
|
|
|
* Ошибка чтения файла при загрузке изображения
|
|
|
|
|
*/
|
|
|
|
|
const UPLOAD_IMAGE_ERROR_READ = 8;
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2009-09-15 20:32:02 +03:00
|
|
|
|
/**
|
|
|
|
|
* Настройки модуля по умолчанию
|
|
|
|
|
*
|
|
|
|
|
* @var array
|
|
|
|
|
*/
|
2009-09-15 01:14:44 +03:00
|
|
|
|
protected $aParamsDefault = array();
|
2010-04-17 23:12:15 +03:00
|
|
|
|
/**
|
|
|
|
|
* Тескт последней ошибки
|
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @var string
|
2010-04-17 23:12:15 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $sLastErrorText = null;
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2009-09-15 01:14:44 +03:00
|
|
|
|
/**
|
|
|
|
|
* Инициализация модуля
|
|
|
|
|
*/
|
2012-04-27 13:23:02 +03:00
|
|
|
|
public function Init() {
|
2009-09-15 01:14:44 +03:00
|
|
|
|
$this->aParamsDefault = array(
|
|
|
|
|
'watermark_use'=>false,
|
|
|
|
|
'round_corner' =>false
|
|
|
|
|
);
|
|
|
|
|
}
|
2010-04-17 23:12:15 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получает текст последней ошибки
|
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @return string
|
2010-04-17 23:12:15 +03:00
|
|
|
|
*/
|
|
|
|
|
public function GetLastError() {
|
|
|
|
|
return $this->sLastErrorText;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливает текст последней ошибки
|
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param string $sText Текст ошибки
|
2010-04-17 23:12:15 +03:00
|
|
|
|
*/
|
|
|
|
|
public function SetLastError($sText) {
|
|
|
|
|
$this->sLastErrorText=$sText;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Очищает текст последней ошибки
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
public function ClearLastError() {
|
|
|
|
|
$this->sLastErrorText=null;
|
|
|
|
|
}
|
2009-09-15 01:14:44 +03:00
|
|
|
|
/**
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* Возврашает параметры для группы, если каких то параметров в группе нет, то используются дефолтные
|
2009-09-15 01:14:44 +03:00
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param string $sName Имя группы
|
2009-09-15 01:14:44 +03:00
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2009-12-10 18:57:30 +02:00
|
|
|
|
public function BuildParams($sName=null) {
|
2009-09-15 01:14:44 +03:00
|
|
|
|
if(is_null($sName)) {
|
|
|
|
|
return Config::Get('module.image.default');
|
|
|
|
|
}
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2009-09-15 01:14:44 +03:00
|
|
|
|
$aDefault = (array)Config::Get('module.image.default');
|
|
|
|
|
$aNamed = (array)Config::Get('module.image.'.strtolower($sName));
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2009-09-15 01:14:44 +03:00
|
|
|
|
return func_array_merge_assoc($aDefault,$aNamed);
|
|
|
|
|
}
|
2012-04-29 07:10:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Возвращает объект изображения
|
|
|
|
|
*
|
|
|
|
|
* @param $sFile Путь до изображения
|
|
|
|
|
* @return LiveImage
|
|
|
|
|
*/
|
|
|
|
|
public function CreateImageObject($sFile) {
|
|
|
|
|
return new LiveImage($sFile);
|
|
|
|
|
}
|
2009-09-15 01:14:44 +03:00
|
|
|
|
/**
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* Resize,copy image,
|
2009-09-15 01:14:44 +03:00
|
|
|
|
* make rounded corners and add watermark
|
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param string $sFileSrc Исходный файл изображения
|
|
|
|
|
* @param string $sDirDest Директория куда нужно сохранить изображение относительно корня сайта (path.root.server)
|
|
|
|
|
* @param string $sFileDest Имя файла для сохранения, без расширения
|
|
|
|
|
* @param int $iWidthMax Максимально допустимая ширина изображения
|
|
|
|
|
* @param int $iHeightMax Максимало допустимая высота изображения
|
|
|
|
|
* @param int|null $iWidthDest Ширина необходимого изображения на выходе
|
|
|
|
|
* @param int|null $iHeightDest Высота необходимого изображения на выходе
|
|
|
|
|
* @param bool $bForcedMinSize Растягивать изображение по ширине или нет, если исходное меньше. При false - изображение будет растянуто
|
|
|
|
|
* @param array|null $aParams Параметры
|
|
|
|
|
* @param LiveImage|null $oImage Объект изображения, если null то будет содано автоматически
|
|
|
|
|
* @return string|bool Полный серверный путь до сохраненного изображения
|
2009-09-15 01:14:44 +03:00
|
|
|
|
*/
|
2009-10-12 20:32:56 +03:00
|
|
|
|
public function Resize($sFileSrc,$sDirDest,$sFileDest,$iWidthMax,$iHeightMax,$iWidthDest=null,$iHeightDest=null,$bForcedMinSize=true,$aParams=null,$oImage=null) {
|
2010-04-17 23:12:15 +03:00
|
|
|
|
$this->ClearLastError();
|
2009-09-15 01:14:44 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если параметры не переданы, устанавливаем действия по умолчанию
|
|
|
|
|
*/
|
|
|
|
|
if(!is_array($aParams)) {
|
|
|
|
|
$aParams=$this->aParamsDefault;
|
|
|
|
|
}
|
2009-10-12 20:32:56 +03:00
|
|
|
|
/**
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* Если объект не передан как параметр,
|
2009-10-12 20:32:56 +03:00
|
|
|
|
* создаем новый
|
|
|
|
|
*/
|
2012-04-29 07:10:21 +03:00
|
|
|
|
if(!$oImage) $oImage=$this->CreateImageObject($sFileSrc);
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2009-09-15 01:14:44 +03:00
|
|
|
|
if($oImage->get_last_error()){
|
2010-04-17 23:12:15 +03:00
|
|
|
|
$this->SetLastError($oImage->get_last_error());
|
2009-09-15 01:14:44 +03:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2009-12-13 17:22:47 +02:00
|
|
|
|
|
2009-09-15 01:14:44 +03:00
|
|
|
|
$sFileDest.='.'.$oImage->get_image_params('format');
|
2012-04-27 13:23:02 +03:00
|
|
|
|
if (($oImage->get_image_params('width')>$iWidthMax)
|
2009-09-15 01:14:44 +03:00
|
|
|
|
or ($oImage->get_image_params('height')>$iHeightMax)) {
|
2012-04-27 13:23:02 +03:00
|
|
|
|
return false;
|
2009-09-15 01:14:44 +03:00
|
|
|
|
}
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2009-09-15 01:14:44 +03:00
|
|
|
|
if ($iWidthDest) {
|
2009-10-22 01:27:23 +03:00
|
|
|
|
if ($bForcedMinSize and ($iWidthDest>$oImage->get_image_params('width'))) {
|
2009-09-15 01:14:44 +03:00
|
|
|
|
$iWidthDest=$oImage->get_image_params('width');
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Ресайзим и выводим результат в файл.
|
|
|
|
|
* Если не задана новая высота, то применяем масштабирование.
|
|
|
|
|
* Если нужно добавить Watermark, то запрещаем ручное управление alfa-каналом
|
|
|
|
|
*/
|
2009-09-15 20:32:02 +03:00
|
|
|
|
$oImage->resize($iWidthDest,$iHeightDest,(!$iHeightDest),(!$aParams['watermark_use']));
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2009-09-15 01:14:44 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавляем watermark согласно в конфигурации заданым параметрам
|
|
|
|
|
*/
|
|
|
|
|
if($aParams['watermark_use']) {
|
2010-06-04 17:05:04 +03:00
|
|
|
|
if ($oImage->get_image_params('width')>$aParams['watermark_min_width'] and $oImage->get_image_params('height')>$aParams['watermark_min_height']) {
|
|
|
|
|
switch($aParams['watermark_type']) {
|
|
|
|
|
default:
|
|
|
|
|
case 'text':
|
|
|
|
|
$oImage->set_font(
|
|
|
|
|
$aParams['watermark_font_size'], 0,
|
|
|
|
|
$aParams['path']['fonts'].$aParams['watermark_font'].'.ttf'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$oImage->watermark(
|
|
|
|
|
$aParams['watermark_text'],
|
|
|
|
|
explode(',',$aParams['watermark_position'],2),
|
|
|
|
|
explode(',',$aParams['watermark_font_color']),
|
|
|
|
|
explode(',',$aParams['watermark_back_color']),
|
|
|
|
|
$aParams['watermark_font_alfa'],
|
|
|
|
|
$aParams['watermark_back_alfa']
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
case 'image':
|
|
|
|
|
$oImage->paste_image(
|
|
|
|
|
$aParams['path']['watermarks'].$aParams['watermark_image'],
|
2010-10-03 19:35:31 +03:00
|
|
|
|
false, explode(',',$aParams['watermark_position'],2)
|
2010-06-04 17:05:04 +03:00
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
}
|
2009-09-15 01:14:44 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Скругляем углы
|
|
|
|
|
*/
|
|
|
|
|
if($aParams['round_corner']) {
|
2009-12-13 17:22:47 +02:00
|
|
|
|
$oImage->round_corners($aParams['round_corner_radius'], $aParams['round_corner_rate']);
|
2009-09-15 01:14:44 +03:00
|
|
|
|
}
|
2009-12-10 23:54:53 +02:00
|
|
|
|
/**
|
|
|
|
|
* Для JPG формата устанавливаем output quality, если это предусмотрено в конфигурации
|
|
|
|
|
*/
|
|
|
|
|
if(isset($aParams['jpg_quality']) and $oImage->get_image_params('format')=='jpg') {
|
|
|
|
|
$oImage->set_jpg_quality($aParams['jpg_quality']);
|
|
|
|
|
}
|
2012-04-08 17:37:43 +03:00
|
|
|
|
|
|
|
|
|
$sFileTmp=Config::Get('sys.cache.dir').func_generator(20);
|
|
|
|
|
$oImage->output(null,$sFileTmp);
|
|
|
|
|
return $this->SaveFile($sFileTmp,$sDirDest,$sFileDest,0666,true);
|
|
|
|
|
} else{
|
|
|
|
|
return $this->SaveFile($sFileSrc,$sDirDest,$sFileDest,0666,false);
|
2009-09-15 01:14:44 +03:00
|
|
|
|
}
|
2009-10-12 20:32:56 +03:00
|
|
|
|
return false;
|
2009-09-15 01:14:44 +03:00
|
|
|
|
}
|
2009-10-12 20:32:56 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вырезает максимально возможный квадрат
|
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param LiveImage $oImage Объект изображения
|
2009-10-12 20:32:56 +03:00
|
|
|
|
* @return LiveImage
|
|
|
|
|
*/
|
2010-08-01 18:23:00 +03:00
|
|
|
|
public function CropSquare(LiveImage $oImage,$bCenter=true) {
|
2009-10-12 20:32:56 +03:00
|
|
|
|
if(!$oImage || $oImage->get_last_error()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
$iWidth = $oImage->get_image_params('width');
|
|
|
|
|
$iHeight = $oImage->get_image_params('height');
|
|
|
|
|
/**
|
|
|
|
|
* Если высота и ширина совпадают, то возвращаем изначальный вариант
|
|
|
|
|
*/
|
2009-12-13 17:22:47 +02:00
|
|
|
|
if($iWidth==$iHeight){ return $oImage; }
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2009-10-12 20:32:56 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вырезаем квадрат из центра
|
|
|
|
|
*/
|
|
|
|
|
$iNewSize = min($iWidth,$iHeight);
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
|
|
|
|
if ($bCenter) {
|
2010-08-01 18:23:00 +03:00
|
|
|
|
$oImage->crop($iNewSize,$iNewSize,($iWidth-$iNewSize)/2,($iHeight-$iNewSize)/2);
|
2012-04-27 13:23:02 +03:00
|
|
|
|
} else {
|
2010-08-01 18:23:00 +03:00
|
|
|
|
$oImage->crop($iNewSize,$iNewSize,0,0);
|
|
|
|
|
}
|
2009-10-12 20:32:56 +03:00
|
|
|
|
/**
|
|
|
|
|
* Возвращаем объект изображения
|
|
|
|
|
*/
|
|
|
|
|
return $oImage;
|
|
|
|
|
}
|
2010-08-01 17:38:19 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вырезает максимально возможный прямоугольный в нужной пропорции
|
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param LiveImage $oImage Объект изображения
|
|
|
|
|
* @param int $iW Ширина для определения пропорции
|
|
|
|
|
* @param int $iH Высота для определения пропорции
|
|
|
|
|
* @param bool $bCenter Вырезать из центра
|
|
|
|
|
* @return LiveImage
|
2010-08-01 17:38:19 +03:00
|
|
|
|
*/
|
|
|
|
|
public function CropProportion(LiveImage $oImage,$iW,$iH,$bCenter=true) {
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2010-08-01 17:38:19 +03:00
|
|
|
|
if(!$oImage || $oImage->get_last_error()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
$iWidth = $oImage->get_image_params('width');
|
|
|
|
|
$iHeight = $oImage->get_image_params('height');
|
|
|
|
|
/**
|
|
|
|
|
* Если высота и ширина уже в нужных пропорциях, то возвращаем изначальный вариант
|
|
|
|
|
*/
|
|
|
|
|
$iProp=round($iW/$iH, 2);
|
|
|
|
|
if(round($iWidth/$iHeight, 2)==$iProp){ return $oImage; }
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2010-08-01 17:38:19 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вырезаем прямоугольник из центра
|
2012-04-27 13:23:02 +03:00
|
|
|
|
*/
|
2010-08-01 17:38:19 +03:00
|
|
|
|
if (round($iWidth/$iHeight, 2)<=$iProp) {
|
|
|
|
|
$iNewWidth=$iWidth;
|
|
|
|
|
$iNewHeight=round($iNewWidth/$iProp);
|
2012-04-27 13:23:02 +03:00
|
|
|
|
} else {
|
2010-08-01 17:38:19 +03:00
|
|
|
|
$iNewHeight=$iHeight;
|
|
|
|
|
$iNewWidth=$iNewHeight*$iProp;
|
|
|
|
|
}
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
|
|
|
|
if ($bCenter) {
|
2010-08-01 17:38:19 +03:00
|
|
|
|
$oImage->crop($iNewWidth,$iNewHeight,($iWidth-$iNewWidth)/2,($iHeight-$iNewHeight)/2);
|
2012-04-27 13:23:02 +03:00
|
|
|
|
} else {
|
2010-08-01 17:38:19 +03:00
|
|
|
|
$oImage->crop($iNewWidth,$iNewHeight,0,0);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Возвращаем объект изображения
|
|
|
|
|
*/
|
|
|
|
|
return $oImage;
|
|
|
|
|
}
|
2012-04-08 17:37:43 +03:00
|
|
|
|
/**
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* Сохраняет(копирует) файл изображения на сервер
|
|
|
|
|
* Если переопределить данный метод, то можно сохранять изображения, например, на Amazon S3
|
2012-04-08 17:37:43 +03:00
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param string $sFileSource Полный путь до исходного файла
|
|
|
|
|
* @param string $sDirDest Каталог для сохранения файла относительно корня сайта
|
|
|
|
|
* @param string $sFileDest Имя файла для сохранения
|
|
|
|
|
* @param int|null $iMode Права chmod для файла, например, 0777
|
|
|
|
|
* @param bool $bRemoveSource Удалять исходный файл или нет
|
2012-04-08 17:37:43 +03:00
|
|
|
|
* @return bool | string
|
|
|
|
|
*/
|
|
|
|
|
public function SaveFile($sFileSource,$sDirDest,$sFileDest,$iMode=null,$bRemoveSource=false) {
|
|
|
|
|
$sFileDestFullPath=rtrim(Config::Get('path.root.server'),"/").'/'.trim($sDirDest,"/").'/'.$sFileDest;
|
|
|
|
|
$this->CreateDirectory($sDirDest);
|
|
|
|
|
|
|
|
|
|
$bResult=copy($sFileSource,$sFileDestFullPath);
|
|
|
|
|
if ($bResult and !is_null($iMode)) {
|
|
|
|
|
chmod($sFileDestFullPath,$iMode);
|
|
|
|
|
}
|
|
|
|
|
if ($bRemoveSource) {
|
|
|
|
|
unlink($sFileSource);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Если копирование прошло успешно, возвращаем новый серверный путь до файла
|
|
|
|
|
*/
|
|
|
|
|
if ($bResult) {
|
|
|
|
|
return $sFileDestFullPath;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Удаление файла изображения
|
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param string $sFile Полный серверный путь до файла
|
2012-04-08 17:37:43 +03:00
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function RemoveFile($sFile) {
|
|
|
|
|
if (file_exists($sFile)) {
|
|
|
|
|
return unlink($sFile);
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2012-06-18 17:50:16 +03:00
|
|
|
|
/**
|
|
|
|
|
* Копирует файл изображения в локальную файловую систему
|
|
|
|
|
*
|
|
|
|
|
* @param string $sFileSource Полный серверный путь до файла (может быть на удаленном сервере)
|
|
|
|
|
* @param string $sFileDistLocal Полный серверный путь до локального файла
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function CopyFileToLocal($sFileSource,$sFileDistLocal) {
|
|
|
|
|
if (@copy($sFileSource,$sFileDistLocal)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2009-12-23 01:30:49 +02:00
|
|
|
|
/**
|
|
|
|
|
* Создает каталог по указанному адресу (с учетом иерархии)
|
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param string $sDirDest Каталог относительно корня сайта
|
2009-12-23 01:30:49 +02:00
|
|
|
|
*/
|
|
|
|
|
public function CreateDirectory($sDirDest) {
|
2012-04-27 13:23:02 +03:00
|
|
|
|
@func_mkdir(Config::Get('path.root.server'),$sDirDest);
|
2009-12-23 01:30:49 +02:00
|
|
|
|
}
|
2009-09-15 01:14:44 +03:00
|
|
|
|
/**
|
2009-12-10 18:57:30 +02:00
|
|
|
|
* Возвращает серверный адрес по переданному web-адресу
|
2009-09-15 01:14:44 +03:00
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param string $sPath WEB адрес изображения
|
2009-09-15 01:14:44 +03:00
|
|
|
|
* @return string
|
|
|
|
|
*/
|
2011-08-28 17:57:56 +03:00
|
|
|
|
public function GetServerPath($sPath) {
|
2009-12-13 17:22:47 +02:00
|
|
|
|
/**
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* Определяем, принадлежит ли этот адрес основному домену
|
2009-12-13 17:22:47 +02:00
|
|
|
|
*/
|
2009-12-13 23:49:05 +02:00
|
|
|
|
if(parse_url($sPath,PHP_URL_HOST)!=parse_url(Config::Get('path.root.web'),PHP_URL_HOST)) {
|
|
|
|
|
return $sPath;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Выделяем адрес пути
|
|
|
|
|
*/
|
2011-08-28 17:57:56 +03:00
|
|
|
|
$sPath = ltrim(parse_url($sPath,PHP_URL_PATH),'/');
|
|
|
|
|
if($iOffset = Config::Get('path.offset_request_url')){
|
|
|
|
|
$sPath = preg_replace('#^([^/]+/*){'.$iOffset.'}#msi', '', $sPath);
|
|
|
|
|
}
|
|
|
|
|
return rtrim(Config::Get('path.root.server'),'/').'/'.$sPath;
|
2009-09-15 01:14:44 +03:00
|
|
|
|
}
|
2009-10-12 20:32:56 +03:00
|
|
|
|
/**
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* Возвращает WEB адрес по переданному серверному адресу
|
2009-10-12 20:32:56 +03:00
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param string $sPath Серверный адрес(путь) изображения
|
2009-10-12 20:32:56 +03:00
|
|
|
|
* @return string
|
|
|
|
|
*/
|
2009-12-10 18:57:30 +02:00
|
|
|
|
public function GetWebPath($sPath) {
|
2009-12-15 00:12:58 +02:00
|
|
|
|
$sServerPath = rtrim(str_replace(DIRECTORY_SEPARATOR,'/',Config::Get('path.root.server')),'/');
|
|
|
|
|
$sWebPath = rtrim(Config::Get('path.root.web'), '/');
|
2010-03-06 21:16:11 +02:00
|
|
|
|
return str_replace($sServerPath, $sWebPath, str_replace(DIRECTORY_SEPARATOR,'/',$sPath));
|
2009-12-13 23:49:05 +02:00
|
|
|
|
}
|
2009-10-14 00:16:27 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получает директорию для данного пользователя
|
2009-12-10 18:57:30 +02:00
|
|
|
|
* Используется фомат хранения данных (/images/us/er/id/yyyy/mm/dd/file.jpg)
|
2012-04-27 13:23:02 +03:00
|
|
|
|
*
|
|
|
|
|
* @param int $sId Целое число, обычно это ID пользователя
|
2009-10-14 00:16:27 +03:00
|
|
|
|
* @return string
|
|
|
|
|
*/
|
2012-04-27 13:23:02 +03:00
|
|
|
|
public function GetIdDir($sId) {
|
|
|
|
|
return Config::Get('path.uploads.images').'/'.preg_replace('~(.{2})~U', "\\1/", str_pad($sId, 6, "0", STR_PAD_LEFT)).date('Y/m/d');
|
2009-09-15 20:32:02 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Возвращает валидный Html код тега <img>
|
|
|
|
|
*
|
2012-04-27 13:23:02 +03:00
|
|
|
|
* @param string $sPath WEB адрес изображения
|
|
|
|
|
* @param array $aParams Параметры
|
2009-09-15 20:32:02 +03:00
|
|
|
|
* @return string
|
|
|
|
|
*/
|
2012-04-27 13:23:02 +03:00
|
|
|
|
public function BuildHTML($sPath,$aParams) {
|
2009-09-15 20:32:02 +03:00
|
|
|
|
$sText='<img src="'.$sPath.'" ';
|
|
|
|
|
if (isset($aParams['title']) and $aParams['title']!='') {
|
|
|
|
|
$sText.=' title="'.htmlspecialchars($aParams['title']).'" ';
|
2009-12-10 18:57:30 +02:00
|
|
|
|
/**
|
|
|
|
|
* Если не определен ALT заполняем его тайтлом
|
|
|
|
|
*/
|
|
|
|
|
if(!isset($aParams['alt'])) $aParams['alt']=$aParams['title'];
|
2009-09-15 20:32:02 +03:00
|
|
|
|
}
|
2011-07-08 15:01:04 +03:00
|
|
|
|
if (isset($aParams['align']) and in_array($aParams['align'],array('left','right','center'))) {
|
|
|
|
|
if ($aParams['align'] == 'center') {
|
|
|
|
|
$sText.=' class="image-center"';
|
|
|
|
|
} else {
|
|
|
|
|
$sText.=' align="'.htmlspecialchars($aParams['align']).'" ';
|
|
|
|
|
}
|
2009-09-15 20:32:02 +03:00
|
|
|
|
}
|
|
|
|
|
$sAlt = isset($aParams['alt'])
|
2009-12-10 18:57:30 +02:00
|
|
|
|
? ' alt="'.htmlspecialchars($aParams['alt']).'"'
|
|
|
|
|
: ' alt=""';
|
2009-09-15 20:32:02 +03:00
|
|
|
|
$sText.=$sAlt.' />';
|
2012-04-27 13:23:02 +03:00
|
|
|
|
|
2009-09-15 20:32:02 +03:00
|
|
|
|
return $sText;
|
|
|
|
|
}
|
2009-09-15 01:14:44 +03:00
|
|
|
|
}
|
|
|
|
|
?>
|