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

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

    0

    Бот-агент консультант по товарам

    Сергей Филоненко Обновлен 3 дня назад в категории Другое 0

    Было бы здорово, если можно было бы прикрутить к Редискрипт бота-агента с возможностью выгрузки в него всей товарки с сайта.
    Чтобы он мог консультировать клиентов, под их потребность и предлагал товар с сайта.
    Это можно было бы сделать используя n8n.
    Подобрать нейронку которая будет оптимальна по качеству и цене.

    Спрашивал у людей когторые уже настраивали подобное решение, говорят:
    "не повторяй мои ошибки я после запуска бота за три дня потерял 300 баксов )) Лучше если работаешь с n8n подключи через open router DeepSeek V3.1 или 3.2, он дешевый но по уму близок к гемини 2.5
    или вообще qwen 235b instruct"
  • На рассмотрении

    0

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

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

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

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

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

    +5

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

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

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

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

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



В работе

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