• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_tools.php
  • Класс: CSocNetLogComponent
  • Вызов: CSocNetLogComponent::getCommentRights
static function getCommentRights($arParams)
{
	global $USER;

	$arResult = array(
		"COMMENT_RIGHTS_EDIT" => "N",
		"COMMENT_RIGHTS_DELETE" => "N"
	);

	$logEventId = (
		isset($arParams["EVENT_ID"])
		&& $arParams["EVENT_ID"] <> ''
			? $arParams["EVENT_ID"]
			: false
	);

	$logSourceId = (
		isset($arParams["SOURCE_ID"])
		&& (int)$arParams["SOURCE_ID"] > 0
			? (int)$arParams["SOURCE_ID"]
			: false
	);

	$bCheckAdminSession = (
		!isset($arParams["CHECK_ADMIN_SESSION"])
		|| $arParams["CHECK_ADMIN_SESSION"] !== "N"
	);

	$arCommentEventMeta = CSocNetLogTools::FindLogCommentEventByLogEventID($logEventId);

	$bHasEditCallback = (
		is_array($arCommentEventMeta)
		&& isset($arCommentEventMeta["UPDATE_CALLBACK"])
		&& (
			$arCommentEventMeta["UPDATE_CALLBACK"] === "NO_SOURCE"
			|| is_callable($arCommentEventMeta["UPDATE_CALLBACK"])
		)
	);

	$bHasDeleteCallback = (
		is_array($arCommentEventMeta)
		&& isset($arCommentEventMeta["DELETE_CALLBACK"])
		&& (
			$arCommentEventMeta["DELETE_CALLBACK"] === "NO_SOURCE"
			|| is_callable($arCommentEventMeta["DELETE_CALLBACK"])
		)
	);

	if (
		$bHasEditCallback
		|| $bHasDeleteCallback
	)
	{
		$arEventMeta = CSocNetLogTools::FindLogEventByID($logEventId);

		if (
			!empty($arEventMeta)
			&& !empty($arEventMeta["COMMENT_EVENT"])
			&& !empty($arEventMeta["COMMENT_EVENT"]["METHOD_CANEDIT"])
		)
		{
			$res = call_user_func($arEventMeta["COMMENT_EVENT"]["METHOD_CANEDIT"], array(
				"LOG_SOURCE_ID" => $logSourceId,
				"USER_ID" => (int)$arParams["USER_ID"]
			));

			if ($res)
			{
				$arResult["COMMENT_RIGHTS_EDIT"] = ($bHasEditCallback ? "ALL" : "N");
				$arResult["COMMENT_RIGHTS_DELETE"] = ($bHasDeleteCallback ? "ALL" : "N");
			}
			else
			{
				if (!empty($arEventMeta["COMMENT_EVENT"]["METHOD_CANEDITOWN"]))
				{
					$res = call_user_func($arEventMeta["COMMENT_EVENT"]["METHOD_CANEDITOWN"], array(
						"LOG_SOURCE_ID" => $logSourceId,
						"USER_ID" => (int)$arParams["USER_ID"]
					));

					if ($res)
					{
						$arResult["COMMENT_RIGHTS_EDIT"] = ($bHasEditCallback ? "OWN" : "N");
						$arResult["COMMENT_RIGHTS_DELETE"] = ($bHasDeleteCallback ? "OWN" : "N");
					}
				}
				elseif ($USER->IsAuthorized())
				{
					$arResult["COMMENT_RIGHTS_EDIT"] = ($bHasEditCallback ? "OWN" : "N");
					$arResult["COMMENT_RIGHTS_DELETE"] = ($bHasDeleteCallback ? "OWN" : "N");
				}
			}
		}
		elseif (CSocNetUser::IsCurrentUserModuleAdmin(SITE_ID, $bCheckAdminSession))
		{
			$arResult["COMMENT_RIGHTS_EDIT"] = ($bHasEditCallback ? "ALL" : "N");
			$arResult["COMMENT_RIGHTS_DELETE"] = ($bHasDeleteCallback ? "ALL" : "N");
		}
		elseif ($USER->IsAuthorized())
		{
			$arResult["COMMENT_RIGHTS_EDIT"] = ($bHasEditCallback ? "OWN" : "N");
			$arResult["COMMENT_RIGHTS_DELETE"] = ($bHasDeleteCallback ? "OWN" : "N");
		}
	}

	return $arResult;
}