1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
email.php
См. документацию.
1<?php
2
4
6{
7 public static function OnGetFilterList()
8 {
9 return Array(
10 "ID" => "support",
11 "NAME" => GetMessage("SUP_ADD_MESSAGE_TO_TECHSUPPORT"),
12 "ACTION_INTERFACE" => $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/support/mail/action.php",
13 "PREPARE_RESULT_FUNC" => Array("CSupportEMail", "PrepareVars"),
14 "CONDITION_FUNC" => Array("CSupportEMail", "EMailMessageCheck"),
15 "ACTION_FUNC" => Array("CSupportEMail", "EMailMessageAdd")
16 );
17 }
18
19 public static function PrepareVars()
20 {
21 return
22 'W_SUPPORT_CATEGORY='.urlencode($_REQUEST["W_SUPPORT_CATEGORY"]).
23 '&W_SUPPORT_SITE_ID='.urlencode($_REQUEST["W_SUPPORT_SITE_ID"]).
24 '&W_SUPPORT_CRITICALITY='.urlencode($_REQUEST["W_SUPPORT_CRITICALITY"]).
25 '&W_SUPPORT_ADD_MESSAGE_AS_HIDDEN='.urlencode($_REQUEST["W_SUPPORT_ADD_MESSAGE_AS_HIDDEN"]).
26 '&W_SUPPORT_SUBJECT='.urlencode($_REQUEST["W_SUPPORT_SUBJECT"]).
27 '&W_SUPPORT_SEC='.urlencode($_REQUEST["W_SUPPORT_SEC"]).
28 '&W_SUPPORT_USER_FIND='.urlencode($_REQUEST["W_SUPPORT_USER_FIND"]);
29 }
30
31 public static function EMailMessageCheck($arFields, $ACTION_VARS)
32 {
33 $arActionVars = explode("&", $ACTION_VARS);
34 $countAr = count($arActionVars);
35 for($i=0; $i<$countAr; $i++)
36 {
37 $v = $arActionVars[$i];
38 if($pos = mb_strpos($v, "="))
39 ${mb_substr($v, 0, $pos)} = urldecode(mb_substr($v, $pos + 1));
40 }
41 return true;
42 }
43
44 public static function EMailMessageAdd($arMessageFields, $ACTION_VARS)
45 {
46 $arActionVars = explode("&", $ACTION_VARS);
47 $countAr = count($arActionVars);
48 for($i=0; $i<$countAr; $i++)
49 {
50 $v = $arActionVars[$i];
51 if($pos = mb_strpos($v, "="))
52 ${mb_substr($v, 0, $pos)} = urldecode(mb_substr($v, $pos + 1));
53 }
54
55 if(!CModule::IncludeModule("support"))
56 return false;
57
58 if ($W_SUPPORT_SITE_ID <> '')
59 {
60 $rs = CSite::GetByID($W_SUPPORT_SITE_ID);
61 if ($ar = $rs->Fetch()) $SITE_ID = $ar["LID"];
62 }
63 if ($SITE_ID == '')
64 {
65 $SITE_ID = $arMessageFields["LID"];
66 }
67
68 $sourceMail = COption::GetOptionString("support", "SOURCE_MAIL");
69 $dbr = CTicketDictionary::GetBySID($sourceMail, "SR", $SITE_ID);
70 if(!($ar = $dbr->Fetch()))
71 return false;
72
73 $TICKET_SOURCE_ID = $ar["ID"];
74 $ID = $arMessageFields["ID"];
75 $message_email = ($arMessageFields["FIELD_REPLY_TO"] <> '') ? $arMessageFields["FIELD_REPLY_TO"] : $arMessageFields["FIELD_FROM"];
76 $message_email_addr = mb_strtolower(CMailUtil::ExtractMailAddress($message_email));
77
78 $TID = 0;
79 $arSubjects = explode("\n", trim($W_SUPPORT_SUBJECT));
80 $countAr = count($arSubjects);
81 for($i=0; $i<$countAr; $i++)
82 {
83 $arSubjects[$i] = Trim($arSubjects[$i]);
84 if($arSubjects[$i] <> '')
85 {
86 if(preg_match("/".$arSubjects[$i]."/u", $arMessageFields["SUBJECT"], $regs))
87 {
88 $TID = intval($regs[1]);
89 break;
90 }
91 }
92 }
93
94 if($TID>0)
95 {
96 $db_ticket = CTicket::GetByID($TID, $SITE_ID, "N", "N", "N");
97 if($ar_ticket = $db_ticket->Fetch())
98 {
99 //check user email address limits
100 if($W_SUPPORT_SEC == "domain" || $W_SUPPORT_SEC == "email")
101 {
102 $bEMailOK = false;
103 if($TICKET_SOURCE_ID == $ar_ticket["SOURCE_ID"])
104 {
105 $ticket_email = mb_strtolower(CMailUtil::ExtractMailAddress($ar_ticket["OWNER_SID"]));
106 if($W_SUPPORT_SEC == "domain")
107 $ticket_email = mb_substr($ticket_email, mb_strpos($ticket_email, "@"));
108
109 if(mb_strpos($message_email_addr, $ticket_email) !== false)
110 $bEMailOK = true;
111 }
112
113 if(!$bEMailOK && $ar_ticket["OWNER_USER_ID"]>0)
114 {
115 $db_user = CUser::GetByID($ar_ticket["OWNER_USER_ID"]);
116 if($arUser = $db_user->Fetch())
117 {
118 $ticket_email = mb_strtolower(CMailUtil::ExtractMailAddress($arUser["EMAIL"]));
119 if($check_type == "domain")
120 $ticket_email = mb_substr($ticket_email, mb_strpos($ticket_email, "@"));
121
122 if(mb_strpos($message_email_addr, $ticket_email) !== false)
123 $bEMailOK = true;
124 }
125 }
126 if(!$bEMailOK) $TID = 0;
127 }
128 }
129 else $TID=0;
130 }
131
132 //when message subject is empty - generate it from message body
133 $title = trim($arMessageFields["SUBJECT"]);
134 if($title == '')
135 {
136 $title = trim($arMessageFields["BODY"]);
137 $title = preg_replace("/[\n\r\t ]+/su", " ", $title);
138 $title = mb_substr($title, 0, 50);
139 }
140
141 $arFieldsTicket = array(
142 "CLOSE" => "N",
143 "TITLE" => $title,
144 "MESSAGE" => $arMessageFields["BODY"],
145 "MESSAGE_AUTHOR_SID" => $message_email,
146 "MESSAGE_SOURCE_SID" => "email",
147 "MODIFIED_MODULE_NAME" => "mail",
148 "EXTERNAL_ID" => $ID,
149 "EXTERNAL_FIELD_1" => $arMessageFields["HEADER"]
150 );
151
152 if($W_SUPPORT_USER_FIND=="Y")
153 {
154 $res = CUser::GetList("LAST_LOGIN", "DESC", Array("ACTIVE" => "Y", "=EMAIL"=>$message_email_addr));
155 if(($arr = $res->Fetch()) && mb_strtolower(CMailUtil::ExtractMailAddress($arr["EMAIL"])) == $message_email_addr)
156 {
157 $AUTHOR_USER_ID = $arr["ID"];
158 }
159 }
160
161 // process attach files
162 $arFILES = array();
163 $rsAttach = CMailAttachment::GetList(Array(), Array("MESSAGE_ID"=>$ID));
164 while ($arAttach = $rsAttach->Fetch())
165 {
166 if ($arAttach['FILE_ID'])
167 $arAttach['FILE_DATA'] = CMailAttachment::getContents($arAttach);
168 // save from db to hdd
169 $filename = CTempFile::GetFileName(md5(uniqid("")).".tmp");
171 if(file_put_contents($filename, $arAttach["FILE_DATA"]) !== false)
172 {
173 $arFILES[] = array(
174 "name" => $arAttach["FILE_NAME"],
175 "type" => $arAttach["CONTENT_TYPE"],
176 "size" => filesize($filename),
177 "tmp_name" => $filename,
178 "MODULE_ID" => "support",
179 );
180 }
181 }
182 if (count($arFILES) > 0)
183 $arFieldsTicket["FILES"] = $arFILES;
184
185 $arFieldsTicket["CURRENT_USER_ID"] = null;
186 if(intval($AUTHOR_USER_ID) > 0)
187 {
188 $resU = CUser::GetByID(intval($AUTHOR_USER_ID));
189 if($arU = $resU->Fetch())
190 {
191 $arFieldsTicket["CURRENT_USER_ID"] = $arU["ID"];
192 }
193 }
194
195 if($TID>0) // extend exist message
196 {
197 $arFieldsTicket["MESSAGE_AUTHOR_USER_ID"] = $AUTHOR_USER_ID;
198
199 if ($W_SUPPORT_ADD_MESSAGE_AS_HIDDEN=="Y") $arFieldsTicket["HIDDEN"] = "Y";
200 if ($arMessageFields["SPAM"]=="Y") $arFieldsTicket["IS_SPAM"] = "Y";
201
202 $TID = CTicket::Set($arFieldsTicket, $MESSAGE_ID, $TID, "N");
203 }
204 else // new message
205 {
206 $arFieldsTicket["SITE_ID"] = $SITE_ID;
207 $arFieldsTicket["OWNER_USER_ID"] = $AUTHOR_USER_ID;
208 $arFieldsTicket["OWNER_SID"] = $message_email;
209 $arFieldsTicket["CREATED_MODULE_NAME"] = "mail";
210 $arFieldsTicket["SOURCE_SID"] = "email";
211
212 if ($arMessageFields["SPAM"]=="Y") $arFieldsTicket["IS_SPAM"] = "Y";
213 if ($W_SUPPORT_CATEGORY>0) $arFieldsTicket["CATEGORY_ID"] = $W_SUPPORT_CATEGORY;
214 if ($W_SUPPORT_CRITICALITY>0) $arFieldsTicket["CRITICALITY_ID"] = $W_SUPPORT_CRITICALITY;
215
216 if (trim($arFieldsTicket["TITLE"]) == '')
217 {
218 $arFieldsTicket["TITLE"] = " ";
219 }
220 if (trim($arFieldsTicket["MESSAGE"]) == '')
221 {
222 $arFieldsTicket["MESSAGE"] = " ";
223 }
224
225 $TID = CTicket::Set($arFieldsTicket, $MESSAGE_ID, "", "N");
226 }
227 }
228}
static ExtractMailAddress($email)
Определения mail.php:3118
static GetBySID($sid, $type, $siteID=SITE_ID)
Определения dictionary.php:207
static GetByID($id, $lang=LANG, $checkRights="Y", $get_user_name="Y", $get_extra_names="Y", $arParams=Array())
Определения support.php:1428
static getContents($attachment)
Определения mail.php:2783
static GetList($arOrder=Array(), $arFilter=Array())
Определения mail.php:2651
Определения email.php:6
static EMailMessageAdd($arMessageFields, $ACTION_VARS)
Определения email.php:44
static OnGetFilterList()
Определения email.php:7
static PrepareVars()
Определения email.php:19
static EMailMessageCheck($arFields, $ACTION_VARS)
Определения email.php:31
$arFields
Определения dblapprove.php:5
$filename
Определения file_edit.php:47
$arr
Определения file_new.php:624
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
if($ajaxMode) $ID
Определения get_user.php:27
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
CheckDirPath($path)
Определения tools.php:2707
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$ar
Определения options.php:199
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$title
Определения pdf.php:123
$rs
Определения action.php:82
$SITE_ID
Определения yandex_run.php:607