• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/event_calendar.php
  • Класс: CEventCalendar
  • Вызов: CEventCalendar::SaveCalendar
function SaveCalendar($arParams)
{
	$iblockId = isset($arParams['iblockId']) ? $arParams['iblockId'] : $this->iblockId;
	$ownerId = isset($arParams['ownerId']) ? $arParams['ownerId'] : $this->ownerId;
	$ownerType = isset($arParams['ownerType']) ? $arParams['ownerType'] : $this->ownerType;
	$sectionId = isset($arParams['sectionId']) ? $arParams['sectionId'] : $this->sectionId;
	$arFields = $arParams['arFields'];

	global $DB;
	if ($sectionId === 'none')
	{
		$sectionId = $this->CreateSectionForOwner($ownerId, $ownerType, $iblockId); // Creating section for owner
		if ($sectionId === false)
			return false;
		else
			$this->UpdateSectionId($sectionId);
		$this->newSectionId = $sectionId;
	}

	$ID = $arFields['ID'];

	$DB->StartTransaction();

	$bs = new CIBlockSection;

	if ($ownerType != 'USER' && $ownerType != 'GROUP')
		$ownerType = '';
	$key_color = "UF_".$ownerType."_CAL_COL";
	$key_export = "UF_".$ownerType."_CAL_EXP";
	$key_status = "UF_".$ownerType."_CAL_STATUS";

	$EXPORT = $arFields['EXPORT'] ? $arFields['EXPORT_SET'] : '';

	$arFields = Array(
		"ACTIVE"=>"Y",
		"IBLOCK_SECTION_ID"=>$sectionId,
		"IBLOCK_ID"=>$iblockId,
		"NAME"=>$arFields['NAME'],
		"DESCRIPTION"=>$arFields['DESCRIPTION'],
		$key_color => $arFields['COLOR'],
		$key_export => $EXPORT,
		$key_status => $arFields['PRIVATE_STATUS'],
		'IS_EXCHANGE' => $arFields['IS_EXCHANGE']
	);
	$GLOBALS[$key_color] = $COLOR;
	$GLOBALS[$key_export] = $EXPORT;
	$GLOBALS[$key_status] = $arFields['PRIVATE_STATUS'];
	$GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_".$iblockId."_SECTION", $arFields);

	// Exchange
	if (CEventCalendar::IsExchangeEnabled() && $ownerType == 'USER')
	{
		$exchRes = true;
		if(isset($ID) && $ID > 0)
		{
			$calendarXmlId = CECCalendar::GetExchangeXmlId($iblockId, $ID, $ownerType);
			if ($calendarXmlId <> '' && $calendarXmlId !== 0)
			{
				$calendarModLabel = CECCalendar::GetExchModLabel($iblockId, $ID);
				$exchRes = CDavExchangeCalendar::DoUpdateCalendar($ownerId, $calendarXmlId, $calendarModLabel, $arFields);
			}
		}
		else
		{
			if ($arFields['IS_EXCHANGE'])
				$exchRes = CDavExchangeCalendar::DoAddCalendar($ownerId, $arFields);
		}

		unset($arFields['IS_EXCHANGE']);
		if ($exchRes !== true) //
		{
			if (!is_array($exchRes) || !array_key_exists("XML_ID", $exchRes))
			{
				$DB->Rollback();
				return CEventCalendar::ThrowError(CEventCalendar::CollectExchangeErros($exchRes));
			}

			// It's ok, we successfuly save event to exchange calendar - and save it to DB
			$arFields['UF_BXDAVEX_EXCH'] = $exchRes['XML_ID'];
			$arFields['UF_BXDAVEX_EXCH_LBL'] = $exchRes['MODIFICATION_LABEL'];
		}
	}

	if ($ownerType == 'GROUP' && $ownerId > 0)
		$arFields['SOCNET_GROUP_ID'] = $ownerId;

	if(isset($ID) && $ID > 0)
	{
		$res = $bs->Update($ID, $arFields);
	}
	else
	{
		$ID = $bs->Add($arFields);
		$res = ($ID > 0);
		if($res)
		{
			//This sets appropriate owner if section created by owner of the meeting
			//and this calendar belongs to guest which is not current user
			if ($ownerType == 'USER' && $ownerId > 0)
				$DB->Query("UPDATE b_iblock_section SET CREATED_BY = ".intval($ownerId)." WHERE ID = ".intval($ID));
		}
	}
	if(!$res)
	{
		$DB->Rollback();
		return false;
	}

	$DB->Commit();
	return $ID;
}