• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_tools_photo.php
  • Класс: CSocNetPhotoCommentEvent
  • Вызов: CSocNetPhotoCommentEvent::OnAfterPhotoCommentAddForum
function OnAfterPhotoCommentAddForum($ID, $arFields)
{
	global $USER, $DB;

	static $arSiteWorkgroupsPage;

	if (!CModule::IncludeModule('iblock'))
		return;

	if (!$this->IsSocnet)
		return;

	if (
		(
			!array_key_exists("PARAM1", $arFields)
			|| $arFields["PARAM1"] != "IB"
		)
		&& array_key_exists("PARAM2", $arFields)
		&& intval($arFields["PARAM2"]) > 0
	)
	{
		$bSocNetLogRecordExists = false;

		$dbRes = CSocNetLog::GetList(
			array("ID" => "DESC"),
			array(
				"EVENT_ID"	=> "photo_photo",
				"SOURCE_ID"	=> $arFields["PARAM2"] // file photo id
			),
			false,
			false,
			array("ID", "ENTITY_TYPE", "ENTITY_ID", "TMP_ID", "USER_ID", "TITLE", "URL", "PARAMS")
		);

		if ($arRes = $dbRes->Fetch())
		{
			$log_id = $arRes["ID"];
			$entity_type = $arRes["ENTITY_TYPE"];
			$entity_id = $arRes["ENTITY_ID"];
			$log_title = $arRes["TITLE"];
			$log_url = $arRes["URL"];
			$log_user_id = $arRes["USER_ID"];				

			if ($arRes["PARAMS"] <> '')
			{
				$arTmp = unserialize($arRes["PARAMS"], [ 'allowed_classes' => false ]);
				if ($arTmp)
				{
					if (
						array_key_exists("SECTION_NAME", $arTmp)
						&& $arTmp["SECTION_NAME"] <> ''
					)
						$log_section_name = $arTmp["SECTION_NAME"];

					if (
						array_key_exists("SECTION_URL", $arTmp)
						&& $arTmp["SECTION_URL"] <> ''
					)
						$log_section_url = $arTmp["SECTION_URL"];
				}
			}

			$bSocNetLogRecordExists = true;
		}
		else
		{
			$rsElement = CIBlockElement::GetByID($arFields["PARAM2"]);
			if ($arElement = $rsElement->Fetch())
			{
				$url = $this->arPath["DETAIL_URL"];

				$sAuthorName = GetMessage("SONET_PHOTO_LOG_GUEST");
				if (intval($arElement["CREATED_BY"]) > 0)
				{
					$rsUser = CUser::GetByID($arElement["CREATED_BY"]);
					if ($arUser = $rsUser->Fetch())
						$sAuthorName = CUser::FormatName(CSite::GetNameFormat(false), $arUser, true, false);
				}

				if (
					in_array( $this->entity_type, array(SONET_ENTITY_USER, SONET_ENTITY_GROUP))
					&& intval($this->entity_id) > 0
				)
				{
					$entity_type = $this->entity_type;
					$entity_id = $this->entity_id;
					$alias = ($this->entity_type == SONET_ENTITY_GROUP ? "group" : "user")."_".$this->entity_id;
				}

				$arLogParams = array(
					"FORUM_ID" => intval($this->ForumID)
				);

				$rsIBlock = CIBlock::GetByID($arElement["IBLOCK_ID"]);
				if($arIBlock = $rsIBlock->Fetch())
				{
					$arLogParams["IBLOCK_ID"] = $arIBlock["ID"];
					$arLogParams["IBLOCK_TYPE"] = $arIBlock["IBLOCK_TYPE_ID"];
				}

				$rsSection = CIBlockSection::GetByID($arElement["IBLOCK_SECTION_ID"]);
				if ($arSection = $rsSection->Fetch())
				{
					$arLogParams["SECTION_ID"] = $arSection["ID"];
					$arLogParams["SECTION_NAME"] = $arSection["NAME"];
					$arLogParams["SECTION_URL"] = str_replace("#SECTION_ID#", $arSection["ID"], $this->arPath["SECTION_URL"]);

					$arSectionPath = array();
					$bPassword = false;

					$dbSection = CIBlockSection::GetList(
						array("LEFT_MARGIN" => "ASC"),
						array(
							"IBLOCK_ID" => intval($arLogParams["IBLOCK_ID"]),
							"<=LEFT_BORDER" => intval($arSection["LEFT_MARGIN"]),
							">=RIGHT_BORDER" => intval($arSection["RIGHT_MARGIN"]),
							"<=DEPTH_LEVEL" => intval($arSection["DEPTH_LEVEL"]),
						),
						false, 
						array("ID", "IBLOCK_ID", "NAME", "CODE", "CREATED_BY", "DEPTH_LEVEL", "LEFT_MARGIN", "RIGHT_MARGIN", "UF_PASSWORD")
					);

					while ($arPath = $dbSection->Fetch())
					{
						$arSectionPath[] = $arPath;
						if (trim($arPath["UF_PASSWORD"]) <> '')
						{
							$bPassword = true;
							break;
						}
					}

					if (!$alias)
					{
						$entity_type = SONET_ENTITY_USER;
						$entity_id = $arSectionPath[0]["CREATED_BY"];
						$alias = $arSectionPath[0]["CODE"];
					}

					if (!$arSiteWorkgroupsPage && IsModuleInstalled("extranet") && $entity_type == SONET_ENTITY_GROUP)
					{
						$rsSite = CSite::GetList("sort", "desc", Array("ACTIVE" => "Y"));
						while($arSite = $rsSite->Fetch())
							$arSiteWorkgroupsPage[$arSite["ID"]] = COption::GetOptionString("socialnetwork", "workgroups_page", $arSite["DIR"]."workgroups/", $arSite["ID"]);
					}

					if (is_set($arLogParams["SECTION_URL"]) && is_array($arSiteWorkgroupsPage) && $entity_type == SONET_ENTITY_GROUP)
						foreach($arSiteWorkgroupsPage as $groups_page)
							if (mb_strpos($arLogParams["SECTION_URL"], $groups_page) === 0)
								$arLogParams["SECTION_URL"] = "#GROUPS_PATH#".mb_substr($arLogParams["SECTION_URL"], mb_strlen($groups_page), mb_strlen($arLogParams["SECTION_URL"]) - mb_strlen($groups_page));
				}

				$arLogParams["ALIAS"] = $alias;

				$arSonetFields = array(
					"ENTITY_TYPE" => $entity_type,
					"ENTITY_ID" => $entity_id,
					"EVENT_ID" => "photo_photo",
					"LOG_DATE" => $arElement["TIMESTAMP_X"],
					"TITLE_TEMPLATE" => str_replace("#AUTHOR_NAME#", $sAuthorName, GetMessage("SONET_PHOTOPHOTO_LOG_1")),
					"TITLE" => $arElement["NAME"],
					"MESSAGE" => "",
					"TEXT_MESSAGE" => "",
					"URL" => CComponentEngine::MakePathFromTemplate($url, array(
						"ELEMENT_ID" => $arElement["ID"],
						"element_id" => $arElement["ID"],
						"SECTION_ID" => $arElement["IBLOCK_SECTION_ID"],
						"section_id" => $arElement["IBLOCK_SECTION_ID"]
					)),
					"MODULE_ID" => false,
					"CALLBACK_FUNC" => false,
					"SOURCE_ID" => $arElement["ID"],
					"PARAMS" => serialize($arLogParams),
					"RATING_TYPE_ID" => "IBLOCK_ELEMENT",
					"RATING_ENTITY_ID"=> $arElement["ID"],
				);

				if (intval($arElement["CREATED_BY"]) > 0)
					$arSonetFields["USER_ID"] = $arElement["CREATED_BY"];

				$log_id = CSocNetLog::Add($arSonetFields, false);
				if (intval($log_id) > 0)
				{
					$log_title = $arSonetFields["TITLE"];
					$log_url = $arSonetFields["URL"];
					$log_section_name = $arLogParams["SECTION_NAME"];
					$log_section_url = $arLogParams["SECTION_URL"];
					$log_user_id = $arSonetFields["USER_ID"];

					CSocNetLog::Update($log_id, array("TMP_ID" => $log_id));
					if ($bPassword)
					{
						CSocNetLogRights::DeleteByLogID($log_id);
						CSocNetLogRights::Add($log_id, array("U".$USER->GetID(), "SA"));
					}
					else
					{
						CSocNetLogRights::SetForSonet($log_id, $entity_type, $entity_id, "photo", "view");
					}
				}
			}
		}

		if (intval($log_id) > 0)
		{
			$arForum = CForumNew::GetByID($this->ForumID);
			
			$parser = new forumTextParser(LANGUAGE_ID, $this->arPath["PATH_TO_SMILE"]);
			$parser->imageWidth = false;
			$parser->imageHeight = false;
			
			$arAllow = array(
				"HTML" => "N",
				"ANCHOR" => "N",
				"BIU" => "N",
				"IMG" => "N",
				"LIST" => "N",
				"QUOTE" => "N",
				"CODE" => "N",
				"FONT" => "N",
				"UPLOAD" => $arForum["ALLOW_UPLOAD"],
				"NL2BR" => "N",
				"SMILES" => "N",
				"VIDEO" => "N"
			);
			
			$url = $this->arPath["DETAIL_URL"];
			
			if ($bSocNetLogRecordExists)
			{
				$arMessage = CForumMessage::GetByIDEx($ID);

				$arFieldsForSocnet = array(
					"ENTITY_TYPE" => $entity_type,
					"ENTITY_ID" => $entity_id,
					"EVENT_ID" => "photo_comment",
					"=LOG_DATE" => $DB->CurrentTimeFunction(),
					"MESSAGE" => $parser->convert(empty($arFields["POST_MESSAGE_FILTER"]) ? $arFields["POST_MESSAGE"] : $arFields["POST_MESSAGE_FILTER"], $arAllow),
					"TEXT_MESSAGE" => $parser->convert4mail(empty($arFields["POST_MESSAGE_FILTER"]) ? $arFields["POST_MESSAGE"] : $arFields["POST_MESSAGE_FILTER"]),
					"MODULE_ID" => false,
					"SOURCE_ID" => $ID,
					"LOG_ID" => $log_id,
					"RATING_TYPE_ID" => "FORUM_POST",
					"RATING_ENTITY_ID" => $ID,
				);

				if (intval($arMessage["AUTHOR_ID"]) > 0)
					$arFieldsForSocnet["USER_ID"] = $arMessage["AUTHOR_ID"];

				$comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false);
				if ($comment_id)
				{
					CSocNetLog::CounterIncrement($comment_id, false, false, "LC");

					$arFieldsIM = Array(
						"TYPE" => "COMMENT",
						"TITLE" => $log_title,
						"MESSAGE" => $arFieldsForSocnet["MESSAGE"],
						"URL" => $log_url,
						"SECTION_NAME" => $log_section_name,
						"SECTION_URL" => $log_section_url,
						"ID" => $arFields["PARAM2"],
						"PHOTO_AUTHOR_ID" => $log_user_id,
						"COMMENT_AUTHOR_ID" => $arMessage["AUTHOR_ID"],
					);
					CSocNetPhotoCommentEvent::NotifyIm($arFieldsIM);
				}
			}
			else
			{
				$dbComments = CForumMessage::GetListEx(
					array(),
					array('TOPIC_ID' => $arFields["TOPIC_ID"], "NEW_TOPIC" => "N")
				);

				while ($arComment = $dbComments->GetNext())
				{
					$arFieldsForSocnet = array(
						"ENTITY_TYPE" => $entity_type,
						"ENTITY_ID" => $entity_id,
						"EVENT_ID" => "photo_comment",
						"=LOG_DATE" => $DB->CharToDateFunction($arComment["POST_DATE"], "FULL", SITE_ID),
						"MESSAGE" => $parser->convert(empty($arComment["POST_MESSAGE_FILTER"]) ? $arComment["POST_MESSAGE"] : $arComment["POST_MESSAGE_FILTER"], $arAllow),
						"TEXT_MESSAGE" => $parser->convert4mail(empty($arComment["POST_MESSAGE_FILTER"]) ? $arComment["POST_MESSAGE"] : $arComment["POST_MESSAGE_FILTER"]),
						"MODULE_ID" => false,
						"SOURCE_ID" => $arComment["ID"],
						"LOG_ID" => $log_id,
						"RATING_TYPE_ID" => "FORUM_POST",
						"RATING_ENTITY_ID" => $arComment["ID"],
					);

					if (intval($arComment["AUTHOR_ID"]) > 0)
					{
						$arFieldsForSocnet["USER_ID"] = $arComment["AUTHOR_ID"];
					}

					$comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false);
					if ($comment_id)
					{
						CSocNetLog::CounterIncrement($comment_id, false, false, "LC");
						
						$arFieldsIM = Array(
							"TYPE" => "COMMENT",
							"TITLE" => $log_title,
							"MESSAGE" => $arFieldsForSocnet["MESSAGE"],
							"URL" => $log_url,
							"SECTION_NAME" => $log_section_name,
							"SECTION_URL" => $log_section_url,
							"ID" => $arFields["PARAM2"],
							"PHOTO_AUTHOR_ID" => $log_user_id,
							"COMMENT_AUTHOR_ID" => $arComment["AUTHOR_ID"],
						);
						CSocNetPhotoCommentEvent::NotifyIm($arFieldsIM);
					}
				}

				if ($arElement)
				{
					self::InheriteAlbumFollow($arElement["IBLOCK_SECTION_ID"], $log_id, (intval($arElement["CREATED_BY"]) > 0 ? $arElement["CREATED_BY"] : false));
				}
			}
		}
	}
}