Blame | Last modification | View Log | RSS feed
<?php/*** Copyright 2017 Facebook, Inc.** You are hereby granted a non-exclusive, worldwide, royalty-free license to* use, copy, modify, and distribute this software in source code or binary* form for use in connection with the web services and APIs provided by* Facebook.** As with any software that integrates with the Facebook platform, your use* of this software is subject to the Facebook Developer Principles and* Policies [http://developers.facebook.com/policy/]. This copyright notice* shall be included in all copies or substantial portions of the software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER* DEALINGS IN THE SOFTWARE.**/namespace Facebook\GraphNodes;use Facebook\FacebookRequest;use Facebook\Url\FacebookUrlManipulator;use Facebook\Exceptions\FacebookSDKException;/*** Class GraphEdge** @package Facebook*/class GraphEdge extends Collection{/*** @var FacebookRequest The original request that generated this data.*/protected $request;/*** @var array An array of Graph meta data like pagination, etc.*/protected $metaData = [];/*** @var string|null The parent Graph edge endpoint that generated the list.*/protected $parentEdgeEndpoint;/*** @var string|null The subclass of the child GraphNode's.*/protected $subclassName;/*** Init this collection of GraphNode's.** @param FacebookRequest $request The original request that generated this data.* @param array $data An array of GraphNode's.* @param array $metaData An array of Graph meta data like pagination, etc.* @param string|null $parentEdgeEndpoint The parent Graph edge endpoint that generated the list.* @param string|null $subclassName The subclass of the child GraphNode's.*/public function __construct(FacebookRequest $request, array $data = [], array $metaData = [], $parentEdgeEndpoint = null, $subclassName = null){$this->request = $request;$this->metaData = $metaData;$this->parentEdgeEndpoint = $parentEdgeEndpoint;$this->subclassName = $subclassName;parent::__construct($data);}/*** Gets the parent Graph edge endpoint that generated the list.** @return string|null*/public function getParentGraphEdge(){return $this->parentEdgeEndpoint;}/*** Gets the subclass name that the child GraphNode's are cast as.** @return string|null*/public function getSubClassName(){return $this->subclassName;}/*** Returns the raw meta data associated with this GraphEdge.** @return array*/public function getMetaData(){return $this->metaData;}/*** Returns the next cursor if it exists.** @return string|null*/public function getNextCursor(){return $this->getCursor('after');}/*** Returns the previous cursor if it exists.** @return string|null*/public function getPreviousCursor(){return $this->getCursor('before');}/*** Returns the cursor for a specific direction if it exists.** @param string $direction The direction of the page: after|before** @return string|null*/public function getCursor($direction){if (isset($this->metaData['paging']['cursors'][$direction])) {return $this->metaData['paging']['cursors'][$direction];}return null;}/*** Generates a pagination URL based on a cursor.** @param string $direction The direction of the page: next|previous** @return string|null** @throws FacebookSDKException*/public function getPaginationUrl($direction){$this->validateForPagination();// Do we have a paging URL?if (!isset($this->metaData['paging'][$direction])) {return null;}$pageUrl = $this->metaData['paging'][$direction];return FacebookUrlManipulator::baseGraphUrlEndpoint($pageUrl);}/*** Validates whether or not we can paginate on this request.** @throws FacebookSDKException*/public function validateForPagination(){if ($this->request->getMethod() !== 'GET') {throw new FacebookSDKException('You can only paginate on a GET request.', 720);}}/*** Gets the request object needed to make a next|previous page request.** @param string $direction The direction of the page: next|previous** @return FacebookRequest|null** @throws FacebookSDKException*/public function getPaginationRequest($direction){$pageUrl = $this->getPaginationUrl($direction);if (!$pageUrl) {return null;}$newRequest = clone $this->request;$newRequest->setEndpoint($pageUrl);return $newRequest;}/*** Gets the request object needed to make a "next" page request.** @return FacebookRequest|null** @throws FacebookSDKException*/public function getNextPageRequest(){return $this->getPaginationRequest('next');}/*** Gets the request object needed to make a "previous" page request.** @return FacebookRequest|null** @throws FacebookSDKException*/public function getPreviousPageRequest(){return $this->getPaginationRequest('previous');}/*** The total number of results according to Graph if it exists.** This will be returned if the summary=true modifier is present in the request.** @return int|null*/public function getTotalCount(){if (isset($this->metaData['summary']['total_count'])) {return $this->metaData['summary']['total_count'];}return null;}/*** @inheritDoc*/public function map(\Closure $callback){return new static($this->request,array_map($callback, $this->items, array_keys($this->items)),$this->metaData,$this->parentEdgeEndpoint,$this->subclassName);}}