mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-16 23:00:51 +03:00
Доработка превью у медиа
This commit is contained in:
parent
2de215ad49
commit
b669141779
|
@ -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'));
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
* Название метода формируется автоматически
|
||||
|
|
|
@ -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));
|
||||
};
|
||||
/**
|
||||
* Подгрузка списка файлов
|
||||
|
|
Loading…
Reference in a new issue