Уборщик для UMI.CMS. Чистка незарегистрированных пользователей и брошенных корзин

Со временем роста возраста сайта и кол-ва посетителей база данных UMI.CMS начитает увеличиваться, если используется не дорогой хостинг, то вам могу, например отключить сайт — что чревато для бизнеса потерей денег 🙁 ...

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

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

1) Старая версия UMI — Шаблоны данных -> в строку поиска написать «Незарегистрированный» -> Открыть справочник с данными:

2) Новая версия UMI - Шаблоны данных -> в строку поиска написать «Незарегистрированный», навести мышь и посмотреть на ID справочника, и в строку ввода браузера вставить: /admin/data/guide_items/{id}/, где {id} — это то, что вы подсмотрели на скриншоте:

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

Справочники можно чистить вручную, например, 1 раз в месяц. Но по мне данные процесс проще автоматизировать.

Я покажу пример автоматизации справочника для работы с заказами, вы по аналогии сможете сделать с пользователями.

В корне сайта создайте файл  garbage.php и в него поместите код (пояснения будут ниже)

<?php /** * @desc Уборщик брощенных корзин. Справочник разположен в Шаблоны данных -> Справочники -> Содержание справочника "Заказ"
 * @desc Удаляет записи у которых payment_status_id = пустота и 218(иницилизированна)
 */
include "./standalone.php";

$sel = new selector('objects');
$sel->types('object-type')->name('emarket', 'order');

foreach ($sel as $selItem) {
    $umiObjects = umiObjectsCollection::getInstance();

    $order = $umiObjects->getObject($selItem->getId());

    $orderPaymentStatusId = $order->getValue("payment_status_id");
    if( $orderPaymentStatusId== "" OR $orderPaymentStatusId == 218) {
        $umiObjects->delObject($order->getId());
    }
}
?>

Строка #6 — подключается фрейморк UMI.CMS
Строка #7 #8 — при помощи selector UMI.CMS выбираем объекты с типом «Заказа». Чтобы узнать, какие существуют еще объекты и узнать их ID и типы, вам сюда
Строка #11 — #20 осуществляется перебор объектов.
Строка #16 — получает значение поля «payment_status_id» в заказе
Строка #17 — ВНИМАНИЕ! Здесь проверяется ID статуса, в моем случае это пустота и иницилизированна и удаляется.

Рекомендации касательно работы.
1) Данный процесс либо можно запускать вручную, либо настроить процесс (cron) автоматического запуска, например, каждое воскресенье, в 4 утра
2) Первый запуск самый сложный, так как данных будет много и сразу все удалить может не получиться и нужно будет запустить несколько раз подряд
3) Все изменения на свой страх и риск, не тестируйте на рабочих площадках
4) Перед переносом на prodaction-площадку, сделайте резервную копию БД (вообще настройке резервирование на постоянной основе)