mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-16 23:00:51 +03:00
Удаление медиа-данных при удалении топика
This commit is contained in:
parent
802b14dff6
commit
bde1c94089
|
@ -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'));
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -278,6 +278,10 @@ class ModuleTopic extends Module {
|
|||
* Удаляем контент топика
|
||||
*/
|
||||
$this->DeleteTopicContentByTopicId($iTopicId);
|
||||
/**
|
||||
* Удаляем медиа данные топика
|
||||
*/
|
||||
$this->Media_RemoveTarget('topic',$iTopicId,true);
|
||||
/**
|
||||
* Удаляем комментарии к топику.
|
||||
* При удалении комментариев они удаляются из избранного,прямого эфира и голоса за них
|
||||
|
|
Loading…
Reference in a new issue