end = false; } /** * Gets the number of entries in the collection * * @return int the number of entries * @throws GraphException * @throws \GuzzleHttp\Exception\GuzzleException */ public function count() { $query = '$count=true'; $request = new GraphRequest( $this->requestType, $this->endpoint . $this->getConcatenator() . $query, $this->accessToken, $this->baseUrl, $this->apiVersion, $this->proxyPort ); $request->addHeaders($this->headers); $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 * * @return array of objects of class $returnType * @throws \GuzzleHttp\Exception\GuzzleException */ public function getPage() { $this->setPageCallInfo(); $response = $this->execute(); return $this->processPageCallReturn($response); } /** * Sets the required query information to get a new 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) { $this->endpoint = "/" . implode("/", array_slice(explode("/", $this->nextLink), 4)); } 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; } }