primo commit
This commit is contained in:
124
libraries/f0f/hal/links.php
Normal file
124
libraries/f0f/hal/links.php
Normal file
@ -0,0 +1,124 @@
|
||||
<?php
|
||||
/**
|
||||
* @package FrameworkOnFramework
|
||||
* @subpackage hal
|
||||
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba Ltd. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
defined('F0F_INCLUDED') or die;
|
||||
|
||||
/**
|
||||
* Implementation of the Hypertext Application Language links in PHP. This is
|
||||
* actually a collection of links.
|
||||
*
|
||||
* @package FrameworkOnFramework
|
||||
* @since 2.1
|
||||
*/
|
||||
class F0FHalLinks
|
||||
{
|
||||
/**
|
||||
* The collection of links, sorted by relation
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $_links = array();
|
||||
|
||||
/**
|
||||
* Add a single link to the links collection
|
||||
*
|
||||
* @param string $rel The relation of the link to the document. See RFC 5988
|
||||
* http://tools.ietf.org/html/rfc5988#section-6.2.2 A document
|
||||
* MUST always have a "self" link.
|
||||
* @param F0FHalLink $link The actual link object
|
||||
* @param boolean $overwrite When false and a link of $rel relation exists, an array of
|
||||
* links is created. Otherwise the existing link is overwriten
|
||||
* with the new one
|
||||
*
|
||||
* @return boolean True if the link was added to the collection
|
||||
*/
|
||||
public function addLink($rel, F0FHalLink $link, $overwrite = true)
|
||||
{
|
||||
if (!$link->check())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!array_key_exists($rel, $this->_links) || $overwrite)
|
||||
{
|
||||
$this->_links[$rel] = $link;
|
||||
}
|
||||
elseif (array_key_exists($rel, $this->_links) && !$overwrite)
|
||||
{
|
||||
if (!is_array($this->_links[$rel]))
|
||||
{
|
||||
$this->_links[$rel] = array($this->_links[$rel]);
|
||||
}
|
||||
|
||||
$this->_links[$rel][] = $link;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add multiple links to the links collection
|
||||
*
|
||||
* @param string $rel The relation of the links to the document. See RFC 5988.
|
||||
* @param array $links An array of F0FHalLink objects
|
||||
* @param boolean $overwrite When false and a link of $rel relation exists, an array
|
||||
* of links is created. Otherwise the existing link is
|
||||
* overwriten with the new one
|
||||
*
|
||||
* @return boolean True if the link was added to the collection
|
||||
*/
|
||||
public function addLinks($rel, array $links, $overwrite = true)
|
||||
{
|
||||
if (empty($links))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$localOverwrite = $overwrite;
|
||||
|
||||
foreach ($links as $link)
|
||||
{
|
||||
if ($link instanceof F0FHalLink)
|
||||
{
|
||||
$this->addLink($rel, $link, $localOverwrite);
|
||||
}
|
||||
|
||||
// After the first time we call this with overwrite on we have to
|
||||
// turn it off so that the other links are added to the set instead
|
||||
// of overwriting the first item that's already added.
|
||||
if ($localOverwrite)
|
||||
{
|
||||
$localOverwrite = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collection of links
|
||||
*
|
||||
* @param string $rel Optional; the relation to return the links for
|
||||
*
|
||||
* @return array|F0FHalLink
|
||||
*/
|
||||
public function getLinks($rel = null)
|
||||
{
|
||||
if (empty($rel))
|
||||
{
|
||||
return $this->_links;
|
||||
}
|
||||
elseif (isset($this->_links[$rel]))
|
||||
{
|
||||
return $this->_links[$rel];
|
||||
}
|
||||
else
|
||||
{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user