• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_tools.php
  • Класс: CSocNetLogTools
  • Вызов: CSocNetLogTools::SetUFRights
static function SetUFRights($files, $rights)
{
	static $arTasks = null;
	global $USER;

	if (!CModule::IncludeModule('iblock') || !CModule::IncludeModule('webdav'))
		return false;

	if (!is_array($rights) || count($rights) <= 0)
		return false;

	if ($files === null || $files===false)
		return false;
	if (!is_array($files))
		$files = array($files);

	$arFiles = array();
	foreach($files as $id)
	{
		$id = intval($id);
		if (intval($id) > 0)
			$arFiles[] = $id;
	}

	if (count($arFiles) <= 0)
		return false;

	if ($arTasks == null)
		$arTasks = CWebDavIblock::GetTasks();

	$arCodes = array();
	foreach($rights as $value)
	{
		if (mb_substr($value, 0, 2) === 'SG')
			$arCodes[] = $value.'_K';
		$arCodes[] = $value;
	}
	$arCodes = array_unique($arCodes);

	$i=0;
	$arViewRights = array();
	$curUserID = 'U'.$USER->GetID();
	foreach($arCodes as $right)
	{
		if ($curUserID == $right) // do not override owner's rights
			continue;
		$key = "n".$i++;
		$arViewRights[$key] = array(
			"GROUP_CODE" => $right,
			"TASK_ID" => $arTasks["R"],
		);
	}

	$ibe = new CIBlockElement();
	$dbWDFile = CIBlockElement::GetList(array(), array("ID" => $arFiles, "SHOW_NEW" => "Y"), false, false, array("ID", "NAME", "SECTION_ID", "IBLOCK_ID", "WF_NEW"));
	$iblockIds = array();
	if ($dbWDFile)
	{
		while ($arWDFile = $dbWDFile->Fetch())
		{
			$id = $arWDFile["ID"];

			if ($arWDFile["WF_NEW"] === "Y")
			{
				$ibe->Update($id, array("BP_PUBLISHED" => "Y"));
			}

			if (CIBlock::GetArrayByID($arWDFile['IBLOCK_ID'], "RIGHTS_MODE") === "E")
			{
				$ibRights = CWebDavIblock::_get_ib_rights_object("ELEMENT", $id, $arWDFile["IBLOCK_ID"]);
				$ibRights->SetRights(CWebDavTools::appendRights($ibRights, $arViewRights, $arTasks));
				if (empty($iblockIds[$arWDFile["IBLOCK_ID"]]))
				{
					$iblockIds[$arWDFile["IBLOCK_ID"]] = $arWDFile["IBLOCK_ID"];
				}
			}
		}

		global $CACHE_MANAGER;

		foreach ($iblockIds as $iblockId)
		{
			$CACHE_MANAGER->ClearByTag("iblock_id_".$iblockId);
		}

		unset($iblockId);
	}

	return false;
}