• Модуль: wiki
  • Путь к файлу: ~/bitrix/modules/wiki/classes/general/wiki_socnet.php
  • Класс: CWikiSocnet
  • Вызов: CWikiSocnet::AddComment_Wiki
static function AddComment_Wiki($arFields)
{
	if (!CModule::IncludeModule('iblock'))
		return false;

	if (!CModule::IncludeModule('socialnetwork'))
		return false;

	$ufFileID = array();
	$ufDocID = array();

	$dbResult = CSocNetLog::GetList(
		array('ID' => 'DESC'),
		array('TMP_ID' => $arFields['LOG_ID']),
		false,
		false,
		array('ID', 'SOURCE_ID', 'PARAMS', 'URL')
	);

	$bFound = false;
	if ($arLog = $dbResult->Fetch())
	{
		if ($arLog['PARAMS'] <> '')
		{
			$arFieldsParams = explode('&', $arLog['PARAMS']);
			if (is_array($arFieldsParams) && count($arFieldsParams) > 0)
				foreach ($arFieldsParams as $tmp)
				{
					list($key, $value) = explode('=', $tmp);
					if ($key == 'forum_id')
					{
						$FORUM_ID = intval($value);
						break;
					}
				}
		}
		if ($FORUM_ID > 0 && intval($arLog['SOURCE_ID']) > 0)
			$bFound = true;
	}

	if ($bFound)
	{
		$arElement = false;

		$arFilter = array('ID' => $arLog['SOURCE_ID']);
		$arSelectedFields = array(
			'IBLOCK_ID', 'ID', 'NAME', 'TAGS', 'CODE', 'IBLOCK_SECTION_ID', 'DETAIL_PAGE_URL',
			'CREATED_BY', 'PREVIEW_PICTURE', 'PREVIEW_TEXT', 'PROPERTY_FORUM_TOPIC_ID', 'PROPERTY_FORUM_MESSAGE_CNT'
		);
		$db_res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelectedFields);
		if ($db_res && $res = $db_res->GetNext())
		{
			$arElement = $res;
		}

		if ($arElement)
		{
			if (
				isset($arFields["ENTITY_TYPE"])
				&& isset($arFields["ENTITY_ID"])
			)
			{
				$arElement["ENTITY_TYPE"] = $arFields["ENTITY_TYPE"];
				$arElement["ENTITY_ID"] = $arFields["ENTITY_ID"];
			}

			// check iblock properties
			CSocNetLogTools::AddComment_Review_CheckIBlock($arElement);

			$dbMessage = CForumMessage::GetList(
				array(),
				array(
					'FORUM_ID' => $FORUM_ID,
					'PARAM2' => $arElement['ID']
				)
			);

			if (!$arMessage = $dbMessage->Fetch())
			{
				// Add Topic and Root Message
				$TOPIC_ID = CSocNetLogTools::AddComment_Review_CreateRoot($arElement, $FORUM_ID, false);
				$bNewTopic = true;
			}
			else
				$TOPIC_ID = $arMessage['TOPIC_ID'];

			if(intval($TOPIC_ID) > 0)
			{
				// Add comment
				$messageID = false;
				$arFieldsMessage = array(
					'POST_MESSAGE' => $arFields['TEXT_MESSAGE'],
					'USE_SMILES' => 'Y',
					'PARAM2' => $arElement['ID'],
					'APPROVED' => 'Y'
				);

				$GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("SONET_COMMENT", $arTmp);
				if (is_array($arTmp))
				{
					if (array_key_exists("UF_SONET_COM_DOC", $arTmp))
						$GLOBALS["UF_FORUM_MESSAGE_DOC"] = $arTmp["UF_SONET_COM_DOC"];
					elseif (array_key_exists("UF_SONET_COM_FILE", $arTmp))
					{
						$arFieldsMessage["FILES"] = array();
						foreach($arTmp["UF_SONET_COM_FILE"] as $file_id)
							$arFieldsMessage["FILES"][] = array("FILE_ID" => $file_id);
					}
				}

				$messageID = ForumAddMessage('REPLY', $FORUM_ID, $TOPIC_ID, 0, $arFieldsMessage, $sError, $sNote);

				if (!$messageID)
					$strError = GetMessage('SONET_ADD_COMMENT_SOURCE_ERROR');
				else
				{
					$dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $messageID));
					while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch())
						$ufFileID[] = $arAddedMessageFiles["FILE_ID"];

					$ufDocID = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $messageID, LANGUAGE_ID);
				
					CSocNetLogTools::AddComment_Review_UpdateElement($arElement, $TOPIC_ID, $bNewTopic);

					$userID = $GLOBALS["USER"]->GetID();

					if (
						CModule::IncludeModule("im")
						&& intval($arElement["CREATED_BY"]) > 0
						&& $arElement["CREATED_BY"] != $userID
					)
					{
						$rsUnFollower = CSocNetLogFollow::GetList(
							array(
								"USER_ID" => $arElement["CREATED_BY"],
								"CODE" => "L".$arLog["ID"],
								"TYPE" => "N"
							),
							array("USER_ID")
						);

						$arUnFollower = $rsUnFollower->Fetch();
						if (!$arUnFollower)
						{
							$arMessageFields = array(
								"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
								"TO_USER_ID" => $arElement["CREATED_BY"],
								"FROM_USER_ID" => $userID,
								"LOG_ID" => $arLog["ID"],
								"NOTIFY_TYPE" => IM_NOTIFY_FROM,
								"NOTIFY_MODULE" => "wiki",
								"NOTIFY_EVENT" => "comment",
							);

							$arParams["TITLE"] = str_replace(Array("rn", "n"), " ", $arElement["NAME"]);
							$arParams["TITLE"] = TruncateText($arParams["TITLE"], 100);
							$arParams["TITLE_OUT"] = TruncateText($arParams["TITLE"], 255);

							$arTmp = CSocNetLogTools::ProcessPath(array("ELEMENT_URL" => $arLog["URL"]), $arElement["CREATED_BY"]);
							$serverName = $arTmp["SERVER_NAME"];
							$url = $arTmp["URLS"]["ELEMENT_URL"];

							$arMessageFields["NOTIFY_TAG"] = "WIKI|COMMENT|".$arElement['ID'];
							$arMessageFields["NOTIFY_MESSAGE"] = GetMessage("WIKI_SONET_FROM_LOG_IM_COMMENT", Array(
								"#title#" => (
									$url <> ''
										? "".htmlspecialcharsbx($arParams["TITLE"]).""
										: htmlspecialcharsbx($arParams["TITLE"])
								)
							));

							$arMessageFields["NOTIFY_MESSAGE_OUT"] = GetMessage("WIKI_SONET_FROM_LOG_IM_COMMENT", Array(
								"#title#" => htmlspecialcharsbx($arParams["TITLE"])
							)).($url <> ''
								? " (".$serverName.$url.")"
								: ""
							)."#BR##BR#".$arFields["TEXT_MESSAGE"];

							CIMNotify::Add($arMessageFields);
						}
					}
				}
			}
			else
				$strError = GetMessage('SONET_ADD_COMMENT_SOURCE_ERROR');
		}
		else
			$strError = GetMessage('SONET_ADD_COMMENT_SOURCE_ERROR');
	}
	else
		$strError = GetMessage('SONET_ADD_COMMENT_SOURCE_ERROR');

	return array(
		'SOURCE_ID' => $messageID,
		'RATING_TYPE_ID' => 'FORUM_POST',
		'RATING_ENTITY_ID' => $messageID,
		'ERROR' => $strError,
		'NOTES' => '',
		"UF" => array(
			"FILE" => $ufFileID,
			"DOC" => $ufDocID
		)
	);
}