From ee04c7d2c6476a6bf14bec5e02a546624a12e231 Mon Sep 17 00:00:00 2001 From: Mzhelskiy Maxim Date: Sun, 8 Apr 2012 18:37:43 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=20Image=20-?= =?UTF-8?q?=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BE=D0=BF=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B8=D1=82=D1=8C=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/actions/ActionSettings.class.php | 22 ++++----- classes/modules/blog/Blog.class.php | 2 +- classes/modules/topic/Topic.class.php | 4 +- classes/modules/user/User.class.php | 4 +- engine/modules/image/Image.class.php | 59 +++++++++++++++++++----- 5 files changed, 63 insertions(+), 28 deletions(-) diff --git a/classes/actions/ActionSettings.class.php b/classes/actions/ActionSettings.class.php index 38e342b1..f3e004e0 100644 --- a/classes/actions/ActionSettings.class.php +++ b/classes/actions/ActionSettings.class.php @@ -108,10 +108,12 @@ class ActionSettings extends Action { $this->Session_Set('sFotoFileTmp',$sFile); $this->Session_Set('sFotoFilePreviewTmp',$sFilePreview); $this->Viewer_AssignAjax('sTmpFile',$this->Image_GetWebPath($sFilePreview)); + unlink($sFileTmp); return; } } $this->Message_AddError($this->Image_GetLastError(),$this->Lang_Get('error')); + unlink($sFileTmp); } /** @@ -154,9 +156,8 @@ class ActionSettings extends Action { $this->oUserCurrent->setProfileFoto($sFileWeb); $this->User_Update($this->oUserCurrent); - if (file_exists($sFilePreview)) { - @unlink($sFilePreview); - } + $this->Image_RemoveFile($sFilePreview); + $this->Session_Drop('sFotoFileTmp'); $this->Session_Drop('sFotoFilePreviewTmp'); $this->Viewer_AssignAjax('sFile',$this->oUserCurrent->getProfileFoto()); @@ -192,13 +193,11 @@ class ActionSettings extends Action { * Достаем из сессии файл и удаляем */ $sFile=$this->Session_Get('sFotoFileTmp'); - if (file_exists($sFile)) { - @unlink($sFile); - } + $this->Image_RemoveFile($sFile); + $sFile=$this->Session_Get('sFotoFilePreviewTmp'); - if (file_exists($sFile)) { - @unlink($sFile); - } + $this->Image_RemoveFile($sFile); + $this->Session_Drop('sFotoFileTmp'); $this->Session_Drop('sFotoFilePreviewTmp'); } @@ -229,6 +228,7 @@ class ActionSettings extends Action { } else { $this->Message_AddError($this->Image_GetLastError(),$this->Lang_Get('error')); } + unlink($sFileTmp); } /** @@ -296,9 +296,7 @@ class ActionSettings extends Action { * Достаем из сессии файл и удаляем */ $sFileAvatar=$this->Session_Get('sAvatarFileTmp'); - if (file_exists($sFileAvatar)) { - @unlink($sFileAvatar); - } + $this->Image_RemoveFile($sFileAvatar); $this->Session_Drop('sAvatarFileTmp'); } diff --git a/classes/modules/blog/Blog.class.php b/classes/modules/blog/Blog.class.php index 7e5e2259..8281d9be 100644 --- a/classes/modules/blog/Blog.class.php +++ b/classes/modules/blog/Blog.class.php @@ -843,7 +843,7 @@ class ModuleBlog extends Module { if($oBlog->getAvatar()) { $aSize=array_merge(Config::Get('module.blog.avatar_size'),array(48)); foreach ($aSize as $iSize) { - @unlink($this->Image_GetServerPath($oBlog->getAvatarPath($iSize))); + $this->Image_RemoveFile($this->Image_GetServerPath($oBlog->getAvatarPath($iSize))); } } } diff --git a/classes/modules/topic/Topic.class.php b/classes/modules/topic/Topic.class.php index e1513896..98273576 100644 --- a/classes/modules/topic/Topic.class.php +++ b/classes/modules/topic/Topic.class.php @@ -1673,7 +1673,7 @@ class ModuleTopic extends Module { $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("photoset_photo_update")); $this->oMapperTopic->deleteTopicPhoto($oPhoto->getId()); - @unlink($this->Image_GetServerPath($oPhoto->getWebPath())); + $this->Image_RemoveFile($this->Image_GetServerPath($oPhoto->getWebPath())); $aSizes=Config::Get('module.topic.photoset.size'); // Удаляем все сгенерированные миниатюры основываясь на данных из конфига. foreach ($aSizes as $aSize) { @@ -1681,7 +1681,7 @@ class ModuleTopic extends Module { if ($aSize['crop']) { $sSize .= 'crop'; } - @unlink($this->Image_GetServerPath($oPhoto->getWebPath($sSize))); + $this->Image_RemoveFile($this->Image_GetServerPath($oPhoto->getWebPath($sSize))); } return; } diff --git a/classes/modules/user/User.class.php b/classes/modules/user/User.class.php index febe0792..f70c5647 100644 --- a/classes/modules/user/User.class.php +++ b/classes/modules/user/User.class.php @@ -1107,7 +1107,7 @@ class ModuleUser extends Module { if($oUser->getProfileAvatar()) { $aSize=array_merge(Config::Get('module.user.avatar_size'),array(100)); foreach ($aSize as $iSize) { - @unlink($this->Image_GetServerPath($oUser->getProfileAvatarPath($iSize))); + $this->Image_RemoveFile($this->Image_GetServerPath($oUser->getProfileAvatarPath($iSize))); } } } @@ -1198,7 +1198,7 @@ class ModuleUser extends Module { * @param ModuleUser_EntityUser $oUser */ public function DeleteFoto($oUser) { - @unlink($this->Image_GetServerPath($oUser->getProfileFoto())); + $this->Image_RemoveFile($this->Image_GetServerPath($oUser->getProfileFoto())); } /** * Проверяет логин на корректность diff --git a/engine/modules/image/Image.class.php b/engine/modules/image/Image.class.php index efacc80d..0d976e85 100644 --- a/engine/modules/image/Image.class.php +++ b/engine/modules/image/Image.class.php @@ -142,8 +142,6 @@ class ModuleImage extends Module { or ($oImage->get_image_params('height')>$iHeightMax)) { return false; } - $sFileFullPath=rtrim(Config::Get('path.root.server'),"/").'/'.trim($sDirDest,"/").'/'.$sFileDest; - $this->CreateDirectory($sDirDest); if ($iWidthDest) { if ($bForcedMinSize and ($iWidthDest>$oImage->get_image_params('width'))) { @@ -199,16 +197,13 @@ class ModuleImage extends Module { if(isset($aParams['jpg_quality']) and $oImage->get_image_params('format')=='jpg') { $oImage->set_jpg_quality($aParams['jpg_quality']); } - - $oImage->output(null,$sFileFullPath); - - chmod($sFileFullPath,0666); - return $sFileFullPath; - } elseif (copy($sFileSrc,$sFileFullPath)) { - chmod($sFileFullPath,0666); - return $sFileFullPath; + + $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); } - return false; } /** @@ -287,6 +282,48 @@ class ModuleImage extends Module { */ return $oImage; } + /** + * Сохраняет(копирует) файл изображения + * + * @param $sFileSource Полный путь до исходного файла + * @param $sDirDest Каталог для сохранения файла относительно корня сайта + * @param $sFileDest + * @param null $iMode + * @param bool $bRemoveSource + * @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; + } + /** + * Удаление файла изображения + * + * @param $sFile + * @return bool + */ + public function RemoveFile($sFile) { + if (file_exists($sFile)) { + return unlink($sFile); + } + return false; + } /** * Создает каталог по указанному адресу (с учетом иерархии) *