mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-16 23:00:51 +03:00
Доработка медиа #404
This commit is contained in:
parent
88d93662ce
commit
bd00d19ba8
|
@ -458,14 +458,17 @@ class ActionAjax extends Action {
|
|||
$sTargetTmp=empty($_COOKIE['media_target_tmp_'.$sTargetType]) ? getRequestStr('target_tmp') : $_COOKIE['media_target_tmp_'.$sTargetType];
|
||||
if ($sTargetId) {
|
||||
$sTargetTmp=null;
|
||||
if (!$this->Media_CheckTarget($sTargetType,$sTargetId)) {
|
||||
$this->Message_AddError($this->Lang_Get('system_error'), $this->Lang_Get('error'));
|
||||
if (true!==$res=$this->Media_CheckTarget($sTargetType,$sTargetId,ModuleMedia::TYPE_CHECK_ALLOW_ADD)) {
|
||||
$this->Message_AddError(is_string($res) ? $res : $this->Lang_Get('system_error'), $this->Lang_Get('error'));
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$sTargetId=null;
|
||||
if (!$sTargetTmp or !$this->Media_IsAllowTargetType($sTargetType)) {
|
||||
$this->Message_AddError($this->Lang_Get('system_error'), $this->Lang_Get('error'));
|
||||
if (!$sTargetTmp) {
|
||||
return $this->EventErrorDebug();
|
||||
}
|
||||
if (true!==$res=$this->Media_CheckTarget($sTargetType,null,ModuleMedia::TYPE_CHECK_ALLOW_ADD)) {
|
||||
$this->Message_AddError(is_string($res) ? $res : $this->Lang_Get('system_error'), $this->Lang_Get('error'));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -516,10 +519,13 @@ class ActionAjax extends Action {
|
|||
return;
|
||||
}
|
||||
$sId=getRequestStr('id');
|
||||
if ($oMedia=$this->Media_GetMediaByIdAndUserId($sId,$this->oUserCurrent->getId())) {
|
||||
if (!$oMedia=$this->Media_GetMediaById($sId)) {
|
||||
return $this->EventErrorDebug();
|
||||
}
|
||||
if (true===$res=$this->Media_CheckTarget($oMedia->getTargetType(),null,ModuleMedia::TYPE_CHECK_ALLOW_REMOVE,array('media'=>$oMedia))) {
|
||||
$oMedia->Delete();
|
||||
} else {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
|
||||
$this->Message_AddErrorSingle(is_string($res) ? $res : $this->Lang_Get('system_error'));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -649,14 +655,19 @@ class ActionAjax extends Action {
|
|||
$sTargetTmp=empty($_COOKIE['media_target_tmp_'.$sTargetType]) ? getRequestStr('target_tmp') : $_COOKIE['media_target_tmp_'.$sTargetType];
|
||||
if ($sTargetId) {
|
||||
$sTargetTmp=null;
|
||||
if (!$this->Media_CheckTarget($sTargetType,$sTargetId)) {
|
||||
return $this->EventErrorDebug();
|
||||
if (true!==$res=$this->Media_CheckTarget($sTargetType,$sTargetId,ModuleMedia::TYPE_CHECK_ALLOW_ADD)) {
|
||||
$this->Message_AddError(is_string($res) ? $res : $this->Lang_Get('system_error'), $this->Lang_Get('error'));
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$sTargetId=null;
|
||||
if (!$sTargetTmp or !$this->Media_IsAllowTargetType($sTargetType)) {
|
||||
if (!$sTargetTmp) {
|
||||
return $this->EventErrorDebug();
|
||||
}
|
||||
if (true!==$res=$this->Media_CheckTarget($sTargetType,null,ModuleMedia::TYPE_CHECK_ALLOW_ADD)) {
|
||||
$this->Message_AddError(is_string($res) ? $res : $this->Lang_Get('system_error'), $this->Lang_Get('error'));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -29,7 +29,11 @@ class ModuleMedia extends ModuleORM {
|
|||
*/
|
||||
const TYPE_IMAGE=1;
|
||||
const TYPE_VIDEO=2;
|
||||
|
||||
/**
|
||||
* Список типов для проверки доступа
|
||||
*/
|
||||
const TYPE_CHECK_ALLOW_ADD='add';
|
||||
const TYPE_CHECK_ALLOW_REMOVE='remove';
|
||||
/**
|
||||
* Объект текущего пользователя
|
||||
*
|
||||
|
@ -120,15 +124,17 @@ class ModuleMedia extends ModuleORM {
|
|||
*
|
||||
* @param string $sTargetType Тип
|
||||
* @param int $iTargetId ID владельца
|
||||
* @param string $sAllowType
|
||||
* @param array $aParams
|
||||
* @return bool
|
||||
*/
|
||||
public function CheckTarget($sTargetType,$iTargetId) {
|
||||
public function CheckTarget($sTargetType,$iTargetId=null,$sAllowType=null,$aParams=array()) {
|
||||
if (!$this->IsAllowTargetType($sTargetType)) {
|
||||
return false;
|
||||
}
|
||||
$sMethod = 'CheckTarget'.func_camelize($sTargetType);
|
||||
if (method_exists($this,$sMethod)) {
|
||||
return $this->$sMethod($iTargetId);
|
||||
return $this->$sMethod($iTargetId,$sAllowType,$aParams);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -719,15 +725,34 @@ class ModuleMedia extends ModuleORM {
|
|||
* Проверка владельца с типом "topic"
|
||||
* Название метода формируется автоматически
|
||||
*
|
||||
* @param int $iTargetId ID владельца
|
||||
* @param int|null $iTargetId ID владельца, для новых объектов может быть не определен
|
||||
* @param string $sAllowType Тип доступа, константа self::TYPE_CHECK_ALLOW_*
|
||||
* @param array $aParams Дополнительные параметры
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function CheckTargetTopic($iTargetId) {
|
||||
if ($oTopic=$this->Topic_GetTopicById($iTargetId)) {
|
||||
public function CheckTargetTopic($iTargetId,$sAllowType,$aParams) {
|
||||
if ($sAllowType==self::TYPE_CHECK_ALLOW_ADD) {
|
||||
if (is_null($iTargetId)) {
|
||||
/**
|
||||
* Разрешаем для всех новых топиков
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
if ($oTopic=$this->Topic_GetTopicById($iTargetId)) {
|
||||
/**
|
||||
* Проверяем права на редактирование топика
|
||||
*/
|
||||
if ($this->ACL_IsAllowEditTopic($oTopic,$this->oUserCurrent)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} elseif ($sAllowType==self::TYPE_CHECK_ALLOW_REMOVE) {
|
||||
/**
|
||||
* Проверяем права на редактирование топика
|
||||
* Доступ на удаление файла
|
||||
*/
|
||||
if ($this->ACL_IsAllowEditTopic($oTopic,$this->oUserCurrent)) {
|
||||
$oMedia=$aParams['media'];
|
||||
if ($oMedia->getUserId()==$this->oUserCurrent->getId()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -737,15 +762,34 @@ class ModuleMedia extends ModuleORM {
|
|||
* Проверка владельца с типом "comment"
|
||||
* Название метода формируется автоматически
|
||||
*
|
||||
* @param int $iTargetId ID владельца
|
||||
* @param int|null $iTargetId ID владельца, для новых объектов может быть не определен
|
||||
* @param string $sAllowType Тип доступа, константа self::TYPE_CHECK_ALLOW_*
|
||||
* @param array $aParams Дополнительные параметры
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function CheckTargetComment($iTargetId) {
|
||||
if ($oComment=$this->Comment_GetCommentById($iTargetId)) {
|
||||
public function CheckTargetComment($iTargetId,$sAllowType,$aParams) {
|
||||
if ($sAllowType==self::TYPE_CHECK_ALLOW_ADD) {
|
||||
if (is_null($iTargetId)) {
|
||||
/**
|
||||
* Разрешаем для всех новых комментариев
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
if ($oComment=$this->Comment_GetCommentById($iTargetId)) {
|
||||
/**
|
||||
* Проверяем права на редактирование комментария
|
||||
*/
|
||||
if ($this->ACL_IsAllowEditComment($oComment,$this->oUserCurrent)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} elseif($sAllowType==self::TYPE_CHECK_ALLOW_REMOVE) {
|
||||
/**
|
||||
* Проверяем права на редактирование комментария
|
||||
* Доступ на удаление файла
|
||||
*/
|
||||
if ($this->ACL_IsAllowEditComment($oComment,$this->oUserCurrent)) {
|
||||
$oMedia=$aParams['media'];
|
||||
if ($oMedia->getUserId()==$this->oUserCurrent->getId()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -393,17 +393,21 @@ ls.media = (function ($) {
|
|||
var _this = this;
|
||||
|
||||
ls.ajax.load(this.options.routers.remove_file, { id: id }, function(result) {
|
||||
$(_this.options.selectors.gallery.file + '[data-media-id=' + id + ']').fadeOut(500, function() {
|
||||
$(this).remove();
|
||||
if (result.bStateError) {
|
||||
ls.msg.error(null, result.sMsg);
|
||||
} else {
|
||||
$(_this.options.selectors.gallery.file + '[data-media-id=' + id + ']').fadeOut(500, function() {
|
||||
$(this).remove();
|
||||
|
||||
if (itemNext = _this.searchNextSelected()) {
|
||||
_this.setActive(itemNext, true);
|
||||
} else {
|
||||
_this.hideDetail();
|
||||
}
|
||||
if (itemNext = _this.searchNextSelected()) {
|
||||
_this.setActive(itemNext, true);
|
||||
} else {
|
||||
_this.hideDetail();
|
||||
}
|
||||
|
||||
if ($(_this.options.selectors.gallery.file).length === 0) _this.markAsEmpty();
|
||||
});
|
||||
if ($(_this.options.selectors.gallery.file).length === 0) _this.markAsEmpty();
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue