Страница 1 из 1

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

Добавлено: 15 июл 2013, 16:15
Siyet
Итак, у меня была необходимость сделать поле 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 - рандомное число.

Готово!

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

Добавлено: 11 окт 2013, 10:27
uplink25
Изначально в файле Kernel/Config.pm нет указанной стройки. Её добавить туда? Если да, то в каком месте?

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

Добавлено: 11 окт 2013, 14:55
alexus

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

Добавлено: 29 апр 2014, 12:59
mukexa
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)$