Удалить всех пользователей которые не делали заказов в магазине 1С-Битрикс

Просмотров: 3539

Задача: сайт проработал 7 лет и все время на нем была открытая регистрация, создано много мертвых учетных записей (боты, просто фантомные регистрации и.т.д.). Необходимо удалить всех пользователей, у которых нет заказов в интернет магазине.

Удалить всех пользователей которые не делали заказов в магазине 1С-Битрикс

Получаем список пользователей и заказ пользователя

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

CModule::IncludeModule('sale');
global $USER;

$rsUsers = CUser::GetList(
    ($by = "ID"),
    ($order = "desc"),
    false
);
while ($arUser = $rsUsers->Fetch()) {
    $dbOrders = CSaleOrder::GetList(
        false,
        array(
            'USER_ID' => $arUser['ID']
        ),
        false,
        array (
            'nTopCount' => '1'
        )
    );
    while ($arOrder = $dbOrders->Fetch()){
        $userHasOrder = $arOrder['ID'];
    }
    if (!$userHasOrder) {
        CUser::Delete($arUser['ID']);
    }
    unset($userHasOrder);
}
Внимание! Проверки на группу пользователя нет, удалятся все пользователи (включая администраторов- кроме пользователя ID=1) если у них нет заказов. Что бы исключить определенные группы, воспользуйтесь заметкой ORM UserTable в 1С-Битрикс.
Или перейдите к комментариям - там есть вариант для удаления из определенной группы пользователей.
  • CModule::IncludeModule('sale'); - подключили модуль sale
  • С помощью CUser::GetList получили список всех пользователей
  • Внутри цикла перебора пользователей использовали CSaleOrder::GetList, что бы получить список заказов пользователя (фильтр 'USER_ID' => $arUser['ID']).
  • Достачтоно знать хотя бы об одном заказе, что бы скрипт отрабатал быстрее, поэтому используем ограничение выборки nTopCount => '1'
  • Если у пользователя есть заказ, в переменную $userHasOrder передаем ID заказа (не обязательно, можно просто создать эту переменную $userHasOrder = true)
  • Если переменная $userHasOrder не существует, значит у пользователя нет заказов, удаляем пользователя методом CUser::Delete
  • Удаляем переменную $userHasOrder с помощью unset, что бы не передалась дальше по циклу перебора пользователей.

Таким образом, после отработки скрипта, на сайте осталось всего 5 000 пользователей вместо 360 000 мертвых душ.

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 6-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

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

Мобильное приложение

от 500 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 350 000 руб. от 1-го месяца

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфресурс

от 400 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 40 000 руб. от 2-х дней

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