Всем, кто сталкивался с модулем "Техподдержка" в режиме работы по e-mail, знакома проблема, когда автор обращения получает на e-mail ответ от техподдержки, содержащий прикрепленные файлы вида:
http://best-partner.ru/bitrix/tools/ticket_show_file.php?hash=bed5162c6c9e467d2e26bc16967894c7&action=download&lang=ru
|
Если человек заранее не авторизовался на сайте (а чаще всего так и бывает), то при переходе по такой ссылке он обнаружит печальную надпись - "Файл не найден".
Ниже приводится решение этой проблемы для случая, когда техподдержка ничего особо секретного в ответах на тикет не прикрепляет.
В init.php прописываем обработчик:
AddEventHandler("support", "OnBeforeSendMailToAuthor", array("SupportHandlers", "OnBeforeSendMailToSupportHandler")); |
Код обработчика примерно такой:
class SupportHandlers
{
function OnBeforeSendMailToSupportHandler($arFields) {
$send_email = true; // prevent sending mail if we have system message
// try to get linked files - if we have them, we change links in e-mail notification (with free access)
$obMess = CTicket::GetMessageList($a, $b, array("TICKET_ID" => $arFields['ID'], "TICKET_ID_EXACT_MATCH" => "Y", "IS_MESSAGE" => "Y"), $isFiltered, "N");
$arLastMess = array();
$last_mess_id = 0;
while($arMess = $obMess->Fetch()) {
if($arMess['ID']>$last_mess_id){
$last_mess_id = $arMess['ID'];
$arLastMess = $arMess;
}
}
if ($rsFiles = CTicket::GetFileList($v1="s_id", $v2="asc", array("MESSAGE_ID" => $arLastMess['ID']))) {
$arMessFiles = array();
while ($arFile = $rsFiles->Fetch()) {
$arMessFiles[] = $arFile;
}
if(count($arMessFiles)) {
$obUserGroups = CUser::GetUserGroupList($arFields['MODIFIED_USER_ID']);
$arUserGroups = array();
while($arUserGroup = $obUserGroups->Fetch()){
$arUserGroups[] = $arUserGroup['GROUP_ID'];
}
if(in_array(1,$arUserGroups) or in_array(4,$arUserGroups) or in_array(6,$arUserGroups)) { // if ticket message added by support team
$arMessFilesAttach = array();
foreach($arMessFiles as $arFile) {
$new_file_path = "/support_attachments/" . preg_replace('/_$/','',$arFile['FILE_NAME']);
copy($_SERVER["DOCUMENT_ROOT"].CFile::GetPath($arFile['ID']), $_SERVER["DOCUMENT_ROOT"].$new_file_path);
$arMessFilesAttach[] = "- http://www.best-partner.ru" . $new_file_path;
}
$arFields["FILES_LINKS"] = "Прикрепленные файлы:\n";
$arFields["FILES_LINKS"] .= implode("\n",$arMessFilesAttach); // change #FILES_LINKS# field in e-mail template
}
}
}
return $arFields;
}
} |
В корне сайта создаем папочку "support_attachments", туда будут дублироваться прикрепляемые саппортом файлы.