Автор топика может удалять комментарии [РЕШЕНО]
Здравствуйте, я озадачился сабжем и решил эту проблему для себя так. По мотивам статьи: Удаление комментария пользователем
Кусок ActionAjax.class.php
В начале определяем тип контента, к которому оставлен наш комменатрий, если это картинка в галерее {image}, то получаем ID ее автора через $oImage->getUserId() иначе {topic} автор-id: $oComment->getTarget()->getUserId()
- Делаем все как говорит автор в родительской статьи, тогда авторы смогут удалять свои комментарии;
- В comments.tpl (в вашем шаблоне) к правилу дописываем
OR $oUserCurrent->getUserID() == $oComment->getTarget()->getUserId()
- В ActionAjax.class.php к правилу дописываем
&& $this->oUserCurrent->getId() != $oComment->getTarget()->getUserId()
Я муторным путем выяснил структуру объекта $oComment, которая получается из Comment_GetCommentById(), в ней есть такая штука {target} «цель», в ней есть {user_id} идентификатор автора «цели», к которой написан комментарий -> отсюда получаем ID человека, который может чистить комментарии,. вот.
Выглядеть должно так
Кусок comments.tpl{if !$oComment->getDelete() and $oUserCurrent and ($oUserCurrent->isAdministrator() OR $oUserCurrent->getUserID() == $oComment->getUserID()) OR $oUserCurrent->getUserID() == $oComment->getTarget()->getUserId()}
<li><a href="#" class="delete" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_delete}</a></li>
{/if}
Кусок ActionAjax.class.php
protected function EventCommentDelete() {
/**
* Есть права на удаление комментария?
if (!$this->ACL_CanDeleteComment($this->oUserCurrent)) {
$this->Message_AddErrorSingle($this->Lang_Get('not_access'),$this->Lang_Get('error'));
return;
}
*/
$idComment=getRequest('idComment',null,'post');
$oComment=$this->Comment_GetCommentById($idComment);
if ($oComment->getTargetType() == 'image') $oMAuthor = -1; else $oMAuthor = $oComment->getTarget()->getUserId();
if (
!$this->oUserCurrent ||
true xor
( $this->oUserCurrent->isAdministrator() ||
$this->oUserCurrent->getId() == $oComment->getUserId() ||
$this->oUserCurrent->getId() == $oMAuthor )
) {
$this->Message_AddErrorSingle($this->Lang_Get('not_access'), $this->Lang_Get('error'));
return;
}
/**
* Комментарий существует?
*/
UPD0
Ругается в галерееFatal error: Call to a member function getUserId() on a non-object in ***comment.tpl.php on line 166Сейчас решаю эту штуку,.
UPD1
Решил проблему с галереей, в итоге кусок comment.tpl должен выглядеть так:
{if $oComment->getTargetType() == 'image'}
{assign var="oAuthor" value=$oImage->getUserId()}
{else}
{assign var="oAuthor" value=$oComment->getTarget()->getUserId()}
{/if}
{if !$oComment->getDelete() and $oUserCurrent and ($oUserCurrent->isAdministrator() OR $oUserCurrent->getUserID() == $oComment->getUserID()) OR $oUserCurrent->getUserID() == $oAuthor}
<li><a href="#" class="delete" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_delete}</a></li>
{/if}
В начале определяем тип контента, к которому оставлен наш комменатрий, если это картинка в галерее {image}, то получаем ID ее автора через $oImage->getUserId() иначе {topic} автор-id: $oComment->getTarget()->getUserId()
4 комментария
у меня иногда ругается
это плагин какой то…
кстати произвольно пару раз в сутки вылазит
Видимо в галерее придется плясать от других ключей, а ловить этот момент можно по
1. У пользователя, как и у админа появляется возможность восстановления камента. Как бы эту возможность пригасить. Пользователь удаляет камент не для его восстановления.
2. Подсветка кдаленного камента наезжает на аватар. Может есть возможность сделать по схеме: «нажал удалить > удалилось > появилась метка 'комментарий удален' > все забыли про эпизод».