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

Доработка медиа #404

This commit is contained in:
Mzhelskiy Maxim 2014-02-20 21:40:09 +07:00
parent 88d93662ce
commit bd00d19ba8
3 changed files with 90 additions and 31 deletions

View file

@ -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;
}
}
/**

View file

@ -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;
}
}

View file

@ -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();
});
}
});
};