Автор топика может удалять комментарии [РЕШЕНО]

Здравствуйте, я озадачился сабжем и решил эту проблему для себя так. По мотивам статьи: Удаление комментария пользователем

  1. Делаем все как говорит автор в родительской статьи, тогда авторы смогут удалять свои комментарии;
  2. В comments.tpl (в вашем шаблоне) к правилу дописываем
    OR $oUserCurrent->getUserID() == $oComment->getTarget()->getUserId()
  3. В 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 комментария

avatar
UPD0: Ругается в галерее
Fatal error: Call to a member function getUserId() on a non-object in ***comment.tpl.php on line 166
Сейчас решаю эту штуку,.


у меня иногда ругается
это плагин какой то…
кстати произвольно пару раз в сутки вылазит
avatar
Да нет, у меня понятно почему именно в галерее ругается,- проверил $oComment, когда комментарий оставлен к фото, в нем нет секции {target}, следовательно он не может получить
$oCommet->target->user_id
, вот и ругается))

Видимо в галерее придется плясать от других ключей, а ловить этот момент можно по
[target_type] => image
avatar
Есть еще 2 момента.

1. У пользователя, как и у админа появляется возможность восстановления камента. Как бы эту возможность пригасить. Пользователь удаляет камент не для его восстановления.

2. Подсветка кдаленного камента наезжает на аватар. Может есть возможность сделать по схеме: «нажал удалить > удалилось > появилась метка 'комментарий удален' > все забыли про эпизод».
avatar
У меня почему-то не работает удаления коммента пользователем. Что я делаю не так?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.