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-03-24 16:54:20 +07:00
parent 2de215ad49
commit b669141779
3 changed files with 134 additions and 8 deletions

View file

@ -85,6 +85,7 @@ class ActionAjax extends Action {
$this->AddEventPreg('/^media$/i','/^load-gallery$/','/^$/','EventMediaLoadGallery');
$this->AddEventPreg('/^media$/i','/^remove-file$/','/^$/','EventMediaRemoveFile');
$this->AddEventPreg('/^media$/i','/^create-preview-file$/','/^$/','EventMediaCreatePreviewFile');
$this->AddEventPreg('/^media$/i','/^remove-preview-file$/','/^$/','EventMediaRemovePreviewFile');
$this->AddEventPreg('/^media$/i','/^save-data-file$/','/^$/','EventMediaSaveDataFile');
$this->AddEventPreg('/^property$/i','/^tags$/','/^autocompleter$/','/^$/','EventPropertyTagsAutocompleter');
@ -571,9 +572,63 @@ class ActionAjax extends Action {
* Проверяем доступ к этому медиа
*/
if (true===$res=$this->Media_CheckTarget($oTarget->getTargetType(),$oTarget->getTargetId(),ModuleMedia::TYPE_CHECK_ALLOW_PREVIEW,array('media'=>$oMedia,'user'=>$this->oUserCurrent))) {
$this->Media_CreateFilePreview($oMedia,$oTarget);
/**
* Удаляем все текущие превью
*/
$this->Media_RemoveAllPreviewByTarget($oTarget->getTargetType(),$oTarget->getTargetId(),$oTarget->getTargetTmp());
$this->Viewer_AssignAjax('bUnsetOther',true);
if (true===$res2=$this->Media_CreateFilePreview($oMedia,$oTarget)) {
$this->Viewer_AssignAjax('bUnsetOther',true);
} else {
$this->Message_AddErrorSingle(is_string($res2) ? $res2 : $this->Lang_Get('system_error'));
}
} else {
$this->Message_AddErrorSingle(is_string($res) ? $res : $this->Lang_Get('system_error'));
}
}
protected function EventMediaRemovePreviewFile() {
/**
* Пользователь авторизован?
*/
if (!$this->oUserCurrent) {
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
return;
}
$sId=getRequestStr('id');
if (!$oMedia=$this->Media_GetMediaById($sId)) {
return $this->EventErrorDebug();
}
$sTargetType=getRequestStr('target_type');
$sTargetId=getRequestStr('target_id');
$sTargetTmp=getRequestStr('target_tmp');
/**
* Получаем объект связи
*/
$aFilter=array('media_id'=>$oMedia->getId(),'target_type'=>$sTargetType);
if ($sTargetTmp) {
$aFilter['target_tmp']=$sTargetTmp;
} else {
$aFilter['target_id']=$sTargetId;
}
if (!$oTarget=$this->Media_GetTargetByFilter($aFilter)) {
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_RemoveFilePreview($oMedia,$oTarget);
} else {
$this->Message_AddErrorSingle(is_string($res) ? $res : $this->Lang_Get('system_error'));
}

View file

@ -175,6 +175,17 @@ class ModuleMedia extends ModuleORM {
}
return false;
}
public function NotifyRemovePreviewTarget($sTargetType,$iTargetId,$oRelationTarget) {
if (!$this->IsAllowTargetType($sTargetType)) {
return false;
}
$sMethod = 'NotifyRemovePreviewTarget'.func_camelize($sTargetType);
if (method_exists($this,$sMethod)) {
return $this->$sMethod($iTargetId,$oRelationTarget);
}
return false;
}
/**
* Возвращает параметр конфига с учетом текущего target_type
*
@ -351,6 +362,7 @@ class ModuleMedia extends ModuleORM {
$oTarget->setTargetId($sTargetId ? $sTargetId : null);
$oTarget->setTargetTmp($sTargetTmp ? $sTargetTmp : null);
if ($oTarget->Add()) {
$oMedia->_setData(array('_relation_entity'=>$oTarget));
return $oMedia;
}
}
@ -607,10 +619,10 @@ class ModuleMedia extends ModuleORM {
$oTarget->setTargetId($sTargetId);
$oTarget->Update();
/**
* TODO: Уведомляем объект о создании превью
* Уведомляем объект о создании превью
*/
if ($oTarget->getIsPreview()) {
$this->NotifyCreatePreviewTarget($oTarget->getTargetType(),$oTarget->getTargetId(),$oTarget);
}
}
}
@ -802,8 +814,9 @@ class ModuleMedia extends ModuleORM {
}
/**
* TODO: нужно удалить прошлое превью
* Нужно удалить прошлое превью (если оно есть)
*/
$this->RemoveFilePreview($oMedia,$oTarget);
if ($oMedia->getType()==self::TYPE_IMAGE) {
$aParams=$this->Image_BuildParams('media.preview_'.$oTarget->getTargetType());
@ -863,7 +876,47 @@ class ModuleMedia extends ModuleORM {
}
}
public function RemoveFilePreview($oMedia,$oTarget) {
if ($oMedia->getType()==self::TYPE_IMAGE) {
if ($oTarget->getDataOne('image_preview')) {
/**
* Уведомляем объект о удалении превью
*/
if ($oTarget->getTargetId()) {
$this->NotifyRemovePreviewTarget($oTarget->getTargetType(),$oTarget->getTargetId(),$oTarget);
}
$this->RemoveImageBySizes($oTarget->getDataOne('image_preview'),$oTarget->getDataOne('image_preview_sizes'));
$oTarget->setDataOne('image_preview',null);
$oTarget->setDataOne('image_preview_sizes',array());
$oTarget->setIsPreview(0);
$oTarget->Update();
return true;
}
}
}
/**
* Удаляет все превью у конкретного объекта
*
* @param $sTargetType
* @param $sTargetId
* @param null $sTargetTmp
*/
public function RemoveAllPreviewByTarget($sTargetType,$sTargetId,$sTargetTmp=null) {
$aFilter=array(
'target_type'=>$sTargetType,
'is_preview'=>1,
'#with'=>array('media')
);
if ($sTargetId) {
$aFilter['target_id']=$sTargetId;
} else {
$aFilter['target_tmp']=$sTargetTmp;
}
$aTargetItems=$this->Media_GetTargetItemsByFilter($aFilter);
foreach($aTargetItems as $oTarget) {
$this->RemoveFilePreview($oTarget->getMedia(),$oTarget);
}
}
@ -881,6 +934,19 @@ class ModuleMedia extends ModuleORM {
$this->Topic_UpdateTopic($oTopic);
}
}
/**
* Обработка удаления превью для типа 'topic'
* Название метода формируется автоматически
*
* @param int $iTargetId
* @param ModuleMedia_EntityTarget $oRelationTarget
*/
public function NotifyRemovePreviewTargetTopic($iTargetId,$oRelationTarget) {
if ($oTopic=$this->Topic_GetTopicById($iTargetId)) {
$oTopic->setPreviewImage(null);
$this->Topic_UpdateTopic($oTopic);
}
}
/**
* Проверка владельца с типом "topic"
* Название метода формируется автоматически

View file

@ -486,9 +486,14 @@ ls.media = (function ($) {
if (result.bStateError) {
ls.msg.error(null, result.sMsg);
} else {
var item=$(_this.options.selectors.gallery.file + '[data-media-id=' + id + ']');
item.data('mediaRelationIsPreview',0);
/**
* Обновляем отображение информации
*/
this.showDetail(item);
}
});
}.bind(this));
};
/**
* Подгрузка списка файлов