- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/classes/general/event_calendar.php
- Класс: CEventCalendar
- Вызов: CEventCalendar::GetNearestEventsList
static function GetNearestEventsList($arParams)
{
if (!isset($arParams['userId']))
{
global $USER;
// Get current user id
$curUserId = $USER->IsAuthorized() ? $USER->GetID() : 0;
}
else
{
$curUserId = intval($arParams['userId']);
}
if ($arParams['bCurUserList'])
{
if ($curUserId <= 0 || (class_exists('CSocNetFeatures') && !CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $curUserId, "calendar")))
return 'inactive_feature';
// Get iblock id for users calendar from module-settings
$iblockId = COption::GetOptionInt("intranet", 'iblock_calendar');
// Get section id
$sectionId = CEventCalendar::GetSectionIDByOwnerId($curUserId, "USER", $iblockId);
// Expand filter
$arFilterEx = array("CREATED_BY" => $curUserId, "SECTION_ID" => $sectionId, "INCLUDE_SUBSECTIONS" => "Y");
}
else
{
if (intval($arParams['iblockSectionId']) > 0)
$arFilterEx = array("SECTION_ID" => $arParams['iblockSectionId'], "INCLUDE_SUBSECTIONS" => "Y");
$iblockId = $arParams['iblockId'];
}
// Check access
$maxPerm = CIBlock::GetPermission($iblockId);
$bAccess = $maxPerm >= 'R';
if (CIBlock::GetPermission($iblockId) < 'R')
return 'access_denied';
$arSelect = array(
"ID",
"IBLOCK_ID",
"IBLOCK_SECTION_ID",
"NAME",
"ACTIVE_FROM",
"ACTIVE_TO",
"DETAIL_TEXT",
"DETAIL_TEXT_TYPE",
"CREATED_BY",
"PROPERTY_*",
);
$arFilter = array (
"IBLOCK_ID" => $iblockId,
"ACTIVE" => "Y",
"CHECK_PERMISSIONS" => 'N',
">=DATE_ACTIVE_TO" => $arParams['fromLimit'],
"<=DATE_ACTIVE_FROM" => $arParams['toLimit'],
);
if (!empty($arFilterEx))
{
$arFilter = array_merge($arFilter, $arFilterEx);
}
$bCache = true;
$arResult = false;
if ($bCache)
{
$cache = new CPHPCache;
$cachePath = 'event_calendar/events/'.$iblockId.'/';
$cacheId = 'ne_'.serialize($arFilter);
if(($tzOffset = CTimeZone::GetOffset()) <> 0)
$cacheId .= "_".$tzOffset;
$cacheTime = 36000000;
if ($cache->InitCache($cacheTime, $cacheId, $cachePath))
{
$res = $cache->GetVars();
$arResult = $res['events'];
}
}
if (!$bCache || $arResult === false)
{
$arSort = Array('ACTIVE_FROM' => 'ASC');
$rsElement = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect);
$arResult = array();
while($obElement = $rsElement->GetNextElement())
{
$arItem = $obElement->GetFields();
$props = $obElement->GetProperties();
$arItem["ACCESSIBILITY"] = (isset($props['ACCESSIBILITY']['VALUE'])) ? $props['ACCESSIBILITY']['VALUE'] : 'busy';
$arItem["IMPORTANCE"] = (isset($props['IMPORTANCE']['VALUE'])) ? $props['IMPORTANCE']['VALUE'] : '';
$arItem["PRIVATE"] = (isset($props['PRIVATE']['VALUE'])) ? $props['PRIVATE']['VALUE'] : '';
if (isset($props['PARENT']) && $props['PARENT']['VALUE'] > 0)
{
$status = mb_strtoupper(isset($props['CONFIRMED'])? $props['CONFIRMED']['VALUE_XML_ID'] : 'Q');
if ($status != 'Y' && $status != 'N')
$status = 'Q';
$arItem['STATUS'] = $status;
}
$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'] : '';
CEventCalendar::DisplayPeriodicEvent($arResult, array(
'arItem' => $arItem,
'perType' => $perType,
'count' => $count,
'length' => $length,
'additional' => $additional,
'fromLimit' => $arParams['fromLimit'],
'toLimit' => $arParams['toLimit'],
));
}
else
{
CEventCalendar::HandleElement($arResult, $arItem);
}
}
if ($bCache)
{
$cache->StartDataCache($cacheTime, $cacheId, $cachePath);
$cache->EndDataCache(array("events" => $arResult));
}
}
return $arResult;
}