[AVP] Удаление старых заказов

Удаление старых заказов (avp_del_old_orders)

Версия 1.3.3 · для CS-Cart 4.x · русский, английский, немецкий

О модуле

Со временем таблица заказов в магазине растёт до сотен тысяч записей: архивы, тестовые покупки, отработанные за прошлые годы сделки. Это раздувает базу данных и замедляет админку, выгрузки и отчёты. Модуль позволяет безопасно освобождать базу от устаревших заказов прямо из панели администрирования — с контролем объёма, наглядным прогрессом и полным журналом каждой операции.

Возможности

Запуск из меню «Заказы». Пункт «Удалить старые заказы» встроен в штатное меню раздела «Заказы» — функционал находится там, где его логично искать.

Страница запуска с предпросмотром. Перед удалением модуль показывает, сколько заказов подходит под условие и сколько из них будет удалено за один запуск (по лимиту из настроек). Удаление необратимо, поэтому страница честно предупреждает об этом и рекомендует предварительно сделать резервную копию базы данных.

Плавный прогрессбар. Используется штатный механизм полосы прогресса CS-Cart: всплывающее окно показывает общее количество заказов, и по мере удаления полоса заполняется шаг за шагом. После завершения полоса закрывается сама, а на странице появляется уведомление.

Настройка лимита на запуск. Количество заказов, удаляемых за один запуск, задаётся в настройках модуля. Если подходящих заказов больше лимита, за раз удалится только лимитированная порция — остальные можно удалить следующими запусками. Это позволяет мягко расчищать большие базы без длительной блокировки процесса.

Уведомление со ссылкой на журнал. После запуска уведомление показывает, сколько заказов удалено, и содержит ссылку на журнал именно этого запуска. Ссылка открывает стандартное поп-ап окно CS-Cart, поверх всего контента; текст журнала подгружается по требованию — только в момент открытия, без лишних запросов.

Отдельный журнал на каждый запуск. Каждый запуск пишется в собственный файл вида avp_del_old_orders_ГГГГ-ММ-ДД_ЧЧ-ММ-СС.log в папке var/addons/avp/: строка старта с параметрами, найденное количество, по строке на каждый удалённый заказ, итог. По журналу всегда можно восстановить, что именно и когда было удалено.

Крон-режим для автоматизации. Помимо ручного запуска, модуль поддерживает режим cron — как через CLI, так и по защищённому паролю. Настройте периодическое выполнение, и старые заказы будут удаляться автоматически небольшими порциями, каждый запуск — со своим журналом.

Безопасность

  • Ограничение доступа по настройке. В настройках есть чекбокс «Удаление заказов доступно только главному администратору»: при включённой опции пункт меню скрывается от остальных администраторов, а контроллер дополнительно проверяет права — даже прямой заход по известному адресу не даст запустить удаление.
  • Защита от подделки запросов. Страница запуска выдаёт одноразовый токен, и контроллер проверяет его перед удалением — ajax-ссылку нельзя дёрнуть со стороны.
  • Защита журналов от обхода. Имя файла журнала в запросе проверяется строгим шаблоном: подстановка путей исключена.
  • Подтверждение перед удалением. Запуск требует подтверждения во всплывающем окне.







2 лайка

А добавьте еще туда действия при выборе заказов, тогда ведь просто можно через поиск выбрать нужные, к примеру все аннулированные и удалить или заказы конкретного клиента. Выделить все и там в действиях “Тихое удаление”

1 лайк

Логично. Думал о подобной вещи немного в ином ключе, и там натыкался на сложность. А в таком виде да, довольно просто

1 лайк

встречный вопрос: как считаете, что лучше - действие только над выбранным, то есть то что чекбоксами отмечено, или “Все найденные” - все заказы со всех страниц выдачи? Наверное второй вариант опасен. Это ж просто перейти на страницу заказов, нажать Удалить все найденные… И жизнь с чистого листа

да можно сделать 2 кнопки, только всплывашку подтверждение сделать, ну и можно кнопку удалить все найденное, сделать только для root админа.