Костыль обхода обязательного поля email

Только для готовых решений! Пожалуйста, не используйте для вопросов и обсуждений!

Модератор: ykolesnikov

Ответить
Siyet
OTRS Новобранец
Сообщения: 62
Зарегистрирован: 26 июн 2013, 16:56

Костыль обхода обязательного поля email

Сообщение Siyet » 15 июл 2013, 16:15

Итак, у меня была необходимость сделать поле email для клиентов необязательным. Причем тупо сделать его необязательным в файле config.pm не помогло, так как каскадом рушится слишком многое. Вообщем, заморочившись, предлагаю следующее:

Сначала делаем поле необязательным в файле Kernel/Config.pm:
Ищем строку

Код: Выделить всё

[ 'UserEmail',      'Email',      'email',      1, 1, 'var', '', 0 ],
Заменяем на

Код: Выделить всё

[ 'UserEmail',      'Email',      'email',      1, 0, 'var', '', 0 ],
Теперь отключим проверку почты в конфиге. Для этого идем сюда: otrs/index.pl?Action=AdminSysConfig;Subaction=Edit;SysConfigSubGroup=Core;SysConfigGroup=Framework (вначале подставьте свой адрес Вашего сервера).
У настройки CheckMXRecord ставим значение "нет".

Далее копируем файл Kernel/Modules/AdminCustomerUser.pm в Custom/Kernel/Modules/ и правим его:
Ищем блок

Код: Выделить всё

        if (
            $GetParam{UserEmail}
            && !$CheckItemObject->CheckEmail( Address => $GetParam{UserEmail} )
            )
        {
            $Errors{UserEmailInvalid} = 'ServerError';
            $Errors{ErrorType}        = $CheckItemObject->CheckErrorType() . 'ServerErrorMsg';
        }
Он встречается дважды в файле. Комментируем его (выставляем символ "#" в начале каждой строки).
Далее копируем файл Kernel/System/CustomerUser/DB.pm в Custom/Kernel/System/CustomerUser/. Правим его:
Находим комментарий

Код: Выделить всё

# check email address if already exists
Перед ним вставляем:

Код: Выделить всё

    my ( $Sec, $Min, $Hour, $Day, $Month, $Year ) = $Self->{TimeObject}->SystemTime2Date(
        SystemTime => $Self->{TimeObject}->SystemTime(),
    );
    my $randNum = "$Year$Month$Day$Hour$Min" . int( rand(99) );
    if ( !$Param{UserEmail} || $Param{UserEmail} eq '' || $Param{UserEmail} eq ' ' || $Param{UserEmail} eq '-'){
        $Param{UserEmail} = $randNum . '@example.ru';
    }
example.ru замените на собственный домен.

Таким образом, если Вы при создании клиента оставите поле Email пустым, или впишите пробел, или впишите '-', то пользователь создастся с email типа yyyymmddrr@example.ru, где yyyy - текущий год, mm - текущий месяц, dd - текущая дата, rr - рандомное число.

Готово!
OTRS 3.2.8, Ubuntu 12.04, Apache, PostgreSQL

uplink25
OTRS Новобранец
Сообщения: 1
Зарегистрирован: 06 июн 2013, 20:19

Re: Костыль обхода обязательного поля email

Сообщение uplink25 » 11 окт 2013, 10:27

Изначально в файле Kernel/Config.pm нет указанной стройки. Её добавить туда? Если да, то в каком месте?
--
Используется OTRS 3.2.7 установлена на CentOS release 6.4

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Костыль обхода обязательного поля email

Сообщение alexus » 11 окт 2013, 14:55

С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: Костыль обхода обязательного поля email

Сообщение mukexa » 29 апр 2014, 12:59

Siyet писал(а): Далее копируем файл Kernel/Modules/AdminCustomerUser.pm в Custom/Kernel/Modules/ и правим его:
Ищем блок

Код: Выделить всё

        if (
            $GetParam{UserEmail}
            && !$CheckItemObject->CheckEmail( Address => $GetParam{UserEmail} )
            )
        {
            $Errors{UserEmailInvalid} = 'ServerError';
            $Errors{ErrorType}        = $CheckItemObject->CheckErrorType() . 'ServerErrorMsg';
        }
Он встречается дважды в файле. Комментируем его (выставляем символ "#" в начале каждой строки).
Можно обойти иначе
Framework -> Core: CheckEmailAddresses - Нет
или добавить домен в регулярное выражение игнорирующие некие адреса
Framework -> Core: CheckEmailValidAddress - ^(root@localhost|admin@localhost|.*@example.ru)$
OTRS 5s, Ubuntu 12.04

Ответить