%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/support/classes/general/ |
Current File : /home/bitrix/www/bitrix/modules/support/classes/general/email.php |
<? IncludeModuleLangFile(__FILE__); class CSupportEMail { function OnGetFilterList() { return Array( "ID" => "support", "NAME" => GetMessage("SUP_ADD_MESSAGE_TO_TECHSUPPORT"), "ACTION_INTERFACE" => $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/support/mail/action.php", "PREPARE_RESULT_FUNC" => Array("CSupportEMail", "PrepareVars"), "CONDITION_FUNC" => Array("CSupportEMail", "EMailMessageCheck"), "ACTION_FUNC" => Array("CSupportEMail", "EMailMessageAdd") ); } function PrepareVars() { return 'W_SUPPORT_CATEGORY='.urlencode($_REQUEST["W_SUPPORT_CATEGORY"]). '&W_SUPPORT_SITE_ID='.urlencode($_REQUEST["W_SUPPORT_SITE_ID"]). '&W_SUPPORT_CRITICALITY='.urlencode($_REQUEST["W_SUPPORT_CRITICALITY"]). '&W_SUPPORT_ADD_MESSAGE_AS_HIDDEN='.urlencode($_REQUEST["W_SUPPORT_ADD_MESSAGE_AS_HIDDEN"]). '&W_SUPPORT_SUBJECT='.urlencode($_REQUEST["W_SUPPORT_SUBJECT"]). '&W_SUPPORT_SEC='.urlencode($_REQUEST["W_SUPPORT_SEC"]). '&W_SUPPORT_USER_FIND='.urlencode($_REQUEST["W_SUPPORT_USER_FIND"]); } function EMailMessageCheck($arFields, $ACTION_VARS) { $arActionVars = explode("&", $ACTION_VARS); $countAr = count($arActionVars); for($i=0; $i<$countAr; $i++) { $v = $arActionVars[$i]; if($pos = strpos($v, "=")) ${substr($v, 0, $pos)} = urldecode(substr($v, $pos+1)); } return true; } function EMailMessageAdd($arMessageFields, $ACTION_VARS) { $arActionVars = explode("&", $ACTION_VARS); $countAr = count($arActionVars); for($i=0; $i<$countAr; $i++) { $v = $arActionVars[$i]; if($pos = strpos($v, "=")) ${substr($v, 0, $pos)} = urldecode(substr($v, $pos+1)); } if(!CModule::IncludeModule("support")) return false; if (strlen($W_SUPPORT_SITE_ID)>0) { $rs = CSite::GetByID($W_SUPPORT_SITE_ID); if ($ar = $rs->Fetch()) $SITE_ID = $ar["LID"]; } if (strlen($SITE_ID)<=0) { $SITE_ID = $arMessageFields["LID"]; } $sourceMail = COption::GetOptionString("support", "SOURCE_MAIL"); $dbr = CTicketDictionary::GetBySID($sourceMail, "SR", $SITE_ID); if(!($ar = $dbr->Fetch())) return false; $TICKET_SOURCE_ID = $ar["ID"]; $ID = $arMessageFields["ID"]; $message_email = (strlen($arMessageFields["FIELD_REPLY_TO"])>0) ? $arMessageFields["FIELD_REPLY_TO"] : $arMessageFields["FIELD_FROM"]; $message_email_addr = strtolower(CMailUtil::ExtractMailAddress($message_email)); $TID = 0; $arSubjects = explode("\n", trim($W_SUPPORT_SUBJECT)); $countAr = count($arSubjects); for($i=0; $i<$countAr; $i++) { $arSubjects[$i] = Trim($arSubjects[$i]); if(strlen($arSubjects[$i])>0) { if(preg_match("/".$arSubjects[$i]."/".BX_UTF_PCRE_MODIFIER, $arMessageFields["SUBJECT"], $regs)) { $TID = IntVal($regs[1]); break; } } } if($TID>0) { $db_ticket = CTicket::GetByID($TID, $SITE_ID, "N", "N", "N"); if($ar_ticket = $db_ticket->Fetch()) { //check user email address limits if($W_SUPPORT_SEC == "domain" || $W_SUPPORT_SEC == "email") { $bEMailOK = false; if($TICKET_SOURCE_ID == $ar_ticket["SOURCE_ID"]) { $ticket_email = strtolower(CMailUtil::ExtractMailAddress($ar_ticket["OWNER_SID"])); if($W_SUPPORT_SEC == "domain") $ticket_email = substr($ticket_email, strpos($ticket_email, "@")); if(strpos($message_email_addr, $ticket_email)!==false) $bEMailOK = true; } if(!$bEMailOK && $ar_ticket["OWNER_USER_ID"]>0) { $db_user = CUser::GetByID($ar_ticket["OWNER_USER_ID"]); if($arUser = $db_user->Fetch()) { $ticket_email = strtolower(CMailUtil::ExtractMailAddress($arUser["EMAIL"])); if($check_type == "domain") $ticket_email = substr($ticket_email, strpos($ticket_email, "@")); if(strpos($message_email_addr, $ticket_email)!==false) $bEMailOK = true; } } if(!$bEMailOK) $TID = 0; } } else $TID=0; } //when message subject is empty - generate it from message body $title = trim($arMessageFields["SUBJECT"]); if(strlen($title)<=0) { $title = trim($arMessageFields["BODY"]); $title = preg_replace("/[\n\r\t ]+/s".BX_UTF_PCRE_MODIFIER, " ", $title); $title = substr($title, 0, 50); } $arFieldsTicket = array( "CLOSE" => "N", "TITLE" => $title, "MESSAGE" => $arMessageFields["BODY"], "MESSAGE_AUTHOR_SID" => $message_email, "MESSAGE_SOURCE_SID" => "email", "MODIFIED_MODULE_NAME" => "mail", "EXTERNAL_ID" => $ID, "EXTERNAL_FIELD_1" => $arMessageFields["HEADER"] ); if($W_SUPPORT_USER_FIND=="Y") { $o = "LAST_LOGIN"; $b = "DESC"; $res = CUser::GetList($o, $b, Array("ACTIVE" => "Y", "=EMAIL"=>$message_email_addr)); if(($arr = $res->Fetch()) && strtolower(CMailUtil::ExtractMailAddress($arr["EMAIL"]))==$message_email_addr) { $AUTHOR_USER_ID = $arr["ID"]; } } // process attach files $arFILES = array(); $rsAttach = CMailAttachment::GetList(Array(), Array("MESSAGE_ID"=>$ID)); while ($arAttach = $rsAttach->Fetch()) { if ($arAttach['FILE_ID']) $arAttach['FILE_DATA'] = CMailAttachment::getContents($arAttach); // save from db to hdd $filename = CTempFile::GetFileName(md5(uniqid("")).".tmp"); CheckDirPath($filename); if(file_put_contents($filename, $arAttach["FILE_DATA"]) !== false) { $arFILES[] = array( "name" => $arAttach["FILE_NAME"], "type" => $arAttach["CONTENT_TYPE"], "size" => filesize($filename), "tmp_name" => $filename, "MODULE_ID" => "support", ); } } if (count($arFILES) > 0) $arFieldsTicket["FILES"] = $arFILES; $arFieldsTicket["CURRENT_USER_ID"] = null; if(intval($AUTHOR_USER_ID) > 0) { $resU = CUser::GetByID(intval($AUTHOR_USER_ID)); if($arU = $resU->Fetch()) { $arFieldsTicket["CURRENT_USER_ID"] = $arU["ID"]; } } if($TID>0) // extend exist message { $arFieldsTicket["MESSAGE_AUTHOR_USER_ID"] = $AUTHOR_USER_ID; if ($W_SUPPORT_ADD_MESSAGE_AS_HIDDEN=="Y") $arFieldsTicket["HIDDEN"] = "Y"; if ($arMessageFields["SPAM"]=="Y") $arFieldsTicket["IS_SPAM"] = "Y"; $TID = CTicket::Set($arFieldsTicket, $MESSAGE_ID, $TID, "N"); } else // new message { $arFieldsTicket["SITE_ID"] = $SITE_ID; $arFieldsTicket["OWNER_USER_ID"] = $AUTHOR_USER_ID; $arFieldsTicket["OWNER_SID"] = $message_email; $arFieldsTicket["CREATED_MODULE_NAME"] = "mail"; $arFieldsTicket["SOURCE_SID"] = "email"; if ($arMessageFields["SPAM"]=="Y") $arFieldsTicket["IS_SPAM"] = "Y"; if ($W_SUPPORT_CATEGORY>0) $arFieldsTicket["CATEGORY_ID"] = $W_SUPPORT_CATEGORY; if ($W_SUPPORT_CRITICALITY>0) $arFieldsTicket["CRITICALITY_ID"] = $W_SUPPORT_CRITICALITY; if (strlen(trim($arFieldsTicket["TITLE"]))<=0) { $arFieldsTicket["TITLE"] = " "; } if (strlen(trim($arFieldsTicket["MESSAGE"]))<=0) { $arFieldsTicket["MESSAGE"] = " "; } $TID = CTicket::Set($arFieldsTicket, $MESSAGE_ID, "", "N"); } } } ?>