• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/component/loglist/processor.php
  • Класс: BitrixSocialnetworkComponentLogListProcessor
  • Вызов: Processor::processFilterData
public function processFilterData(&$result): void
{
	global $USER;

	$params = $this->getComponent()->arParams;

	if ($params['LOG_ID'] > 0)
	{
		$this->setFilterKey('ID', $params['LOG_ID']);
		$this->showPinnedPanel = false;
	}

	$turnFollowModeOff = false;

	if (isset($params['DISPLAY']))
	{
		$result['SHOW_UNREAD'] = 'N';

		if (in_array($params['DISPLAY'], [ 'forme', 'my']))
		{
			$accessCodesList = $USER->getAccessCodes();
			foreach ($accessCodesList as $i => $code)
			{
				if (!preg_match('/^(U|D|DR)/', $code)) //Users and Departments
				{
					unset($accessCodesList[$i]);
				}
			}
			$this->setFilterKey('LOG_RIGHTS', $accessCodesList);
		}

		if ($params['DISPLAY'] === 'forme')
		{
			$this->setFilterKey('!USER_ID', $result['currentUserId']);
		}
		elseif ($params['DISPLAY'] === 'mine')
		{
			$this->setFilterKey('USER_ID', $result['currentUserId']);
		}
		elseif (is_numeric($params['DISPLAY']))
		{
			$this->setFilterKey('USER_ID', (int)$params['DISPLAY']);
		}

		if (
			is_numeric($params['DISPLAY'])
			|| in_array($params['DISPLAY'], [ 'forme', 'mine'])
		)
		{
			$result['IS_FILTERED'] = true;
		}
		$this->showPinnedPanel = false;
	}

	if (
		!empty($params['DESTINATION'])
		&& is_array($params['DESTINATION'])
	)
	{
		$this->setFilterKey('LOG_RIGHTS', $params['DESTINATION']);
		if (count($params['DESTINATION']) == 1)
		{
			$code = array_shift($params['DESTINATION']);
			if (preg_match('/^U(d+)$/', $code, $matches))
			{
				$this->setFilterKey('!USER_ID', $matches[1]);
			}
		}

		if (
			$params['MODE'] === 'LANDING'
			&& !empty($params['DESTINATION_AUTHOR_ID'])
			&& (int)$params['DESTINATION_AUTHOR_ID'] > 0
		) // landing author filter
		{
			$this->setFilterKey('USER_ID', (int)$params['DESTINATION_AUTHOR_ID']);
		}
	}
	elseif ($params['GROUP_ID'] > 0)
	{
		$this->setFilterKey('LOG_RIGHTS', 'SG'.$params['GROUP_ID']);

		if (
			isset($result['Group'])
			&& $result['Group']['OPENED'] === 'Y'
		)
		{
			$this->setFilterKey('LOG_RIGHTS_SG', 'OSG' . $params['GROUP_ID'].'_' . (Util::checkUserAuthorized() ? SONET_ROLES_AUTHORIZED : SONET_ROLES_ALL));
		}

		$result['SHOW_FOLLOW_CONTROL'] = 'N';
		$this->showPinnedPanel = false;
	}
	elseif ($params['TO_USER_ID'] > 0)
	{
		$this->setFilterKey('LOG_RIGHTS', 'U'.$params['TO_USER_ID']);
		$this->setFilterKey('!USER_ID', $params['TO_USER_ID']);

		$result['SHOW_FOLLOW_CONTROL'] = 'N';

		$res = UserTable::getList([
			'filter' => [
				'=ID' => $params['TO_USER_ID']
			],
			'select' => [ 'ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN' ]
		]);
		if ($userFields = $res->fetch())
		{
			$result['ToUser'] = [
				'ID' => $userFields['ID'],
				'NAME' => CUser::formatName($params['NAME_TEMPLATE'], $userFields, $this->getComponent()->useLogin)
			];
		}
	}
	elseif ($params['USER_ID'] > 0)
	{
		$this->setFilterKey('ENTITY_TYPE', SONET_ENTITY_USER);
		$this->setFilterKey('ENTITY_ID',  $params['USER_ID']);
	}
	elseif ($params['ENTITY_TYPE'] <> '')
	{
		$this->setFilterKey('ENTITY_TYPE', $params['ENTITY_TYPE']);
	}

	if ($params['~TAG'] <> '')
	{
		$this->setFilterKey('=TAG', $params['~TAG']);
		$turnFollowModeOff = true;
	}
	elseif ($params['FIND'] <> '')
	{
		$this->setFilterKey('*CONTENT', LogIndex::prepareToken($params['FIND']));
		$this->showPinnedPanel = false;
	}

	if (
		isset($params['!EXACT_EVENT_ID'])
		&& $params['!EXACT_EVENT_ID'] <> ''
	)
	{
		$this->setFilterKey('!EVENT_ID', $params['!EXACT_EVENT_ID']);
		$turnFollowModeOff = true;
	}

	if (
		isset($params['EXACT_EVENT_ID'])
		&& $params['EXACT_EVENT_ID'] <> ''
	)
	{
		$this->setFilterKey('EVENT_ID', [ $params['EXACT_EVENT_ID'] ]);
		$turnFollowModeOff = true;
	}
	elseif (
		isset($params['EVENT_ID'])
		&& is_array($params['EVENT_ID'])
	)
	{
		if (!in_array('all', $params['EVENT_ID'], true))
		{
			$eventIdList = [];
			foreach ($params['EVENT_ID'] as $eventId)
			{
				$eventIdList = array_merge($eventIdList, CSocNetLogTools::findFullSetByEventID($eventId));
			}

			if (!empty($eventIdList))
			{
				$this->setFilterKey('EVENT_ID', array_unique($eventIdList));
			}
			$turnFollowModeOff = true;
		}
	}
	elseif (
		isset($params['EVENT_ID'])
		&& $params['EVENT_ID'] <> ''
	)
	{
		$this->setFilterKey('EVENT_ID', CSocNetLogTools::findFullSetByEventID($params['EVENT_ID']));
		$turnFollowModeOff = true;
	}
	elseif ($this->getComponent()->getPresetFilterIdValue() === 'extranet')
	{
		$turnFollowModeOff = true;
	}

	if ($params['CREATED_BY_ID'] > 0)
	{
		if ($this->getComponent()->getCommentsNeededValue())
		{
			$this->setFilterKey('USER_ID|COMMENT_USER_ID', $params['CREATED_BY_ID']);
		}
		else
		{
			$this->setFilterKey('USER_ID', $params['CREATED_BY_ID']);
		}
		$this->unsetFilterKey('!USER_ID');
		$turnFollowModeOff = true;
	}

	if ($params['GROUP_ID'] > 0)
	{
		$result['IS_FILTERED'] = true;
	}

	if (
		isset($params['FLT_ALL'])
		&& $params['FLT_ALL'] === 'Y'
	)
	{
		$this->setFilterKey('ALL', 'Y');
	}

	if (isset($params['FILTER_SITE_ID']))
	{
		$this->setFilterKey('SITE_ID', $params['FILTER_SITE_ID']);
	}
	elseif ($params['MODE'] !== 'LANDING')
	{
		$this->setFilterKey('SITE_ID', (
			$result['isExtranetSite']
				? SITE_ID
				: [ SITE_ID, false ]
		));
	}

	if (
		isset($params['LOG_DATE_FROM'])
		&& $params['LOG_DATE_FROM'] <> ''
		&& $this->makeTimeStampFromDateTime($params['LOG_DATE_FROM'], 'SHORT') < time() + $result['TZ_OFFSET']
	)
	{
		$this->setFilterKey('>=LOG_DATE', $params['LOG_DATE_FROM']);
		$turnFollowModeOff = true;
	}
	else
	{
		unset($_REQUEST['flt_date_from']);
	}

	if (
		isset($params['LOG_DATE_TO'])
		&& $params['LOG_DATE_TO'] <> ''
		&& $this->makeTimeStampFromDateTime($params['LOG_DATE_TO'], 'SHORT') < time() + $result['TZ_OFFSET']
	)
	{
		$this->setFilterKey('<=LOG_DATE', convertTimeStamp($this->makeTimeStampFromDateTime($params['LOG_DATE_TO'], 'SHORT')+86399, 'FULL'));
		$turnFollowModeOff = true;
	}
	else
	{
		$this->setFilterKey('<=LOG_DATE', 'NOW');
		unset($_REQUEST['flt_date_to']);
	}

	$this->processMainUIFilterData($result);

	if ($params['IS_CRM'] === 'Y')
	{
		if (Loader::includeModule('crm'))
		{
			$result['CRM_ENTITY_TYPE_NAME'] = CCrmOwnerType::resolveName(CCrmLiveFeedEntity::resolveEntityTypeID($params['CRM_ENTITY_TYPE']));
			$result['CRM_ENTITY_ID'] = $params['CRM_ENTITY_ID'];
		}

		if (
			$params['CRM_ENTITY_TYPE'] <> ''
			|| $this->getComponent()->getPresetFilterTopIdValue()
		)
		{
			$result['SHOW_UNREAD'] = 'N';
		}
		$this->showPinnedPanel = false;
	}

	$result['presetFilterTopIdValue'] = $this->getComponent()->getPresetFilterTopIdValue();
	$result['presetFilterIdValue'] = $this->getComponent()->getPresetFilterIdValue();

	if (
		(
			!isset($params['USE_FAVORITES'])
			|| $params['USE_FAVORITES'] !== 'N'
		)
		&& isset($params['FAVORITES'])
		&& $params['FAVORITES'] === 'Y'
	)
	{
		$this->setFilterKey('>FAVORITES_USER_ID', 0);
		$result['SHOW_UNREAD'] = 'N';
	}

	if ($turnFollowModeOff)
	{
		$result['SHOW_UNREAD'] = 'N';
		$result['SHOW_FOLLOW_CONTROL'] = 'N';
		$result['IS_FILTERED'] = true;
	}

	if (
		$params["IS_CRM"] !== "Y"
		&& !BitrixSocialnetworkComponentHelper::checkLivefeedTasksAllowed()
	)
	{
		$eventIdFilter = $this->getFilterKey('EVENT_ID');
		$notEventIdFilter = $this->getFilterKey('!EVENT_ID');

		if (empty($notEventIdFilter))
		{
			$notEventIdFilter = [];
		}
		elseif (!is_array($notEventIdFilter))
		{
			$notEventIdFilter = [ $notEventIdFilter ];
		}

		if (empty($eventIdFilter))
		{
			$eventIdFilter = [];
		}
		elseif (!is_array($eventIdFilter))
		{
			$eventIdFilter = [ $eventIdFilter ];
		}

		if (ModuleManager::isModuleInstalled('tasks'))
		{
			$notEventIdFilter = array_merge($notEventIdFilter, [ 'tasks' ]);
			$eventIdFilter = array_filter($eventIdFilter, static function($eventId) { return ($eventId !== 'tasks'); });
		}
		if (
			ModuleManager::isModuleInstalled('crm')
			&& Option::get('crm', 'enable_livefeed_merge', 'N') === 'Y'
		)
		{
			$notEventIdFilter = array_merge($notEventIdFilter, [ 'crm_activity_add' ]);
			$eventIdFilter = array_filter($eventIdFilter, static function($eventId) { return ($eventId !== 'crm_activity_add'); });
		}

		if (!empty($notEventIdFilter))
		{
			$this->setFilterKey('!EVENT_ID', $notEventIdFilter);
		}
		$this->setFilterKey('EVENT_ID', $eventIdFilter);
	}

	$result['USE_PINNED'] = 'N';
	$result['SHOW_PINNED_PANEL'] = 'N';

	if (
		$result['currentUserId'] > 0
		&& $params['MODE'] !== 'LANDING'
		&& $params['IS_CRM'] !== 'Y'
	)
	{
		$result['USE_PINNED'] = 'Y';

		if ($this->showPinnedPanel)
		{
			$this->setFilterKey('PINNED_USER_ID', 0);
			$result['SHOW_PINNED_PANEL'] = 'Y';
		}
	}
}