• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log.php
  • Класс: CAllSocNetLog
  • Вызов: CAllSocNetLog::CheckFields
static function CheckFields($ACTION, &$arFields, $ID = 0)
{
	static $arSiteWorkgroupsPage;

	global $DB, $APPLICATION, $USER_FIELD_MANAGER;

	if (
		!$arSiteWorkgroupsPage
		&& IsModuleInstalled("extranet")
		&& isset($arFields["ENTITY_TYPE"])
		&& $arFields["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 ($ACTION !== "ADD" && (int)$ID <= 0)
	{
		$APPLICATION->ThrowException("System error 870164", "ERROR");
		return false;
	}

	$newEntityType = '';

	if ((is_set($arFields, "ENTITY_TYPE") || $ACTION === "ADD") && (string)$arFields["ENTITY_TYPE"] === '')
	{
		$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_EMPTY_ENTITY_TYPE"), "EMPTY_ENTITY_TYPE");
		return false;
	}

	if (is_set($arFields, "ENTITY_TYPE"))
	{
		if (!in_array((string)$arFields["ENTITY_TYPE"], CSocNetAllowed::GetAllowedEntityTypes(), true))
		{
			$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_ERROR_NO_ENTITY_TYPE"), "ERROR_NO_ENTITY_TYPE");
			return false;
		}

		$newEntityType = (string)$arFields["ENTITY_TYPE"];
	}

	if ((is_set($arFields, "ENTITY_ID") || $ACTION === "ADD") && (int)$arFields["ENTITY_ID"] <= 0)
	{
		$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_EMPTY_ENTITY_ID"), "EMPTY_ENTITY_ID");
		return false;
	}

	if (is_set($arFields, "ENTITY_ID"))
	{
		if ($newEntityType === '' && $ID > 0)
		{
			$arRe = self::GetByID($ID);
			if ($arRe)
			{
				$newEntityType = (string)$arRe["ENTITY_TYPE"];
			}
		}
		if ($newEntityType === '')
		{
			$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_ERROR_CALC_ENTITY_TYPE"), "ERROR_CALC_ENTITY_TYPE");
			return false;
		}

		if ($newEntityType === SONET_ENTITY_GROUP)
		{
			if (!CSocNetGroup::GetByID($arFields["ENTITY_ID"]))
			{
				$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_ERROR_NO_ENTITY_ID"), "ERROR_NO_ENTITY_ID");
				return false;
			}
		}
		elseif ($newEntityType === SONET_ENTITY_USER)
		{
			$dbResult = CUser::GetByID($arFields["ENTITY_ID"]);
			if (!$dbResult->Fetch())
			{
				$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_ERROR_NO_ENTITY_ID"), "ERROR_NO_ENTITY_ID");
				return false;
			}
		}
	}

	if (
		$ACTION === "ADD"
		&& (
			!is_set($arFields, "SITE_ID")
			|| (
				(is_array($arFields["SITE_ID"]) && count($arFields["SITE_ID"]) <= 0)
				|| (!is_array($arFields["SITE_ID"]) && $arFields["SITE_ID"] == '')
			)
		)
	)
	{
		if ($newEntityType === SONET_ENTITY_GROUP)
		{
			$arSites = array();
			$rsGroupSite = CSocNetGroup::GetSite($arFields["ENTITY_ID"]);
			while($arGroupSite = $rsGroupSite->Fetch())
			{
				$arSites[] = $arGroupSite["LID"];
			}
			$arFields["SITE_ID"] = $arSites;
		}
		else
		{
			$arFields["SITE_ID"] = array(SITE_ID);
		}
	}

	if (
		isset($arFields["TAG"])
		&& !is_array($arFields["TAG"])
	)
	{
		$arFields["TAG"] = array($arFields["TAG"]);
	}

	if ((is_set($arFields, "EVENT_ID") || $ACTION === "ADD") && $arFields["EVENT_ID"] == '')
	{
		$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_EMPTY_EVENT_ID"), "EMPTY_EVENT_ID");
		return false;
	}

	if (is_set($arFields, "EVENT_ID"))
	{
		$arFields["EVENT_ID"] = mb_strtolower($arFields["EVENT_ID"]);
		$arEvent = CSocNetLogTools::FindLogEventByID(
			$arFields["EVENT_ID"],
			$arFields["ENTITY_TYPE"] ?? false
		);
		if (!$arEvent)
		{
			$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_ERROR_NO_FEATURE_ID"), "ERROR_NO_FEATURE");
			return false;
		}
	}

	if (is_set($arFields, "USER_ID"))
	{
		$dbResult = CUser::GetByID($arFields["USER_ID"]);
		if (!$dbResult->Fetch())
		{
			$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_ERROR_NO_USER_ID"), "ERROR_NO_USER_ID");
			return false;
		}
	}

	if (is_set($arFields, "LOG_DATE") && (!$DB->IsDate($arFields["LOG_DATE"], false, LANG, "FULL")))
	{
		$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_EMPTY_DATE_CREATE"), "EMPTY_LOG_DATE");
		return false;
	}

	if ((is_set($arFields, "TITLE") || $ACTION === "ADD") && $arFields["TITLE"] == '')
	{
		$APPLICATION->ThrowException(Loc::getMessage("SONET_GL_EMPTY_TITLE"), "EMPTY_TITLE");
		return false;
	}

	if (
		isset($arFields["CONTEXT_USER_ID"])
		&& (int)$arFields["CONTEXT_USER_ID"] > 0
	)
	{
		$contextUserId = (int)$arFields["CONTEXT_USER_ID"];
	}
	elseif (
		isset($arFields["USER_ID"])
		&& (int)$arFields["USER_ID"] > 0
	)
	{
		$contextUserId = (int)$arFields["USER_ID"];
	}
	else
	{
		$contextUserId = false;
	}

	if (!$USER_FIELD_MANAGER->CheckFields("SONET_LOG", $ID, $arFields, $contextUserId))
	{
		return false;
	}

	if (
		is_array($arSiteWorkgroupsPage)
		&& is_set($arFields["URL"]))
	{
		foreach($arSiteWorkgroupsPage as $groups_page)
		{
			if (mb_strpos($arFields["URL"], $groups_page) === 0)
			{
				$arFields["URL"] = "#GROUPS_PATH#".mb_substr($arFields["URL"], mb_strlen($groups_page));
			}
		}
	}

	return True;
}