Костыль обхода обязательного поля email
Добавлено: 15 июл 2013, 16:15
Итак, у меня была необходимость сделать поле email для клиентов необязательным. Причем тупо сделать его необязательным в файле config.pm не помогло, так как каскадом рушится слишком многое. Вообщем, заморочившись, предлагаю следующее:
Сначала делаем поле необязательным в файле Kernel/Config.pm:
Ищем строку
Заменяем на
Теперь отключим проверку почты в конфиге. Для этого идем сюда: otrs/index.pl?Action=AdminSysConfig;Subaction=Edit;SysConfigSubGroup=Core;SysConfigGroup=Framework (вначале подставьте свой адрес Вашего сервера).
У настройки CheckMXRecord ставим значение "нет".
Далее копируем файл Kernel/Modules/AdminCustomerUser.pm в Custom/Kernel/Modules/ и правим его:
Ищем блок
Он встречается дважды в файле. Комментируем его (выставляем символ "#" в начале каждой строки).
Далее копируем файл Kernel/System/CustomerUser/DB.pm в Custom/Kernel/System/CustomerUser/. Правим его:
Находим комментарий
Перед ним вставляем:
example.ru замените на собственный домен.
Таким образом, если Вы при создании клиента оставите поле Email пустым, или впишите пробел, или впишите '-', то пользователь создастся с email типа yyyymmddrr@example.ru, где yyyy - текущий год, mm - текущий месяц, dd - текущая дата, rr - рандомное число.
Готово!
Сначала делаем поле необязательным в файле Kernel/Config.pm:
Ищем строку
Код: Выделить всё
[ 'UserEmail', 'Email', 'email', 1, 1, 'var', '', 0 ],
Код: Выделить всё
[ 'UserEmail', 'Email', 'email', 1, 0, 'var', '', 0 ],
У настройки 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';
}
Таким образом, если Вы при создании клиента оставите поле Email пустым, или впишите пробел, или впишите '-', то пользователь создастся с email типа yyyymmddrr@example.ru, где yyyy - текущий год, mm - текущий месяц, dd - текущая дата, rr - рандомное число.
Готово!