• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_rights.php
  • Класс: CSocNetLogRights
  • Вызов: CSocNetLogRights::SetForSonet
static function SetForSonet($logID, $entity_type, $entity_id, $feature, $operation, $bNew = false)
{
	$bFlag = true;
	if (!$bNew)
	{
		$rsRights = CSocNetLogRights::GetList(array(), array("LOG_ID" => $logID));
		if ($arRights = $rsRights->Fetch())
		{
			$bFlag = false;
		}
	}

	if ($bFlag)
	{
		$bExtranet = false;
		$perm = CSocNetFeaturesPerms::GetOperationPerm($entity_type, $entity_id, $feature, $operation);
		if ($perm)
		{
			$extranet_site_id = false;
			if (CModule::IncludeModule("extranet") && $extranet_site_id = CExtranet::GetExtranetSiteID())
			{
				$arLogSites = array();
				$rsLogSite = CSocNetLog::GetSite($logID);
				while($arLogSite = $rsLogSite->Fetch())
				{
					$arLogSites[] = $arLogSite["LID"];
				}

				if (in_array($extranet_site_id, $arLogSites))
				{
					$bExtranet = true;
				}
			}

			if ($bExtranet && $extranet_site_id)
			{
				if ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_OWNER)
					CSocNetLogRights::Add($logID, array("SA", "S".SONET_ENTITY_GROUP.$entity_id, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_OWNER));
				elseif ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_MODERATOR)
					CSocNetLogRights::Add($logID, array("SA", "S".SONET_ENTITY_GROUP.$entity_id, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_OWNER, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_MODERATOR));
				elseif ($entity_type == SONET_ENTITY_GROUP && in_array($perm, array(SONET_ROLES_USER, SONET_ROLES_AUTHORIZED, SONET_ROLES_ALL)))
					CSocNetLogRights::Add($logID, array("SA", "S".SONET_ENTITY_GROUP.$entity_id, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_OWNER, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_MODERATOR, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_USER));
				elseif ($entity_type == SONET_ENTITY_USER && $perm == SONET_RELATIONS_TYPE_NONE)
					CSocNetLogRights::Add($logID, array("SA", "U".$entity_id));
				elseif ($entity_type == SONET_ENTITY_USER && in_array($perm, array(SONET_RELATIONS_TYPE_FRIENDS, SONET_RELATIONS_TYPE_FRIENDS2, SONET_RELATIONS_TYPE_AUTHORIZED, SONET_RELATIONS_TYPE_ALL)))
				{
					$arCode = array("SA");
					$arLog = CSocNetLog::GetByID($logID);
					if ($arLog)
					{
						$dbUsersInGroup = CSocNetUserToGroup::GetList(
							array(),
							array(
								"USER_ID" => $arLog["USER_ID"],
								"<=ROLE" => SONET_ROLES_USER,
								"GROUP_SITE_ID" => $extranet_site_id,
								"GROUP_ACTIVE" => "Y"
							),
							false,
							false,
							array("ID", "GROUP_ID")
						);
						while ($arUsersInGroup = $dbUsersInGroup->Fetch())
						{
							if (!in_array("S".SONET_ENTITY_GROUP.$arUsersInGroup["GROUP_ID"]."_".SONET_ROLES_USER, $arCode))
							{
								$arCode = array_merge(
									$arCode,
									array(
										"S".SONET_ENTITY_GROUP.$arUsersInGroup["GROUP_ID"]."_".SONET_ROLES_OWNER,
										"S".SONET_ENTITY_GROUP.$arUsersInGroup["GROUP_ID"]."_".SONET_ROLES_MODERATOR,
										"S".SONET_ENTITY_GROUP.$arUsersInGroup["GROUP_ID"]."_".SONET_ROLES_USER
									)
								);
							}
						}

						CSocNetLogRights::Add($logID, $arCode);
					}
				}
			}
			else
			{
				if ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_OWNER)
					CSocNetLogRights::Add($logID, array("SA", "S".SONET_ENTITY_GROUP.$entity_id, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_OWNER));
				elseif ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_MODERATOR)
					CSocNetLogRights::Add($logID, array("SA", "S".SONET_ENTITY_GROUP.$entity_id, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_OWNER, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_MODERATOR));
				elseif ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_USER)
					CSocNetLogRights::Add($logID, array("SA", "S".SONET_ENTITY_GROUP.$entity_id, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_OWNER, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_MODERATOR, "S".SONET_ENTITY_GROUP.$entity_id."_".SONET_ROLES_USER));
				elseif ($entity_type == SONET_ENTITY_USER && in_array($perm, array(SONET_RELATIONS_TYPE_FRIENDS, SONET_RELATIONS_TYPE_FRIENDS2)))
				{
					$arCodes = array("SA", "U".$entity_id, "S".$entity_type.$entity_id."_".SONET_RELATIONS_TYPE_FRIENDS);
					CSocNetLogRights::Add($logID, $arCodes);
				}
				elseif ($entity_type == SONET_ENTITY_USER && $perm == SONET_RELATIONS_TYPE_NONE)
					CSocNetLogRights::Add($logID, array("SA", "U".$entity_id));
				elseif ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_AUTHORIZED)
					CSocNetLogRights::Add($logID, array("SA", "S".$entity_type.$entity_id, "S".$entity_type.$entity_id."_".SONET_ROLES_USER, "AU"));
				elseif ($entity_type == SONET_ENTITY_USER && $perm == SONET_RELATIONS_TYPE_AUTHORIZED)
					CSocNetLogRights::Add($logID, array("SA", "AU"));
				elseif ($entity_type == SONET_ENTITY_GROUP && $perm == SONET_ROLES_ALL)
					CSocNetLogRights::Add($logID, array("SA", "S".$entity_type.$entity_id, "S".$entity_type.$entity_id."_".SONET_ROLES_USER, "G2"));
				elseif ($entity_type == SONET_ENTITY_USER && $perm == SONET_RELATIONS_TYPE_ALL)
					CSocNetLogRights::Add($logID, array("SA", "G2"));
			}
		}
	}
}