forked from microsoftgraph/msgraph-sdk-php
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGraphCollectionRequest.php
More file actions
243 lines (221 loc) · 6.4 KB
/
GraphCollectionRequest.php
File metadata and controls
243 lines (221 loc) · 6.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
<?php
/**
* Copyright (c) Microsoft Corporation. All Rights Reserved.
* Licensed under the MIT License. See License in the project root
* for license information.
*
* GraphCollectionRequest File
* PHP version 7
*
* @category Library
* @package Microsoft.Graph
* @copyright 2016 Microsoft Corporation
* @license https://opensource.org/licenses/MIT MIT License
* @version GIT: 0.1.0
* @link https://graph.microsoft.io/
*/
namespace Microsoft\Graph\Http;
use Microsoft\Graph\Exception\GraphException;
use Microsoft\Graph\Core\GraphConstants;
/**
* Class GraphCollectionRequest
*
* @category Library
* @package Microsoft.Graph
* @license https://opensource.org/licenses/MIT MIT License
* @link https://graph.microsoft.io/
*/
class GraphCollectionRequest extends GraphRequest
{
/**
* The size of page to divide the collection into
*
* @var int
*/
protected $pageSize;
/**
* The next link to use in calling a new page of results
*
* @var string
*/
protected $nextLink;
/**
* The delta link to use in calling /delta a subsequent time
*
* @var string
*/
protected $deltaLink;
/**
* True if the user has reached the end of the collection
*
* @var bool
*/
protected $end;
/**
* The endpoint that the user called (with query parameters)
*
* @var string
*/
protected $originalEndpoint;
/**
* The return type that the user specified
*
* @var object
*/
protected $originalReturnType;
/**
* Constructs a new GraphCollectionRequest object
*
* @param string $requestType The HTTP verb for the
* request ("GET", "POST", "PUT", etc.)
* @param string $endpoint The URI of the endpoint to hit
* @param string $accessToken A valid access token
* @param string $baseUrl The base URL of the request
* @param string $apiVersion The version of the API to call
* @param string $proxyPort The url where to proxy through
* @throws GraphException when no access token is provided
*/
public function __construct($requestType, $endpoint, $accessToken, $baseUrl, $apiVersion, $proxyPort = null)
{
parent::__construct(
$requestType,
$endpoint,
$accessToken,
$baseUrl,
$apiVersion,
$proxyPort
);
$this->end = false;
}
/**
* Gets the number of entries in the collection
*
* @return int the number of entries
* @throws GraphException
*/
public function count()
{
$query = '$count=true';
$request = new GraphRequest(
$this->requestType,
$this->endpoint . $this->getConcatenator() . $query,
$this->accessToken,
$this->baseUrl,
$this->apiVersion,
$this->proxyPort
);
$result = $request->execute()->getBody();
if (array_key_exists("@odata.count", $result)) {
return $result['@odata.count'];
}
/* The $count query parameter for the Graph API
is available on several models but not all */
trigger_error('Count unavailable for this collection');
}
/**
* Sets the number of results to return with each call
* to "getPage()"
*
* @param int $pageSize The page size
*
* @throws GraphException if the requested page size exceeds
* the Graph's defined page size limit
* @return GraphCollectionRequest object
*/
public function setPageSize($pageSize)
{
if ($pageSize > GraphConstants::MAX_PAGE_SIZE) {
throw new GraphException(GraphConstants::MAX_PAGE_SIZE_ERROR);
}
$this->pageSize = $pageSize;
return $this;
}
/**
* Gets the next page of results
*
* @param bool $prev When true, get the previous page
*
* @return array of objects of class $returnType
* @throws GraphException
*/
public function getPage()
{
$this->setPageCallInfo();
$response = $this->execute();
return $this->processPageCallReturn($response);
}
/**
* Sets the required query information to get a new page
*
* @param bool $prev Set to true for the previous page
*
* @return GraphCollectionRequest
*/
public function setPageCallInfo()
{
// Store these to add temporary query data to request
$this->originalReturnType = $this->returnType;
/* This allows processPageCallReturn to receive
all of the response data, not just the objects */
$this->returnType = null;
if ($this->end) {
trigger_error('Reached end of collection');
}
if ($this->nextLink) {
$baseLength = strlen($this->baseUrl) + strlen($this->apiVersion);
$this->endpoint = substr($this->nextLink, $baseLength);
} else {
// This is the first request to the endpoint
if ($this->pageSize) {
$this->endpoint .= $this->getConcatenator() . '$top=' . $this->pageSize;
}
}
return $this;
}
/**
* Clean up after making a page call request
*
* @param GraphResponse $response The GraphResponse returned
* after making a page call
*
* @return mixed result of the call, formatted according
* to the returnType set by the user
*/
public function processPageCallReturn($response)
{
$this->nextLink = $response->getNextLink();
$this->deltaLink = $response->getDeltaLink();
/* If no skip token is returned, we have reached the end
of the collection */
if (!$this->nextLink) {
$this->end = true;
}
$result = $response->getBody();
// Cast as user-defined model
if ($this->originalReturnType) {
$result = $response->getResponseAsObject($this->originalReturnType);
}
// Restore user-defined parameters
$this->returnType = $this->originalReturnType;
return $result;
}
/**
* Gets whether the user has reached the end of the collection
*
* @return bool The end
*/
public function isEnd()
{
return $this->end;
}
/**
* Gets a delta link to use with subsequent
* calls to /delta
*
* @return string|null The delta link
*/
public function getDeltaLink()
{
return $this->deltaLink;
}
}