• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/event_calendar.php
  • Класс: CEventCalendar
  • Вызов: CEventCalendar::GetAbsentEvents
static function GetAbsentEvents($arParams)
{
	if (!isset($arParams['arUserIds'], $arParams['iblockId']))
		return false;

	$iblockId = $arParams['iblockId'];
	$arUserIds = $arParams['arUserIds'];
	$fromLimit = $arParams['fromLimit'];
	$toLimit = $arParams['toLimit'];
	$RESULT = array();
	$A_RESULT = array();

	//SELECT
	$arSelect = array(
		"ID",
		"IBLOCK_ID",
		"IBLOCK_SECTION_ID",
		"NAME",
		"ACTIVE_FROM",
		"ACTIVE_TO",
		"DETAIL_TEXT",
		"DETAIL_TEXT_TYPE",
		"TIMESTAMP_X",
		"CREATED_BY",
		"PROPERTY_*",
	);

	//WHERE
	$arFilter = array (
		"IBLOCK_ID" => $iblockId,
		"ACTIVE" => "Y",
		"CHECK_PERMISSIONS" => 'N',
		"PROPERTY_PRIVATE" => false,
		"PROPERTY_ACCESSIBILITY" => 'absent',
		"INCLUDE_SUBSECTIONS" => "Y"
	);

	if (isset($arParams['fromLimit']))
		$arFilter[">=DATE_ACTIVE_TO"] = $fromLimit;
	if (isset($arParams['toLimit']))
		$arFilter["<=DATE_ACTIVE_FROM"] = $toLimit;

	if (is_array($arUserIds) && count($arUserIds) > 0)
		$arFilter["CREATED_BY"] = $arUserIds;
	elseif ($arUserIds !== false)
		return false;

	$arCalendarPrivStatus = array();
	$arSort = Array('ACTIVE_FROM' => 'ASC');//Sort
	$rsElement = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect);
	while($obElement = $rsElement->GetNextElement())
	{
		$arItem = $obElement->GetFields();
		$props = $obElement->GetProperties();

		if (isset($props['CONFIRMED']) && ($props['CONFIRMED']['VALUE_XML_ID'] == 'Q' || $props['CONFIRMED']['VALUE_XML_ID'] == 'N'))
			continue;

		$calendarId = $arItem['IBLOCK_SECTION_ID'];
		if (!$arCalendarPrivStatus[$calendarId])
			$arCalendarPrivStatus[$calendarId] = CECCalendar::GetPrivateStatus($iblockId, $calendarId, 'USER');

		$privateStatus = $arCalendarPrivStatus[$calendarId];

		if ($privateStatus == 'private') // event in private calendar
			continue;

		//$props = $obElement->GetProperties();
		if (!isset($props['ACCESSIBILITY']['VALUE']) || $props['ACCESSIBILITY']['VALUE'] != 'absent')
			continue;

		if ($privateStatus == 'title')
		{
			$arItem['DETAIL_TEXT'] = '';
		}
		elseif ($privateStatus == 'time')
		{
			$arItem['~NAME'] = $arItem['NAME'] = GetMessage('EC_ACCESSIBILITY_ABSENT');
			$arItem['DETAIL_TEXT'] = '';
		}

		$arItem["DISPLAY_ACTIVE_FROM"] = CIBlockFormatProperties::DateFormat(getDateFormat(true), MakeTimeStamp($arItem["ACTIVE_FROM"]));
		$arItem["DISPLAY_ACTIVE_TO"] = CIBlockFormatProperties::DateFormat(getDateFormat(true), MakeTimeStamp($arItem["ACTIVE_TO"]));
		$perType = (isset($props['PERIOD_TYPE']['VALUE']) && $props['PERIOD_TYPE']['VALUE'] != 'NONE')? mb_strtoupper($props['PERIOD_TYPE']['VALUE']) : false;

		if ($perType)
		{
			$count = (isset($props['PERIOD_COUNT']['VALUE'])) ? intval($props['PERIOD_COUNT']['VALUE']) : '';
			$length = (isset($props['EVENT_LENGTH']['VALUE'])) ? intval($props['EVENT_LENGTH']['VALUE']) : '';
			$additional = (isset($props['PERIOD_ADDITIONAL']['VALUE'])) ? $props['PERIOD_ADDITIONAL']['VALUE'] : '';

			$l1 = count($RESULT);
			CEventCalendar::DisplayPeriodicEvent($RESULT, array(
				'arItem' => $arItem,
				'perType' => $perType,
				'count' => $count,
				'length' => $length,
				'additional' => $additional,
				'fromLimit' => $fromLimit,
				'toLimit' => $toLimit,
				'bJS' => false,
				'bSuperposed' => false
			));
			for ($i = $l1; $i < count($RESULT); $i++)
				CEventCalendar::HandleAbsentEvent($RESULT[$i], $arItem['CREATED_BY'], $A_RESULT);
		}
		else
		{
			CEventCalendar::HandleElement($RESULT, $arItem, false, false, false);
			CEventCalendar::HandleAbsentEvent($RESULT[count($RESULT) - 1], $arItem['CREATED_BY'], $A_RESULT);
		}
	}
	if ($arParams['bList'])
		return $RESULT;
	return $A_RESULT;
}