• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasks_report_helper.php
  • Класс: CTasksReportHelper
  • Вызов: CTasksReportHelper::beforeViewDataQuery
static function beforeViewDataQuery(&$select, &$filter, &$group, &$order, &$limit, &$options, &$runtime = null)
{
	parent::beforeViewDataQuery($select, $filter, $group, $order, $limit, $options);
	// unset($select['TAGS']);
	self::rewriteTagsFilter($filter, $runtime);
	self::rewriteMoneyFilter($filter, $runtime);

	global $DB;

	$permFilter = array(
		'LOGIC' => 'OR'
	);

	$userId = BitrixTasksUtilUser::getId();

	// owner permission
	if (isset($_GET['select_my_tasks']) ||
		(!isset($_GET['select_my_tasks']) && !isset($_GET['select_depts_tasks']) && !isset($_GET['select_group_tasks']))
	)
	{
		$runtime['IS_TASK_COWORKER'] = array(
			'data_type' => 'integer',
			'expression' => array("(CASE WHEN EXISTS("
				."SELECT 'x' FROM b_tasks_member TM "
				."WHERE TM.TASK_ID = ".$DB->escL.("tasks_task").$DB->escR.".ID AND TM.USER_ID = ".$userId." AND TM.TYPE = 'A'"
			.") THEN 1 ELSE 0 END)")
		);

		$permFilter[] = array(
			'LOGIC' => 'OR',
			'=RESPONSIBLE_ID' => $userId,
			'=IS_TASK_COWORKER' => 1
		);
	}

	// own departments permission
	if (isset($_GET['select_depts_tasks']))
	{
		$permFilterDepts = array(
			'LOGIC' => 'OR',
			'=CREATED_BY' => $userId
		);

		$deptsPermSql = self::getSubordinateSql();

		if(!empty($deptsPermSql))
		{
			$runtime['IS_SUBORDINATED_TASK'] = [
				'data_type' => 'integer',
				'expression' => [$deptsPermSql],
			];

			$permFilterDepts[] = [
				'!RESPONSIBLE_ID' => $userId,
				'=IS_SUBORDINATED_TASK' => 1,
			];
		}

		$permFilter[] = $permFilterDepts;
	}

	// group permission
	if (isset($_GET['select_group_tasks']))
	{
		$allowedGroups = BitrixTasksIntegrationSocialNetworkGroup::getIdsByAllowedAction('view_all', true, BitrixTasksUtilUser::getId());
		$permFilter[] = array('=GROUP_ID' => $allowedGroups);
	}

	// concat permissions with common filter
	$filter[] = $permFilter;
}