Последние обновления

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

    0

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

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

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

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

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

    +5

    Добавление фильтра цены в виртуальной категории.

    Андрей Амелькевич Обновлен 2 месяца назад в категории CMS Общий функционал 1

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

    Кейс: новая категория Для муз.школы - Классические гитары до 400.
    На данный момент мы не можем создать такую виртуальную категорию.
  • На рассмотрении

    +12

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

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

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

Посмотреть все пожелания



В работе

Посмотреть все