• На рассмотрении

    -1

    Запрет регистрации с зарубежными ящиками

    Андрей Осипов Обновлен 28 дней назад в категории CMS Админ. панель 0

    Здравствуйте.

    Внесите пожалуйста правки на стороне RS, чтобы можно было через опцию "Запрет email на зарубежных сервисах" блокировать возможность регистрации


    Как я понимаю это возможно сделать правкой register.inc.php

    Ниже пример доработки контроллера так, чтобы при отправке формы регистрация блокировалась, если e‑mail относится к списку публичных доменов. Мы:

    Добавили список запрещённых доменов.
    Перед сохранением пользователя проверяем домен e‑mail.
    Если домен запрещён — добавляем ошибку к полю e_mail и не выполняем сохранение/автологин.
    Сохраняем текущую логику (очистка openpass, рендер шаблона и т.д.).

    Код с правками (комментарии меткой // NEW):
    <?php
    /**
    * ReadyScript (http://readyscript.ru)
    *
    * @copyright Copyright (c) ReadyScript lab. (http://readyscript.ru)
    * @license http://readyscript.ru/licenseAgreement/
    */
    namespace Users\Controller\Front;

    use RS\Application\Auth as AppAuth;
    use RS\Controller\Front;
    use RS\Helper\Tools as HelperTools;
    use RS\Orm\Type;
    use RS\Site\Manager as SiteManager;
    use Users\Model\Orm\User;

    class Register extends Front
    {
    /** Поля, которые следует ожидать из POST */
    public $use_post_keys = ['is_company', 'company', 'company_inn', 'fio', 'name', 'login',
    'surname', 'midname', 'phone', 'e_mail', 'openpass', 'openpass_confirm', 'captcha', 'data', 'subscribe_on'];

    // NEW: список запрещённых публичных доменов
    private array $blocked_public_domains = [
    'gmail.com',
    'yahoo.com',
    'ymail.com',
    'rocketmail.com',
    'outlook.com',
    'hotmail.com',
    'live.com',
    'msn.com',
    'icloud.com',
    'me.com',
    'mac.com',
    'proton.me',
    'protonmail.com',
    'zoho.com',
    'aol.com',
    'gmx.com',
    'gmx.net',
    'email.com',
    'consultant.com',
    'fastmail.com',
    'tutanota.com',
    'tuta.com',
    'yahoo.co.jp',
    'naver.com',
    'daum.net',
    'outlook.de',
    'outlook.fr',
    'gmx.de',
    'web.de',
    'orange.fr',
    'laposte.net',
    'seznam.cz',
    'walla.co.il',
    'rediffmail.com',
    ];

    function actionIndex()
    {
    $this->app->breadcrumbs->addBreadCrumb(t('Регистрация'));

    $this->app->title->addSection(t('Регистрация'));
    $this->app->meta->addDescriptions(t('На этой странице вы можете зарегистрироваться'));

    $referer = $this->url->request('referer', TYPE_STRING, SiteManager::getSite()->getRootUrl());
    $referer = HelperTools::cleanOpenRedirect(urldecode($referer));

    $user = $this->getUserForRegistration();

    if ($this->isMyPost()) {
    $user['changepass'] = 1;

    // NEW: Валидация домена e-mail перед сохранением
    $email = (string) $user['e_mail'];
    if ($email !== '') {
    $email_domain = strtolower(preg_replace('/^.+@/u', '', $email));
    if ($email_domain === '' || $this->isBlockedPublicDomain($email_domain)) {
    // Добавляем ошибку к полю e_mail
    $user->addError(t('Регистрация с публичными e‑mail доменами запрещена. Укажите корпоративный адрес.'), 'e_mail');
    }
    } else {
    // Пусть встроенные чекеры обработают пустой e-mail, здесь ничего не делаем
    }

    // Продолжаем только если нет ошибок (включая нашу)
    if (!$user->hasError() && $user->save()) {
    //Если пользователь уже зарегистрирован
    AppAuth::setCurrentUser($user);
    if (AppAuth::onSuccessLogin($user)) {

    return $this->result
    ->addSection('closeDialog', true)
    ->addSection('reloadPage', true)
    ->setNoAjaxRedirect($referer);
    } else {
    $user->addError(AppAuth::getError());
    }
    }
    }

    //Не передаем пароль в открытом виде в браузер
    $user['openpass'] = $user['openpass_confirm'] = '';

    $this->view->assign([
    'conf_userfields' => $user->getUserFieldsManager(),
    'user' => $user,
    'referer' => urlencode($referer)
    ]);

    return $this->result->setTemplate('register.tpl');
    }

    /**
    * Возвращает объект пользователя с включенными необходимыми чекерами для валидации при регистрации
    *
    * @param User $user
    * @return User
    */
    private function getUserForRegistration()
    {
    $user = new User();
    $user->usePostKeys($this->use_post_keys);

    //Включаем капчу
    if (!$user['__phone']->isEnabledVerification()) {
    $user['__captcha']->setEnable(true);
    }

    $user->enableOpenPassConfirm();
    $user->enableRegistrationCheckers();

    return $user;
    }

    // NEW: проверка домена на запрет
    private function isBlockedPublicDomain(string $domain): bool
    {
    // нормализуем IDN (если в проекте есть утилита для IDN — заменить на неё)
    $normalized = strtolower($domain);

    // Прямая проверка
    if (in_array($normalized, $this->blocked_public_domains, true)) {
    return true;
    }

    // Дополнительно: блокируем субдомены запрещённых доменов (редкий случай, но на всякий)
    foreach ($this->blocked_public_domains as $blocked) {
    if ($normalized === $blocked) {
    return true;
    }
    if (str_ends_with($normalized, '.' . $blocked)) {
    return true;
    }
    }

    return false;
    }
    }
  • На рассмотрении

    0

    Мультиредактированиие возможность удалить выбраную спецкатегорию

    Денис Моисеев Обновлен 1 месяц назад в категории CMS Админ. панель 0

    При мультиредактировании товаров необходимо иметь возможность удалить товары из выбранной спецкатегории
    Сейчас возможно только отчистить все и назначить новые
    Пример необходимости: есть спецкатегории (со стикерами) для холодильников с функциями NoFrost, зона свежести . Которые были отфильтрованы по характеристикам
    И есть спецкатегория Скидка которая отфильтрована по цене.
    Необходимо пересмотреть (удалить и назначить по другим условиям) спецкат Скидка, не затрагивая при этом другие назначенные спецкатегории
  • На рассмотрении

    +2

    Добавление абсолютно всех характеристик к категории

    Поло Арт Обновлен 6 месяцев назад в категории CMS Админ. панель 2

    В данный момент реализовано "добавить характеристику" (одну характеристику) и "вставить несколько характеристик" (удерживаем CTRL и щёлкаем).
    Но, если нужно выгрузить абсолютно все характеристики всех товаров для некого стороннего сервиса, подходит только Расширенный экспорт, чтобы характеристики распределились по столбцам.
    И, если у нас много характеристик, пусть 100 - щёлкнуть с зажатым CTRL надо 100 раз!

    Поэтому предлагаю внести третий пункт "Добавить все характеристики". Чтобы один клик и они добавились на категорию.
  • На рассмотрении

    +1

    Стилизация ссылок в админке

    ОЛЬГА КОЛЧИНА Обновлен 9 месяцев назад в категории CMS Админ. панель 0

    Находясь в админке и провалившись в какой-нибудь раздел, не очень понятно в каком разделе меню находишься. Обычно для этого делается визуальное выделение активного раздела. Можно ещё хлебные крошки добавить
  • На рассмотрении

    0

    реклама

    Антон Захаров Обновлен 10 месяцев назад в категории CMS Админ. панель 0

    Как создать фид с остатками для Яндекс рекламы в формате yml?
  • На рассмотрении

    +1

    Дата и время последнего обновления товара при обмене с 1С

    Поло Арт Обновлен 1 год назад в категории CMS Админ. панель 0

    Здравствуйте!
    Для контроля корректности обмена неплохо бы добавить куда-нибудь дату/время последнего успешного обновления/добавления товара при обмене.
  • На рассмотрении

    +5

    В админке, в ЗАКАЗЕ, перенести в закреп чек-бар "Уведомить пользователя об изменениях в заказе" чтобы был всегда под рукой

    Юрий Власов Обновлен 1 год назад в категории CMS Админ. панель 0

    Сейчас галочка "Уведомить пользователя об изменениях в заказе" находится в самой середине страницы и каждый раз приходится скролить, искать ее, особенно с ложно если со смартфона. Логично было бы разместить этот чек-бар в закрепленных блоках либо вверху, либо внизу страницы, чтобы было всегда под рукой. Эта идея удачно реализованна в приложении ReadyScript.
  • На рассмотрении

    +6

    Сортировка категорий по наименованию

    Поло Арт Обновлен 1 год назад в категории CMS Админ. панель 0

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

    0

    Поиск по заказам в админке

    Сергей Никонович Обновлен 1 год назад в категории CMS Админ. панель 8

    Пожалуйста добавьте возможность искать заказы по ИНН и Наименованию компании (можно не точное соответствие, чтобы не путаться с кавычками ООО АО и прочим). Очень этого не хватает в базовом функционале
  • На рассмотрении

    +1

    Импорт и расширенный импорт. Новые товары не в корень

    Поло Арт Обновлен 2 года назад в категории CMS Админ. панель 0

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

    Неплохо бы добавить в параметры импорта и расширенного импорта опцию, а куда будут падать такие новые товары, такая доработка совсем не сложная. И полностью соответствует по логике параметру "Категория для товаров без категории?" в модуле обмена с 1С.

    Зачем это нужно? Допустим, каталог обновляется вручную, примерно раз в месяц-два по прайсам поставщиков. Конечно, логично такое использовать в связке с 1С, но далеко не у всех она есть, и не все хотят её использовать.
    И сейчас получается, что после таких нескольких импортов в корне каталога - каша, которую надо разбирать вручную, не перепутать поставщиков.
    Но, если бы такая опция, то перед каждым импортом меняем категорию, куда будут падать новые товары - и будет полный порядок, и менеджерам будет проще разбирать новые товары.