LocalRedirect($APPLICATION->GetCurPage()."?lang=".LANG."&ID=".$arr["ID"]."#tb"); } LocalRedirect("/bitrix/admin/mail_message_admin.php?lang=".LANG); } if($ID<=0 && $_REQUEST["MSG_ID"]!='') $dbr = CMailMessage::GetList(array(), array("MSG_ID"=>$_REQUEST["MSG_ID"])); else $dbr = CMailMessage::GetByID($ID); if($dbr_arr = $dbr->ExtractFields("str_")): $dbr_arr["SPAM_RATING"] = CMailMessage::GetSpamRating($ID, $dbr_arr); if($dbr_arr["NEW_MESSAGE"]=="Y") CMailMessage::Update($ID, Array("NEW_MESSAGE"=>"N")); if($_REQUEST['show']=='original' && COption::GetOptionString("mail", "save_src", B_MAIL_SAVE_SRC)=="Y") { echo "<pre>".nl2br(htmlspecialcharsbx($dbr_arr["FULL_TEXT"]))."</pre>"; die(); } $APPLICATION->SetTitle(GetMessage("MAIL_MSG_VIEW_TITLE")); require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/prolog_admin_after.php"); $aMenu = array( array( "ICON" => "btn_list",
} else { $str .= '<div class="mail-message-unread-notspam adm-list-mail-icon" title="' . GetMessage("MAIL_MSG_ADM_NOTREAD_NOTSPAM") . '"></div>'; } } else { if ($f_NEW_MESSAGE != "Y") { $str .= '<div class="mail-message adm-list-mail-icon" title="' . GetMessage("MAIL_MSG_ADM_READ") . '"></div>'; } else { $str .= '<div class="mail-message-unread adm-list-mail-icon" title="' . GetMessage("MAIL_MSG_ADM_NOTREAD") . '"></div>'; } } $str .= '<a href="mail_message_view.php?lang=' . LANG . '&ID=' . $f_ID . '">' . (strlen($f_SUBJECT) > 0 ? $f_SUBJECT : GetMessage("MAIL_MSG_ADM_NOSUBJ")); $row->AddViewField("SUBJECT", $str); $str = $f_MAILBOX_NAME . ' [<a title="' . GetMessage("MAIL_MSG_ADM_CHANGE_MBOX") . '" href="mail_mailbox_edit.php?ID=' . $f_MAILBOX_ID . '&lang=' . LANG . '">' . $f_MAILBOX_ID . '</a>]'; $row->AddViewField("MAILBOX_NAME", $str); $row->AddViewField("MESSAGE_SIZE", CFile::FormatSize($f_MESSAGE_SIZE)); $arRes["SPAM_RATING"] = CMailMessage::GetSpamRating($f_ID, $arRes); $str = Round($arRes["SPAM_RATING"], 2) . "%"; $row->AddViewField("SPAM_RATING", $str); $arActions = array(); $arActions[] = array("DEFAULT" => "Y", "TEXT" => GetMessage("MAIL_MSG_ADM_VIEW"), "ACTION" => $lAdmin->ActionRedirect('mail_message_view.php?lang=' . LANG . '&ID=' . $f_ID)); if ($MOD_RIGHT == "W") { $arActions[] = array("SEPARATOR" => true); if ($f_SPAM != "Y") { $arActions[] = array("TEXT" => GetMessage("MAIL_MSG_ADM_PROC_ACT_SPAM"), "ACTION" => $lAdmin->ActionAjaxReload($APPLICATION->GetCurPage() . "?action=mark_as_spam&ID=" . $f_ID . "&lang=" . LANG . "&" . bitrix_sessid_get())); } if ($f_SPAM != "N") { $arActions[] = array("TEXT" => GetMessage("MAIL_MSG_ADM_PROC_ACT_NOTSPAM"), "ACTION" => $lAdmin->ActionAjaxReload($APPLICATION->GetCurPage() . "?action=mark_as_notspam&ID=" . $f_ID . "&lang=" . LANG . "&" . bitrix_sessid_get())); } if ($f_NEW_MESSAGE == "Y") { $arActions[] = array("TEXT" => GetMessage("MAIL_MSG_ADM_PROC_ACT_READ"), "ACTION" => $lAdmin->ActionAjaxReload($APPLICATION->GetCurPage() . "?action=mark_as_read&ID=" . $f_ID . "&lang=" . LANG . "&" . bitrix_sessid_get())); } else {
function Filter($arFields, $event, $FILTER_ID=false, $PARENT_FILTER_ID = false) { global $BX_MAIL_FILTER_CACHE, $DB; $PARENT_FILTER_ID = IntVal($PARENT_FILTER_ID); $MAILBOX_ID = IntVal($arFields["MAILBOX_ID"]); $MESSAGE_ID = IntVal($arFields["ID"]); $cache_param = $MAILBOX_ID."|".$PARENT_FILTER_ID."|".$event."|".$FILTER_ID; if(is_set($BX_MAIL_FILTER_CACHE, $cache_param)) { $arFilterCond = $BX_MAIL_FILTER_CACHE[$cache_param]["CONDITIONS"]; $arFilter = $BX_MAIL_FILTER_CACHE[$cache_param]["FILTER"]; } else { $strSqlAdd = ""; if($event=="R") $strSqlAdd .= " AND (WHEN_MAIL_RECEIVED='Y')"; else $strSqlAdd .= " AND (WHEN_MANUALLY_RUN='Y' ".(IntVal($FILTER_ID)>0?" AND f.ID='".IntVal($FILTER_ID)."'":"").")"; $strSql = "SELECT f.*, c.*, f.ID, c.ID as CONDITION_ID FROM b_mail_filter f LEFT JOIN b_mail_filter_cond c ON f.ID = c.FILTER_ID WHERE (f.MAILBOX_ID = ".$MAILBOX_ID." OR MAILBOX_ID IS NULL) AND f.ACTIVE = 'Y' AND (f.PARENT_FILTER_ID = " . ($PARENT_FILTER_ID > 0 ? $PARENT_FILTER_ID : "'' OR f.PARENT_FILTER_ID IS NULL") . ")" . $strSqlAdd." ORDER BY f.SORT, f.ID"; $dbr = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); $arFilter = Array(); $arFilterCond = Array(); $prev_ID = 0; $arr_prev = false; $arConds = Array(); while($arr = $dbr->Fetch()) { $arFilter[$arr["ID"]] = $arr; if($arr["CONDITION_ID"]>0) { if(!is_array($arFilterCond[$arr["ID"]])) $arFilterCond[$arr["ID"]] = Array(); $arFilterCond[$arr["ID"]][] = $arr; } } $BX_MAIL_FILTER_CACHE[$cache_param] = Array("FILTER"=>$arFilter, "CONDITIONS"=>$arFilterCond); } $arFieldsOriginal = $arFields; foreach($arFilter as $filter_id=>$arFilterParams) { $arFields = $arFieldsOriginal; $arFields["MAIL_FILTER"] = $arFilterParams; $arAllConditions = $arFilterCond[$filter_id]; $bCondOK = true; if(!is_array($arAllConditions)) $arAllConditions = Array(); foreach($arAllConditions as $k => $arCondition) { $bCondOK = false; $type = $arCondition["TYPE"]; switch($type) { case "ALL":case "RECIPIENT":case "SENDER": if($type=="ALL") $arFields[$type] = $arFields["HEADER"]."\r\n".$arFields["BODY"]; elseif($type=="RECIPIENT") $arFields[$type] = $arFields["FIELD_CC"]."\r\n".$arFields["FIELD_TO"]."\r\n".$arFields["FIELD_BCC"]; else $arFields[$type] = $arFields["FIELD_FROM"]."\r\n".$arFields["FIELD_REPLY_TO"]; case "HEADER": case "FIELD_FROM": case "FIELD_REPLY_TO": case "FIELD_TO": case "FIELD_CC": case "SUBJECT": case "BODY": $arStrings = explode("\n", $arCondition["STRINGS"]); if($arCondition["COMPARE_TYPE"]=="NOT_EQUAL" || $arCondition["COMPARE_TYPE"]=="NOT_CONTAIN") { $bCondOK = true; for($i = 0, $n = count($arStrings); $i < $n; $i++) { $str = strtoupper(Trim($arStrings[$i], "\r")); switch($arCondition["COMPARE_TYPE"]) { case "NOT_CONTAIN": if(strlen($str)>0 && strpos(strtoupper($arFields[$type]), $str)!==false) $bCondOK = false; break; case "NOT_EQUAL": if($str==strtoupper($arFields[$type])) $bCondOK = false; break; } if(!$bCondOK) break; } } else { for($i = 0, $n = count($arStrings); $i < $n; $i++) { $str = strtoupper(Trim($arStrings[$i], "\r")); switch($arCondition["COMPARE_TYPE"]) { case "CONTAIN": if(strlen($str)>0 && strpos(strtoupper($arFields[$type]), $str)!==false) $bCondOK = true; break; case "EQUAL": if($str==strtoupper($arFields[$type])) $bCondOK = true; break; case "REGEXP": if(preg_match("'".str_replace("'", "\'", $str)."'i", $arFields[$type])) $bCondOK = true; break; } if($bCondOK) break; } } break; case "ATTACHMENT": $db_att = CMailAttachment::GetList(Array(), Array("MESSAGE_ID"=>$arFields["ID"])); $arStrings = explode("\n", $arCondition["STRINGS"]); if($arCondition["COMPARE_TYPE"]=="NOT_EQUAL" || $arCondition["COMPARE_TYPE"]=="NOT_CONTAIN") { $bCondOK = true; while($arr_att = $db_att->Fetch()) { for($i = 0, $n = count($arStrings); $i < $n; $i++) { $str = strtoupper(Trim($arStrings[$i], "\r")); switch($arCondition["COMPARE_TYPE"]) { case "NOT_CONTAIN": if(strlen($str)>0 && strpos(strtoupper($arr_att["FILE_NAME"]), $str)!==false) $bCondOK = false; break; case "NOT_EQUAL": if($str==strtoupper($arr_att["FILE_NAME"])) $bCondOK = false; break; } } if(!$bCondOK) break; } } else { for($i = 0, $n = count($arStrings); $i < $n; $i++) { $str = strtoupper(Trim($arStrings[$i], "\r")); while($arr_att = $db_att->Fetch()) { switch($arCondition["COMPARE_TYPE"]) { case "CONTAIN": if(strlen($str)>0 && strpos(strtoupper($arr_att["FILE_NAME"]), $str)!==false) $bCondOK = true; break; case "EQUAL": if($str==strtoupper($arr_att["FILE_NAME"])) $bCondOK = true; break; case "REGEXP": if(preg_match("'".str_replace("'", "\'", $str)."'i", $arr_att["FILE_NAME"])) $bCondOK = true; break; } } if($bCondOK) break; } } break; } //switch if(!$bCondOK) break; } //foreach($arAllConditions as $k => $arCondition) if(!$bCondOK) continue; if($arFilterParams["SPAM_RATING"]>0) { $arFields["SPAM_RATING"] = CMailMessage::GetSpamRating($arFields["ID"], $arFields); if($arFilterParams["SPAM_RATING_TYPE"]==">" && $arFields["SPAM_RATING"]<=$arFilterParams["SPAM_RATING"]) continue; if($arFilterParams["SPAM_RATING_TYPE"]!=">" && $arFields["SPAM_RATING"]>=$arFilterParams["SPAM_RATING"]) continue; } if($arFilterParams["MESSAGE_SIZE"]>0) { $MESSAGE_SIZE = $arFields["MESSAGE_SIZE"]; if($arFilterParams["MESSAGE_SIZE_UNIT"]=="k") $MESSAGE_SIZE = IntVal($MESSAGE_SIZE/1024); elseif($arFilterParams["MESSAGE_SIZE_UNIT"]=="m") $MESSAGE_SIZE = IntVal($MESSAGE_SIZE/1024/1024); if($arFilterParams["MESSAGE_SIZE_TYPE"]==">" && $MESSAGE_SIZE<=$arFilterParams["MESSAGE_SIZE"]) continue; if($arFilterParams["MESSAGE_SIZE_TYPE"]!=">" && $MESSAGE_SIZE>=$arFilterParams["MESSAGE_SIZE"]) continue; } if(strlen($arFilterParams["PHP_CONDITION"])>0) if(!CMailFilter::DoPHPAction("php_cond_".$arFilterParams["ID"]."_", $arFilterParams["PHP_CONDITION"], $arFields)) continue; $arModFilter = false; if($arFilterParams["ACTION_TYPE"]!="") { $res = CMailFilter::GetFilterList($arFilterParams["ACTION_TYPE"]); if($arModFilter = $res->Fetch()) { if ( (is_array($arModFilter["CONDITION_FUNC"]) && count($arModFilter["CONDITION_FUNC"]) > 0) || strlen($arModFilter["CONDITION_FUNC"]) > 0 ) if(!call_user_func_array($arModFilter["CONDITION_FUNC"], Array(&$arFields, &$arFilterParams["ACTION_VARS"]))) continue; } } CMailLog::AddMessage( Array( "MAILBOX_ID"=>$MAILBOX_ID, "MESSAGE_ID"=>$MESSAGE_ID, "FILTER_ID"=>$filter_id, "STATUS_GOOD"=>"Y", "LOG_TYPE"=>"FILTER_OK", "MESSAGE"=>$event, ) ); if($arModFilter) if ( (is_array($arModFilter["ACTION_FUNC"]) && count($arModFilter["ACTION_FUNC"]) > 0) || strlen($arModFilter["ACTION_FUNC"]) > 0 ) call_user_func_array($arModFilter["ACTION_FUNC"], array(&$arFields, &$arFilterParams["ACTION_VARS"])); if(strlen(Trim($arFilterParams["ACTION_PHP"]))>0) { $res = CMailFilter::DoPHPAction("php_act_".$arFilterParams["ID"]."_", $arFilterParams["ACTION_PHP"], $arFields); CMailLog::AddMessage( Array( "MAILBOX_ID"=>$MAILBOX_ID, "MESSAGE_ID"=>$MESSAGE_ID, "FILTER_ID"=>$filter_id, "LOG_TYPE"=>"DO_PHP", "MESSAGE"=>"" ) ); } if($arFilterParams["ACTION_SPAM"]=="Y" && $arFields["SPAM"]!="Y") { if($arFields["SPAM"]=="N") CMailFilter::DeleteFromSpamBase($arFields["FOR_SPAM_TEST"], false); CMailFilter::MarkAsSpam($arFields["FOR_SPAM_TEST"], true); CMailMessage::Update($MESSAGE_ID, Array("SPAM"=>"Y")); CMailLog::AddMessage( Array( "MAILBOX_ID"=>$MAILBOX_ID, "MESSAGE_ID"=>$MESSAGE_ID, "FILTER_ID"=>$filter_id, "LOG_TYPE"=>"SPAM", "MESSAGE"=>"" ) ); $arFields["SPAM"] = "Y"; } elseif($arFilterParams["ACTION_SPAM"]=="N" && $arFields["SPAM"]!="N") { if($arFields["SPAM"]=="Y") CMailFilter::DeleteFromSpamBase($arFields["FOR_SPAM_TEST"], true); CMailFilter::MarkAsSpam($arFields["FOR_SPAM_TEST"], false); CMailMessage::Update($MESSAGE_ID, Array("SPAM"=>"N")); CMailLog::AddMessage( Array( "MAILBOX_ID"=>$MAILBOX_ID, "MESSAGE_ID"=>$MESSAGE_ID, "FILTER_ID"=>$filter_id, "LOG_TYPE"=>"NOTSPAM", "MESSAGE"=>"" ) ); $arFields["SPAM"] = "N"; } if($arFilterParams["ACTION_READ"]=="Y" && $arFields["NEW_MESSAGE"]=="Y") { $arFields["NEW_MESSAGE"] = "N"; CMailMessage::Update($MESSAGE_ID, Array("NEW_MESSAGE"=>"N")); } elseif($arFilterParams["ACTION_READ"]=="N" && $arFields["NEW_MESSAGE"]!="Y") { $arFields["NEW_MESSAGE"] = "Y"; CMailMessage::Update($MESSAGE_ID, Array("NEW_MESSAGE"=>"Y")); } if($arFilterParams["ACTION_DELETE_MESSAGE"]=="Y") { CMailLog::AddMessage( Array( "MAILBOX_ID"=>$MAILBOX_ID, "MESSAGE_ID"=>$MESSAGE_ID, "FILTER_ID"=>$filter_id, "STATUS_GOOD"=>"Y", "LOG_TYPE"=>"MESSAGE_DELETED", "MESSAGE"=>"" ) ); CMailMessage::Delete($MESSAGE_ID); } if($arFilterParams["ACTION_STOP_EXEC"]=="Y") { CMailLog::AddMessage( Array( "MAILBOX_ID"=>$MAILBOX_ID, "MESSAGE_ID"=>$MESSAGE_ID, "FILTER_ID"=>$filter_id, "STATUS_GOOD"=>"Y", "LOG_TYPE"=>"FILTER_STOP", "MESSAGE"=>"" ) ); return true; } } return true; }
} else { $str .= '<div class="mail-message-unread-notspam adm-list-mail-icon" title="' . GetMessage("MAIL_MSG_ADM_NOTREAD_NOTSPAM") . '"></div>'; } } else { if ($arRes['NEW_MESSAGE'] != "Y") { $str .= '<div class="mail-message adm-list-mail-icon" title="' . GetMessage("MAIL_MSG_ADM_READ") . '"></div>'; } else { $str .= '<div class="mail-message-unread adm-list-mail-icon" title="' . GetMessage("MAIL_MSG_ADM_NOTREAD") . '"></div>'; } } $str .= '<a href="mail_message_view.php?lang=' . LANG . '&ID=' . $arRes['ID'] . '">' . (strlen($arRes['SUBJECT']) > 0 ? $arRes['SUBJECT'] : GetMessage("MAIL_MSG_ADM_NOSUBJ")); $row->AddViewField("SUBJECT", $str); $str = $arRes['MAILBOX_NAME'] . ' [<a title="' . GetMessage("MAIL_MSG_ADM_CHANGE_MBOX") . '" href="mail_mailbox_edit.php?ID=' . $arRes['MAILBOX_ID'] . '&lang=' . LANG . '">' . $arRes['MAILBOX_ID'] . '</a>]'; $row->AddViewField("MAILBOX_NAME", $str); $row->AddViewField("MESSAGE_SIZE", CFile::FormatSize($arRes['MESSAGE_SIZE'])); $arRes["SPAM_RATING"] = CMailMessage::GetSpamRating($arRes['ID'], $arRes); $str = Round($arRes["SPAM_RATING"], 2) . "%"; $row->AddViewField("SPAM_RATING", $str); $arActions = array(); $arActions[] = array("DEFAULT" => "Y", "TEXT" => GetMessage("MAIL_MSG_ADM_VIEW"), "ACTION" => $lAdmin->ActionRedirect('mail_message_view.php?lang=' . LANG . '&ID=' . $arRes['ID'])); if ($MOD_RIGHT == "W") { $arActions[] = array("SEPARATOR" => true); if ($arRes['SPAM'] != "Y") { $arActions[] = array("TEXT" => GetMessage("MAIL_MSG_ADM_PROC_ACT_SPAM"), "ACTION" => $lAdmin->ActionAjaxReload($APPLICATION->GetCurPage() . "?action=mark_as_spam&ID=" . $arRes['ID'] . "&lang=" . LANG . "&" . bitrix_sessid_get())); } if ($arRes['SPAM'] != "N") { $arActions[] = array("TEXT" => GetMessage("MAIL_MSG_ADM_PROC_ACT_NOTSPAM"), "ACTION" => $lAdmin->ActionAjaxReload($APPLICATION->GetCurPage() . "?action=mark_as_notspam&ID=" . $arRes['ID'] . "&lang=" . LANG . "&" . bitrix_sessid_get())); } if ($arRes['NEW_MESSAGE'] == "Y") { $arActions[] = array("TEXT" => GetMessage("MAIL_MSG_ADM_PROC_ACT_READ"), "ACTION" => $lAdmin->ActionAjaxReload($APPLICATION->GetCurPage() . "?action=mark_as_read&ID=" . $arRes['ID'] . "&lang=" . LANG . "&" . bitrix_sessid_get())); } else {