Skip to Content

Печеньки и Drupal: модуль Junk

На днях Drupal.org обогатился одним моим нехитрым модулем под названием "Junk". Назначение модуля - перехватывать удаляемые пользователями ноды и помещать их в "корзину", откуда модератор может удалить их с сайта уже по-настоящему. При этом помещенные в корзину ноды скрываются во всех отображениях на сайте, будь то Views или меню, а также к ним ограничивается доступ. Junk имеет интеграцию с CTools Page Manager, Rules, Panels и Views и является полностью готовым решением для описанных задач.

Реализованный функционал

- возможность поместить ноду в корзину с помощью ссылки "Delete" в локальном меню и кнопки "Move to junk" в режиме редактирования. Помещенные в корзину ноды не отображаются в листингах нод (есть также опция автоматически фильтровать во Views), и доступ обычных пользователей к ним запрещен;

- возможность восстановить ноду из корзины с помощью кнопки "Restore" на странице ноды и на странице управления корзиной - доступно лишь ролям с назначенными специальным правами;

- страница корзины, отображающая помещенные в неё ноды с кнопками восстановления и окончательного удаления;

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

- интеграция с Panels 3 через CTools Page Manager. Это стоило немало крови, зато Junk не рушит новые панели, в отличии от других подобных решений;

- интеграция с Views 2 - добавлены свои поля и фильтры;

- интеграция с Rules - предоставляется 2 события: одно для помещения ноды в корзину и одно для восстановления;

- опция, позволяющая анпаблишить ноды при помещении в корзину.

Немного об аналогах

На продакшн сайте у нас активно использовался модуль Trash, и в целом он справлялся с поставленной задачей до того момента, пока мы не обновили панели до третьей версии. И тут отображение сообществ и нод-панелей на всём сайте буквально обрушилось. Расследование показало, что виновником оказался модуль Trash, который криво переопределяет node_view и таким образом входит в конфликт с панелями. Также в ходе исследования оказалось, что Trash некорректно использует таблицу модуля ядра Node. Мы стали искать альтернативные модули.

Альтернатив оказалось две: Trashbin и Killfile. К сожалению, оба они не предоставляют полноценных инструментов для управления корзиной и ограничения доступа к "удаленным" нодам. В идеале было бы взять и скрестить все три модуля, добавив необходимых вкусностей. Можно было попросить мейнтейнерство одного из модулей и соответсвенно довести до ума. Trash пришлось бы переписывать с нуля, полностью изменив архитектуру, но автор модуля твёрдо дал понять, что она его устраивает, и менять он её не хочет. Trashbin позиционируется как супер-легкий модуль, который не будет "утяжеляться", а Killfile в качестве основы подходит меньше всего, так как почти не имеет пересечений в необходимом функционале и имеет странный крен в сторону RSS.

Итог - разработка своего модуля Junk и успешный запуск в эксплуатацию на крупном продакшн сайте. Потом появилась идея поделиться содеяным с Drupal сообществом, и был пройден длинный путь от Code Review до First Release Commit (отдельная история...).

Комментарии

Добрый день, большое спасибо

Добрый день, большое спасибо за модуль.

Подскажите пожалуйста, как сделать и возможно ли вообще сделать корзину доступной для просмотра зарегистрированому пользователю, но только на восстановление ( в Trash это точно было доступно)

Проще говорю "Администратор" имеет доступ к странице /junk и может восстанавливать или удалять окончательно оттуда ноды, а "зарегистрированный пользователь" имеет доступ к странице /junk и может только восстанавливать ноды.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
Smileys
:):D:bigsmile:;):p:O:|:(:~:((8):steve:J):glasses::party::love:
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <span> <div> <h2> <h3>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.
  • Image links with 'rel="lightbox"' in the <a> tag will appear in a Lightbox when clicked on.
  • Image links from G2 are formatted for use with Lightbox2
  • Textual smileys will be replaced with graphical ones.
  • You may insert videos with [video:URL]

Подробнее о форматировании

Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated.

CAPTCHA
Докажи, что ты не киборг!
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.