public function GetEvents($arParams = array())
{
$DontSaveOptions = isset($arParams['DontSaveOptions']) ? $arParams['DontSaveOptions'] : false;
$iblockId = isset($arParams['iblockId']) ? $arParams['iblockId'] : $this->iblockId;
$SECTION_ID = isset($arParams['sectionId']) ? $arParams['sectionId'] : 0;
$EVENT_ID = isset($arParams['eventId']) ? $arParams['eventId'] : false;
$bLoadAll = isset($arParams['bLoadAll']) ? $arParams['bLoadAll'] : false;
$arCalendarIds = isset($arParams['arCalendarIds']) ? $arParams['arCalendarIds'] : $this->arCalendarIds;
$bJS = isset($arParams['bJS']) ? $arParams['bJS'] : false;
$forExport = isset($arParams['forExport']) ? $arParams['forExport'] : false;
$from_limit = isset($arParams['fromLimit']) ? $arParams['fromLimit'] : $this->fromLimit;
$to_limit = isset($arParams['toLimit']) ? $arParams['toLimit'] : $this->toLimit;
$checkPermissions = $forExport ? 'N' : 'Y';
$bSuperposed = isset($arParams['bSuperposed']) ? $arParams['bSuperposed'] : false;
$bCheckSPEvents = isset($arParams['bCheckSPEvents']) ? $arParams['bCheckSPEvents'] : false;
$timestampFrom = isset($arParams['timestampFrom']) ? $arParams['timestampFrom'] : false;
$ownerType = isset($arParams['ownerType']) ? $arParams['ownerType'] : $this->ownerType;
$emptyRes = $bJS ? '[]' : Array();
if ($bCheckSPEvents)
{
$arCalendars = $this->GetCalendarsEx(); // Cache inside
$arCalInd = array();
$arSPCalInd = array();
for($i = 0, $l = count($arCalendars); $i < $l; $i++)
$arCalInd[$arCalendars[$i]['ID']] = true;
$this->HandleSuperpose($this->arSPIblIds);
for($i = 0, $l = count($this->arSPCalShow); $i < $l; $i++)
if (!$arCalInd[$this->arSPCalShow[$i]['ID']])
$arSPCalInd[$this->arSPCalShow[$i]['ID']] = true;
}
$this->CheckProperties($iblockId);
$RESULT = $bJS ? '' : array();
//SELECT
$arSelect = array(
"ID",
"IBLOCK_ID",
"IBLOCK_SECTION_ID",
"NAME",
"ACTIVE_FROM",
"ACTIVE_TO",
"DETAIL_TEXT",
"DETAIL_TEXT_TYPE",
"TIMESTAMP_X",
"DATE_CREATE",
"CREATED_BY",
"PROPERTY_*",
);
//WHERE
$arFilter = array (
"IBLOCK_ID" => $iblockId,
"ACTIVE" => "Y",
"CHECK_PERMISSIONS" => $checkPermissions,
"!=PROPERTY_CONFIRMED" => $this->GetConfirmedID($iblockId, "N"),
);
if ($EVENT_ID !== false)
$arFilter['ID'] = $EVENT_ID;
if($timestampFrom !== false)
$arFilter[">TIMESTAMP_X"] = $timestampFrom;
if(isset($arParams['CREATED_BY']))
$arFilter["CREATED_BY"] = $arParams['CREATED_BY'];
if(isset($arParams['bNotFree']) && $arParams['bNotFree'])
$arFilter["!=PROPERTY_ACCESSIBILITY"] = 'free';
if ($SECTION_ID !== false)
{
$arFilter["INCLUDE_SUBSECTIONS"] = "Y";
if ($arCalendarIds !== false && is_array($arCalendarIds))
{
if (!$DontSaveOptions && class_exists('CUserOptions'))
$this->SaveHidden($arCalendarIds);
if (count($arCalendarIds) == 0)
return $emptyRes;
$arFilter["SECTION_ID"] = $arCalendarIds;
}
else
{
$arFilter["SECTION_ID"] = $SECTION_ID;
}
}
if (!$bLoadAll)
{
$arFilter[">=DATE_ACTIVE_TO"] = $from_limit;
$arFilter["<=DATE_ACTIVE_FROM"] = $to_limit;
}
//Sort
$arSort = Array('ACTIVE_FROM' => 'ASC');
$r = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect);
while($obElement = $r->GetNextElement())
{
$arItem = $obElement->GetFields();
if (isset($this->arCalenderIndex[$arItem['IBLOCK_SECTION_ID']]))
$privateStatus = $this->arCalenderIndex[$arItem['IBLOCK_SECTION_ID']]['PRIVATE_STATUS'];
else
$privateStatus = CECCalendar::GetPrivateStatus($iblockId, $arItem['IBLOCK_SECTION_ID'], $ownerType);
$bCurUserOwner = $arItem["CREATED_BY"] == $this->userId;
if ($privateStatus == 'private' && !$bCurUserOwner) // event in private calendar
continue;
$props = $obElement->GetProperties();
$arItem["REMIND"] = (isset($props['REMIND_SETTINGS']['VALUE'])) ? $props['REMIND_SETTINGS']['VALUE'] : '';
$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'] : '';
$arItem["VERSION"] = (isset($props['VERSION']['VALUE'])) ? $props['VERSION']['VALUE'] : 1;
$arItem['IS_MEETING'] = $props['IS_MEETING']['VALUE'] == 'Y';
$arItem['LOCATION'] = (isset($props['LOCATION']['VALUE'])) ? $props['LOCATION']['VALUE'] : '';
if ($arItem["PRIVATE"] && !$bCurUserOwner) // private event
continue;
$arItem["DISPLAY_ACTIVE_FROM"] = CIBlockFormatProperties::DateFormat(getDateFormat(true), MakeTimeStamp($arItem["ACTIVE_FROM"]));
$arItem["DISPLAY_ACTIVE_TO"] = CIBlockFormatProperties::DateFormat(getDateFormat(true), MakeTimeStamp($arItem["ACTIVE_TO"]));
$per_type = (isset($props['PERIOD_TYPE']['VALUE']) && $props['PERIOD_TYPE']['VALUE'] != 'NONE')? mb_strtoupper($props['PERIOD_TYPE']['VALUE']) : false;
if ($this->bSocNet) // Social net: check meeting
{
// Check if it's "child" event in the guest's calendar
$parentId = $arItem['ID'];
if (isset($props['PARENT']) && $props['PARENT']['VALUE'] > 0)
{
$parentId = $props['PARENT']['VALUE'];
$rsHost = CIBlockElement::GetList(array(), array(
"=ID" => $parentId,
), false, false, array(
"ID",
"IBLOCK_ID",
"CREATED_BY",
)
);
$arHost = $rsHost->Fetch();
if($arHost)
{
$rsHostUser = CUser::GetByID($arHost["CREATED_BY"]);
if($arHostUser = $rsHostUser->Fetch())
{
$name = trim($arHostUser['NAME'].' '.$arHostUser['LAST_NAME']);
if ($name == '')
$name = trim($User['LOGIN']);
$arItem['HOST'] = array('id' => $arHostUser['ID'], 'name' => $name);
$arItem['HOST'] = array('id' => $arHostUser['ID'], 'name' => $name, 'parentId' => $parentId);
}
}
$status = mb_strtoupper(isset($props['CONFIRMED'])? $props['CONFIRMED']['VALUE_XML_ID'] : 'Q');
if ($status != 'Y' && $status != 'N')
$status = 'Q';
$arItem['STATUS'] = $status;
}
else
{
$arItem['HOST'] = false;
$arItem['STATUS'] = false;
}
if ($arItem['IS_MEETING'])
{
$arGuests = array();
$R = CECEvent::GetGuests($this->userIblockId, $parentId, array('bCheckOwner' => true, 'ownerType' => $ownerType, 'bHostIsAbsent' => $props['HOST_IS_ABSENT']['VALUE'] == 'Y')); // Get guests
foreach($R as $guest_id => $arGuest)
{
$guest_id = intval($guest_id);
$User = $arGuest['CREATED_BY'];
$name = trim($User['NAME'].' '.$User['LAST_NAME']);
if ($name == '')
$name = trim($User['LOGIN']);
$arGuests[] = array(
'id' => $guest_id,
'name' => $name,
'status' => $arGuest['PROPERTY_VALUES']['CONFIRMED'],
'bHost' => $arGuest['IS_HOST'] === true
);
}
$arItem['GUESTS'] = $arGuests;
$arItem['MEETING_TEXT'] = $props['MEETING_TEXT']['VALUE']['TEXT'];
}
}
if ($bCheckSPEvents)
$bSuperposed = $arSPCalInd[$arItem['IBLOCK_SECTION_ID']];
if ((!$this->bCurUserOwner || $bSuperposed) && ($privateStatus == 'time' || $privateStatus == 'title'))
{
if (!$arItem['ACCESSIBILITY'])
$arItem['ACCESSIBILITY'] = 'busy';
$accessibilityMess = GetMessage('EC_ACCESSIBILITY_'.mb_strtoupper($arItem['ACCESSIBILITY']));
if ($privateStatus == 'time')
{
$arItem['~NAME'] = $arItem['NAME'] = $accessibilityMess;
$arItem['ACCESSIBILITY'] = '';
}
$arItem['DETAIL_TEXT'] = '';
$arItem['REMIND'] = '';
$arItem['PRIVATE'] = '';
$arItem['GUESTS'] = Array();
}
if ($per_type)
{
$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'] : '';
if ($forExport) // only for export
{
$this->HandleElement($RESULT, $arItem, array('TYPE' => $per_type, 'COUNT' => intval($count), 'LENGTH' => intval($length), 'DAYS' => $additional), $bJS, $bSuperposed);
}
else
{
$this->DisplayPeriodicEvent($RESULT, array(
'arItem' => $arItem,
'perType' => $per_type,
'count' => $count,
'length' => $length,
'additional' => $additional,
'fromLimit' => $from_limit,
'toLimit' => $to_limit,
'bJS' => $bJS,
'bSuperposed' => $bSuperposed
));
}
}
else
{
$this->HandleElement($RESULT, $arItem, false, $bJS, $bSuperposed);
}
}
if (!$bJS)
return $RESULT;
if ($RESULT == '')
return $emptyRes;
return '['.mb_substr($RESULT, 0, -1).']';
}