• Модуль: mobile
  • Путь к файлу: ~/bitrix/modules/mobile/lib/component/loglist/processor.php
  • Класс: BitrixMobileComponentLogListProcessor
  • Вызов: Processor::processFilterData
public function processFilterData(&$result)
{
	$params = $this->getComponent()->arParams;

	if ($params['LOG_ID'] > 0)
	{
		$this->setFilterKey('ID', $params['LOG_ID']);
		$this->showPinnedPanel = false;
	}
	elseif (
		$result['AJAX_CALL']
		&& $params['NEW_LOG_ID'] > 0
	)
	{
		$this->setFilterKey('ID', $params['NEW_LOG_ID']);
		$this->showPinnedPanel = false;
	}
	else
	{
		if ($params['DESTINATION'] > 0)
		{
			$this->setFilterKey('LOG_RIGHTS', $params['DESTINATION']);
			$this->showPinnedPanel = false;
		}
		elseif ($params['GROUP_ID'] > 0)
		{
			$this->setFilterKey('LOG_RIGHTS', 'SG'.(int)$params['GROUP_ID']);

			if ($result['GROUP_READ_ONLY'] === 'Y')
			{
				$this->setFilterKey('LOG_RIGHTS_SG', 'OSG' . (int)$params['GROUP_ID'] . '_' . SONET_ROLES_AUTHORIZED);
			}

			$this->showPinnedPanel = false;
		}

		if ($params['FIND'] <> '')
		{
			$fullTextEnabled = BitrixSocialnetworkLogIndexTable::getEntity()->fullTextIndexEnabled('CONTENT');
			$operation = ($fullTextEnabled ? '*' : '*%');
			if (
				!$fullTextEnabled
				|| mb_strlen($params['FIND']) >= $result['ftMinTokenSize']
			)
			{
				$this->setFilterKey($operation.'CONTENT', BitrixSocialnetworkItemLogIndex::prepareToken($params['FIND']));
			}
			$this->showPinnedPanel = false;
		}

		if ($params['IS_CRM'] !== 'Y')
		{
			$logRightsFilterValue = $this->getFilterKey('LOG_RIGHTS');

			$this->setFilterKey('!MODULE_ID', ( // can't use !@MODULE_ID because of null
				Option::get('crm', 'enable_livefeed_merge', 'N') === 'Y'
				|| (
					!empty($logRightsFilterValue)
					&& !is_array($logRightsFilterValue)
					&& preg_match('/^SG(d+)$/', $logRightsFilterValue, $matches)
				)
					? ['crm']
					: ['crm', 'crm_shared']
			));
		}
	}

	if (
		$params['LOG_ID'] <= 0
		&& $params['NEW_LOG_ID'] <= 0
	)
	{
		if (isset($params['EXACT_EVENT_ID']))
		{
			$this->setFilterKey('EVENT_ID', [$params['EXACT_EVENT_ID']]);
		}
		elseif (is_array($params['EVENT_ID']))
		{
			$arraysToMerge = [];
			foreach ($params['EVENT_ID'] as $eventId)
			{
				$arraysToMerge[] = CSocNetLogTools::findFullSetByEventID($eventId);
			}
			$eventIdFullSet = array_merge([], ...$arraysToMerge);

			$this->setFilterKey('EVENT_ID', array_unique($eventIdFullSet));
		}
		elseif ($params['EVENT_ID'])
		{
			$this->setFilterKey('EVENT_ID', CSocNetLogTools::findFullSetByEventID($params['EVENT_ID']));
		}

		if ((int)$params['CREATED_BY_ID'] > 0) // from preset
		{
			$this->setFilterKey('USER_ID', $params['CREATED_BY_ID']);
		}
	}

	if (
		(
			$params['GROUP_ID'] > 0
			|| $params['USER_ID'] > 0
		)
		&& $this->getFilterKey('EVENT_ID') === false
	)
	{
		$eventIdFilterValue = [];

		$allowedEventIdList = CSocNetAllowed::getAllowedLogEvents();
		foreach ($allowedEventIdList as $eventId => $eventData)
		{
			if (
				array_key_exists('HIDDEN', $eventData)
				&& $eventData['HIDDEN']
			)
			{
				continue;
			}

			$eventIdFilterValue[] = $eventId;
		}

		$featuresList = CSocNetFeatures::GetActiveFeatures(
			($params['GROUP_ID'] > 0 ? SONET_ENTITY_GROUP : SONET_ENTITY_USER),
			($params["GROUP_ID"] > 0 ? $params['GROUP_ID'] : $params['USER_ID'])
		);
		$allowedFeaturesList = CSocNetAllowed::getAllowedFeatures();
		foreach ($featuresList as $featureId)
		{
			if (
				array_key_exists($featureId, $allowedFeaturesList)
				&& array_key_exists('subscribe_events', $allowedFeaturesList[$featureId])
			)
			{
				foreach ($allowedFeaturesList[$featureId]['subscribe_events'] as $eventId => $eventData)
				{
					$eventIdFilterValue[] = $eventId;
				}
			}
		}
		$this->setFilterKey('EVENT_ID', $eventIdFilterValue);
	}

	if (
		$this->getFilterKey('EVENT_ID') === false
		|| (is_array($this->getFilterKey('EVENT_ID')) && empty($this->getFilterKey('EVENT_ID')))
	)
	{
		$this->unsetFilterKey('EVENT_ID');
	}

	$this->setFilterKey('SITE_ID', ($result['bExtranetSite'] ? SITE_ID : [SITE_ID, false]));
	$this->setFilterKey('<=LOG_DATE', 'NOW');

	if (
		$params['LOG_ID'] <= 0
		&& $params['NEW_LOG_ID'] <= 0
		&& in_array($params['FILTER'], ['favorites', 'my', 'important', 'work', 'bizproc', 'blog'])
	)
	{
		if ($params['FILTER'] === 'favorites')
		{
			$this->setFilterKey('>FAVORITES_USER_ID', 0);
		}
		elseif ($params['FILTER'] === 'my')
		{
			$this->setFilterKey('USER_ID', $result['currentUserId']);
		}
		elseif ($params['FILTER'] === 'important')
		{
			$this->setFilterKey('EVENT_ID', 'blog_post_important');
		}
		elseif ($params['FILTER'] === 'work')
		{
			$this->setFilterKey('EVENT_ID', ['tasks', 'timeman_entry', 'report']);
		}
		elseif ($params['FILTER'] === 'bizproc')
		{
			$this->setFilterKey('EVENT_ID', 'lists_new_element');
		}
		elseif ($params['FILTER'] === 'blog')
		{
			$blogPostLivefeedProvider = new BitrixSocialnetworkLivefeedBlogPost;
			$this->setFilterKey('EVENT_ID', $blogPostLivefeedProvider->getEventId());
		}
	}

	if (!ComponentHelper::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, 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);
	}

	if ($result['currentUserId'] > 0)
	{
		$result['USE_PINNED'] = 'Y';

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