function CheckSign($sign, $userId, $calendarId) { return md5($userId . "||" . $calendarId . "||" . CECCalendar::GetUniqCalendarId()) == $sign; }
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); }