function GetList($arParams) { $sectionId = isset($arParams['sectionId']) && $arParams['sectionId'] !== false ? $arParams['sectionId'] : 0; $iblockId = $arParams['iblockId']; $xmlId = isset($arParams['xmlId']) && $arParams['xmlId'] !== false ? $arParams['xmlId'] : 0; $forExport = $arParams['forExport'] == true; $checkPermissions = $forExport ? 'N' : 'Y'; $bOwner = $arParams['bOwner'] === true; $arFilter = array("SECTION_ID" => $sectionId, "IBLOCK_ID" => $iblockId, "ACTIVE" => "Y", "CHECK_PERMISSIONS" => $checkPermissions); if ($bOwner) { $ownerType = $arParams['ownerType']; $ownerId = $arParams['ownerId']; if ($ownerType == 'USER') { $arFilter["CREATED_BY"] = $ownerId; $userId = $arParams['userId'] ? intVal($arParams['userId']) : $GLOBALS['USER']->GetID(); $bCurUserOwner = $ownerId == $userId; } elseif ($ownerType == 'GROUP') { $arFilter["SOCNET_GROUP_ID"] = $ownerId; $bCurUserOwner = true; } } else { $ownerType = false; $ownerId = false; $bCurUserOwner = true; } /* modified by wladart */ // get superpose calendars //if (!$bOwner && CModule::IncludeModule('extranet')) if (CModule::IncludeModule('extranet')) { if (CExtranet::IsExtranetSite()) { $arUsersInMyGroupsID = CExtranet::GetMyGroupsUsers(SITE_ID); $arPublicUsersID = CExtranet::GetPublicUsers(); $arUsersToFilter = array_merge($arUsersInMyGroupsID, $arPublicUsersID); $arFilter["CREATED_BY"] = $arUsersToFilter; } else { $arFilter["CREATED_BY"] = CExtranet::GetIntranetUsers(); } } /* --modified by wladart */ if ($xmlId !== 0) { $arFilter['XML_ID'] = $xmlId; if ($sectionId === 0) { unset($arFilter['SECTION_ID']); } } $rsData = CIBlockSection::GetList(array('ID' => 'ASC'), $arFilter); $arCalendars = array(); if (!$arParams['bSuperposed'] && !$arParams['bOnlyID']) { $outerUrl = $GLOBALS['APPLICATION']->GetCurPageParam('', array("action", "bx_event_calendar_request", "clear_cache", "bitrix_include_areas", "bitrix_show_mode", "back_url_admin", "SEF_APPLICATION_CUR_PAGE_URL"), false); } while ($arRes = $rsData->Fetch()) { $privateStatus = CECCalendar::GetPrivateStatus($iblockId, $arRes['ID'], $ownerType); if ($privateStatus == 'private' && !$bCurUserOwner) { continue; } if ($arParams['bOnlyID']) { $arCalendars[] = intVal($arRes['ID']); continue; } $calendar = array("ID" => intVal($arRes['ID']), "IBLOCK_ID" => $iblockId, "IBLOCK_SECTION_ID" => intVal($arRes['IBLOCK_SECTION_ID']), "NAME" => htmlspecialcharsex($arRes['NAME']), "DESCRIPTION" => htmlspecialcharsex($arRes['DESCRIPTION']), "COLOR" => CECCalendar::GetColor($iblockId, $arRes['ID'], $ownerType), "PRIVATE_STATUS" => $privateStatus); if (!$arParams['bSuperposed']) { $calendar["OUTLOOK_JS"] = CECCalendar::GetOutlookLink(array('ID' => intVal($arRes['ID']), 'XML_ID' => $arRes['XML_ID'], 'IBLOCK_ID' => $iblockId, 'NAME' => htmlspecialcharsex($arRes['NAME']), 'PREFIX' => CEventCalendar::GetOwnerName(array('iblockId' => $iblockId, 'ownerType' => $ownerType, 'ownerId' => $ownerId)), 'LINK_URL' => $outerUrl)); $arExport = CECCalendar::GetExportParams($iblockId, $arRes['ID'], $ownerType, $ownerId); $calendar["EXPORT"] = $arExport['ALLOW']; $calendar["EXPORT_SET"] = $arExport['SET']; $calendar["EXPORT_LINK"] = $arExport['LINK']; } $arCalendars[] = $calendar; } return $arCalendars; }
function GetListItemChangesSinceToken($listName, $viewFields = '', $query = '', $rowLimit = 0, $changeToken = '') { global $APPLICATION, $USER; if (!($listName_original = CIntranetUtils::checkGUID($listName))) { return new CSoapFault('Data error', 'Wrong GUID - ' . $listName); } $listName = ToUpper(CIntranetUtils::makeGUID($listName_original)); $obRes = CIBlockSection::GetList(array('SORT' => 'ASC'), array('XML_ID' => $listName_original)); if (!($arSection = $obRes->Fetch())) { return new CSoapFault('List not found', 'List with ' . $listName . ' GUID is not found'); } $arMethodParams = array('ownerType' => 'USER', 'ownerId' => $arSection['CREATED_BY'], 'bOwner' => true, 'iblockId' => $arSection['IBLOCK_ID'], 'sectionId' => $arSection['ID'], 'arCalendarIds' => array($arSection['ID']), 'forExport' => true); if ($changeToken) { $arMethodParams['bLoadAll'] = false; $arMethodParams['timestampFrom'] = ConvertTimeStamp($changeToken, 'FULL'); if (!$arMethodParams['timestampFrom']) { return new CSoapFault('Params error', 'Wrong changeToken: ' . $changeToken); } } else { $arMethodParams['bLoadAll'] = true; } $obCalendar = new CEventCalendar(); $obCalendar->Init(array('ownerType' => $arMethodParams['ownerType'], 'ownerId' => $arMethodParams['ownerId'], 'bOwner' => true, 'iblockId' => $arMethodParams['iblockId'], 'bCache' => false, 'userIblockId' => $arMethodParams['iblockId'])); // dirty hack $arPermissions = $obCalendar->GetPermissions(array('setProperties' => true, 'ownerId' => $arSection['CREATED_BY'])); $obCalendar->arCalenderIndex[$arSection['ID']]['PRIVATE_STATUS'] = CECCalendar::GetPrivateStatus($arSection['IBLOCK_ID'], $arSection['ID'], 'USER'); $arCalendarEntries = $obCalendar->GetEvents($arMethodParams); $last_change = 0; $data = new CXMLCreator('listitems'); $data->setAttribute('MinTimeBetweenSyncs', 0); $data->setAttribute('RecommendedTimeBetweenSyncs', 180); $data->setAttribute('TimeStamp', $this->__makeDateTime()); $data->setAttribute('EffectivePermMask', 'FullMask'); $data->addChild($obChanges = new CXMLCreator('Changes')); if (!$changeToken && !defined('OLD_OUTLOOK_VERSION')) { $obChanges->addChild($this->__getFieldsDefinition()); } //TODO: the next thing is to do something like this for all deleted events. //$obChanges->addChild($obId = new CXMLCreator('Id')); //$obId->setAttribute('ChangeType', 'Delete'); //$obId->setData('702'); //<Id ChangeType="Delete">14</Id> $data->addChild($obData = new CXMLCreator('rs:data')); foreach ($arCalendarEntries as $key => $arRes) { if ($arRes['STATUS'] == 'Q') { continue; } $obData->addChild($this->__getRow($arRes, $listName, $last_change)); } //$last_change = time(); $obData->setAttribute('ItemCount', count($arCalendarEntries)); $data->setAttribute('xmlns:rs', 'urn:schemas-microsoft-com:rowset'); $data->setAttribute('xmlns:z', '#RowsetSchema'); if ($last_change > 0) { $obChanges->setAttribute('LastChangeToken', $last_change); } return array('GetListItemChangesSinceTokenResult' => $data); }