- Модуль: 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;
}