static function Delete($arParams)
{
global $DB, $USER;
$iblockId = $arParams['iblockId'];
$ownerType = $arParams['ownerType'];
$ownerId = $arParams['ownerId'];
$ID = $arParams['id'];
$userId = $arParams['userId'];
if ($USER)
{
$ownerName = $USER->GetFullName();
}
else
{
$rs = CUser::GetByID($userId);
if($arUser = $rs->Fetch())
$name = trim($arUser['NAME'].' '.$arUser['LAST_NAME']);
}
$pathToUserCalendar = $arParams['pathToUserCalendar'];
$arFilter = array("ID" => $ID, "IBLOCK_ID" => $iblockId);
if ($arParams['bCheckPermissions'] !== false)
$arFilter[$ownerType == 'USER' ? "CREATED_BY" : "SOCNET_GROUP_ID"] = $ownerId;
$rsElement = CIBlockElement::GetList(array(), $arFilter, false, false, array("ID", "XML_ID", "IBLOCK_ID", "PROPERTY_PRIVATE", "PROPERTY_ACCESSIBILITY", "PROPERTY_IMPORTANCE", "PROPERTY_PARENT", "PROPERTY_LOCATION", "NAME", "DETAIL_TEXT", "IBLOCK_SECTION_ID", "ACTIVE_FROM", "ACTIVE_TO", "CREATED_BY", "PROPERTY_BXDAVEX_LABEL", "PROPERTY_BXDAVCD_LABEL"));
if($arElement = $rsElement->Fetch())
{
$calendar = new CEventCalendar();
$DB->StartTransaction();
// PROPERTY_PARENT_VALUE - id of parent iblock element in meeting
if($arElement["PROPERTY_PARENT_VALUE"] <> '' && $arParams['bJustDel'] !== true)
{
if ($ownerType == 'USER')
{
$rsHost = CIBlockElement::GetList(array(), array(
"=ID" => $arElement["PROPERTY_PARENT_VALUE"],
"CREATED_BY" => $arElement['CREATED_BY'],
), false, false, array(
"ID",
"IBLOCK_ID"
)
);
// Owner delete mirror of the original event in the personal calendar
if ($arHost = $rsHost->Fetch())
{
CECEvent::Delete(array(
'bCheckPermissions' => false,
'id' => intval($arHost['ID']),
'iblockId' => intval($arHost['IBLOCK_ID']),
'ownerType' => '',
'ownerId' => 0,
'userId' => $userId,
'pathToUserCalendar' => $arParams['pathToUserCalendar'],
'pathToGroupCalendar' => $arParams['pathToGroupCalendar'],
'userIblockId' => $arParams['userIblockId'],
'RMiblockId' => $arParams['RMiblockId'],
'allowResMeeting' => $arParams['allowResMeeting'],
'VMiblockId' => $arParams['VMiblockId'],
'allowVideoMeeting' => $arParams['allowVideoMeeting'],
));
$calendar->ClearCache('event_calendar/events/'.$arHost['IBLOCK_ID'].'/');
$DB->Commit();
return true;
}
}
// If no exchange
CIBlockElement::SetPropertyValues(
$arElement["ID"],
$arElement["IBLOCK_ID"],
$calendar->GetConfirmedID($iblockId, "N"),
"CONFIRMED"
);
}
else
{
if ($arParams['bSyncDAV'] !== false)
{
// Exchange
if (CEventCalendar::IsExchangeEnabled() && $ownerType == 'USER' && $arElement['PROPERTY_BXDAVEX_LABEL_VALUE'] <> '')
{
$eventXmlId = $arElement['XML_ID'];
$exchRes = CDavExchangeCalendar::DoDeleteItem($ownerId, $eventXmlId);
if ($exchRes !== true)
{
$DB->Rollback();
return CEventCalendar::CollectExchangeErros($exchRes);
}
}
if (CEventCalendar::IsCalDAVEnabled() && $ownerType == 'USER' && $arElement['PROPERTY_BXDAVCD_LABEL_VALUE'] <> '' )
{
$connectionId = CECCalendar::GetCalDAVConnectionId($iblockId, $arElement['IBLOCK_SECTION_ID']);
$calendarCalDAVXmlId = CECCalendar::GetCalDAVXmlId($iblockId, $arElement['IBLOCK_SECTION_ID']);
$DAVRes = CDavGroupdavClientCalendar::DoDeleteItem($connectionId, $calendarCalDAVXmlId, $arElement['XML_ID']);
if ($DAVRes !== true)
{
$DB->Rollback();
return CEventCalendar::CollectCalDAVErros($DAVRes);
}
}
}
if($arElement["PROPERTY_LOCATION_VALUE"] <> '')
{
$loc = CEventCalendar::ParseLocation($arElement["PROPERTY_LOCATION_VALUE"]);
if($loc['mrid'] == $arParams['VMiblockId'] && $loc['mrevid'] > 0) // video meeting
{
CEventCalendar::ReleaseVR(array(
'mrevid' => $loc['mrevid'],
'mrid' => $loc['mrid'],
'VMiblockId' => $arParams['VMiblockId'],
'allowVideoMeeting' => $arParams['allowVideoMeeting'],
));
}
elseif ($loc['mrid'] > 0 && $loc['mrevid'] > 0)
{
CEventCalendar::ReleaseMR(array(
'mrevid' => $loc['mrevid'],
'mrid' => $loc['mrid'],
'RMiblockId' => $arParams['RMiblockId'],
'allowResMeeting' => $arParams['allowResMeeting'],
));
}
}
$arGuests = CECEvent::GetGuests($arParams['userIblockId'], $ID);
foreach($arGuests as $guest_id => $arCalendarEvent)
{
$res = CECEvent::Delete(array(
'id' => $arCalendarEvent["ID"],
'iblockId' => $arParams['userIblockId'],
'ownerType' => "USER",
'ownerId' => $guest_id,
'userId' => $userId,
'bJustDel' => true // Just delete iblock element + exchange
));
if ($userId == $guest_id)
continue;
if ($arCalendarEvent["PROPERTY_VALUES"]["CONFIRMED"] != "N")
{
// Send message
CEventCalendar::SendInvitationMessage(array(
'type' => "cancel",
'email' => $arCalendarEvent["CREATED_BY"]["EMAIL"],
'name' => $arCalendarEvent['NAME'],
"from" => $arCalendarEvent["ACTIVE_FROM"],
"to" => $arCalendarEvent["ACTIVE_TO"],
"desc" => $arCalendarEvent['DETAIL_TEXT'],
"pathToUserCalendar" => $pathToUserCalendar,
"guestId" => $guest_id,
"guestName" => $arCalendarEvent["CREATED_BY"]["FULL_NAME"],
"userId" => $userId,
"ownerName" => $ownerName
));
}
}
if ($ownerType != 'USER')
$calendar->ClearCache('event_calendar/events/'.$arParams['userIblockId'].'/');
// Deleting
if(!CIBlockElement::Delete($ID))
{
$DB->Rollback();
return '[ECD1]'.GetMessage('EC_EVENT_ERROR_DEL');
}
}
$DB->Commit();
}
else
{
return '[ECD2]'.GetMessage('EC_EVENT_NOT_FOUND');
}
return true;
}