/**
* Creates a \FOF30\Hal\Document using the provided data
*
* @param mixed|array $data The data to put in the document
* @param DataModel $model 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;
}