Удаление и восстановление своих комментариев в чужом топике.

В файле comment.tpl взял строчки
{if !$oComment->getDelete() and $oUserCurrent and $oUserCurrent->isAdministrator()}
					<li><a href="#" class="comment-delete link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_delete}</a></li>
				{/if}
				
				{if $oComment->getDelete() and $oUserCurrent and $oUserCurrent->isAdministrator()}   										
					<li><a href="#" class="comment-repair link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_repair}</a></li>
				{/if}


Что в них нужно изменить, чтобы пользователь мог удалять/восстанавливать свои комментарии в любых топиках?

18 комментариев

avatar
Недостаточно добавить отображение кнопки удаления и восстановления, нужно ещё и бизнес-логику этих действий менять.
avatar
если можно, опишите, пожалуйста, весь процесс.
avatar
Не припомню чтобы в ветке 1.0+ была возможность простым пользователям удалять комментарии. Рекомендую смотреть в сторону плагинов и доработок.
avatar
плагин «Удаление комментариев» — по описанию можно удалять также комменты любых пользователей, но в своих топиках. лучше было наоборот, в любых топиках, но своих комментариях.

я в comment.tpl
{if !$oComment->getDelete() and $oUserCurrent and $oUserCurrent->isAdministrator()}
     <li><a href="#" class="comment-delete link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_delete}</a></li>
    {/if}
    
    {if $oComment->getDelete() and $oUserCurrent and $oUserCurrent->isAdministrator()}             
     <li><a href="#" class="comment-repair link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_repair}</a></li>
    {/if}


удалил
and $oUserCurrent->isAdministrator()


в модуле ACL функция CanDeleteComment уберал в ней првоерку на админа.

но теперь любой пользователь в любом топике может удалять любые комментарии. а после перезагрузки страницы нет у пользователя восстановить их.
avatar
Вместо проверки на админа напишите что-то вроде
$this->User_GetUserCurrent()->getId() === $oUser->getId()
avatar
не сработало. ошибка: Parse error: syntax error, unexpected 'return' (T_RETURN)
avatar
Во-первых, это синтаксическая ошибка, скорее всего как-то неправильно вставляете. Во-вторых, воспринимайте это как псевдокод. Хотите помощи — показывайте нормально код, а не «уберал в ней првоерку на админа». Экстрасенсов здесь не так уж много и они часто заняты другими делами.
avatar
извините. код
* Проверяет может ли пользователь удалить комментарий
	 *
	 * @param  ModuleUser_EntityUser $oUser	Пользователь
	 * @return bool
	 */
	public function CanDeleteComment($oUser) {
		if (!$oUser || !$oUser->isAdministrator()) {
			return false;
		}
		return true;
	}


изменил на:
* Проверяет может ли пользователь удалить комментарий
	 *
	 * @param  ModuleUser_EntityUser $oUser	Пользователь
	 * @return bool
	 */
	public function CanDeleteComment($oUser) {
		if (!$oUser || !$oUser->getId()) {
			return false;
		}
		return true;
	}
avatar
Ну вот, а я говорил сделать примерно так:
public function CanDeleteComment($oUser) {
    if (!$oUser || $this->User_GetUserCurrent()->getId() !== $oUser->getId()) {
        return false;
    }
    return true;
}
avatar
все осталось без изменений: также любой пользователь в любом топике может удалять любые комментарии. а после перезагрузки страницы нет возможности у пользователя восстановить их.

по такому же вопросу как и у меня человеку не помогли livestreet.ru/blog/17172.html. или помогли, но решения нет…
avatar
Короче… плагинов никаких не надо.
Идёте сюда: github.com/livestreet/livestreet/blob/1.0.3/classes/modules/acl/ACL.class.php#L395-L406 меняете на:
/**
 * Проверяет может ли пользователь удалить комментарий
 *
 * @param  ModuleUser_EntityUser $oUser	Пользователь
 * @return bool
 */
public function CanDeleteComment($oUser) {
	if (!$oUser || !$oUser->isAdministrator() && $this->User_GetUserCurrent()->getId() != $oUser->getId()) {
		return false;
	}
	return true;
}
затем сюда: github.com/livestreet/livestreet/blob/1.0.3/templates/skin/synio/comment.tpl#L92-L98 меняете на:
{if !$oComment->getDelete() and $oUserCurrent and $oUserCurrent->getId() == $oComment->getUserId()}
	<li><a href="#" class="comment-delete link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_delete}</a></li>
{/if}

{if $oComment->getDelete() and $oUserCurrent and $oUserCurrent->getId() == $oComment->getUserId()}}
	<li><a href="#" class="comment-repair link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_repair}</a></li>
{/if}
Profit!
avatar
Спасибо! помогло в плане того, что теперь пользователь не может удалять чужие комментарии. даже админ не может :)

Но восстанавливать свои комментарии пользователь не может.
avatar
Код опять не тестировал :)
/**
 * Проверяет может ли пользователь удалить комментарий
 *
 * @param  ModuleUser_EntityUser $oUser	Пользователь
 * @return bool
 */
public function CanDeleteComment($oUser) {
	if($oUser && $oUser->isAdministrator()) {
		return true;
	}
	if (!$oUser || $this->User_GetUserCurrent()->getId() != $oUser->getId()) {
		return false;
	}
	return true;
}
{if !$oComment->getDelete() and $oUserCurrent and ($oUserCurrent->isAdministrator() or $oUserCurrent->getId() == $oComment->getUserId())}
	<li><a href="#" class="comment-delete link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_delete}</a></li>
{/if}

{if $oComment->getDelete() and $oUserCurrent and ($oUserCurrent->isAdministrator() or $oUserCurrent->getId() == $oComment->getUserId()}}
	<li><a href="#" class="comment-repair link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_repair}</a></li>
{/if}
avatar
теперь админ может восстанавливать любые комменты.
а пользователь также удаляет свои комменты без возвратно, т.е. восстановить не может. ;(

я Вас замучил, но уж простите…
avatar
По логике сейчас пользователь должен видеть кнопку восстановления своих комментариев. Не знаю что ещё предложить :)
avatar
ну что ж поделать. что-нибудь придумаю с логикой процесса.
и для окончательного красивого решения, пожалуйста, подскажите в какой кусок кода и куда и что нужно прописать, чтобы при удалении коммента пользователем перезагружалась страница топика.
avatar
Разобрался сам. Нужно в коде
{if !$oComment->getDelete() and $oUserCurrent and ($oUserCurrent->isAdministrator() or $oUserCurrent->getId() == $oComment->getUserId())}
 <li><a href="#" class="comment-delete link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_delete}</a></li>
{/if}
перед
return false;
вписать строчку
javascript:window.location.reload();
Может кому пригодится. А Вам Chiliec отдельное большое спасибо за помощь.
avatar
ВЗЛОМ СОЦИАЛЬНЫХ СЕТЕЙ, ВЗЛОМ ПОЧТЫ, ВЗЛОМ МЕССЕНДЖЕРОВ, УСЛУГИ ВЗЛОМА

**1 Взлом СОЦИАЛЬНЫЕ СЕТИ:
1.1 Взлом В контакте (vkontakte.ru)
1.2 Взлом Одноклассники (odnoklassniki.ru)
1.3 Взлом Фейсбук (Facebook)
1.4 Взлом Twitter
1.5 Взлом Instagram
1.6 Взлом Мой мир
1.7 Взлом Ask
1.8 Взлом Google +

**2 Взлом ПОЧТЫ:
2.1 РАССМОТРИМ ЛЮБЫЕ ДОМЕНЫ
2.2 корпоративные почты т.е. Корпоративный портал интегрирует внутренние приложения,
такие как приложения электронной почты, доступа к базе данных и управления документами,
с внешними приложениями.

**3 Взлом МЕССЕНДЖЕРОВ
3.1 Вайбер (Viber)
3.2 Ватсап (WhatsApp)
3.3 Телеграм (Telegram)
3.4 Друг вокруг
И ДРУГИЕ

**4 Распечатка смс и звонков мобильных операторов

**5 Взлом Сайты знакомств рассмотрим любой хостинг

**6 Отчистка кредитной истории

**7 Удаление отзывов, комментариев

ГАРАНТИРУЕМ:
— Крайне высокая вероятность взлома — 93%
— Пароли не меняем
— «жертва» будет продолжать пользоваться анкетой, ничего не подозревая
— Кратчайшие сроки выполнения заказа
— Анонимность и конфиденциальность полностью соблюдается
— Простейшая и удобная система оплаты

ОБРАЩАТЬСЯ:
*Почта: services.breaking@gmail.com
*Вконтакте: vk.com/pomoshnik.passwords
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ВЗЛОМ СОЦИАЛЬНЫХ СЕТЕЙ, ВЗЛОМ ПОЧТЫ, ВЗЛОМ МЕССЕНДЖЕРОВ, УСЛУГИ ВЗЛОМА

**1 Взлом СОЦИАЛЬНЫЕ СЕТИ:
1.1 Взлом В контакте (vkontakte.ru)
1.2 Взлом Одноклассники (odnoklassniki.ru)
1.3 Взлом Фейсбук (Facebook)
1.4 Взлом Twitter
1.5 Взлом Instagram
1.6 Взлом Мой мир
1.7 Взлом Ask
1.8 Взлом Google +

**2 Взлом ПОЧТЫ:
2.1 РАССМОТРИМ ЛЮБЫЕ ДОМЕНЫ
2.2 корпоративные почты т.е. Корпоративный портал интегрирует внутренние приложения,
такие как приложения электронной почты, доступа к базе данных и управления документами,
с внешними приложениями.

**3 Взлом МЕССЕНДЖЕРОВ
3.1 Вайбер (Viber)
3.2 Ватсап (WhatsApp)
3.3 Телеграм (Telegram)
3.4 Друг вокруг
И ДРУГИЕ

**4 Распечатка смс и звонков мобильных операторов

**5 Взлом Сайты знакомств рассмотрим любой хостинг

**6 Отчистка кредитной истории

**7 Удаление отзывов, комментариев

ГАРАНТИРУЕМ:
— Крайне высокая вероятность взлома — 93%
— Пароли не меняем
— «жертва» будет продолжать пользоваться анкетой, ничего не подозревая
— Кратчайшие сроки выполнения заказа
— Анонимность и конфиденциальность полностью соблюдается
— Простейшая и удобная система оплаты

ОБРАЩАТЬСЯ:
*Почта: services.breaking@gmail.com
*Вконтакте: vk.com/pomoshnik.passwords
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.