30 private $message =
null;
35 "FORUM_ID" => $this->topic[
"FORUM_ID"],
36 "TOPIC_ID" => $this->topic[
"ID"],
37 "POST_MESSAGE" => trim(
$params[
"POST_MESSAGE"]),
38 "AUTHOR_ID" =>
$params[
"AUTHOR_ID"],
39 "AUTHOR_NAME" => trim(
$params[
"AUTHOR_NAME"]),
40 "AUTHOR_EMAIL" => trim(
$params[
"AUTHOR_EMAIL"]),
41 "USE_SMILES" => (
$params[
"USE_SMILES"] ==
"Y" ?
"Y" :
"N"),
42 "APPROVED" => $this->topic[
"APPROVED"],
43 "XML_ID" => $this->
getEntity()->getXmlId(),
44 "AUX" => (
$params[
"AUX"] ??
'N'),
45 "AUX_DATA" => (
$params[
"AUX_DATA"] ??
''),
46 ) + array_intersect_key(
$params, array_flip([
47 "POST_DATE",
"SOURCE_ID",
48 "AUTHOR_IP",
"AUTHOR_REAL_IP",
53 if (isset(
$params[
"SERVICE_TYPE"]))
57 $errorCollection->addOne(
new Error(Loc::getMessage(
"FORUM_CM_ERR_TYPE_INCORRECT"), self::ERROR_PARAMS_TYPE));
62 if (!isset(
$params[
"SERVICE_DATA"]))
77 if (
$result[
"POST_MESSAGE"] ==
"" &&
79 [
"SERVICE_TYPE" =>
$result[
"SERVICE_TYPE"]]
82 $result[
"POST_MESSAGE"] = $handler->getText(
$result[
"SERVICE_DATA"]);
86 if (
$result[
"POST_MESSAGE"] ==
'')
88 $errorCollection->addOne(
new Error(Loc::getMessage(
"FORUM_CM_ERR_EMPTY_TEXT"), self::ERROR_PARAMS_MESSAGE));
93 if (
$result[
"AUTHOR_NAME"] ==
'')
94 $errorCollection->addOne(
new Error(Loc::getMessage(
"FORUM_CM_ERR_EMPTY_AUTHORS_NAME"), self::ERROR_PARAMS_MESSAGE));
96 if (is_array(
$params[
"FILES"]) && in_array($this->forum[
"ALLOW_UPLOAD"],
array(
"Y",
"F",
"A")))
101 if (intval(
$val[
"FILE_ID"]) > 0 &&
$val[
"del"] !==
"Y")
108 "FORUM_ID" => $this->forum[
"ID"],
109 "TOPIC_ID" => $this->topic[
"ID"],
111 "USER_ID" =>
$result[
"AUTHOR_ID"],
112 "FORUM" => $this->forum
114 if (!\CForumFiles::checkFields(
$result[
"FILES"],
$res,
"NOT_CHECK_DB"))
116 $text =
"File upload error.";
118 $text = $ex->getString();
122 if (
$result[
"APPROVED"] !=
"N")
124 $result[
"APPROVED"] = ($this->forum[
"MODERATION"] !=
"Y" || $this->
getEntity()->canModerate($this->
getUser()->getId())) ?
"Y" :
"N";
133 $ufData = array_intersect_key(
155 private function updateStatisticModule(
$messageId)
159 $forumEvent1 = $this->forum[
"EVENT1"];
160 $forumEvent2 = $this->forum[
"EVENT2"];
161 $forumEvent3 = $this->forum[
"EVENT3"];
162 if (empty($forumEvent3))
164 $site = (
array) \CForumNew::getSites($this->forum[
"ID"]);
167 "FORUM_ID" => $this->forum[
"ID"],
168 "TOPIC_ID" => $this->topic[
"ID"],
173 \CStatistics::set_Event($forumEvent1, $forumEvent2, $forumEvent3);
185 $auxData = (
$params[
'AUX_DATA'] ??
'');
188 "SOURCE_ID" =>
$params[
"SOURCE_ID"] ?? 0,
191 "POST_MESSAGE" => trim(
$params[
"POST_MESSAGE"]),
192 "FILES" =>
$params[
"FILES"] ??
null,
194 "USE_SMILES" =>
$params[
"USE_SMILES"],
196 "AUTHOR_ID" => $this->
getUser()->getId(),
197 "AUTHOR_NAME" => trim(
$params[
"AUTHOR_NAME"] ??
''),
198 "AUTHOR_EMAIL" => trim(
$params[
"AUTHOR_EMAIL"] ??
''),
200 "AUTHOR_IP" =>
$params[
"AUTHOR_IP"] ??
"<no address>",
201 "AUTHOR_REAL_IP" =>
$params[
"AUTHOR_REAL_IP"] ??
"<no address>",
202 "GUEST_ID" =>
$params[
"GUEST_ID"] ??
null,
204 "AUX" =>
$params[
"AUX"] ??
null,
205 "AUX_DATA" => $auxData,
206 "SERVICE_TYPE" => (
$params[
"SERVICE_TYPE"] ??
null),
207 "SERVICE_DATA" => (
$params[
"SERVICE_DATA"] ??
null),
208 ) + array_filter(
$params, fn(
$key) => strpos(
$key,
'UF_') === 0, ARRAY_FILTER_USE_KEY);
210 if ($this->prepareFields(
$params, $this->errorCollection))
213 $event =
new Event(
"forum",
"OnBeforeCommentAdd", [
221 foreach(
$event->getResults() as $eventResult)
223 if($eventResult->getType() != EventResult::SUCCESS)
241 $this->updateStatisticModule(
$mid);
242 \CForumMessage::sendMailMessage(
$mid,
array(),
false,
"NEW_FORUM_MESSAGE");
256 "TOPIC_ID" => $this->topic[
"ID"],
257 "MESSAGE_ID" =>
$mid,
260 "AUX_DATA" => $auxData
268 $this->errorCollection->addFromResult(
$result);
280 if ($this->message ===
null)
282 $this->errorCollection->addOne(
new Error(Loc::getMessage(
"FORUM_CM_ERR_COMMENT_IS_LOST1"), self::ERROR_MESSAGE_IS_NULL));
291 "TOPIC_ID" => $this->topic[
"ID"],
292 "MESSAGE_ID" => $this->message[
"ID"],
293 "PARAMS" => &$paramsRaw,
303 foreach(
$event->getResults() as $eventResult)
305 if($eventResult->getType() != EventResult::SUCCESS)
315 $text = Loc::getMessage(
"ADDMESS_ERROR_EDIT_MESSAGE");
318 $this->errorCollection->addOne(
new Error(
$text, self::ERROR_PARAMS_MESSAGE));
321 "POST_MESSAGE" => trim(
$params[
"POST_MESSAGE"]),
322 "AUTHOR_ID" => $this->message[
"AUTHOR_ID"],
323 "AUTHOR_NAME" =>
$params[
"AUTHOR_NAME"] ?? $this->message[
"AUTHOR_NAME"],
324 "AUTHOR_EMAIL" =>
$params[
"AUTHOR_EMAIL"] ?? $this->message[
"AUTHOR_EMAIL"],
325 "USE_SMILES" =>
$params[
"USE_SMILES"] ??
'Y',
326 "FILES" =>
$params[
"FILES"] ?? [],
327 "AUX" =>
$params[
"AUX"] ??
null,
328 "AUX_DATA" =>
$params[
"AUX_DATA"] ??
null,
329 ) + array_filter(
$params, fn(
$key) => strpos(
$key,
'UF_') === 0, ARRAY_FILTER_USE_KEY))
330 && $this->prepareFields(
$params, $this->errorCollection)
333 if (array_key_exists(
"POST_DATE", $paramsRaw))
335 $params[
"POST_DATE"] = $paramsRaw[
"POST_DATE"];
337 if (array_key_exists(
"EDIT_REASON", $paramsRaw))
340 "EDITOR_ID" => $this->
getUser()->getId(),
341 "EDITOR_NAME" => trim($paramsRaw[
"EDITOR_NAME"]),
342 "EDITOR_EMAIL" => trim($paramsRaw[
"EDITOR_EMAIL"]),
343 "EDIT_REASON" => trim($paramsRaw[
"EDIT_REASON"]),
346 if (
$params[
"EDITOR_NAME"] ==
'')
349 $result = \Bitrix\Forum\Message::getById($this->message[
"ID"])->edit(
$params);
352 $mid = $this->message[
"ID"];
356 if (
$params[
"AUTHOR_ID"] != $this->
getUser()->getId() || Option::get(
"forum",
"LOGS",
"Q") <
"U")
359 foreach ($paramsRaw as
$key =>
$val)
361 if (!isset($this->message[
$key]) ||
$val == $this->message[
$key])
363 else if (
$key ==
"FILES")
364 $resLog[
"FILES"] =
GetMessage(
"F_ATTACH_IS_MODIFIED");
367 "before" => $this->message[
$key],
373 $resLog[
"FORUM_ID"] = $this->forum[
"ID"];
374 $resLog[
"TOPIC_ID"] = $this->topic[
"ID"];
375 $resLog[
"TITLE"] = $this->topic[
"TITLE"];
376 \CForumEventLog::log(
"message",
"edit", $this->message[
"ID"], serialize($resLog));
379 $this->updateStatisticModule(
$mid);
380 \CForumMessage::sendMailMessage(
$mid,
array(),
false,
"EDIT_FORUM_MESSAGE");
390 $this->errorCollection->addFromResult(
$result);
396 public function delete()
398 if ($this->message ===
null)
400 $this->errorCollection->addOne(
new Error(Loc::getMessage(
"FORUM_CM_ERR_COMMENT_IS_LOST2"), self::ERROR_MESSAGE_IS_NULL));
409 "TOPIC_ID" => $this->topic[
"ID"],
410 "MESSAGE_ID" => $this->message[
"ID"],
413 'USER_ID' => $this->
getUser()?->getId(),
420 foreach(
$event->getResults() as $eventResult)
422 if($eventResult->getType() != EventResult::SUCCESS)
430 if ($run && \CForumMessage::delete($this->message[
"ID"]))
432 \CForumEventLog::log(
"message",
"delete", $this->message[
"ID"], serialize($this->message +
array(
"TITLE" => $this->topic[
"TITLE"])));
443 $text = Loc::getMessage(
"FORUM_CM_ERR_DELETE");
445 $text = $ex->getString();
446 $this->errorCollection->addOne(
new Error(
$text, self::ERROR_PARAMS_MESSAGE));
454 if ($this->message ===
null)
456 $this->errorCollection->addOne(
new Error(Loc::getMessage(
"FORUM_CM_ERR_COMMENT_IS_LOST3"), self::ERROR_MESSAGE_IS_NULL));
465 "TOPIC_ID" => $this->topic[
"ID"],
466 "MESSAGE_ID" => $this->message[
"ID"],
468 "ACTION" => $show ?
"SHOW" :
"HIDE",
469 "PARAMS" =>
array(
"APPROVED" => ($show ?
"Y" :
"N"))
476 foreach(
$event->getResults() as $eventResult)
478 if($eventResult->getType() != EventResult::SUCCESS)
486 if ($run && $this->message[
"APPROVED"] ==
$fields[2][
"PARAMS"][
"APPROVED"] || (
$mid = \CForumMessage::update($this->message[
"ID"],
$fields[2][
"PARAMS"])) > 0)
490 $event =
new Event(
"forum",
"onMessageModerate",
array($this->message[
"ID"], ($show ?
"SHOW" :
"HIDE"), $this->message, $this->topic));
500 "ID" => $this->message[
"ID"],
501 "AUTHOR_NAME" => $this->message[
"AUTHOR_NAME"],
502 "POST_MESSAGE" => $this->message[
"POST_MESSAGE"],
503 "TITLE" => $this->topic[
"TITLE"],
504 "TOPIC_ID" => $this->topic[
"ID"],
505 "FORUM_ID" => $this->topic[
"FORUM_ID"]));
506 \CForumMessage::sendMailMessage($this->message[
"ID"],
array(),
false, ($show ?
"NEW_FORUM_MESSAGE" :
"EDIT_FORUM_MESSAGE"));
507 \CForumEventLog::log(
"message", ($show ?
"approve" :
"unapprove"), $this->message[
"ID"],
$res);
512 $text = Loc::getMessage(
"FORUM_CM_ERR_MODERATE");
514 $text = $ex->getString();
515 $this->errorCollection->addOne(
new Error(
$text, self::ERROR_PARAMS_MESSAGE));
524 if ($this->message ===
null)
526 $this->errorCollection->addOne(
new Error(Loc::getMessage(
"FORUM_CM_ERR_COMMENT_IS_LOST4"), self::ERROR_MESSAGE_IS_NULL));
531 ((int) $this->message[
"AUTHOR_ID"] > 0) &&
532 ((int) $this->message[
"AUTHOR_ID"] == (int) $this->
getUser()->getId()) &&
558 $message = ($id > 0 ? \CForumMessage::getById($id) :
null);
559 if (!empty($message))
561 if ($message[
"TOPIC_ID"] != $this->topic[
"ID"])
563 throw new ArgumentException(Loc::getMessage(
"ACCESS_DENIED"), self::ERROR_PERMISSION);
566 $this->message = $message;
static includeModule($moduleName)
$GLOBALS['____1690880296']