• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/controller/calendarajax.php
  • Класс: BitrixCalendarControllerCalendarAjax
  • Вызов: CalendarAjax::getTrackingSectionsAction
public function getTrackingSectionsAction()
{
	if (Loader::includeModule('intranet') && !BitrixIntranetUtil::isIntranetUser())
	{
		return [];
	}

	$request = $this->getRequest();
	$mode = $request->get('type');

	$users = [];
	if ($mode === 'users')
	{
		$userIds = $request->get('userIdList');
		$ormRes = BitrixMainUserTable::getList([
			'filter' => ['=ID' => $userIds],
			'select' => ['ID', 'LOGIN', 'NAME', 'LAST_NAME', 'SECOND_NAME']
		]);
		while ($user = $ormRes->fetch())
		{
			$user['FORMATTED_NAME'] = CCalendar::GetUserName($user);
			$users[] = $user;
		}

		$sections = CCalendarSect::getSuperposedList(['USERS' => $userIds]);
	}
	elseif ($mode === 'groups')
	{
		$groupIds = $request->get('groupIdList') ?? [];
		$sections = CCalendarSect::getSuperposedList(['GROUPS' => $groupIds]);

		if (Loader::includeModule('socialnetwork'))
		{
			foreach ($groupIds as $groupId)
			{
				$groupId = (int)$groupId;
				$createDefaultGroupSection = CSocNetFeatures::isActiveFeature(
					SONET_ENTITY_GROUP,
					$groupId,
					"calendar"
				);

				if ($createDefaultGroupSection)
				{
					foreach ($sections as $section)
					{
						if ((int)$section['OWNER_ID'] === $groupId)
						{
							$createDefaultGroupSection = false;
							break;
						}
					}
				}

				if ($createDefaultGroupSection)
				{
					$sections[] = CCalendarSect::createDefault([
						'type' => 'group',
						'ownerId' => $groupId
					]);
				}
			}
		}
	}
	else
	{
		$types = [];
		$typesRes = CCalendarType::GetList();
		foreach ($typesRes as $type)
		{
			if (
				$type['XML_ID'] !== 'user'
				&& $type['XML_ID'] !== 'group'
				&& $type['XML_ID'] !== 'location'
			)
			{
				$types[] = $type['XML_ID'];
			}
		}

		$sections = CCalendarSect::getSuperposedList(['TYPES' => $types]);
	}

	return [
		'users' => $users,
		'sections' => $sections
	];
}