FOF30\View\DataView\Json::_createDocumentWithHypermedia PHP Method

_createDocumentWithHypermedia() protected method

Creates a \FOF30\Hal\Document using the provided data
protected _createDocumentWithHypermedia ( mixed | array $data, DataModel $model = null ) : Document
$data mixed | array The data to put in the document
$model FOF30\Model\DataModel The model of this view
return FOF30\Hal\Document A HAL-enabled document
    protected function _createDocumentWithHypermedia($data, $model = null)
    {
        // Create a new HAL document
        if (is_array($data)) {
            $count = count($data);
        } else {
            $count = null;
        }
        if ($count == 1) {
            reset($data);
            $document = new Document(end($data));
        } else {
            $document = new Document($data);
        }
        // Create a self link
        $uri = (string) \JUri::getInstance();
        $uri = $this->_removeURIBase($uri);
        $uri = \JRoute::_($uri);
        $document->addLink('self', new Link($uri));
        // Create relative links in a record list context
        if (is_array($data) && $model instanceof DataModel) {
            if (!isset($this->total)) {
                $this->total = $model->count();
            }
            if (!isset($this->limitStart)) {
                $this->limitStart = $model->getState('limitstart', 0);
            }
            if (!isset($this->limit)) {
                $this->limit = $model->getState('limit', 0);
            }
            $pagination = new \JPagination($this->total, $this->limitStart, $this->limit);
            if ($pagination->pagesTotal > 1) {
                // Try to guess URL parameters and create a prototype URL
                // NOTE: You are better off specialising this method
                $protoUri = $this->_getPrototypeURIForPagination();
                // The "first" link
                $uri = clone $protoUri;
                $uri->setVar('limitstart', 0);
                $uri = \JRoute::_($uri);
                $document->addLink('first', new Link($uri));
                // Do we need a "prev" link?
                if ($pagination->pagesCurrent > 1) {
                    $prevPage = $pagination->pagesCurrent - 1;
                    $limitstart = ($prevPage - 1) * $pagination->limit;
                    $uri = clone $protoUri;
                    $uri->setVar('limitstart', $limitstart);
                    $uri = \JRoute::_($uri);
                    $document->addLink('prev', new Link($uri));
                }
                // Do we need a "next" link?
                if ($pagination->pagesCurrent < $pagination->pagesTotal) {
                    $nextPage = $pagination->pagesCurrent + 1;
                    $limitstart = ($nextPage - 1) * $pagination->limit;
                    $uri = clone $protoUri;
                    $uri->setVar('limitstart', $limitstart);
                    $uri = \JRoute::_($uri);
                    $document->addLink('next', new Link($uri));
                }
                // The "last" link?
                $lastPage = $pagination->pagesTotal;
                $limitstart = ($lastPage - 1) * $pagination->limit;
                $uri = clone $protoUri;
                $uri->setVar('limitstart', $limitstart);
                $uri = \JRoute::_($uri);
                $document->addLink('last', new Link($uri));
            }
        }
        return $document;
    }