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

	static
		$inited = false,
		$isExtranetAvailable = false,
		$isExtranetSite = false,
		$isTasksAvailable = false,
		$isCrmAvailable = false,
		$isListsAvailable = false,
		$isTimemanAvailable = false;

	$arFilter = array();

	if (!$inited)
	{
		$isExtranetAvailable = ModuleManager::isModuleInstalled('extranet');
		$isExtranetSite = (
			$isExtranetAvailable
			&& Loader::includeModule('extranet')
			&& CExtranet::isExtranetSite()
		);
		$isTasksAvailable = ModuleManager::isModuleInstalled('tasks');
		$isCrmAvailable = ModuleManager::isModuleInstalled('crm');
		$isListsAvailable = (ModuleManager::isModuleInstalled('lists') && ModuleManager::isModuleInstalled('bizproc') && ModuleManager::isModuleInstalled('intranet'));
		$isTimemanAvailable = ModuleManager::isModuleInstalled('timeman');
		$inited = true;
	}

	foreach ($arPreset as $key => $arPresetFilterTmp)
	{
		$bCorrect = true;

		if (!empty($arPresetFilterTmp["ID"]))
		{
			if (
				$arPresetFilterTmp["ID"] == "extranet"
				&& (
					!$isExtranetAvailable
					|| $isExtranetSite
				)
			)
			{
				unset($arPresetFilterTmp["ID"]);
			}
			elseif
			(
				$arPresetFilterTmp["ID"] === "work"
				&& $isCrmAvailable
				&& BitrixMainConfigOption::get("crm", "enable_livefeed_merge", "N") === "Y"
				&& !empty($arPresetFilterTmp["FILTER"])
				&& is_array($arPresetFilterTmp["FILTER"]["EVENT_ID"])
			)
			{
				$arPreset[$key] = $arPresetFilterTmp["FILTER"]["EVENT_ID"] = array_unique(array_merge($arPresetFilterTmp["FILTER"]["EVENT_ID"], array("crm_activity_add")));
			}

			if (empty($arPresetFilterTmp["ID"]))
			{
				continue;
			}
		}

		if (
			!empty($arPresetFilterTmp["FILTER"])
			&& !empty($arPresetFilterTmp["EVENT_ID"])
		)
		{
			foreach ($arPresetFilterTmp["FILTER"]["EVENT_ID"] as $eventKey => $eventId)
			{
				if (
					($eventId === "tasks" && !$isTasksAvailable)
					|| (in_array($eventId, array("timeman_entry", "report")) && !$isTimemanAvailable)
				)
				{
					unset($arPresetFilterTmp["FILTER"]["EVENT_ID"][$eventKey]);
				}
			}

			if (empty($arPresetFilterTmp["FILTER"]["EVENT_ID"]))
			{
				continue;
			}
		}

		if (
			!empty($arPresetFilterTmp["FILTER"])
			&& !empty($arPresetFilterTmp["FILTER"]["EXACT_EVENT_ID"])
		)
		{
			if (
				(
					$arPresetFilterTmp["FILTER"]["EXACT_EVENT_ID"] === "lists_new_element"
					&& (
						(
							isset($arParams["GROUP_ID"])
							&& (int)$arParams["GROUP_ID"] > 0
						)
						|| !$isListsAvailable
						|| $isExtranetSite
					)
				)
			)
			{
				unset($arPresetFilterTmp["FILTER"]["EXACT_EVENT_ID"]);
			}

			if (empty($arPresetFilterTmp["FILTER"]["EXACT_EVENT_ID"]))
			{
				continue;
			}
		}

		if (array_key_exists("NAME", $arPresetFilterTmp))
		{
			switch(mb_strtoupper($arPresetFilterTmp["NAME"]))
			{
				case "#WORK#":
					$arPresetFilterTmp["NAME"] = GetMessage("SONET_INSTALL_LOG_PRESET_WORK"); // lang/include.php
					break;
				case "#FAVORITES#":
					$arPresetFilterTmp["NAME"] = GetMessage("SONET_INSTALL_LOG_PRESET_FAVORITES");
					break;
				case "#IMPORTANT#":
					$arPresetFilterTmp["NAME"] = GetMessage("SONET_INSTALL_LOG_PRESET_IMPORTANT");
					break;
				case "#MY#":
					$arPresetFilterTmp["NAME"] = GetMessage("SONET_INSTALL_LOG_PRESET_MY");
					break;
				case "#BIZPROC#":
					$arPresetFilterTmp["NAME"] = GetMessage("SONET_INSTALL_LOG_PRESET_BIZPROC");
					break;
				case "#EXTRANET#":
					$arPresetFilterTmp["NAME"] = GetMessage("SONET_INSTALL_LOG_PRESET_EXTRANET");
					break;
			}
		}

		if (
			array_key_exists("FILTER", $arPresetFilterTmp)
			&& is_array($arPresetFilterTmp["FILTER"])
		)
		{
			foreach ($arPresetFilterTmp["FILTER"] as $tmp_id_2 => $filterTmp)
			{
				if (
					(
						!is_array($filterTmp)
						&& $filterTmp === "#CURRENT_USER_ID#"
					)
					|| (
						is_array($filterTmp)
						&& in_array("#CURRENT_USER_ID#", $filterTmp, true)
					)
				)
				{
					if (!$USER->isAuthorized())
					{
						$bCorrect = false;
						break;
					}
					elseif (!is_array($filterTmp))
					{
						$arPresetFilterTmp["FILTER"][$tmp_id_2] = $USER->getId();
					}
					elseif (is_array($filterTmp))
					{
						foreach($filterTmp as $tmp_id_3 => $valueTmp)
						{
							if ($valueTmp === "#CURRENT_USER_ID#")
							{
								$arPresetFilterTmp["FILTER"][$tmp_id_2][$tmp_id_3] = $USER->getId();
							}
						}
					}
				}
				elseif (
					(
						!is_array($filterTmp)
						&& $filterTmp === "#EXTRANET_SITE_ID#"
					)
					|| (
						is_array($filterTmp)
						&& in_array("#EXTRANET_SITE_ID#", $filterTmp)
					)
				)
				{
					if (
						!ModuleManager::isModuleInstalled("extranet")
						|| !COption::GetOptionString("extranet", "extranet_site", false)
					)
					{
						$bCorrect = false;
						break;
					}

					if (!is_array($filterTmp))
					{
						$arPresetFilterTmp["FILTER"][$tmp_id_2] = COption::GetOptionString("extranet", "extranet_site");
					}
					else
					{
						foreach($filterTmp as $tmp_id_3 => $valueTmp)
						{
							if ($valueTmp === "#EXTRANET_SITE_ID#")
							{
								$arPresetFilterTmp["FILTER"][$tmp_id_2][$tmp_id_3] = COption::GetOptionString("extranet", "extranet_site");
							}
						}
					}
				}
			}
		}

		if ($bCorrect)
		{
			$arFilter[$arPresetFilterTmp["ID"]] = $arPresetFilterTmp;
		}
	}

	return $arFilter;
}