- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/lib/component/userprofile.php
- Класс: BitrixIntranetComponentUserProfile
- Вызов: UserProfile::prepareSubordination
private function prepareSubordination(&$user)
{
global $CACHE_MANAGER;
$obCache = new CPHPCache;
$path = "/user_card_".(int)($user["ID"] / TAGGED_user_card_size);
if ( $this->arParams["CACHE_TIME"] == 0 || $obCache->StartDataCache($this->arParams["CACHE_TIME"], $user["ID"], $path))
{
if ($this->arParams["CACHE_TIME"] > 0 && defined("BX_COMP_MANAGED_CACHE"))
{
$CACHE_MANAGER->StartTagCache($path);
$CACHE_MANAGER->RegisterTag("USER_CARD_".(int)($user["ID"] / TAGGED_user_card_size));
}
//departments and subordinate users
$user['DEPARTMENTS'] = [];
$user["SUBORDINATE"] = [];
$dbDepartments = CIntranetUtils::GetSubordinateDepartmentsList($user["ID"]);
while ($department = $dbDepartments->GetNext())
{
$department['URL'] = str_replace('#ID#', $department['ID'], $this->arParams['PATH_TO_CONPANY_DEPARTMENT']);
$department['EMPLOYEE_COUNT'] = 0;
$user['DEPARTMENTS'][$department['ID']] = $department;
$dbUsers = CUser::GetList(
"",
"",
[
'!ID' => $user['ID'],
'UF_DEPARTMENT' => $department['ID'],
'ACTIVE' => 'Y',
'CONFIRM_CODE' => false,
'IS_REAL_USER' => 'Y',
],
[
'FIELDS' => [ 'ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'WORK_POSITION', 'PERSONAL_PHOTO', 'PERSONAL_GENDER' ],
]
);
while($subUser = $dbUsers->GetNext())
{
if ((int)$subUser["PERSONAL_PHOTO"] <= 0)
{
switch($subUser["PERSONAL_GENDER"])
{
case "M":
$suffix = "male";
break;
case "F":
$suffix = "female";
break;
default:
$suffix = "unknown";
}
$subUser["PERSONAL_PHOTO"] = Option::get('socialnetwork', 'default_user_picture_'.$suffix, false, SITE_ID);
}
$subUser["FULL_NAME"] = CUser::FormatName(CSite::GetNameFormat(), $subUser, true, false);
$subUser["PHOTO"] = self::getUserPhoto($subUser["PERSONAL_PHOTO"], 100);
$subUser["LINK"] = CComponentEngine::MakePathFromTemplate($this->arParams['PATH_TO_USER'], [
'user_id' => $subUser['ID'],
]);
$user["SUBORDINATE"][$subUser["ID"]] = $subUser;
$user['DEPARTMENTS'][$department['ID']]['EMPLOYEE_COUNT'] ++;
}
}
//managers
$user['MANAGERS'] = [];
$managers = CIntranetUtils::GetDepartmentManager($user["UF_DEPARTMENT"], $user["ID"], true);
foreach ($managers as $key => $manager)
{
if ((int)$manager["PERSONAL_PHOTO"] <= 0)
{
switch($manager["PERSONAL_GENDER"])
{
case "M":
$suffix = "male";
break;
case "F":
$suffix = "female";
break;
default:
$suffix = "unknown";
}
$manager["PERSONAL_PHOTO"] = Option::get('socialnetwork', 'default_user_picture_'.$suffix, false, SITE_ID);
}
$manager["FULL_NAME"] = CUser::FormatName(CSite::GetNameFormat(), $manager, true, false);
$manager["PHOTO"] = self::getUserPhoto($manager["PERSONAL_PHOTO"], 100);
$manager["LINK"] = CComponentEngine::MakePathFromTemplate($this->arParams['PATH_TO_USER'], [
'user_id' => $manager['ID'],
]);
$user['MANAGERS'][$key] = $manager;
}
if ($this->arParams["CACHE_TIME"] > 0)
{
$obCache->EndDataCache([
'DEPARTMENTS' => $user['DEPARTMENTS'],
'MANAGERS' => $user['MANAGERS'],
'SUBORDINATE' => $user['SUBORDINATE'],
]);
if (defined("BX_COMP_MANAGED_CACHE"))
{
$CACHE_MANAGER->EndTagCache();
}
}
}
elseif ($this->arParams["CACHE_TIME"] > 0)
{
$vars = $obCache->GetVars();
$user['DEPARTMENTS'] = $vars['DEPARTMENTS'];
$user['MANAGERS'] = $vars['MANAGERS'];
$user['SUBORDINATE'] = $vars['SUBORDINATE'];
}
if (
$user["STATUS"] === 'extranet'
|| $this->getCurrentUserStatus() === 'extranet'
)
{
$user['MANAGERS'] = [];
$user['SUBORDINATE'] = [];
}
}