• Модуль: 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'] = [];
	}
}