1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-16 23:00:51 +03:00

Перевод аватаров блога на новый модуль Image

This commit is contained in:
Mzhelskiy Maxim 2014-02-16 18:59:12 +07:00
parent 6a0985a2ab
commit b8c68f545a
6 changed files with 87 additions and 59 deletions

View file

@ -232,10 +232,8 @@ class ActionBlog extends Action {
* Загрузка аватара, делаем ресайзы
*/
if (isset($_FILES['avatar']) and is_uploaded_file($_FILES['avatar']['tmp_name'])) {
if ($sPath=$this->Blog_UploadBlogAvatar($_FILES['avatar'],$oBlog)) {
$oBlog->setAvatar($sPath);
} else {
$this->Message_AddError($this->Lang_Get('blog.add.fields.avatar.error'),$this->Lang_Get('error'));
if (true!==$sResult=$this->Blog_UploadBlogAvatar($_FILES['avatar'],$oBlog)) {
$this->Message_AddError(is_bool($sResult) ? $this->Lang_Get('blog.add.fields.avatar.error') : $sResult,$this->Lang_Get('error'));
return false;
}
}
@ -372,10 +370,8 @@ class ActionBlog extends Action {
* Загрузка аватара, делаем ресайзы
*/
if (isset($_FILES['avatar']) and is_uploaded_file($_FILES['avatar']['tmp_name'])) {
if ($sPath=$this->Blog_UploadBlogAvatar($_FILES['avatar'],$oBlog)) {
$oBlog->setAvatar($sPath);
} else {
$this->Message_AddError($this->Lang_Get('blog.add.fields.avatar.error'),$this->Lang_Get('error'));
if (true!==$sResult=$this->Blog_UploadBlogAvatar($_FILES['avatar'],$oBlog)) {
$this->Message_AddError(is_bool($sResult) ? $this->Lang_Get('blog.add.fields.avatar.error') : $sResult,$this->Lang_Get('error'));
return false;
}
}

View file

@ -859,47 +859,37 @@ class ModuleBlog extends Module {
return false;
}
$sPath=$this->Image_GetIdDir($oBlog->getOwnerId());
$aParams=$this->Image_BuildParams('avatar');
$oImage=$this->Image_CreateImageObject($sFileTmp);
$aParams=$this->Image_BuildParams('blog_avatar');
/**
* Если объект изображения не создан,
* возвращаем ошибку
* Если объект изображения не создан, возвращаем ошибку
*/
if($sError=$oImage->get_last_error()) {
// Вывод сообщения об ошибки, произошедшей при создании объекта изображения
// $this->Message_AddError($sError,$this->Lang_Get('error'));
@unlink($sFileTmp);
return false;
if(!$oImage=$this->Image_Open($sFileTmp,$aParams)) {
$this->Fs_RemoveFileLocal($sFileTmp);
return $this->Image_GetLastError();
}
$sPath=$this->Image_GetIdDir($oBlog->getOwnerId(),'users');
/**
* Срезаем квадрат
* Имя файла для сохранения
*/
$oImage = $this->Image_CropSquare($oImage);
$aSize=Config::Get('module.blog.avatar_size');
rsort($aSize,SORT_NUMERIC);
$sSizeBig=array_shift($aSize);
if ($oImage && $sFileAvatar=$this->Image_Resize($sFileTmp,$sPath,"avatar_blog_{$oBlog->getUrl()}_{$sSizeBig}x{$sSizeBig}",Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),$sSizeBig,$sSizeBig,false,$aParams,$oImage)) {
foreach ($aSize as $iSize) {
if ($iSize==0) {
$this->Image_Resize($sFileTmp,$sPath,"avatar_blog_{$oBlog->getUrl()}",Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),null,null,false,$aParams,$oImage);
} else {
$this->Image_Resize($sFileTmp,$sPath,"avatar_blog_{$oBlog->getUrl()}_{$iSize}x{$iSize}",Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),$iSize,$iSize,false,$aParams,$oImage);
}
}
@unlink($sFileTmp);
/**
* Если все нормально, возвращаем расширение загруженного аватара
*/
return $this->Image_GetWebPath($sFileAvatar);
$sFileName='avatar_blog_'.$oBlog->getId();
/**
* Сохраняем оригинальную копию
*/
if (!$sFileResult=$oImage->saveSmart($sPath,$sFileName)) {
$this->Fs_RemoveFileLocal($sFileTmp);
return $this->Image_GetLastError();
}
@unlink($sFileTmp);
$aSizes=Config::Get('module.blog.avatar_size');
/**
* В случае ошибки, возвращаем false
* Генерируем варианты с необходимыми размерами
*/
return false;
$this->Media_GenerateImageBySizes($sFileTmp,$sPath,$sFileName,$aSizes,$aParams);
/**
* Теперь можно удалить временный файл
*/
$this->Fs_RemoveFileLocal($sFileTmp);
$oBlog->setAvatar($this->Fs_GetPathRelative($sFileResult,true));
return true;
}
/**
* Удаляет аватар блога с сервера
@ -911,10 +901,7 @@ class ModuleBlog extends Module {
* Если аватар есть, удаляем его и его рейсайзы
*/
if($oBlog->getAvatar()) {
$aSize=array_merge(Config::Get('module.blog.avatar_size'),array(48));
foreach ($aSize as $iSize) {
$this->Image_RemoveFile($this->Image_GetServerPath($oBlog->getAvatarPath($iSize)));
}
$this->Media_RemoveImageBySizes($oBlog->getAvatar(),Config::Get('module.blog.avatar_size'));
}
}
/**

View file

@ -176,7 +176,7 @@ class ModuleBlog_EntityBlog extends Entity {
*/
public function getAvatarPath($iSize=48) {
if ($sPath=$this->getAvatar()) {
return preg_replace("#_\d{1,3}x\d{1,3}(\.\w{3,4})$#", ((($iSize==0)?"":"_{$iSize}x{$iSize}") . "\\1"),$sPath);
return $this->Media_GetImageWebPath($sPath,$iSize.'crop');
} else {
return Config::Get('path.skin.assets.web').'/images/avatars/avatar_blog_'.$iSize.'x'.$iSize.'.png';
}

View file

@ -309,6 +309,19 @@ class ModuleMedia extends ModuleORM {
if (!$aSizes) {
return;
}
/**
* Преобразуем упрощенную запись списка размеров в полную
*/
foreach($aSizes as $k=>$v) {
if (is_numeric($v)) {
$aSizes[$k]=array(
'w' => $v,
'h' => $v,
'crop' => true,
);
}
}
foreach ($aSizes as $aSize) {
/**
* Для каждого указанного в конфиге размера генерируем картинку
@ -325,6 +338,35 @@ class ModuleMedia extends ModuleORM {
}
}
}
public function RemoveImageBySizes($sPath,$aSizes,$bRemoveOriginal=true) {
if ($aSizes) {
/**
* Преобразуем упрощенную запись списка размеров в полную
*/
foreach($aSizes as $k=>$v) {
if (is_numeric($v)) {
$aSizes[$k]=array(
'w' => $v,
'h' => $v,
'crop' => true,
);
}
}
foreach($aSizes as $aSize) {
$sSize = $aSize['w'];
if ($aSize['crop']) {
$sSize.='crop';
}
$this->Image_RemoveFile($this->GetImagePathBySize($sPath,$sSize));
}
}
/**
* Удаляем оригинал
*/
if ($bRemoveOriginal) {
$this->Image_RemoveFile($sPath);
}
}
/**
* Возвращает каталог для сохранения контента медиа
*
@ -444,17 +486,7 @@ class ModuleMedia extends ModuleORM {
*/
if ($oMedia->getType()==self::TYPE_IMAGE) {
$aSizes=$oMedia->getDataOne('image_sizes');
foreach($aSizes as $aSize) {
$sSize = $aSize['w'];
if ($aSize['crop']) {
$sSize.='crop';
}
$this->Image_RemoveFile($this->GetImagePathBySize($oMedia->getFilePath(),$sSize));
}
/**
* Удаляем оригинал
*/
$this->Image_RemoveFile($oMedia->getFilePath());
$this->RemoveImageBySizes($oMedia->getFilePath(),$aSizes);
}
}
/**
@ -591,6 +623,14 @@ class ModuleMedia extends ModuleORM {
return $sPath;
}
}
/**
* Возвращает путь до изображения конкретного размера
*
* @param string $sPath
* @param string $sSize
*
* @return string
*/
public function GetImagePathBySize($sPath,$sSize) {
$aPathInfo=pathinfo($sPath);
return $aPathInfo['dirname'].'/'.$aPathInfo['filename'].'_'.$sSize.'.'.$aPathInfo['extension'];

View file

@ -106,7 +106,7 @@ $config['module']['blog']['personal_good'] = -5; // Рейтинг топи
$config['module']['blog']['collective_good'] = -3; // рейтинг топика в коллективных блогах ниже которого он считается плохим
$config['module']['blog']['index_good'] = 8; // Рейтинг топика выше которого(включительно) он попадает на главную
$config['module']['blog']['encrypt'] = 'livestreet'; // Ключ XXTEA шифрования идентификаторов в ссылках приглашения в блоги
$config['module']['blog']['avatar_size'] = array(100,64,48,24,0); // Список размеров аватаров у блога. 0 - исходный размер
$config['module']['blog']['avatar_size'] = array(100,64,48,24); // Список размеров аватаров у блога
$config['module']['blog']['category_allow'] = true; // Разрешить использование категорий бля блогов
$config['module']['blog']['category_only_admin'] = true; // Задавать и менять категории для блога может только админ
$config['module']['blog']['category_only_children'] = true; // Для блога можно выбрать только конечную категорию, у которой нет других вложенных
@ -184,6 +184,11 @@ $config['module']['wall']['text_min'] = 1; // Ограничение на
* Модуль опросов (Poll)
*/
$config['module']['poll']['time_limit_update'] = 60*60*30; // Время в секундах, в течении которого можно изменять опрос
/**
* Модуль Image
*/
$config['module']['image']['params']['blog_avatar']['size_max_width']=500;
$config['module']['image']['params']['blog_avatar']['size_max_height']=500;
/**
* Модуль Media
*/

@ -1 +1 @@
Subproject commit a1e83e2aaac77468a2d48a95c334689000faef4a
Subproject commit db8666e71500a04d74fdf81c43b9f507031b92bc