Костыль обхода обязательного поля 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 Гуру
Сообщения: 4729
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 27 раз
Поблагодарили: 30 раз

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

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

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

Prod: OTRS ITSM 5.0.14 on CentOS 7 x64 Linux with MySQL 5.7

Radiant System OTRS Intergrator RU
Radiant System OTRS Intergrator EN
Хотите внедрить OTRS? Спросите меня как!
Следите за нашими новостями на Facebook

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

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

Ответить