Удаление собственных комментариев зарегистрированными пользователями в Drupal 6.* [РЕШЕНО]

Главные вкладки

Аватар пользователя Serg_M Serg_M 19 мая 2009 в 9:16

Собственно меня, как и многих, удручает ситуация невозможности удалять свои комментарии (вернее в коробочном варианте заложено либо все/всё либо ничего).
Как-то это негоже в движке претендующем на звание "строитель блогов и соцсетей" не иметь такой функции, тем более, что уже вышла 6-я версия продукта.
Есть какие-то самописные решения для Drupal 5.*, а на .org уже попадаются разработки для Drupal 7.*, но для 6-ки я так и не нашел (если пропустил, то бросьте в меня ссылкой).
Насколько понял, единственный аргумент против удаления - древовидная структура комментариев в Drupal, т.е. при удалении коммента автоматически удаляются и все его потомки (что действительно не есть хорошо).
Но мне почему-то древовидные комментарии всегда не нравились. Мне больше по душе комменты с цитированием (правда там есть другое зло - излишнее цитирование, как бороться хз).

Появился модуль delete_comments, смотрите в комментариях ниже!!!

Комментарии

Аватар пользователя Химический Али Химический Али 19 мая 2009 в 10:10

Для древовидных комментариев можно было бы оставлять заглушки типа (комментарий удален). Тогда иерархия не нарушается и понятно, что нечто выпилено.

Аватар пользователя Serg_M Serg_M 19 декабря 2009 в 14:56

Все-еще хакаем код в 2-х местах. Drupal 6.15. Суперадмин удаляет все комментарии, зарегистрированные пользователи - только свои, а гости - ничьи.
comment.module

было:

  $items['comment/delete'] = array(
    'title' => 'Delete comment',
    'page callback' => 'comment_delete',
    'access arguments' => array('administer comments'),

стало:

  $items['comment/delete'] = array(
    'title' => 'Delete comment',
    'page callback' => 'comment_delete',
    'access arguments' => array('post comments'),

было:

  if (node_comment_mode($comment->nid) == COMMENT_NODE_READ_WRITE) {
    if (user_access('administer comments') && user_access('post comments')) {

стало:

  if (node_comment_mode($comment->nid) == COMMENT_NODE_READ_WRITE) {
    if (user_access('administer comments') && user_access('post comments') || ($comment->uid != 0 && $user->uid == $comment->uid)) {
Аватар пользователя T-34 T-34 29 января 2010 в 22:31

Спасибо, как раз понадобилось.

небольшие замечания по коду: лишние строчки $comment = $node;, ?> и пару раз использовано %s вместо %d; в t() заворачиваются только строки на английском.
Эм, и cache_clear_all() лишне.

Аватар пользователя Serg_M Serg_M 12 января 2010 в 11:12

"chili" wrote:
У меня примерно так получилось.

Сегодня потестил модуль на свеже установленный Drupal 6.15

1) Древовидная структура комментариев:
Гость - может только оставлять комментарий.
Зарегеный - может оставлять и удалять свои комментарии. Причем, если на его коммент был написан ответ-потомок, то вместо комментария появляется надпись "Комментарий удалён автором", а древовидная структура сохраняется.
Суперадмин - может удалить всю ветку комментария под корень.

Недочет: когда зарегеный пользователь удаляет свой коммент и были потомки на него (комментарий удален автором), то к его логину прибавляется надпись (не проверено), т.е. как будто комментарий был оставлен Гостем.

2) Плоская структура комментариев (достигается модулями flatcomments + buquote/quote):
Гость - может только оставлять комментарий.
Зарегеный - может оставлять и удалять свой комментарий.
Суперадмин - может удалять любые комментарии

Общий косячок - если Суперадмин вдруг захочет оставить комментарий, то на своем комменте он будет иметь 2 кнопки "удалить". Но это уже наверное мелочь.

Вывод: если бы не недочет, когда удаленный коммент зарегеного юзера превращается в гостевой, то можно было-бы рекомендовать его как "иметь обязательно".

Спасибо chili, это наверное первый модуль на эту тему.

Аватар пользователя chili chili 12 января 2010 в 14:01

Исправил "общий косячок")

Постараюсь прикрутить форму администрирования и сделать настройки.
Спасибо за подробное описание)

Аватар пользователя Serg_M Serg_M 28 января 2010 в 4:36

To chili

А можно ли подправить Недочет:? Чтобы к логину не добавлялась надпись "не проверено" (к примеру, у себя заменил ее на "гость"). Визуально смотрится, как-будто ее оставил гость, что неверно.

Аватар пользователя T-34 T-34 10 ноября 2015 в 11:46

Serg_M я это исправил
vb мда, с названием я скосячил)
chili спасибо еще раз за выложенный модуль, я только пофиксил недочеты которые нашел

Аватар пользователя Dan Dan 3 марта 2010 в 23:33

Quote:

- А армяне лучше чем грузины.
- Чем лучше-то?!
- Чем грузины!

В вашем модуле нет:
- прав доступа. то есть модуль не подразумевает таких людей как модераторы
- выбор действия при удалении - весть тред или один коммент, то есть поддрежки дерева комментов нет
- если нет предыдущих пунктов, то конечно нельзать задать действие по умолчанию, со скрытием выбора у пользователя.

Так чем лучше-то?

Аватар пользователя T-34 T-34 7 марта 2010 в 20:13

Dan, в comment_delete нет возможности удалить только текст комментария, плюс к этому при удалении комментария с поднятием ответов на уровень выше не вызывается [ru-api=_comment_update_node_statistics]_comment_update_node_statistics()[/ru-api] (патч тут: http://drupal.org/node/654274). А также само это поднятие на уровень выше рушит древообразную структуру ответов.
Так что я добавил возможность удалить комментарий, если на него нет ответов, и удалить только текст комментария при наличии оных. Патчи: http://drupal.org/node/735210#comment-2687502 (сюда включено и добавление вызова _comment_update_node_statistics()).
Мейнтейнер скорее мертв, чем жив, так что если используете модуль, настоятельно рекомендую накатить хотя бы первый патч.

Аватар пользователя Dan Dan 8 марта 2010 в 2:02

"T-34" wrote:
Мейнтейнер скорее мертв, чем жив

Жаль. Тогда может имеет смысл выложить здесь пропатченный модуль? Это будет удобно для тех кто не знает что такое патч и как с ним обращаться.

Аватар пользователя Victor_ Victor_ 4 апреля 2010 в 5:14

Добрый день. Подскажите как это реализовать на 5 версии? Все способы приведенные выше перепробовал, не работает Sad

Аватар пользователя Detonator Detonator 10 мая 2010 в 17:30

Не работает с ajax comments, может быть кто-нибудь напишет патчик? Проблема лишь в том, что в адресе удаляемого комментария (например http://site.ru/comment/delete/?token=5a3d9076a101d4badc616b6fe452a8bf) пропущен id комментария вот здесь http://site.ru/comment/delete/637?token=5a3d9076a101d4badc616b6fe452a8bf

Аватар пользователя Detonator Detonator 12 мая 2010 в 20:05

У меня не работает нигде Smile ну по крайней мере к коментриям размещённым например в блоге. Остальное не проверял, но у комментария в ссылке удаления почему-то отстутствует id комментария (если его доставить вручуню - всё работает).

Под суперюзером удаляет всё прекрасно (почемуто под суперюзером, да и вообще под всеми пользователями с админскими правами в ссылке есть id комментария), но под обычным ссылка на удаление есть а само удаление не работает (отсутствует id коммента).