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

Удаление медиа-данных при удалении топика

This commit is contained in:
Mzhelskiy Maxim 2014-02-15 11:39:18 +07:00
parent 802b14dff6
commit bde1c94089
5 changed files with 85 additions and 14 deletions

View file

@ -508,7 +508,7 @@ class ActionAjax extends Action {
}
$sId=getRequestStr('id');
if ($oMedia=$this->Media_GetMediaByIdAndUserId($sId,$this->oUserCurrent->getId())) {
$this->Media_DeleteFile($oMedia);
$oMedia->Delete();
} else {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
}

View file

@ -433,8 +433,12 @@ class ModuleMedia extends ModuleORM {
public function GetMediaByTargetTmp($sTargetTmp,$iUserId=null) {
return $this->oMapper->GetMediaByTargetTmp($sTargetTmp,$iUserId);
}
public function DeleteFile($oMedia) {
/**
* Выполняет удаление файлов медиа-объекта
*
* @param $oMedia
*/
public function DeleteFiles($oMedia) {
/**
* Сначала удаляем все файлы
*/
@ -452,17 +456,7 @@ class ModuleMedia extends ModuleORM {
*/
$this->Image_RemoveFile($oMedia->getFilePath());
}
/**
* Удаляем все связи
*/
$aTargets=$oMedia->getTargets();
foreach($aTargets as $oTarget) {
$oTarget->Delete();
}
return $oMedia->Delete();
}
/**
* Возвращает список media с учетов прав доступа текущего пользователя
*
@ -485,7 +479,6 @@ class ModuleMedia extends ModuleORM {
}
return array();
}
/**
* Обработка тега gallery в тексте
* <pre>
@ -545,6 +538,51 @@ class ModuleMedia extends ModuleORM {
}
}
}
/**
* Удаляет связь с медиа данными + при необходимости удаляет сами медиа данные
*
* @param string $sTargetType
* @param int $sTargetId
* @param bool $bMediaRemove Удалять медиа данные оставшиеся без связей
*/
public function RemoveTarget($sTargetType,$sTargetId,$bMediaRemove=true) {
/**
* Получаем прикрепленные медиа
*/
$aMediaItems=$this->GetMediaByTarget($sTargetType,$sTargetId);
/**
* Удаляем все связи текущего таргета
*/
$this->RemoveTargetByTypeAndId($sTargetType,$sTargetId);
if ($bMediaRemove) {
/**
* Проверяем с какими медиа данными еще остались связи
*/
$aMediaIds=array();
foreach($aMediaItems as $oMediaItem) {
$aMediaIds[]=$oMediaItem->getId();
}
$aTargetItems=$this->GetTargetItemsByFilter(array('media_id in'=>$aMediaIds,'#index-group'=>'media_id'));
/**
* Удаляем медиа данные без оставшихся связей
*/
foreach($aMediaItems as $oMediaItem) {
if (!isset($aTargetItems[$oMediaItem->getId()])) {
$oMediaItem->Delete();
}
}
}
}
public function RemoveTargetByTypeAndId($sTargetType,$iTargetId) {
$bRes=$this->oMapper->RemoveTargetByTypeAndId($sTargetType,$iTargetId);
/**
* Сбрасываем кеши
*/
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array(
'ModuleMedia_EntityTarget_delete'
));
return $bRes;
}
public function GetImageWebPath($sPath,$sWidth=null) {
$sPath=$this->Fs_GetPathWeb($sPath);
if ($sWidth) {

View file

@ -36,6 +36,21 @@ class ModuleMedia_EntityMedia extends EntityORM {
return true;
}
protected function beforeDelete() {
/**
* Удаляем все связи
*/
$aTargets=$this->getTargets();
foreach($aTargets as $oTarget) {
$oTarget->Delete();
}
/**
* Удаляем все файлы медиа
*/
$this->Media_DeleteFiles($this);
return true;
}
public function getFileWebPath($sWidth=null) {
if ($this->getFilePath()) {
return $this->Media_GetImageWebPath($this->getFilePath(),$sWidth);

View file

@ -68,4 +68,18 @@ class ModuleMedia_MapperMedia extends Mapper {
}
return $aResult;
}
public function RemoveTargetByTypeAndId($sTargetType,$iTargetId) {
$sql = "DELETE
FROM ".Config::Get('db.table.media_target')."
WHERE
target_id = ?d
AND
target_type = ?
";
if ($this->oDb->query($sql,$iTargetId,$sTargetType)!==false) {
return true;
}
return false;
}
}

View file

@ -278,6 +278,10 @@ class ModuleTopic extends Module {
* Удаляем контент топика
*/
$this->DeleteTopicContentByTopicId($iTopicId);
/**
* Удаляем медиа данные топика
*/
$this->Media_RemoveTarget('topic',$iTopicId,true);
/**
* Удаляем комментарии к топику.
* При удалении комментариев они удаляются из избранного,прямого эфира и голоса за них