%PDF- %PDF-
Direktori : /home/lightco1/www/lightingrepublic.com.au/libraries/koowa/config/ |
Current File : /home/lightco1/www/lightingrepublic.com.au/libraries/koowa/config/state.php |
<?php /** * @version $Id$ * @package Koowa_Model * @copyright Copyright (C) 2007 - 2012 Johan Janssens. All rights reserved. * @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> * @link http://www.nooku.org */ /** * State Config Class * * @author Johan Janssens <johan@nooku.org> * @category Koowa * @package Koowa_Config */ class KConfigState extends KConfig { /** * Retrieve a configuration item and return $default if there is no element set. * * @param string * @param mixed * @return mixed */ public function get($name, $default = null) { $result = $default; if(isset($this->_data[$name])) { $result = $this->_data[$name]->value; } return $result; } /** * Set state value * * @param string The user-specified state name. * @param mixed The user-specified state value. * @return void */ public function __set($name, $value) { if(isset($this->_data[$name])) { $this->_data[$name]->value = $value; } } /** * Unset a state value * * @param string The column key. * @return void */ public function __unset($name) { if(isset($this->_data[$name])) { $this->_data[$name]->value = $this->_data[$name]->default; } } /** * Insert a new state * * @param string The name of the state * @param mixed Filter(s), can be a KFilterInterface object, a filter name or an array of filter names * @param mixed The default value of the state * @param boolean TRUE if the state uniquely indetifies an enitity, FALSE otherwise. Default FALSE. * @param array Array of required states to determine if the state is unique. Only applicable if the state is unqiue. * @return KConfigState */ public function insert($name, $filter, $default = null, $unique = false, $required = array()) { $state = new stdClass(); $state->name = $name; $state->filter = $filter; $state->value = $default; $state->unique = $unique; $state->required = $required; $state->default = $default; $this->_data[$name] = $state; return $this; } /** * Remove an existing state * * @param string The name of the state * @return KConfigState */ public function remove( $name ) { unset($this->_data[$name]); return $this; } /** * Reset all state data and revert to the default state * * @param boolean If TRUE use defaults when resetting. Default is TRUE * @return KConfigState */ public function reset($default = true) { foreach($this->_data as $state) { $state->value = $default ? $state->default : null; } return $this; } /** * Set the state data * * This function will only filter values if we have a value. If the value * is an empty string it will be filtered to NULL. * * @param array|object An associative array of state values by name * @return KConfigState */ public function setData(array $data) { // Filter data foreach($data as $key => $value) { if(isset($this->_data[$key])) { $filter = $this->_data[$key]->filter; //Only filter if we have a value if($value !== null) { if($value !== '') { if(!($filter instanceof KFilterInterface)) { $filter = KService::get('koowa:filter.factory')->instantiate($filter); } $value = $filter->sanitize($value); } else $value = null; $this->_data[$key]->value = $value; } } } return $this; } /** * Get the state data * * This function only returns states that have been been set. * * @param boolean If TRUE only retrieve unique state values, default FALSE * @return array An associative array of state values by name */ public function getData($unique = false) { $data = array(); foreach ($this->_data as $name => $state) { if(isset($state->value)) { //Only return unique data if($unique) { //Unique values cannot be null or an empty string if($state->unique && $this->_validate($state)) { $result = true; //Check related states to see if they are set foreach($state->required as $required) { if(!$this->_validate($this->_data[$required])) { $result = false; break; } } //Prepare the data to be returned. Include states if($result) { $data[$name] = $state->value; foreach($state->required as $required) { $data[$required] = $this->_data[$required]->value; } } } } else $data[$name] = $state->value; } } return $data; } /** * Check if the state information is unique * * @return boolean TRUE if the state is unique, otherwise FALSE. */ public function isUnique() { $unique = false; //Get the unique states $states = $this->getData(true); if(!empty($states)) { $unique = true; //If a state contains multiple values the state is not unique foreach($states as $state) { if(is_array($state) && count($state) > 1) { $unique = false; break; } } } return $unique; } /** * Check if the state information is empty * * @param array An array of states names to exclude. * @return boolean TRUE if the state is empty, otherwise FALSE. */ public function isEmpty(array $exclude = array()) { $states = $this->getData(); foreach($exclude as $state) { unset($states[$state]); } return (bool) (count($states) == 0); } /** * Return an associative array of the states. * * @param bool If TRUE return only as associative array of the state values. Default is TRUE. * @return array */ public function toArray($values = true) { if($values) { $result = array(); foreach($this->_data as $state) { $result[$state->name] = $state->value; } } else $result = $this->_data; return $result; } /** * Validate a unique state. * * @param object The state object. * @return boolean True if unique state is valid, false otherwise. */ protected function _validate($state) { // Unique values can't be null or empty string. if(empty($state->value) && !is_numeric($state->value)) { return false; } if(is_array($state->value)) { // The first element of the array can't be null or empty string. $first = array_slice($state->value, 0, 1); if(empty($first) && !is_numeric($first)) { return false; } } return true; } }