- Модуль: 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;
}