Записки динозавра

Автор блога: Ris
Все рубрики (17)

Утилита от @fazer для очистки upload.

Вашему вниманию предлагается утилита для очистки папки upload от неиспользуемых изображений.
Написана @fazer на языке PERL. Все благодарности и плюсы в карму сюда: @fazer
Так как @fazer не имеет пока достаточно кармы для своего блога, выкладываю эту разработку по его просьбе в своем блоге.
Благодаря использованию перла, поиск в базе теперь не приводит к падению сервера mysql на больших таблицах.

Утилита представляет из себя файл написанный на перле, который срабатывает по заданию планировщика или вручную из админки.
В настройках компонента можно настроить расширения, которые будут удаляться, поля в базе, в которых будут искаться ссылки на картинки, папки в которых будет производиться поиск ненужных файлов и папки, которые
не участвуют в поиске.
Лишние файлы переносятся в папку /upload/deleted, которую можно очистить потом. Также при работе скрипта создается лог удаляемых файлов cleaner_files.txt в папке upload.

Компонент для манипуляции фильтрацией и сортировкой в датасетах. 2.x

Давно хотел предложить на гитхабе немного расширить возможности сортировки и фильтрации в датасетах.
То есть дать продвинутым администраторам сайта самим создавать нужные фильтры и сортировки для датасетов, путем прописывания mysql в настройках набора в админке, а не выбирать из предложенных вариантов.
Но потом подумал, что разработчики не станут вводить это в коробку, так как этот функционал придется поддерживать и каким-то образом разъяснять пользователям, как им пользоваться. А кому это нужно, учить людей извращениям.
Но, после этой темы на форуме, я увидел, что такой функционал может быть востребован у людей, разбирающихся в mysql.
Поэтому решил сделать маленькое дополнение, состоящее из двух хуков, которое позволяет прямо из админки прописывать сложносочиненные фильтры и сортировки датасетов.
Первый хук изменяет форму настройки датасетов в админке. Второй добавляет эти нестандартные фильтры и сортировки в модель при получении списка типа контента в наборе.
Ни один системный файл не подвергался правке.

[Неактуально] Информирование пользователей об окончании срока публикации.

Пост неактуален. Весь функционал уже есть в версии 2.12.2

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

[Неактуально] Информирование пользователей об окончании срока публикации.

Пользователям приходят уведомления такого вида:

Спойлер
На почту приходят такие письма:

Спойлер
Быстро проверить работоспособность компонента можно так:

Спойлер
Компонент доработан. Работает теперь на версиях начиная с 2.9.0

Скачать компонент уведомлений

Комментарии в ленте активности

Сто раз на форуме поднималась тема про сведение событий на сайте и комментариев в один виджет.
Многие (и я в том числе) пытались заносить в ленту активности новые события при добавлении комментария, но этот метод имеет несколько недостатков: "распухание" таблицы cms_activity и появление в ленте активности битых ссылок при удалении комментариев.
Но в файле \system\controllers\activity\widgets\list\widget.php есть вызов хука activity_before_list, который позволяет решить задачу без правки системных файлов.

[Неактуально]Редактор с настройками

Обратите внимание, что настройка кнопок редактора в версии 2.12.2 уже есть в коробке.

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

Бэкап базы данных по расписанию.

С удивлением обнаружил, что не все знают, как сохранять бэкапы базы данных.
Это требует знаний команд bash и умения работать в консоли сервера.
Для облегчения и автоматизации данного процесса сделал утилиту, которая делает бэкапы базы по расписанию планировщика.
Она представляет из себя один хук \system\controllers\backup\hooks\cron_backup.php, который стартует по хрону или вручную из планировщика в админке. Он создает папку, название которой должен придумать админ, создает бэкап базы данных и пакует его в gz.
После этого удаляются архивы старше заданного времени.
Перед запуском задания "Бэкап базы" нужно зайти в компоненты, выбрать компонент "Бэкап базы данных", задать там имя папки с архивами, срок хранения архивов и нажать "Сохранить".

Поиск и перенос неиспользуемых картинок в Upload 2.x

В продолжение темы про удаление пустых папок, сделал утилиту для глобальной очистки папки upload.
Запускается из админки.
1. Сканирует в полях всех таблиц базы (имена нужных полей можно добавлять через запятую в опциях) все ссылки на файлы изображений и записывает результат в файл /upload/links.json.
2. Сканирует файлы в папке upload и записывает результаты в файл /upload/files.json
3. Преобразует оба файла в массивы, сравнивает второй с первым и заносит результат в файл /upload/compare.json
4. Снова сканирует папку upload и файлы, совпадающие именами с содержимым /upload/compare.json, переносит с сохранением подпапок и путей в папку /deleted/upload/
5. Бонусом (если поставить галку) удаляет пустые папки и в upload и в deleted.
6. Пакует папку deleted в zip и вывешивает ссылку на скачивание.