1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
mail.php
См. документацию.
1<?php
2
3/*
4При добавлении сообщения в форум мы должны отправить всем подписанным пользователям рабочей группы сообщение следующего шаблона:
5Reply-To: email@рабочей.группы
6From: "Автор сообщения" <его@адрес> или "Автор сообщения" <адрес@форума> - в зависимости от настроек
7To: "Участник группы" <его@адрес>
8In-Reply-To: <ИдСообщенияТопика>
9?References: <ИдСообщенияТопика>
10Subject: [RE:] Топик сообщения
11
12Текст сообщения
13
14--
15Ссылка на сообщение на КП
16
17При получении сообщения в SMTP или забрали по POP3 запускаем правило, которое ищет по рабочим группам в какую пришло сообщение по адресу:
18Проверяем и находим от кого
19(?)Смотрим на авторизацию?
20Находим тему по In-Reply-To, по Subject
21Тема новая:
22 - Добавляем топик с названием из темы, автором из from, текстом из тела
23 - Храним: идентификатор сообщения в XML_ID, ?ссылку на оригинал сообщение,
24Тема найдена:
25 - Добавляем сообщение в тему, автори из from, дата пропарсенный текст из тела
26 - Храним: идентификатор в XML_ID, (?)ссылку на оригинал сообщения, (?)на какие сообщения ответ
27*/
28
29IncludeModuleLangFile(__FILE__);
30
32{
33 public static function GetForumFilters($FID, $SOCNET_GROUP_ID = false)
34 {
35 global $DB;
36 $strSql = 'SELECT *
37 FROM b_forum_email
38 WHERE FORUM_ID = '.intval($FID).($SOCNET_GROUP_ID>0?' AND SOCNET_GROUP_ID = '.intval($SOCNET_GROUP_ID):'').'
39 ORDER BY EMAIL_GROUP '.($DB->type == 'ORACLE'?' NULLS LAST':'');
40
41 $dbr = $DB->Query($strSql);
42 return $dbr->Fetch();
43 }
44
45 public static function GetMailFilters($MAIL_FILTER_ID)
46 {
47 global $DB;
48 $strSql = 'SELECT fe.*, f.MODERATION
49 FROM b_forum_email fe INNER JOIN b_forum f ON fe.FORUM_ID=f.ID
50 WHERE fe.MAIL_FILTER_ID = '.intval($MAIL_FILTER_ID);
51 $dbr = $DB->Query($strSql);
52 return $dbr;
53 }
54
55 public static function Set($arFields)
56 {
57 global $DB;
58
59 if(is_set($arFields, "USE_EMAIL") && $arFields["USE_EMAIL"]!="Y")
60 $arFields["USE_EMAIL"] = "N";
61
62 if(is_set($arFields, "USE_SUBJECT") && $arFields["USE_SUBJECT"]!="Y")
63 $arFields["USE_SUBJECT"] = "N";
64
65 if(is_set($arFields, "NOT_MEMBER_POST") && $arFields["NOT_MEMBER_POST"]!="Y")
66 $arFields["NOT_MEMBER_POST"] = "N";
67
68 $filter = CForumEMail::GetForumFilters($arFields["FORUM_ID"], $arFields["SOCNET_GROUP_ID"]);
69 if($filter)
70 {
71 $ID = $filter["ID"];
72 if(is_set($arFields["EMAIL_FORUM_ACTIVE"]) && $arFields["EMAIL_FORUM_ACTIVE"]!="Y")
73 {
74 $strSql = "DELETE FROM b_forum_email WHERE ID=".$ID;
75 $DB->Query($strSql);
76 }
77
78 if(is_set($arFields["MAIL_FILTER_ID"]) && intval($arFields["MAIL_FILTER_ID"])<=0)
79 {
80 $GLOBALS["APPLICATION"]->ThrowException("Empty field MAIL_FILTER_ID", "ERROR");
81 return false;
82 }
83
84 if(is_set($arFields["EMAIL"]) && $arFields["EMAIL"]=='')
85 {
86 $GLOBALS["APPLICATION"]->ThrowException("Empty field EMAIL", "ERROR");
87 return false;
88 }
89
90 $strUpdate = $DB->PrepareUpdate("b_forum_email", $arFields);
91
92 $strSql =
93 "UPDATE b_forum_email SET ".
94 $strUpdate." ".
95 "WHERE ID=".$ID;
96
97 $DB->Query($strSql);
98 }
99 elseif(!is_set($arFields["EMAIL_FORUM_ACTIVE"]) || $arFields["EMAIL_FORUM_ACTIVE"]=="Y")
100 {
101 if(intval($arFields["MAIL_FILTER_ID"])<=0)
102 {
103 $GLOBALS["APPLICATION"]->ThrowException("Empty field MAIL_FILTER_ID", "ERROR");
104 return false;
105 }
106
107 if($arFields["EMAIL"]=='')
108 {
109 $GLOBALS["APPLICATION"]->ThrowException("Empty field EMAIL", "ERROR");
110 return false;
111 }
112
113 $ID = $DB->Add("b_forum_email", $arFields);
114 }
115
116 return $ID;
117 }
118
119 public static function OnGetSocNetFilterList()
120 {
121 return Array(
122 "ID" => "forumsocnet",
123 "NAME" => GetMessage("FORUM_MAIL_NAME"),
124 "ACTION_INTERFACE" => $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/forum/mail/action.php",
125// "PREPARE_RESULT_FUNC" => Array("CForumEMail", "SocnetPrepareVars"),
126 "CONDITION_FUNC" => Array("CForumEMail", "SocnetEMailMessageCheck"),
127 "ACTION_FUNC" => Array("CForumEMail", "SocnetEMailMessageAdd")
128 );
129 }
130
131 public static function SocnetPrepareVars()
132 {
133 return '';
134 }
135
136 public static function SocnetLogMessageAdd($arParams, $arMessageFields, $action = "")
137 {
138 static $parser = null;
139 if ($parser == null)
140 $parser = new forumTextParser();
141 $arAllow = array(
142 "HTML" => "N",
143 "ANCHOR" => "N",
144 "BIU" => "N",
145 "IMG" => "N",
146 "LIST" => "N",
147 "QUOTE" => "N",
148 "CODE" => "N",
149 "FONT" => "N",
150 "SMILES" => "N",
151 "UPLOAD" => "Y",
152 "NL2BR" => "N",
153 "TABLE" => "N",
154 "ALIGN" => "N"
155 );
156// $arParams["LOG_ID"], $arParams["LANG"] ....
157
158 $arFieldsForSocnet = array(
159 "ENTITY_TYPE" => SONET_ENTITY_GROUP,
160 "ENTITY_ID" => $arParams["ENTITY_ID"],
161 "EVENT_ID" => "forum",
162 "=LOG_DATE" => (!!$arMessageFields["DATE_CREATE"] ? $arMessageFields["DATE_CREATE"] : $GLOBALS["DB"]->CurrentTimeFunction()),
163 "LOG_UPDATE" => (!!$arMessageFields["POST_DATE"] ? $arMessageFields["POST_DATE"] : null),
164 "TITLE_TEMPLATE" => str_replace(
165 "#AUTHOR_NAME#",
166 $arMessageFields["AUTHOR_NAME"],
167 CForumEmail::GetLangMessage("FORUM_MAIL_SOCNET_TITLE_TOPIC", $arParams["LANG"])),
168 "TITLE" => $arMessageFields["TITLE"],
169 "MESSAGE" => $parser->convert($arMessageFields["POST_MESSAGE"], $arAllow),
170 "TEXT_MESSAGE" => $parser->convert4mail($arMessageFields["POST_MESSAGE"]),
171 "URL" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE"],
172 array(
173 "UID" => $arMessageFields["AUTHOR_ID"],
174 "FID" => $arMessageFields["FORUM_ID"],
175 "TID" => $arMessageFields["TOPIC_ID"],
176 "TITLE_SEO" => $arMessageFields["TOPIC_ID"],
177 "MID" => $arMessageFields["ID"]
178 )
179 ),
180 "PARAMS" => serialize(
181 array(
182 "PATH_TO_MESSAGE" => CComponentEngine::MakePathFromTemplate(
183 $arParams["URL_TEMPLATES_MESSAGE"], array("TID" => $arMessageFields["TOPIC_ID"])))),
184 "MODULE_ID" => false,
185 "CALLBACK_FUNC" => false,
186 "SOURCE_ID" => $arMessageFields["ID"],
187 "RATING_TYPE_ID" => "FORUM_TOPIC",
188 "RATING_ENTITY_ID" => $arMessageFields["TOPIC_ID"]
189 );
190
191 if ($arMessageFields["AUTHOR_ID"] > 0)
192 $arFieldsForSocnet["USER_ID"] = $arMessageFields["AUTHOR_ID"];
193
194 $db_res = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $arMessageFields["ID"]));
195 $ufFileID = array();
196 while ($res = $db_res->Fetch())
197 $ufFileID[] = $res["FILE_ID"];
198 $ufDocID = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $arMessageFields["ID"], LANGUAGE_ID);
199
200 $logID = $arParams["LOG_ID"];
201 if ($logID <= 0)
202 {
203 if (!empty($ufFileID))
204 $arFieldsForSocnet["UF_SONET_LOG_FILE"] = $ufFileID;
205 if ($ufDocID)
206 $arFieldsForSocnet["UF_SONET_LOG_DOC"] = $ufDocID;
207
208 $logID = CSocNetLog::Add($arFieldsForSocnet, false);
209
210 if (intval($logID) > 0)
211 {
212 CSocNetLog::Update($logID, array("TMP_ID" => $logID));
213 CSocNetLogRights::SetForSonet($logID, $arFieldsForSocnet["ENTITY_TYPE"], $arFieldsForSocnet["ENTITY_ID"], "forum", "view", true);
214 if ($action == "SEND_EVENT")
215 CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT", $logID);
216 }
217 }
218 if ($logID > 0 && $action == "ADD_COMMENT")
219 {
220 if (!empty($ufFileID))
221 $arFieldsForSocnet["UF_SONET_COM_FILE"] = $ufFileID;
222 if ($ufDocID)
223 $arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID;
224
225 $arFieldsForSocnet["LOG_ID"] = $logID;
226 $arFieldsForSocnet["RATING_TYPE_ID"] = "FORUM_POST";
227 $arFieldsForSocnet["RATING_ENTITY_ID"] = $arMessageFields["ID"];
228
229 $commentID = CSocNetLogComments::Add($arFieldsForSocnet);
230 CSocNetLog::CounterIncrement($commentID, false, false, "LC");
231 return $commentID;
232 }
233 return $logID;
234 }
235
236 public static function SocnetEMailMessageCheck(&$arMessageFields, $ACTION_VARS)
237 {
238 $arEmails = CMailUtil::ExtractAllMailAddresses($arMessageFields["FIELD_TO"].",".$arMessageFields["FIELD_CC"].",".$arMessageFields["FIELD_BCC"]);
239 $dbMbx = CMailBox::GetById($arMessageFields["MAIL_FILTER"]["MAILBOX_ID"]);
240 $arMbx = $dbMbx->Fetch();
241 $dbRes = CForumEMail::GetMailFilters($arMessageFields["MAIL_FILTER"]["ID"]);
242 while($arRes = $dbRes->Fetch())
243 {
244 if($arRes["EMAIL_FORUM_ACTIVE"]=="Y")
245 {
246 if($arMbx["SERVER_TYPE"]=="smtp" && !in_array(CMailUtil::ExtractMailAddress($arRes["EMAIL"]), $arEmails))
247 continue;
248
249 if($arRes["EMAIL_GROUP"]!='' && !in_array(CMailUtil::ExtractMailAddress($arRes["EMAIL_GROUP"]), $arEmails))
250 continue;
251
252 if($arRes["SUBJECT_SUF"]!='' && mb_strpos($arMessageFields["SUBJECT"], $arRes["SUBJECT_SUF"]) === false)
253 continue;
254
255 $arMessageFields["FORUM_EMAIL_FILTER"] = $arRes;
256 return true;
257 }
258 }
259
260 return false;
261 }
262
263 public static function SocnetEMailMessageAdd($arMessageFields, $ACTION_VARS)
264 {
265 if(!is_array($arMessageFields["FORUM_EMAIL_FILTER"]))
266 return false;
267
268 if(!CModule::IncludeModule("socialnetwork"))
269 return false;
270
271 $arParams = $arMessageFields["FORUM_EMAIL_FILTER"];
272
273 if(!CSocNetGroup::GetByID($arParams["SOCNET_GROUP_ID"]))
274 return false;
275
276 if(!CSocNetFeatures::IsActiveFeature(SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum"))
277 return false;
278
279 // Найдем кто отправитель
280 $message_email = ($arMessageFields["FIELD_REPLY_TO"] <> '') ? $arMessageFields["FIELD_REPLY_TO"] : $arMessageFields["FIELD_FROM"];
281 $message_email_addr = mb_strtolower(CMailUtil::ExtractMailAddress($message_email));
282
283 $res = CUser::GetList("LAST_LOGIN", "DESC", Array("ACTIVE" => "Y", "EMAIL"=>$message_email_addr));
284 if(($arUser = $res->Fetch()) && mb_strtolower(CMailUtil::ExtractMailAddress($arUser["EMAIL"])) == $message_email_addr)
285 $AUTHOR_USER_ID = $arUser["ID"];
286 elseif($arParams["NOT_MEMBER_POST"]=="Y")
287 {
288 $AUTHOR_USER_ID = false;
289 }
290 else
291 {
293 Array(
294 "MAILBOX_ID"=>$arMessageFields["MAILBOX_ID"],
295 "MESSAGE_ID"=>$arMessageFields["ID"],
296 "FILTER_ID"=>$arParams["MAIL_FILTER_ID"],
297 "LOG_TYPE"=>"FILTER_ERROR",
298 "MESSAGE"=>GetMessage("FORUM_MAIL_ERROR1").": ".$message_email_addr
299 )
300 );
301
302 return false;
303 }
304
305 if($arParams["NOT_MEMBER_POST"]!="Y")
306 {
307 // Проверим права доступа
308 if(CSocNetFeaturesPerms::CanPerformOperation($AUTHOR_USER_ID, SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum", "full"))
309 $PERMISSION = "Y";
310 elseif(CSocNetFeaturesPerms::CanPerformOperation($AUTHOR_USER_ID, SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum", "newtopic"))
311 $PERMISSION = "M";
312 elseif(CSocNetFeaturesPerms::CanPerformOperation($AUTHOR_USER_ID, SONET_ENTITY_GROUP, $arParams["SOCNET_GROUP_ID"], "forum", "answer"))
313 $PERMISSION = "I";
314 else
315 {
317 Array(
318 "MAILBOX_ID"=>$arMessageFields["MAILBOX_ID"],
319 "MESSAGE_ID"=>$arMessageFields["ID"],
320 "FILTER_ID"=>$arParams["MAIL_FILTER_ID"],
321 "LOG_TYPE"=>"FILTER_ERROR",
322 "MESSAGE"=>GetMessage("FORUM_MAIL_ERROR2")." ".$arUser["LOGIN"]." [".$AUTHOR_USER_ID."] (".$message_email_addr.")"
323 )
324 );
325
326 return false;
327 }
328 }
329
330 $body = $arMessageFields["BODY"];
331 //$body = preg_replace("/(\r\n)+/", "\r\n", $body);
332 $p = mb_strpos($body, "\r\nFrom:");
333 if($p>0)
334 {
335 $body = mb_substr($body, 0, $p)."\r\n[CUT]".mb_substr($body, $p)."[/CUT]";
336 }
337
338
339 $subject = $arMessageFields["SUBJECT"];
340 if (!isset($subject))
341 {
342 $subject = '';
343 }
344 // обрежем все RE и FW
345 $subject = trim(preg_replace('#^\s*((RE[0-9\[\]]*:\s*)|(FW:\s*))+(.*)$#i', '\4', $subject));
346 if($subject=='')
347 $subject = GetMessage("FORUM_MAIL_EMPTY_TOPIC_TITLE")." ".rand();
348
349 // Найдем какая тема
350 $arFields = Array();
351 $FORUM_ID = intval($arParams["FORUM_ID"]);
352 $SOCNET_GROUP_ID = intval($arParams["SOCNET_GROUP_ID"]);
353 $TOPIC_ID = 0;
354 global $DB;
355 if($arMessageFields["IN_REPLY_TO"]!='')
356 {
357 $dbTopic = $DB->Query("SELECT FT.ID FROM b_forum_topic FT INNER JOIN b_forum_message FM ON FM.TOPIC_ID=FT.ID WHERE FM.XML_ID='".$DB->ForSQL($arMessageFields["IN_REPLY_TO"], 255)."' AND FT.FORUM_ID=".$FORUM_ID." AND FT.SOCNET_GROUP_ID=".$SOCNET_GROUP_ID);
358 if($arTopic = $dbTopic->Fetch())
359 $TOPIC_ID = $arTopic["ID"];
360 }
361
362 if($arParams["USE_SUBJECT"] == "Y" && $TOPIC_ID<=0)
363 {
364 $dbTopic = $DB->Query("SELECT ID FROM b_forum_topic WHERE TITLE='".$DB->ForSQL($subject, 255)."' AND FORUM_ID=".$FORUM_ID." AND SOCNET_GROUP_ID=".$SOCNET_GROUP_ID);// ограничить по старости?
365 if($arTopic = $dbTopic->Fetch())
366 $TOPIC_ID = $arTopic["ID"];
367 }
368
369 if($AUTHOR_USER_ID>0)
370 {
371 if($TOPIC_ID<0 && $PERMISSION <= "I")
372 {
374 Array(
375 "MAILBOX_ID"=>$arMessageFields["MAILBOX_ID"],
376 "MESSAGE_ID"=>$arMessageFields["ID"],
377 "FILTER_ID"=>$arParams["MAIL_FILTER_ID"],
378 "LOG_TYPE"=>"FILTER_ERROR",
379 "MESSAGE"=>GetMessage("FORUM_MAIL_ERROR3")." ".$arUser["LOGIN"]." [".$AUTHOR_USER_ID."] (".$message_email_addr.")"
380 )
381 );
382 return false;
383 }
384
385 $bSHOW_NAME = true;
386 $res = CForumUser::GetByUSER_ID($AUTHOR_USER_ID);
387 if ($res)
388 $bSHOW_NAME = ($res["SHOW_NAME"]=="Y");
389
390 if ($bSHOW_NAME)
391 $AUTHOR_NAME = $arUser["NAME"].($arUser["NAME"] == '' || $arUser["LAST_NAME"] == ''?"":" ").$arUser["LAST_NAME"];
392
393 if (Trim($AUTHOR_NAME) == '')
394 $AUTHOR_NAME = $arUser["LOGIN"];
395 }
396 else
397 {
398 $AUTHOR_NAME = $arMessageFields["FIELD_FROM"];
399 $arFields["AUTHOR_EMAIL"] = $arMessageFields["FIELD_FROM"];
400 }
401
402 $arFields["NEW_TOPIC"] = "N";
403
404 if($PERMISSION>="Q")
405 $arFields["APPROVED"] = "Y";
406 else
407 $arFields["APPROVED"] = ($arParams["MODERATION"]=="Y") ? "N" : "Y";
408
409 // Добавим новую тему
410 if($TOPIC_ID<=0)
411 {
412 $arTopicFields = Array(
413 "TITLE" => $subject,
414 "FORUM_ID" => $FORUM_ID,
415 "USER_START_ID" => $AUTHOR_USER_ID,
416 "OWNER_ID" => $AUTHOR_USER_ID,
417 "SOCNET_GROUP_ID" => $SOCNET_GROUP_ID,
418 );
419
420 $arTopicFields["XML_ID"] = $arMessageFields["MSG_ID"];
421 $arTopicFields["APPROVED"] = $arFields['APPROVED'];
422
423 $arTopicFields["USER_START_NAME"] = $AUTHOR_NAME;
424 $arTopicFields["LAST_POSTER_NAME"] = $AUTHOR_NAME;
425
426 $TOPIC_ID = CForumTopic::Add($arTopicFields);
427 if(intval($TOPIC_ID)<=0)
428 {
430 Array(
431 "MAILBOX_ID"=>$arMessageFields["MAILBOX_ID"],
432 "MESSAGE_ID"=>$arMessageFields["ID"],
433 "FILTER_ID"=>$arParams["MAIL_FILTER_ID"],
434 "LOG_TYPE"=>"FILTER_ERROR",
435 "MESSAGE"=>GetMessage("FORUM_MAIL_ERROR4")
436 )
437 );
438 return false;
439 }
440
441 $arFields["NEW_TOPIC"] = "Y";
442 }
443
444 // Добавим сообщение
445 $arFields["POST_MESSAGE"] = $body;
446
447 // Аттаченные файлы
448 $arFILES = array();
449 $rsAttach = CMailAttachment::GetList(Array(), Array("MESSAGE_ID"=>$arMessageFields["ID"]));
450 while ($arAttach = $rsAttach->Fetch())
451 {
452 if ($arAttach['FILE_ID'])
453 $arAttach['FILE_DATA'] = CMailAttachment::getContents($arAttach);
454 $filename = CTempFile::GetFileName(md5(uniqid("")).".tmp");
456 if(file_put_contents($filename, $arAttach["FILE_DATA"]) !== false)
457 {
458 $arFile = array(
459 "name" => $arAttach["FILE_NAME"],
460 "type" => $arAttach["CONTENT_TYPE"],
461 "size" => @filesize($filename),
462 "tmp_name" => $filename,
463 "MODULE_ID" => "forum",
464 );
465 $arFilter = array("FORUM_ID" => $FORUM_ID);
466 $arFiles = array($arFile);
467
468 if(CForumFiles::CheckFields($arFiles, $arFilter))
469 {
470 $arFILES[] = $arFiles[0];
471 }
472 else
473 {
474 $oError = $GLOBALS["APPLICATION"]->GetException();
476 "MAILBOX_ID" => $arMessageFields["MAILBOX_ID"],
477 "MESSAGE_ID" => $arMessageFields["ID"],
478 "FILTER_ID" => $arParams["MAIL_FILTER_ID"],
479 "LOG_TYPE" => "FILTER_ERROR",
480 "MESSAGE" => GetMessage("FORUM_MAIL_ERROR6")." (".$arAttach["FILE_NAME"]."): ".($oError && $oError->GetString() ? $oError->GetString() : ""),
481 ));
482 }
483 }
484 }
485
486 if(count($arFILES)>0)
487 $arFields["FILES"] = $arFILES;
488
489 $arFields["AUTHOR_NAME"] = $AUTHOR_NAME;
490 $arFields["AUTHOR_ID"] = $AUTHOR_USER_ID;
491 $arFields["FORUM_ID"] = $FORUM_ID;
492 $arFields["TOPIC_ID"] = $TOPIC_ID;
493 $arFields["XML_ID"] = $arMessageFields["MSG_ID"];
494 $arFields["SOURCE_ID"] = "EMAIL";
495 $arRes = array();
496 if (!empty($arMessageFields["FIELD_FROM"]))
497 $arRes[] = "From: ".$arMessageFields["FIELD_FROM"];
498 if (!empty($arMessageFields["FIELD_TO"]))
499 $arRes[] = "To: ".$arMessageFields["FIELD_TO"];
500 if (!empty($arMessageFields["FIELD_CC"]))
501 $arRes[] = "Cc: ".$arMessageFields["FIELD_CC"];
502 if (!empty($arMessageFields["FIELD_BCC"]))
503 $arRes[] = "Bcc: ".$arMessageFields["FIELD_BCC"];
504 $arRes[] = "Subject: ".$arMessageFields["SUBJECT"];
505 $arRes[] = "Date: ".$arMessageFields["FIELD_DATE"];
506
507 $arFields["MAIL_HEADER"] = implode("\r\n", $arRes);
508
509 preg_match_all('#Received:\s+from\s+(.*)by.*#i', $arMessageFields["HEADER"], $regs);
510 if(is_array($regs) && is_array($regs[1]))
511 $arFields["AUTHOR_IP"] = $arFields["AUTHOR_REAL_IP"] = '<email: '.$regs[1][count($regs[1])-1].'>';
512 else
513 $arFields["AUTHOR_IP"] = $arFields["AUTHOR_REAL_IP"] = '<email: no address>';
514 /*
515
516 $AUTHOR_IP = ForumGetRealIP();
517 $AUTHOR_IP_tmp = $AUTHOR_IP;
518 $AUTHOR_REAL_IP = $_SERVER['REMOTE_ADDR'];
519 if (COption::GetOptionString("forum", "FORUM_GETHOSTBYADDR", "N") == "Y")
520 {
521 $AUTHOR_IP = @gethostbyaddr($AUTHOR_IP);
522
523 if ($AUTHOR_IP_tmp==$AUTHOR_REAL_IP)
524 $AUTHOR_REAL_IP = $AUTHOR_IP;
525 else
526 $AUTHOR_REAL_IP = @gethostbyaddr($AUTHOR_REAL_IP);
527 }
528
529 $arFields["AUTHOR_IP"] = ($AUTHOR_IP!==False) ? $AUTHOR_IP : "<no address>";
530 $arFields["AUTHOR_REAL_IP"] = ($AUTHOR_REAL_IP!==False) ? $AUTHOR_REAL_IP : "<no address>";
531 */
532
533 $strErrorMessage = '';
534 $MESSAGE_ID = CForumMessage::Add($arFields, false);
535 if (intval($MESSAGE_ID)<=0)
536 {
537 $str = $GLOBALS['APPLICATION']->GetException();
538 if ($str && $str->GetString())
539 $strErrorMessage .= "[".$str->GetString()."]";
540
541 if($arFields["NEW_TOPIC"] == 'Y')
542 CForumTopic::Delete($TOPIC_ID);
543
545 Array(
546 "MAILBOX_ID"=>$arMessageFields["MAILBOX_ID"],
547 "MESSAGE_ID"=>$arMessageFields["ID"],
548 "FILTER_ID"=>$arParams["MAIL_FILTER_ID"],
549 "LOG_TYPE"=>"FILTER_ERROR",
550 "MESSAGE"=>GetMessage("FORUM_MAIL_ERROR5")." ".$strErrorMessage
551 )
552 );
553 }
554
555 if($MESSAGE_ID>0)
556 {
558 Array(
559 "MAILBOX_ID"=>$arMessageFields["MAILBOX_ID"],
560 "MESSAGE_ID"=>$arMessageFields["ID"],
561 "FILTER_ID"=>$arParams["MAIL_FILTER_ID"],
562 "LOG_TYPE"=>"FILTER_COMPLETE",
563 "MESSAGE"=>GetMessage("FORUM_MAIL_OK")." ".$MESSAGE_ID." (TID#".$TOPIC_ID.")"
564 )
565 );
566
567 CForumMessage::SendMailMessage($MESSAGE_ID, array(), false, "NEW_FORUM_MESSAGE");
568
569 $dbSite = CSite::GetById($arMessageFields["LID"]);
570 if($arSite = $dbSite->Fetch())
571 $lang = $arSite['LANGUAGE_ID'];
572 else
573 $lang = $LANGUAGE_ID;
574 $params = array(
575 "LOG_ID" => 0,
576 "ENTITY_ID" => $SOCNET_GROUP_ID,
577 "URL_TEMPLATES_MESSAGE" => $arParams["URL_TEMPLATES_MESSAGE"],
578 "LANG" => $lang
579 );
580
581 $arMessageFields = array(
582 "FORUM_ID" => $FORUM_ID,
583 "TOPIC_ID" => $TOPIC_ID,
584 "ID" => $MESSAGE_ID,
585 "AUTHOR_NAME" => $AUTHOR_NAME,
586 "AUTHOR_ID" => $AUTHOR_USER_ID,
587 "TITLE" => $subject,
588 "POST_MESSAGE" => $body,
589 );
590 if ($arFields["NEW_TOPIC"] == "Y")
591 {
593 $params,
594 $arMessageFields,
595 "SEND_EVENT"
596 );
597 }
598 else
599 {
600 $dbForumMessage = CForumMessage::GetList(
601 array("ID" => "ASC"),
602 array("TOPIC_ID" => $TOPIC_ID)
603 );
604 if ($arForumMessage = $dbForumMessage->Fetch())
605 {
607 array("ID" => "DESC"),
608 array(
609 "EVENT_ID" => "forum",
610 "SOURCE_ID" => $arForumMessage["ID"]
611 ),
612 false,
613 false,
614 array("ID", "TMP_ID")
615 );
616 if ($arRes = $dbRes->Fetch())
617 $log_id = $arRes["TMP_ID"];
618 else
619 {
620 $dbFirstMessage = CForumMessage::GetList(
621 array("ID" => "ASC"),
622 array("TOPIC_ID" => $arForumMessage["TOPIC_ID"]),
623 false,
624 1
625 );
626 if ($arFirstMessage = $dbFirstMessage->Fetch())
627 {
628 $arTopic = CForumTopic::GetByID($arFirstMessage["TOPIC_ID"]);
629 $arFirstMessage["POST_MESSAGE"] = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arFirstMessage["POST_MESSAGE_FILTER"] : $arFirstMessage["POST_MESSAGE"]);
630 $arFirstMessage["TITLE"] = $arTopic["TITLE"];
632 $params,
633 $arFirstMessage
634 );
635 }
636 }
637 if (intval($log_id) > 0)
638 {
639 $params["LOG_ID"] = $log_id;
641 $params,
642 $arMessageFields,
643 "ADD_COMMENT"
644 );
645 }
646 }
647 }
648 }
649 }
650
651 public static function GetLangMessage($ID, $lang)
652 {
653 $MESS = Array();
654 if(file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/forum/lang/'.$lang.'/mail/mail.php'))
655 include($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/forum/lang/'.$lang.'/mail/mail.php');
656 if($MESS[$ID])
657 return $MESS[$ID];
658 include($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/forum/lang/en/mail/mail.php');
659 return $MESS[$ID];
660 }
661}
$arParams
Определения access_dialog.php:21
$db_res
Определения options_user_settings.php:8
static SendMailMessage($MID, $arFields=array(), $strLang=false, $mailTemplate=false)
Определения message.php:802
static Delete($ID)
Определения topic.php:413
static Add($arFields)
Определения topic.php:213
static GetByID($ID, $arAddParams=array())
Определения topic.php:431
static GetByUSER_ID($USER_ID)
Определения user.php:517
static ExtractMailAddress($email)
Определения mail.php:3118
static SendEvent( $ID, $mailTemplate="SONET_NEW_EVENT", $tmpId=0, $bAgent=false)
Определения log.php:318
static CounterIncrement( $entityId, $eventId='', $entitiesList=false, $type=CSocNetLogCounter::TYPE_LOG_ENTRY, $forAllAccess=false, $userIdToPushList=[])
Определения log.php:436
Определения mail.php:32
static SocnetEMailMessageCheck(&$arMessageFields, $ACTION_VARS)
Определения mail.php:236
static SocnetEMailMessageAdd($arMessageFields, $ACTION_VARS)
Определения mail.php:263
static GetMailFilters($MAIL_FILTER_ID)
Определения mail.php:45
static GetLangMessage($ID, $lang)
Определения mail.php:651
static GetForumFilters($FID, $SOCNET_GROUP_ID=false)
Определения mail.php:33
static Set($arFields)
Определения mail.php:55
static SocnetPrepareVars()
Определения mail.php:131
static SocnetLogMessageAdd($arParams, $arMessageFields, $action="")
Определения mail.php:136
static OnGetSocNetFilterList()
Определения mail.php:119
static GetList($arOrder=Array("ID"=>"ASC"), $arFilter=Array(), $iNum=0, $arAddParams=array())
Определения message.php:884
static GetList($arOrder=Array("ID"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=array())
Определения message.php:193
static Add($arFields, $strUploadDir=false, $arParams=array())
Определения message.php:7
static getContents($attachment)
Определения mail.php:2783
static GetList($arOrder=Array(), $arFilter=Array())
Определения mail.php:2651
static AddMessage($arFields)
Определения mail.php:4250
static Add($arFields, $bSetSource=false, $bSendEvent=true, $bSetLogUpDate=true)
Определения log_comments.php:16
static Add($arFields, $bSendEvent=true)
Определения log.php:20
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array(), $arParams=array())
Определения log.php:338
static Update($ID, $arFields)
Определения log.php:151
static SetForSonet($logID, $entity_type, $entity_id, $feature, $operation, $bNew=false)
Определения log_rights.php:320
Определения functions.php:18
$str
Определения commerceml2.php:63
$arFields
Определения dblapprove.php:5
$filename
Определения file_edit.php:47
</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
if($ajaxMode) $ID
Определения get_user.php:27
$p
Определения group_list_element_edit.php:23
$filter
Определения iblock_catalog_list.php:54
global $MESS
Определения bill.php:2
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
if(!defined('SITE_ID')) $lang
Определения include.php:91
CheckDirPath($path)
Определения tools.php:2707
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$arFiles
Определения options.php:60
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
</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
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$strErrorMessage
Определения action.php:25
const SONET_ENTITY_GROUP
Определения include.php:117
$arRes
Определения options.php:104
$action
Определения file_dialog.php:21
$GLOBALS['_____370096793']
Определения update_client.php:1
$arFilter
Определения user_search.php:106
$dbRes
Определения yandex_detail.php:168