• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/internals/mailhandler.php
  • Класс: BitrixSocialnetworkInternalsMailHandler
  • Вызов: MailHandler::handleReplyReceivedLogEntry
static function handleReplyReceivedLogEntry(BitrixMainEvent $event)
{
	global $USER, $DB;

	$logEntryId = intval($event->getParameter('entity_id'));
	$userId = intval($event->getParameter('from'));
	$message = trim($event->getParameter('content'));
	$attachments = $event->getParameter('attachments');

	$commentId = false;

	if (
		$message == ''
		&& count($attachments) > 0
	)
	{
		$message = Loc::getMessage('SONET_MAILHANDLER_ATTACHMENTS');
	}

	if (
		$logEntryId <= 0
		|| $userId <= 0
		|| $message == ''
	)
	{
		return false;
	}

	$res = CSocNetLog::getList(
		array(),
		array(
			"ID" => $logEntryId
		),
		false,
		false,
		array("ID", "ENTITY_TYPE", "ENTITY_ID", "EVENT_ID", "USER_ID", "SOURCE_ID")
	);

	if (!($logEntry = $res->fetch()))
	{
		return false;
	}

	$siteId = BitrixSocialnetworkUtil::getSiteIdByLogId($logEntry["ID"]);
	$res = CSite::getByID($siteId);
	$site = $res->fetch();

	$pathToUser = ConfigOption::get("main", "TOOLTIP_PATH_TO_USER", false, $siteId);
	$pathToSmile = ConfigOption::get("socialnetwork", "smile_page", false, $siteId);

	$commentEvent = CSocNetLogTools::findLogCommentEventByLogEventID($logEntry["EVENT_ID"]);
	if (is_array($commentEvent))
	{
		if (BitrixSocialnetworkComponentHelper::canAddComment($logEntry, $commentEvent))
		{
			$fields = array(
				"ENTITY_TYPE" => $logEntry["ENTITY_TYPE"],
				"ENTITY_ID" => $logEntry["ENTITY_ID"],
				"EVENT_ID" => $commentEvent["EVENT_ID"],
				"=LOG_DATE" => $DB->currentTimeFunction(),
				"MESSAGE" => $message,
				"TEXT_MESSAGE" => $message,
				"MODULE_ID" => false,
				"LOG_ID" => $logEntry["ID"],
				"USER_ID" => $userId,
				"CURRENT_USER_ID" => $userId
			);

			$ufCode = (
				ModuleManager::isModuleInstalled("webdav")
				|| ModuleManager::isModuleInstalled("disk")
					? "UF_SONET_COM_DOC"
					: "UF_SONET_COM_FILE"
			);
			$fields[$ufCode] = array();

			$type = false;
			$attachmentRelations = array();

			foreach ($attachments as $key => $attachedFile)
			{
				$resultId = CSocNetLogComponent::saveFileToUF($attachedFile, $type, $userId);
				if ($resultId)
				{
					$fields[$ufCode][] = $resultId;
					$attachmentRelations[$key] = $resultId;
				}
			}

			$fields["MESSAGE"] = preg_replace_callback(
				"/[ATTACHMENTs*=s*([^]]*)]/is".BX_UTF_PCRE_MODIFIER,
				function ($matches) use ($attachmentRelations)
				{
					if (isset($attachmentRelations[$matches[1]]))
					{
						return "[DISK FILE ID=".$attachmentRelations[$matches[1]]."]";
					}
				},
				$fields["MESSAGE"]
			);

			if (Loader::includeModule('disk'))
			{
				BitrixDiskUfFileUserType::setValueForAllowEdit("SONET_COMMENT", true);
			}

			$commentId = CSocNetLogComments::add($fields, true, false);

			if (
				is_array($commentId)
				|| !$commentId
			)
			{
				return false;
			}

			foreach (EventManager::getInstance()->findEventHandlers('socialnetwork', 'OnAfterSocNetLogEntryCommentAdd') as $handler)
			{
				ExecuteModuleEventEx($handler, array($logEntry, array(
					"SITE_ID" => $siteId,
					"COMMENT_ID" => $commentId
				)));
			}

			$skipCounterIncrement = false;
			foreach (EventManager::getInstance()->findEventHandlers('socialnetwork', 'OnBeforeSocNetLogCommentCounterIncrement') as $handler)
			{
				if (ExecuteModuleEventEx($handler, array($logEntry)) === false)
				{
					$skipCounterIncrement = true;
					break;
				}
			}

			if (!$skipCounterIncrement)
			{
				CSocNetLog::counterIncrement(
					$commentId,
					false,
					false,
					"LC",
					CSocNetLogRights::checkForUserAll($logEntry["ID"])
				);
			}

			if ($comment = CSocNetLogComments::getByID($commentId))
			{
				BitrixSocialnetworkComponentHelper::addLiveComment(
					$comment,
					$logEntry,
					$commentEvent,
					array(
						"ACTION" => 'ADD',
						"SOURCE_ID" => 0,
						"TIME_FORMAT" => CSite::getTimeFormat(),
						"PATH_TO_USER" => $pathToUser,
						"NAME_TEMPLATE" => CSite::getNameFormat(null, $site["ID"]),
						"SHOW_LOGIN" => "N",
						"AVATAR_SIZE" => 100,
						"PATH_TO_SMILE" => $pathToSmile,
						"LANGUAGE_ID" => $site["LANGUAGE_ID"],
						"SITE_ID" => $site["ID"],
						"PULL" => "Y"
					)
				);
			}
		}
	}

	return $commentId;
}