Разработка на 1С-Битрикс Михаил Базаров
Блог-note

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

Просмотров: 4118
Задача: сайт проработал 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С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.

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

Включено в стоимость разработки

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

  • Лицензия и модули

    Лицензия на «1С-Битрикс» нужной редакции, дополнительные модули и видео-инструкции по работе с готовым проектом.

  • Скорость и SEO

    Оптимизация кода и сервера под быструю загрузку, базовая SEO-оптимизация и добавление сайта в поисковые системы.

Блог-note

Заметки по 1С-Битрикс