コード例 #1
0
 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;
 }
コード例 #2
0
ファイル: ws_calendar.php プロジェクト: mrdeadmouse/u136006
 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);
 }