• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskitem.php
  • Класс: CTaskItem
  • Вызов: CTaskItem::getUserRolesArray
static function getUserRolesArray($userId, array $taskData)
{
	$userRole = 0;

	if (isset($taskData['CREATED_BY']) && (int)$taskData['CREATED_BY'] === $userId)
	{
		$userRole |= self::ROLE_DIRECTOR;
	}

	if (isset($taskData['RESPONSIBLE_ID']) && (int)$taskData['RESPONSIBLE_ID'] === $userId)
	{
		$userRole |= self::ROLE_RESPONSIBLE;
	}

	if (
		array_key_exists('ACCOMPLICES', $taskData)
		&& is_array($taskData['ACCOMPLICES'])
		&& in_array($userId, $taskData['ACCOMPLICES'])
	)
	{
		$userRole |= self::ROLE_ACCOMPLICE;
	}

	if (
		array_key_exists('AUDITORS', $taskData)
		&& is_array($taskData['AUDITORS'])
		&& in_array($userId, $taskData['AUDITORS'])
	)
	{
		$userRole |= self::ROLE_AUDITOR;
	}

	// Now, process subordinated users
	$allRoles = self::ROLE_DIRECTOR | self::ROLE_RESPONSIBLE | self::ROLE_ACCOMPLICE | self::ROLE_AUDITOR;

	if ($userRole !== $allRoles)
	{
		$subEmployees = static::getSubEmployees($userId);

		if (!empty($subEmployees))
		{
			// Check only roles, that user doesn't have already
			if (
				!($userRole & self::ROLE_DIRECTOR)
				&& array_key_exists('CREATED_BY', $taskData)
				&& in_array($taskData['CREATED_BY'], $subEmployees, true)
			)
			{
				$userRole |= self::ROLE_DIRECTOR;
			}

			if (
				!($userRole & self::ROLE_RESPONSIBLE)
				&& array_key_exists('RESPONSIBLE_ID', $taskData)
				&& in_array($taskData['RESPONSIBLE_ID'], $subEmployees, true)
			)
			{
				$userRole |= self::ROLE_RESPONSIBLE;
			}

			if (
				!($userRole & self::ROLE_ACCOMPLICE)
				&& array_key_exists('ACCOMPLICES', $taskData)
				&& is_array($taskData['ACCOMPLICES'])
			)
			{
				foreach ($taskData['ACCOMPLICES'] as $accompliceId)
				{
					if (in_array($accompliceId, $subEmployees, true))
					{
						$userRole |= self::ROLE_ACCOMPLICE;
						break;
					}
				}
			}

			if (
				!($userRole & self::ROLE_AUDITOR)
				&& array_key_exists('AUDITORS', $taskData)
				&& is_array($taskData['AUDITORS'])
			)
			{
				foreach ($taskData['AUDITORS'] as $auditorId)
				{
					if (in_array($auditorId, $subEmployees, true))
					{
						$userRole |= self::ROLE_AUDITOR;
						break;
					}
				}
			}
		}
	}

	// No role in task?
	if ($userRole === 0)
	{
		$userRole = self::ROLE_NOT_A_MEMBER;
	}

	return $userRole;
}