icingaweb2/library/vendor/Zend/Navigation/Page/Mvc.php

688 lines
17 KiB
PHP

<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Navigation
* @subpackage Page
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id$
*/
/**
* @see Zend_Navigation_Page
*/
/**
* @see Zend_Controller_Action_HelperBroker
*/
/**
* Used to check if page is active
*
* @see Zend_Controller_Front
*/
/**
* Represents a page that is defined using module, controller, action, route
* name and route params to assemble the href
*
* @category Zend
* @package Zend_Navigation
* @subpackage Page
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_Navigation_Page_Mvc extends Zend_Navigation_Page
{
/**
* Action name to use when assembling URL
*
* @var string
*/
protected $_action;
/**
* Controller name to use when assembling URL
*
* @var string
*/
protected $_controller;
/**
* Module name to use when assembling URL
*
* @var string
*/
protected $_module;
/**
* Params to use when assembling URL
*
* @see getHref()
* @var array
*/
protected $_params = array();
/**
* Route name to use when assembling URL
*
* @see getHref()
* @var string
*/
protected $_route;
/**
* Whether params should be reset when assembling URL
*
* @see getHref()
* @var bool
*/
protected $_resetParams = true;
/**
* Whether href should be encoded when assembling URL
*
* @see getHref()
* @var bool
*/
protected $_encodeUrl = true;
/**
* Whether this page should be considered active
*
* @var bool
*/
protected $_active = null;
/**
* Scheme to use when assembling URL
*
* @see getHref()
* @var string
*/
protected $_scheme;
/**
* Cached href
*
* The use of this variable minimizes execution time when getHref() is
* called more than once during the lifetime of a request. If a property
* is updated, the cache is invalidated.
*
* @var string
*/
protected $_hrefCache;
/**
* Action helper for assembling URLs
*
* @see getHref()
* @var Zend_Controller_Action_Helper_Url
*/
protected static $_urlHelper = null;
/**
* View helper for assembling URLs with schemes
*
* @see getHref()
* @var Zend_View_Helper_ServerUrl
*/
protected static $_schemeHelper = null;
// Accessors:
/**
* Returns whether page should be considered active or not
*
* This method will compare the page properties against the request object
* that is found in the front controller.
*
* @param bool $recursive [optional] whether page should be considered
* active if any child pages are active. Default is
* false.
* @return bool whether page should be considered active or not
*/
public function isActive($recursive = false)
{
if (null === $this->_active) {
$front = Zend_Controller_Front::getInstance();
$request = $front->getRequest();
$reqParams = array();
if ($request) {
$reqParams = $request->getParams();
if (!array_key_exists('module', $reqParams)) {
$reqParams['module'] = $front->getDefaultModule();
}
}
$myParams = $this->_params;
if ($this->_route
&& method_exists($front->getRouter(), 'getRoute')
) {
$route = $front->getRouter()->getRoute($this->_route);
if (method_exists($route, 'getDefaults')) {
$myParams = array_merge($route->getDefaults(), $myParams);
}
}
if (null !== $this->_module) {
$myParams['module'] = $this->_module;
} elseif (!array_key_exists('module', $myParams)) {
$myParams['module'] = $front->getDefaultModule();
}
if (null !== $this->_controller) {
$myParams['controller'] = $this->_controller;
} elseif (!array_key_exists('controller', $myParams)) {
$myParams['controller'] = $front->getDefaultControllerName();
}
if (null !== $this->_action) {
$myParams['action'] = $this->_action;
} elseif (!array_key_exists('action', $myParams)) {
$myParams['action'] = $front->getDefaultAction();
}
foreach ($myParams as $key => $value) {
if (null === $value) {
unset($myParams[$key]);
}
}
if (count(array_intersect_assoc($reqParams, $myParams)) ==
count($myParams)
) {
$this->_active = true;
return true;
}
$this->_active = false;
}
return parent::isActive($recursive);
}
/**
* Returns href for this page
*
* This method uses {@link Zend_Controller_Action_Helper_Url} to assemble
* the href based on the page's properties.
*
* @return string page href
*/
public function getHref()
{
if ($this->_hrefCache) {
return $this->_hrefCache;
}
if (null === self::$_urlHelper) {
self::$_urlHelper =
Zend_Controller_Action_HelperBroker::getStaticHelper('Url');
}
$params = $this->getParams();
if ($param = $this->getModule()) {
$params['module'] = $param;
}
if ($param = $this->getController()) {
$params['controller'] = $param;
}
if ($param = $this->getAction()) {
$params['action'] = $param;
}
$url = self::$_urlHelper->url(
$params,
$this->getRoute(),
$this->getResetParams(),
$this->getEncodeUrl()
);
// Use scheme?
$scheme = $this->getScheme();
if (null !== $scheme) {
if (null === self::$_schemeHelper) {
self::$_schemeHelper = new Zend_View_Helper_ServerUrl();
}
$url = self::$_schemeHelper->setScheme($scheme)->serverUrl($url);
}
// Add the fragment identifier if it is set
$fragment = $this->getFragment();
if (null !== $fragment) {
$url .= '#' . $fragment;
}
return $this->_hrefCache = $url;
}
/**
* Sets action name to use when assembling URL
*
* @see getHref()
*
* @param string $action action name
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
* @throws Zend_Navigation_Exception if invalid $action is given
*/
public function setAction($action)
{
if (null !== $action && !is_string($action)) {
throw new Zend_Navigation_Exception(
'Invalid argument: $action must be a string or null'
);
}
$this->_action = $action;
$this->_hrefCache = null;
return $this;
}
/**
* Returns action name to use when assembling URL
*
* @see getHref()
*
* @return string|null action name
*/
public function getAction()
{
return $this->_action;
}
/**
* Sets controller name to use when assembling URL
*
* @see getHref()
*
* @param string|null $controller controller name
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
* @throws Zend_Navigation_Exception if invalid controller name is given
*/
public function setController($controller)
{
if (null !== $controller && !is_string($controller)) {
throw new Zend_Navigation_Exception(
'Invalid argument: $controller must be a string or null'
);
}
$this->_controller = $controller;
$this->_hrefCache = null;
return $this;
}
/**
* Returns controller name to use when assembling URL
*
* @see getHref()
*
* @return string|null controller name or null
*/
public function getController()
{
return $this->_controller;
}
/**
* Sets module name to use when assembling URL
*
* @see getHref()
*
* @param string|null $module module name
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
* @throws Zend_Navigation_Exception if invalid module name is given
*/
public function setModule($module)
{
if (null !== $module && !is_string($module)) {
throw new Zend_Navigation_Exception(
'Invalid argument: $module must be a string or null'
);
}
$this->_module = $module;
$this->_hrefCache = null;
return $this;
}
/**
* Returns module name to use when assembling URL
*
* @see getHref()
*
* @return string|null module name or null
*/
public function getModule()
{
return $this->_module;
}
/**
* Set multiple parameters (to use when assembling URL) at once
*
* URL options passed to the url action helper for assembling URLs.
* Overwrites any previously set parameters!
*
* @see getHref()
*
* @param array|null $params [optional] paramters as array
* ('name' => 'value'). Default is null
* which clears all params.
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
*/
public function setParams(array $params = null)
{
$this->clearParams();
if (is_array($params)) {
$this->addParams($params);
}
return $this;
}
/**
* Set parameter (to use when assembling URL)
*
* URL option passed to the url action helper for assembling URLs.
*
* @see getHref()
*
* @param string $name parameter name
* @param mixed $value parameter value
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
*/
public function setParam($name, $value)
{
$name = (string)$name;
$this->_params[$name] = $value;
$this->_hrefCache = null;
return $this;
}
/**
* Add multiple parameters (to use when assembling URL) at once
*
* URL options passed to the url action helper for assembling URLs.
*
* @see getHref()
*
* @param array $params paramters as array ('name' => 'value')
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
*/
public function addParams(array $params)
{
foreach ($params as $name => $value) {
$this->setParam($name, $value);
}
return $this;
}
/**
* Remove parameter (to use when assembling URL)
*
* @see getHref()
*
* @param string $name
* @return bool
*/
public function removeParam($name)
{
if (array_key_exists($name, $this->_params)) {
unset($this->_params[$name]);
$this->_hrefCache = null;
return true;
}
return false;
}
/**
* Clear all parameters (to use when assembling URL)
*
* @see getHref()
*
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
*/
public function clearParams()
{
$this->_params = array();
$this->_hrefCache = null;
return $this;
}
/**
* Retrieve all parameters (to use when assembling URL)
*
* @see getHref()
*
* @return array parameters as array ('name' => 'value')
*/
public function getParams()
{
return $this->_params;
}
/**
* Retrieve a single parameter (to use when assembling URL)
*
* @see getHref()
*
* @param string $name parameter name
* @return mixed
*/
public function getParam($name)
{
$name = (string) $name;
if (!array_key_exists($name, $this->_params)) {
return null;
}
return $this->_params[$name];
}
/**
* Sets route name to use when assembling URL
*
* @see getHref()
*
* @param string $route route name to use when assembling URL
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
* @throws Zend_Navigation_Exception if invalid $route is given
*/
public function setRoute($route)
{
if (null !== $route && (!is_string($route) || strlen($route) < 1)) {
throw new Zend_Navigation_Exception(
'Invalid argument: $route must be a non-empty string or null'
);
}
$this->_route = $route;
$this->_hrefCache = null;
return $this;
}
/**
* Returns route name to use when assembling URL
*
* @see getHref()
*
* @return string route name
*/
public function getRoute()
{
return $this->_route;
}
/**
* Sets whether params should be reset when assembling URL
*
* @see getHref()
*
* @param bool $resetParams whether params should be reset when
* assembling URL
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
*/
public function setResetParams($resetParams)
{
$this->_resetParams = (bool) $resetParams;
$this->_hrefCache = null;
return $this;
}
/**
* Returns whether params should be reset when assembling URL
*
* @see getHref()
*
* @return bool whether params should be reset when assembling URL
*/
public function getResetParams()
{
return $this->_resetParams;
}
/**
* Sets whether href should be encoded when assembling URL
*
* @see getHref()
*
* @param $encodeUrl
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
*/
public function setEncodeUrl($encodeUrl)
{
$this->_encodeUrl = (bool) $encodeUrl;
$this->_hrefCache = null;
return $this;
}
/**
* Returns whether herf should be encoded when assembling URL
*
* @see getHref()
*
* @return bool whether herf should be encoded when assembling URL
*/
public function getEncodeUrl()
{
return $this->_encodeUrl;
}
/**
* Sets scheme to use when assembling URL
*
* @see getHref()
*
* @param string|null $scheme scheme
* @throws Zend_Navigation_Exception
* @return Zend_Navigation_Page_Mvc fluent interface, returns self
*/
public function setScheme($scheme)
{
if (null !== $scheme && !is_string($scheme)) {
throw new Zend_Navigation_Exception(
'Invalid argument: $scheme must be a string or null'
);
}
$this->_scheme = $scheme;
return $this;
}
/**
* Returns scheme to use when assembling URL
*
* @see getHref()
*
* @return string|null scheme or null
*/
public function getScheme()
{
return $this->_scheme;
}
/**
* Sets action helper for assembling URLs
*
* @see getHref()
*
* @param Zend_Controller_Action_Helper_Url $uh URL helper
* @return void
*/
public static function setUrlHelper(Zend_Controller_Action_Helper_Url $uh)
{
self::$_urlHelper = $uh;
}
/**
* Sets view helper for assembling URLs with schemes
*
* @see getHref()
*
* @param Zend_View_Helper_ServerUrl $sh scheme helper
* @return void
*/
public static function setSchemeHelper(Zend_View_Helper_ServerUrl $sh)
{
self::$_schemeHelper = $sh;
}
// Public methods:
/**
* Returns an array representation of the page
*
* @return array associative array containing all page properties
*/
public function toArray()
{
return array_merge(
parent::toArray(),
array(
'action' => $this->getAction(),
'controller' => $this->getController(),
'module' => $this->getModule(),
'params' => $this->getParams(),
'route' => $this->getRoute(),
'reset_params' => $this->getResetParams(),
'encodeUrl' => $this->getEncodeUrl(),
'scheme' => $this->getScheme(),
)
);
}
}