195 lines
6.2 KiB
PHP
195 lines
6.2 KiB
PHP
<?php
|
|
/**
|
|
* Object wrapping around session variable used to store controller data
|
|
*
|
|
* PHP version 5
|
|
*
|
|
* LICENSE:
|
|
*
|
|
* Copyright (c) 2006-2010, Alexey Borzov <avb@php.net>,
|
|
* Bertrand Mansion <golgote@mamasam.com>
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * The names of the authors may not be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* @category HTML
|
|
* @package HTML_QuickForm2
|
|
* @author Alexey Borzov <avb@php.net>
|
|
* @author Bertrand Mansion <golgote@mamasam.com>
|
|
* @license http://opensource.org/licenses/bsd-license.php New BSD License
|
|
* @version SVN: $Id: SessionContainer.php 293868 2010-01-23 18:37:16Z avb $
|
|
* @link http://pear.php.net/package/HTML_QuickForm2
|
|
*/
|
|
|
|
/**
|
|
* Object wrapping around session variable used to store controller data
|
|
*
|
|
* Unlike old HTML_QuickForm_Controller, this does not extend HTML_QuickForm2
|
|
* but accepts an instance of that in the constructor. You need to create a
|
|
* subclass of this class and implement its populateForm() method.
|
|
*
|
|
* @category HTML
|
|
* @package HTML_QuickForm2
|
|
* @author Alexey Borzov <avb@php.net>
|
|
* @author Bertrand Mansion <golgote@mamasam.com>
|
|
* @version Release: @package_version@
|
|
*/
|
|
class HTML_QuickForm2_Controller_SessionContainer
|
|
{
|
|
/**
|
|
* A reference to a key in $_SESSION superglobal array
|
|
* @var array
|
|
*/
|
|
protected $data;
|
|
|
|
/**
|
|
* Class constructor
|
|
*
|
|
* Initializes a variable in $_SESSION array, its name is based upon the
|
|
* name of the Controller passed here
|
|
*
|
|
* @param HTML_QuickForm2_Controller
|
|
*/
|
|
public function __construct(HTML_QuickForm2_Controller $controller)
|
|
{
|
|
$name = sprintf(HTML_QuickForm2_Controller::KEY_CONTAINER,
|
|
$controller->getId());
|
|
if (empty($_SESSION[$name])) {
|
|
$_SESSION[$name] = array(
|
|
'datasources' => array(),
|
|
'values' => array(),
|
|
'valid' => array()
|
|
);
|
|
}
|
|
$this->data =& $_SESSION[$name];
|
|
}
|
|
|
|
/**
|
|
* Stores the page submit values
|
|
*
|
|
* @param string Page ID
|
|
* @param array Page submit values
|
|
*/
|
|
public function storeValues($pageId, array $values)
|
|
{
|
|
$this->data['values'][$pageId] = $values;
|
|
}
|
|
|
|
/**
|
|
* Returns the page values kept in session
|
|
*
|
|
* @param string Page ID
|
|
* @return array
|
|
*/
|
|
public function getValues($pageId)
|
|
{
|
|
return array_key_exists($pageId, $this->data['values'])
|
|
? $this->data['values'][$pageId]: array();
|
|
}
|
|
|
|
/**
|
|
* Stores the page validation status
|
|
*
|
|
* @param string Page ID
|
|
* @param bool Whether the page is valid
|
|
*/
|
|
public function storeValidationStatus($pageId, $status)
|
|
{
|
|
$this->data['valid'][$pageId] = (bool)$status;
|
|
}
|
|
|
|
/**
|
|
* Returns the page validation status kept in session
|
|
*
|
|
* @param string Page ID
|
|
* @return bool
|
|
*/
|
|
public function getValidationStatus($pageId)
|
|
{
|
|
return array_key_exists($pageId, $this->data['valid'])
|
|
? $this->data['valid'][$pageId]: null;
|
|
|
|
}
|
|
|
|
/**
|
|
* Stores the controller data sources
|
|
*
|
|
* @param array A new data source list
|
|
* @throws HTML_QuickForm2_InvalidArgumentException if given array
|
|
* contains something that is not a valid data source
|
|
*/
|
|
public function storeDatasources(array $datasources)
|
|
{
|
|
foreach ($datasources as $ds) {
|
|
if (!$ds instanceof HTML_QuickForm2_DataSource) {
|
|
throw new HTML_QuickForm2_InvalidArgumentException(
|
|
'Array should contain only DataSource instances'
|
|
);
|
|
}
|
|
}
|
|
$this->data['datasources'] = $datasources;
|
|
}
|
|
|
|
/**
|
|
* Returns the controller data sources
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getDatasources()
|
|
{
|
|
return $this->data['datasources'];
|
|
}
|
|
|
|
/**
|
|
* Stores some user-supplied parameter alongside controller data
|
|
*
|
|
* It is sometimes useful to pass some additional user data between pages
|
|
* of the form, thus this method. It will be removed with all the other
|
|
* data by {@link HTML_QuickForm2_Controller::destroySessionContainer()}
|
|
*
|
|
* @param string Parameter name
|
|
* @param string Parameter value
|
|
*/
|
|
public function storeOpaque($name, $value)
|
|
{
|
|
if (!array_key_exists('opaque', $this->data)) {
|
|
$this->data['opaque'] = array();
|
|
}
|
|
$this->data['opaque'][$name] = $value;
|
|
}
|
|
|
|
/**
|
|
* Returns a user-supplied parameter
|
|
*
|
|
* @param string Parameter name
|
|
* @return mixed
|
|
*/
|
|
public function getOpaque($name)
|
|
{
|
|
return (array_key_exists('opaque', $this->data)
|
|
&& array_key_exists($name, $this->data['opaque']))
|
|
? $this->data['opaque'][$name]: null;
|
|
}
|
|
} |