• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/event_calendar.php
  • Класс: CECEvent
  • Вызов: CECEvent::Delete
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;
}