Печеньки и 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 (отдельная история...).
- 4657 просмотров


Комментарии
Добрый день, большое спасибо
Добрый день, большое спасибо за модуль.
Подскажите пожалуйста, как сделать и возможно ли вообще сделать корзину доступной для просмотра зарегистрированому пользователю, но только на восстановление ( в Trash это точно было доступно)
Проще говорю "Администратор" имеет доступ к странице /junk и может восстанавливать или удалять окончательно оттуда ноды, а "зарегистрированный пользователь" имеет доступ к странице /junk и может только восстанавливать ноды.
Отправить комментарий