• Модуль: lists
  • Путь к файлу: ~/bitrix/modules/lists/classes/general/livefeed.php
  • Класс: CListsLiveFeed
  • Вызов: CListsLiveFeed::addCommentLists
static function addCommentLists($fields)
{
	global $DB, $USER_FIELD_MANAGER;

	if (!CModule::IncludeModule('forum') || !CModule::IncludeModule('bizproc'))
		return false;

	$ufFileId = array();
	$ufDocId = array();
	$fieldsMessage = array();
	$messageId = array();
	$error = array();
	$note = array();

	$sonetLogQuery = CSocNetLog::GetList(
		array(),
		array('ID' => $fields['LOG_ID']),
		false,
		false,
		array('ID', 'SOURCE_ID', 'SITE_ID', 'MESSAGE', 'USER_ID')
	);
	if($sonetLog = $sonetLogQuery->fetch())
	{
		$users = CBPTaskService::getWorkflowParticipants($sonetLog['MESSAGE'], CBPTaskUserStatus::Waiting);

		if(preg_match_all("/(?<=[USER=)(?P[0-9]+)(?=])/", $fields['TEXT_MESSAGE'], $matches))
			$users = array_unique(array_merge($users, $matches['id']));

		$users[] = $sonetLog['USER_ID'];
		self::setSocnetFollow($users, $sonetLog['ID'], 'Y', false, true);

		$forumId = CBPHelper::getForumId();
		if($forumId)
		{
			$topicQuery = CForumTopic::GetList(array(), array('FORUM_ID' => $forumId, 'XML_ID' => 'WF_'.$sonetLog['MESSAGE']));
			if ($topicQuery && ($topic = $topicQuery->fetch()))
			{
				$topicId = $topic['ID'];
			}
			else
			{
				$dataTopic = array(
					'AUTHOR_ID' => 0,
					'TITLE' => 'WF_'.$sonetLog['MESSAGE'],
					'TAGS' => '',
					'MESSAGE' => 'WF_'.$sonetLog['MESSAGE'],
					'XML_ID' => 'WF_'.$sonetLog['MESSAGE']
				);

				$userStart = array(
					"ID" => $dataTopic["AUTHOR_ID"],
					"NAME" => $GLOBALS["FORUM_STATUS_NAME"]["guest"]
				);

				$DB->StartTransaction();
				$topicFields = Array(
					"TITLE" => $dataTopic["TITLE"],
					"TAGS" => $dataTopic["TAGS"],
					"FORUM_ID" => $forumId,
					"USER_START_ID"	=> $userStart["ID"],
					"USER_START_NAME" => $userStart["NAME"],
					"LAST_POSTER_NAME" => $userStart["NAME"],
					"XML_ID" => $dataTopic["XML_ID"],
					"APPROVED" => "Y",
					"PERMISSION_EXTERNAL" =>'Q',
					"PERMISSION" => 'Y',
				);

				$topicId = CForumTopic::Add($topicFields);

				if (intval($topicId) > 0)
				{
					$dataTopic['MESSAGE'] = strip_tags($dataTopic['MESSAGE']);

					$dataFields = Array(
						"POST_MESSAGE" => $dataTopic['MESSAGE'],
						"AUTHOR_ID" => $userStart["ID"],
						"AUTHOR_NAME" => $userStart["NAME"],
						"FORUM_ID" => $forumId,
						"TOPIC_ID" => $topicId,
						"APPROVED" => "Y",
						"NEW_TOPIC" => "Y",
						"PARAM1" => "WF",
						"PARAM2" => 0,
						"PERMISSION_EXTERNAL" => 'Q',
						"PERMISSION" => 'Y',
					);
					$startMessageId = CForumMessage::Add($dataFields, false, array("SKIP_INDEXING" => "Y", "SKIP_STATISTIC" => "N"));
					if (intval($startMessageId) <= 0)
					{
						CForumTopic::Delete($topicId);
						$topicId = 0;
					}
				}

				if (intval($topicId) <= 0)
				{
					$DB->Rollback();
				}
				else
				{
					$DB->Commit();
				}
			}

			if ($topicId)
			{
				$fieldsMessage = array(
					'POST_MESSAGE' => $fields['TEXT_MESSAGE'],
					'USE_SMILES' => 'Y',
					'PERMISSION_EXTERNAL' => 'Q',
					'PERMISSION' => 'Y',
					'APPROVED' => 'Y'
				);

				$tmp = false;
				$USER_FIELD_MANAGER->editFormAddFields('SONET_COMMENT', $tmp);
				if (is_array($tmp))
				{
					if (array_key_exists('UF_SONET_COM_DOC', $tmp))
					{
						$GLOBALS['UF_FORUM_MESSAGE_DOC'] = $tmp['UF_SONET_COM_DOC'];
					}
					elseif (array_key_exists('UF_SONET_COM_FILE', $tmp))
					{
						$fieldsMessage['FILES'] = array();
						foreach($tmp['UF_SONET_COM_FILE'] as $fileId)
						{
							$fieldsMessage['FILES'][] = array('FILE_ID' => $fileId);
						}
					}

					if (array_key_exists("UF_SONET_COM_URL_PRV", $tmp))
					{
						$GLOBALS["UF_FORUM_MES_URL_PRV"] = $tmp["UF_SONET_COM_URL_PRV"];
					}
				}

				$messageId = ForumAddMessage("REPLY", $forumId, $topicId, 0, $fieldsMessage, $error, $note);

				if ($messageId > 0)
				{
					$addedMessageFilesQuery = CForumFiles::getList(array('ID' => 'ASC'), array('MESSAGE_ID' => $messageId));
					while ($addedMessageFiles = $addedMessageFilesQuery->fetch())
					{
						$ufFileId[] = $addedMessageFiles['FILE_ID'];
					}
					$ufDocId = $USER_FIELD_MANAGER->getUserFieldValue('FORUM_MESSAGE', 'UF_FORUM_MESSAGE_DOC', $messageId, LANGUAGE_ID);
					$ufUrlPreview = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MES_URL_PRV", $messageId, LANGUAGE_ID);
				}
			}
		}
	}

	if (!$messageId)
	{
		$error = Loc::getMessage('LISTS_LF_ADD_COMMENT_SOURCE_ERROR');
	}

	return array(
		'SOURCE_ID' => $messageId,
		'MESSAGE' => ($fieldsMessage ? $fieldsMessage['POST_MESSAGE'] : false),
		'RATING_TYPE_ID' => 'FORUM_POST',
		'RATING_ENTITY_ID' => $messageId,
		'ERROR' => $error,
		'NOTES' => $note,
		'UF' => array(
			'FILE' => $ufFileId,
			'DOC' => $ufDocId,
			'URL_PREVIEW' => $ufUrlPreview
		)
	);
}