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

    0

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

    Андрей Осипов Обновлен 17 дней назад в категории 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

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

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

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

    +12

    Уведомления и доработка существующих шаблонов уведомлений

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

    1. После каких либо изменений в заказе, каждый 10 клиент звонит в офис и каждый раз задает один и тот же вопрос: Что значит мой заказ был изменен? Возможно уведомление нужно изменить на: Обновление информации в заказе №номер_заказа
    2. На разные способы доставки нужны разные шаблоны e-mail и смс уведомлений. Например нужны разные шаблоны, когда клиент только оформил заказ, нужны разные шаблоны когда заказ закрывается, и.т.д.
    3. Писал ранее об этом! Сделайте нормальный редактор шаблонов уведомлений, чтобы обычный пользователь мог редактировать шаблоны. (все что нужно, это добавить текстовый редактор + описание переменных)
  • На рассмотрении

    +2

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

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

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

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

    +1

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

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

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

    0

    реклама

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

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

    +2

    Поиск Поставщика в документе оприходование

    Сергей Никонович Обновлен 11 месяцев назад в категории CMS Админ. панель 2

    При выборе поставщика в документах Оприходование и Ожидание нет окна поиска,
    если поставщиков много то неудобно скроллить и искать их.
    Прошу добавить строку поиска.
  • На рассмотрении

    +1

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

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

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

    +5

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

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

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

    +6

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

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

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