widgetContext->setValue('foo', 'bar'); * * A 'widget' controller can use this facility to use information * provided like so: * $context = $this->widgetContext->getValues(); * if (array_key_exists('foo', $context) { ... } * or * if ($this->widgetContext->getValues('foo')) { ... } * * The widget views and supporting javascript maintain the context * across requests to support async creation/configuration/reload. * * @copyright 2011 Perforce Software. All rights reserved. * @license Please see LICENSE.txt in top-level folder of this distribution. * @version / */ class P4Cms_Controller_Action_Helper_WidgetContext extends Zend_Controller_Action_Helper_Abstract { /** * Zend_Session storage object. * @var Zend_Session */ protected static $_context = array(); /** * Flag indicating whether the current invocation is the * initial invocation (as opposed to a forward, redirect, or * other action manipulation). This is useful to ensure * a fresh context. */ protected static $_initialDispatch = true; /** * Initialize by making ourself available to the controller * and cleaning out any cached initial dispatch values. */ public function init() { // make this action helper available to the controller $this->getActionController()->widgetContext = $this; // clear context for initial dispatch if (static::$_initialDispatch) { static::$_initialDispatch = false; $this->clearContext(); } } /** * Clear the context. * * @return P4Cms_Controller_Action_Helper_WidgetContext Provide a fluent interface. */ public function clearContext() { static::$_context = array(); return $this; } /** * Set a value in the context. * * @param string $key The key to set in the context. * @param mixed $value The (optional) value to set. If null, the value will be removed from the context. * @return P4Cms_Controller_Action_Helper_WidgetContext Provide a fluent interface. */ public function setValue($key, $value = null) { if (!isset($value)) { unset(static::$_context[$key]); return $this; } static::$_context[$key] = $value; return $this; } /** * Set a number of values in the context at once. * * @param array $values The key/value pairs to set in the context. * @return P4Cms_Controller_Action_Helper_WidgetContext Provide a fluent interface. */ public function setValues($values) { foreach ($values as $key => $value) { $this->setValue($key, $value); } return $this; } /** * Provide the values from the context, or if specified, a named value within. * * @param string $key Optional key to retrieve from context. * @return mixed The context, or value within the context. */ public function getValues($key = null) { if (isset($key)) { return array_key_exists($key, static::$_context) ? static::$_context[$key] : null; } return static::$_context; } /** * Provide the context in encoded form, suitable for placing in HTML. * * @return string Encoded form of the context. */ public function getEncodedValues() { $encoded = ''; $values = $this->getValues(); if (count($values)) { $encoded = Zend_Json::encode($values); } return $encoded; } /** * Set the context from its encoded form. * * @param string $encoded A JSON-encoded context. * @return P4Cms_Controller_Action_Helper_WidgetContext Provide a fluent interface. */ public function setEncodedValues($encoded) { if (isset($encoded) and strlen($encoded)) { $values = Zend_Json::decode($encoded); if ($values) { $this->setValues($values); } } return $this; } }