From b1afc7acb0d8e1551df896335b2e0565b740f338 Mon Sep 17 00:00:00 2001 From: Mzhelskiy Maxim Date: Fri, 23 Oct 2015 15:41:38 +0700 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=BF=D1=80=D0=B5=D0=B2=D1=8C=D1=8E=20fix=20#69?= =?UTF-8?q?0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../classes/actions/ActionAjax.class.php | 52 +++++++++++-------- .../classes/modules/media/Media.class.php | 32 +++++++++--- framework | 2 +- 3 files changed, 57 insertions(+), 29 deletions(-) diff --git a/application/classes/actions/ActionAjax.class.php b/application/classes/actions/ActionAjax.class.php index 16244381..38713127 100644 --- a/application/classes/actions/ActionAjax.class.php +++ b/application/classes/actions/ActionAjax.class.php @@ -648,8 +648,24 @@ class ActionAjax extends Action } $sTargetType = getRequestStr('target_type'); - $sTargetId = getRequestStr('target_id'); - $sTargetTmp = getRequestStr('target_tmp'); + $sTargetId = getRequestStr('target_id') ?: null; + $sTargetTmp = getRequestStr('target_tmp') ?: null; + + /** + * Доступ к файлу медиа + */ + if (!$this->Media_GetAllowMediaItemsById(array($oMedia->getId()))) { + return $this->EventErrorDebug(); + } + + /** + * Проверяем доступ к этому объекту медиа + */ + if (true !== $res = $this->Media_CheckTarget($sTargetType, $sTargetId, + ModuleMedia::TYPE_CHECK_ALLOW_PREVIEW, array('media' => $oMedia, 'user' => $this->oUserCurrent)) + ) { + $this->Message_AddErrorSingle(is_string($res) ? $res : $this->Lang_Get('common.error.system.base')); + } /** * Получаем объект связи @@ -661,32 +677,24 @@ class ActionAjax extends Action $aFilter['target_id'] = $sTargetId; } if (!$oTarget = $this->Media_GetTargetByFilter($aFilter)) { - return $this->EventErrorDebug(); + /** + * Попытка добавить в качестве превью ранее загруженный файл для другого объекта + * Делаем новую связь медиа с текущим объектом + */ + if (!($oTarget = $this->Media_AttachMediaToTarget($oMedia, $sTargetType, $sTargetId, $sTargetTmp))) { + return $this->EventErrorDebug(); + } } - if ($oTarget->getIsPreview()) { - return $this->EventErrorDebug(); - } - /** - * Проверяем доступ к этому медиа + * Удаляем все текущие превью */ - if (true === $res = $this->Media_CheckTarget($oTarget->getTargetType(), $oTarget->getTargetId(), - ModuleMedia::TYPE_CHECK_ALLOW_PREVIEW, array('media' => $oMedia, 'user' => $this->oUserCurrent)) - ) { - /** - * Удаляем все текущие превью - */ - $this->Media_RemoveAllPreviewByTarget($oTarget->getTargetType(), $oTarget->getTargetId(), - $oTarget->getTargetTmp()); + $this->Media_RemoveAllPreviewByTarget($oTarget->getTargetType(), $oTarget->getTargetId(), $oTarget->getTargetTmp()); - if (true === $res2 = $this->Media_CreateFilePreview($oMedia, $oTarget)) { - $this->Viewer_AssignAjax('bUnsetOther', true); - } else { - $this->Message_AddErrorSingle(is_string($res2) ? $res2 : $this->Lang_Get('common.error.system.base')); - } + if (true === $res2 = $this->Media_CreateFilePreview($oMedia, $oTarget)) { + $this->Viewer_AssignAjax('bUnsetOther', true); } else { - $this->Message_AddErrorSingle(is_string($res) ? $res : $this->Lang_Get('common.error.system.base')); + $this->Message_AddErrorSingle(is_string($res2) ? $res2 : $this->Lang_Get('common.error.system.base')); } } diff --git a/application/classes/modules/media/Media.class.php b/application/classes/modules/media/Media.class.php index 68b1f135..c842630f 100644 --- a/application/classes/modules/media/Media.class.php +++ b/application/classes/modules/media/Media.class.php @@ -515,12 +515,7 @@ class ModuleMedia extends ModuleORM /** * Создаем связь с владельцем */ - $oTarget = Engine::GetEntity('ModuleMedia_EntityTarget'); - $oTarget->setMediaId($oMedia->getId()); - $oTarget->setTargetType($sTargetType); - $oTarget->setTargetId($sTargetId ? $sTargetId : null); - $oTarget->setTargetTmp($sTargetTmp ? $sTargetTmp : null); - if ($oTarget->Add()) { + if ($oTarget = $this->AttachMediaToTarget($oMedia, $sTargetType, $sTargetId, $sTargetTmp)) { $oMedia->_setData(array('_relation_entity' => $oTarget)); return $oMedia; } @@ -528,6 +523,31 @@ class ModuleMedia extends ModuleORM return false; } + /** + * Присоединяет медиа файл к объекту + * + * @param $oMedia + * @param $sTargetType + * @param $sTargetId + * @param $sTargetTmp + * @return bool|Entity + */ + public function AttachMediaToTarget($oMedia, $sTargetType, $sTargetId, $sTargetTmp) + { + /** + * Создаем связь с владельцем + */ + $oTarget = Engine::GetEntity('ModuleMedia_EntityTarget'); + $oTarget->setMediaId($oMedia->getId()); + $oTarget->setTargetType($sTargetType); + $oTarget->setTargetId($sTargetId ?: null); + $oTarget->setTargetTmp($sTargetTmp ?: null); + if ($oTarget->Add()) { + return $oTarget; + } + return false; + } + /** * Создает набор отресайзанных изображений * Варианты наименований результирующих файлов в зависимости от размеров: diff --git a/framework b/framework index ecd77c7f..de06013c 160000 --- a/framework +++ b/framework @@ -1 +1 @@ -Subproject commit ecd77c7f75cecd35881bb0b2d7fc1dabe872b514 +Subproject commit de06013c116bc8a1b84f7f159a82739958fcc91f