mirror of
				https://github.com/e107inc/e107.git
				synced 2025-10-26 19:21:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			1302 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			1302 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /*
 | |
|  * e107 website system
 | |
|  *
 | |
|  * Copyright (C) 2008-2010 e107 Inc (e107.org)
 | |
|  * Released under the terms and conditions of the
 | |
|  * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
 | |
|  *
 | |
|  * e107 Preference Handler
 | |
|  *
 | |
|  * $URL$
 | |
|  * $Id$
 | |
| */
 | |
| 
 | |
| if (!defined('e107_INIT')) { exit; }
 | |
| require_once(e_HANDLER.'model_class.php');
 | |
| 
 | |
| /**
 | |
|  * Base preference object - shouldn't be used direct,
 | |
|  * used internal by {@link e_plugin_pref} and {@link e_core_pref classes}
 | |
|  *
 | |
|  * @package e107
 | |
|  * @category e107_handlers
 | |
|  * @version $Id$
 | |
|  * @author SecretR
 | |
|  * @copyright Copyright (c) 2009, e107 Inc.
 | |
|  */
 | |
| class e_pref extends e_front_model
 | |
| {
 | |
| 	/**
 | |
| 	 * Preference ID - DB row value
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $prefid;
 | |
| 
 | |
| 	/**
 | |
| 	 * Preference ID alias e.g. 'core' is an alias of prefid 'SitePrefs'
 | |
| 	 * Used in e.g. server cache file name
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $alias;
 | |
| 
 | |
| 	/**
 | |
| 	 * Runtime cache, set on first data load
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $pref_cache = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * Backward compatibility - serialized preferences
 | |
| 	 * Note: serialized preference storage is deprecated
 | |
| 	 *
 | |
| 	 * @var boolean
 | |
| 	 */
 | |
| 	protected $serial_bc = false;
 | |
| 
 | |
| 	/**
 | |
| 	 * If true, $prefid.'_Backup' row will be created/updated
 | |
| 	 * on every {@link save()} call
 | |
| 	 *
 | |
| 	 * @var boolean
 | |
| 	 */
 | |
| 	protected $set_backup = false;
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor
 | |
| 	 *
 | |
| 	 * @param string $prefid
 | |
| 	 * @param string $alias Used by cache file.
 | |
| 	 * @param array $data
 | |
| 	 * @param boolean $sanitize_data
 | |
| 	 */
 | |
| 	function __construct($prefid, $alias = '', $data = array(), $sanitize_data = true)
 | |
| 	{
 | |
| 		require_once(e_HANDLER.'cache_handler.php');
 | |
| 
 | |
| 		$this->prefid = preg_replace('/[^\w\-]/', '', $prefid);
 | |
| 		
 | |
| 		if(empty($alias))
 | |
| 		{
 | |
| 			$alias = $prefid;
 | |
| 		}
 | |
| 
 | |
| 		$this->alias = preg_replace('/[^\w\-]/', '', $alias);
 | |
| 
 | |
| 		$this->loadData($data, $sanitize_data);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Advanced getter - $pref_name could be path in format 'pref1/pref2/pref3' (multidimensional arrays support),
 | |
| 	 * alias of {@link e_model::getData()}
 | |
| 	 * If $pref_name is empty, all data array will be returned
 | |
| 	 *
 | |
| 	 * @param string $pref_name
 | |
| 	 * @param mixed $default
 | |
| 	 * @param integer $index
 | |
| 	 * @return mixed
 | |
| 	 */
 | |
| 	public function getPref($pref_name = '', $default = null, $index = null)
 | |
| 	{
 | |
| 		return $this->getData($pref_name, $default, $index);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Simple getter - $pref_name is not parsed (no multidimensional arrays support), alias of {@link e_model::get()}
 | |
| 	 * This is the prefered (performance wise) method when simple preference is retrieved
 | |
| 	 *
 | |
| 	 * @param string $key (pref name)
 | |
| 	 * @param mixed $default
 | |
| 	 * @return mixed
 | |
| 	 */
 | |
| 	public function get($key, $default = null)
 | |
| 	{
 | |
| 		return parent::get((string) $key, $default);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Advanced setter - $pref_name could be path in format 'pref1/pref2/pref3' (multidimensional arrays support)
 | |
| 	 * If $pref_name is array, it'll be merged with existing preference data, non existing preferences will be added as well
 | |
| 	 *
 | |
| 	 * @param string|array $pref_name
 | |
| 	 * @param mixed $value
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	public function setPref($pref_name, $value = null)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		//object reset not allowed, adding new pref is allowed
 | |
| 		if(empty($pref_name))
 | |
| 		{
 | |
| 			return $this;
 | |
| 		}
 | |
| 
 | |
| 		//Merge only allowed
 | |
| 		if(is_array($pref_name))
 | |
| 		{
 | |
| 			$this->mergeData($pref_name, false, false, false);
 | |
| 			return $this;
 | |
| 		}
 | |
| 
 | |
| 		parent::setData($pref_name, $value, false);
 | |
| 
 | |
| 		//BC
 | |
| 		if($this->alias === 'core')
 | |
| 		{
 | |
| 			$pref = $this->getData();
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
|     /**
 | |
|      * Reset preference object to given/empty state
 | |
|      * @param array $prefs
 | |
|      * @return $this
 | |
|      */
 | |
|     public function reset($prefs = array())
 | |
|     {
 | |
|         parent::setData(array());
 | |
| 
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
| 	/**
 | |
| 	 * Advanced setter - $pref_name could be path in format 'pref1/pref2/pref3' (multidimensional arrays support)
 | |
| 	 * Object data reseting is not allowed, adding new preferences is controlled by $strict parameter
 | |
| 	 *
 | |
| 	 * @param string|array $pref_name
 | |
| 	 * @param mixed $value
 | |
| 	 * @param boolean $strict true - update only, false - same as setPref()
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	public function updatePref($pref_name, $value = null, $strict = false)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		//object reset not allowed, adding new pref is not allowed
 | |
| 		if(empty($pref_name))
 | |
| 		{
 | |
| 			return $this;
 | |
| 		}
 | |
| 
 | |
| 		//Merge only allowed
 | |
| 		if(is_array($pref_name))
 | |
| 		{
 | |
| 			$this->mergeData($pref_name, $strict, false, false);
 | |
| 			return $this;
 | |
| 		}
 | |
| 
 | |
| 		parent::setData($pref_name, $value, $strict);
 | |
| 
 | |
| 		//BC
 | |
| 		if($this->alias === 'core')
 | |
| 		{
 | |
| 			$pref = $this->getData();
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Simple setter - $pref_name is not parsed (no multidimensional arrays support)
 | |
| 	 * Adding new pref is allowed
 | |
| 	 *
 | |
| 	 * @param string $key (pref name)
 | |
| 	 * @param mixed $value
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	public function set($key, $value=null, $strict = false)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		if(empty($key) || !is_string($key))
 | |
| 		{
 | |
| 			return $this;
 | |
| 		}
 | |
| 		
 | |
| 		if(!isset($this->_data[$key]) || $this->_data[$key] != $value) $this->data_has_changed = true;
 | |
| 		$this->_data[$key] = $value;
 | |
| 
 | |
| 		//BC
 | |
| 		if($this->alias === 'core')
 | |
| 		{
 | |
| 			$pref = $this->getData();
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Simple setter - $pref_name is  not parsed (no multidimensional arrays support)
 | |
| 	 * Non existing setting will be not created
 | |
| 	 *
 | |
| 	 * @param string $pref_name
 | |
| 	 * @param mixed $value
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	public function update($pref_name, $value)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		if(empty($pref_name) || !is_string($pref_name))
 | |
| 		{
 | |
| 			return $this;
 | |
| 		}
 | |
| 		if(array_key_exists($pref_name, $this->_data))
 | |
| 		{
 | |
| 			if($this->_data[$pref_name] != $value) $this->data_has_changed = true;
 | |
| 			$this->_data[$pref_name] = $value;
 | |
| 		}
 | |
| 
 | |
| 		//BC
 | |
| 		if($this->alias === 'core')
 | |
| 		{
 | |
| 			$pref = $this->getData();
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Add new (single) preference (ONLY if doesn't exist)
 | |
| 	 * No multidimensional arrays support
 | |
| 	 *
 | |
| 	 * @see addData()
 | |
| 	 * @param string $pref_name
 | |
| 	 * @param mixed $value
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	public function add($pref_name, $value)
 | |
| 	{
 | |
| 		if(empty($pref_name) || !is_string($pref_name))
 | |
| 		{
 | |
| 			return $this;
 | |
| 		}
 | |
| 		if(!isset($this->_data[$pref_name])) 
 | |
| 		{
 | |
| 			$this->_data[$pref_name] = $value;
 | |
| 			$this->data_has_changed = true;
 | |
| 		}
 | |
| 		
 | |
| 		//BC
 | |
| 		if($this->alias === 'core')
 | |
| 		{
 | |
| 			$pref = $this->getData();
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Add new preference or preference array (ONLY if it/they doesn't exist)
 | |
| 	 * $pref_name could be path in format 'pref1/pref2/pref3'
 | |
| 	 *
 | |
| 	 * @see addData()
 | |
| 	 * @param string|array $pref_name
 | |
| 	 * @param mixed $value
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	public function addPref($pref_name, $value = null)
 | |
| 	{
 | |
| 		$this->addData($pref_name, $value);
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Remove single preference
 | |
| 	 * $pref_name is not parsed as a path
 | |
| 	 *
 | |
| 	 * @param string $key (pref name)
 | |
| 	 * @return e_pref
 | |
| 	 *@see e_model::remove()
 | |
| 	 */
 | |
| 	public function remove($key)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		parent::remove((string) $key);
 | |
| 
 | |
| 		//BC
 | |
| 		if($this->alias === 'core')
 | |
| 		{
 | |
| 			$pref = $this->getData();
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Remove single preference (parse $pref_name)
 | |
| 	 * $pref_name could be path in format 'pref1/pref2/pref3'
 | |
| 	 *
 | |
| 	 * @see removeData()
 | |
| 	 * @param string $pref_name
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	public function removePref($pref_name)
 | |
| 	{
 | |
| 		$this->removeData($pref_name);
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Disallow public use of e_model::addData()
 | |
| 	 * Disallow preference override
 | |
| 	 *
 | |
| 	 * @param string|array $key (pref name or array)
 | |
| 	 * @param null $value
 | |
| 	 * @param bool $override
 | |
| 	 * @return $this|\e_model
 | |
| 	 */
 | |
| 	final public function addData($key, $value = null, $override = true)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		parent::addData($key, $value, false);
 | |
| 		//BC
 | |
| 		if($this->alias === 'core')
 | |
| 		{
 | |
| 			$pref = $this->getData();
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Disallow public use of e_model::setData()
 | |
| 	 * Only data merge possible
 | |
| 	 *
 | |
| 	 * @param string|array $key
 | |
| 	 * @param mixed $value
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	final public function setData($key, $value = null, $strict = false)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		if(empty($key))
 | |
| 		{
 | |
| 			return $this;
 | |
| 		}
 | |
| 
 | |
| 		//Merge only allowed
 | |
| 		if(is_array($key))
 | |
| 		{
 | |
| 			$this->mergeData($key, false, false, false);
 | |
| 			return $this;
 | |
| 		}
 | |
| 
 | |
| 		parent::setData($key, $value, false);
 | |
| 
 | |
| 		//BC
 | |
| 		if($this->alias === 'core')
 | |
| 		{
 | |
| 			$pref = $this->getData();
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Disallow public use of e_model::removeData()
 | |
| 	 * Object data reseting is not allowed
 | |
| 	 *
 | |
| 	 * @param string $key (pref name)
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	final public function removeData($key=null)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		parent::removeData((string) $key);
 | |
| 
 | |
| 		//BC
 | |
| 		if($this->alias === 'core')
 | |
| 		{
 | |
| 			$pref = $this->getData();
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Reset object data
 | |
| 	 *
 | |
| 	 * @param array $data
 | |
| 	 * @param boolean $sanitize
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	public function loadData(array $data, $sanitize = true)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		if(!empty($data))
 | |
| 		{
 | |
| 			if($sanitize)
 | |
| 			{
 | |
| 				$data = e107::getParser()->toDB($data);
 | |
| 			}
 | |
| 			parent::setData($data, null, false);
 | |
| 			$this->pref_cache = e107::getArrayStorage()->serialize($data, false); //runtime cache
 | |
| 			//BC
 | |
| 			if($this->alias === 'core')
 | |
| 			{
 | |
| 				$pref = $this->getData();
 | |
| 			}
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Load object data - public
 | |
| 	 *
 | |
| 	 * @see _load()
 | |
| 	 * @param boolean $force
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	public function load($id=null, $force = false)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		if($force || !$this->hasData())
 | |
| 		{
 | |
| 			$this->data_has_changed = false;
 | |
| 			$this->_load($force);
 | |
| 			//BC
 | |
| 			if($this->alias === 'core')
 | |
| 			{
 | |
| 				$pref = $this->getData();
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Load object data
 | |
| 	 *
 | |
| 	 * @param boolean $force
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	protected function _load($force = false)
 | |
| 	{
 | |
| 		$id = $this->prefid;
 | |
| 		$data = $force ? false : $this->getPrefCache(true);
 | |
| 
 | |
| 		if(!empty($data))
 | |
| 		{
 | |
| 			$this->pref_cache = e107::getArrayStorage()->serialize($data, false); //runtime cache
 | |
| 			$this->loadData((array) $data, false);
 | |
| 			return $this;
 | |
| 		}
 | |
| 
 | |
| 		if (e107::getDb()->select('core', 'e107_value', "e107_name='{$id}'"))
 | |
| 		{
 | |
| 			$row = e107::getDb()->fetch();
 | |
| 
 | |
| 			if($this->serial_bc)
 | |
| 			{
 | |
| 				$data = unserialize($row['e107_value']);
 | |
| 				$row['e107_value'] = e107::getArrayStorage()->serialize($data, false);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				$data = e107::unserialize($row['e107_value']);
 | |
| 			}
 | |
| 
 | |
| 			$this->pref_cache = $row['e107_value']; //runtime cache
 | |
| 			$this->setPrefCache($row['e107_value'], true);
 | |
| 		}
 | |
| 
 | |
| 		if(empty($data))
 | |
| 			$data = array();
 | |
| 
 | |
| 		$this->loadData($data, false);
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Save object data to DB
 | |
| 	 *
 | |
| 	 * @param boolean $from_post merge post data
 | |
| 	 * @param boolean $force
 | |
| 	 * @param mixed $session_messages      null: normal messages displayed, true: session messages used, false: no messages displayed. 
 | |
| 	 * @return boolean|integer 0 - no change, true - saved, false - error
 | |
| 	 */
 | |
| 	public function save($from_post = true, $force = false, $session_messages = null)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		if(!$this->prefid)
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 		
 | |
| 		e107::getMessage()->setUnique($this->prefid); // attempt to fix 
 | |
| 		
 | |
| 		if($from_post)
 | |
| 		{
 | |
| 			$this->mergePostedData(); //all posted data is sanitized and filtered vs preferences/_data_fields array
 | |
| 		}
 | |
| 
 | |
| 		if($this->hasValidationError())
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		if(!$this->data_has_changed && !$force)
 | |
| 		{
 | |
| 			if($session_messages !== false)
 | |
| 			{
 | |
| 				e107::getMessage()->addInfo(LAN_SETTINGS_NOT_SAVED_NO_CHANGES_MADE, $this->prefid, $session_messages)->moveStack($this->prefid);
 | |
| 			}
 | |
| 
 | |
| 			return 0;
 | |
| 		}
 | |
| 
 | |
| 		$log = e107::getLog();
 | |
| 		$disallow_logs = $this->getParam('nologs', false);
 | |
| 
 | |
| 		//Save to DB
 | |
| 		if(!$this->hasError())
 | |
| 		{
 | |
| 			if($this->serial_bc)
 | |
| 			{
 | |
| 				$dbdata = serialize($this->getPref());
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				$dbdata = $this->toString(false);
 | |
| 			}
 | |
| 
 | |
| 			if(e107::getDb()->gen("REPLACE INTO `#core` (e107_name,e107_value) values ('{$this->prefid}', '".addslashes($dbdata)."') "))
 | |
| 			{
 | |
| 				$this->data_has_changed = false; //reset status
 | |
| 
 | |
| 				if(!empty($this->pref_cache))
 | |
| 				{
 | |
| 					$old = e107::unserialize($this->pref_cache);
 | |
| 					if($this->serial_bc)
 | |
| 					{
 | |
| 						$dbdata = serialize($old);
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						$dbdata = $this->pref_cache;
 | |
| 					}
 | |
| 
 | |
| 					// auto admin log
 | |
| 					if(is_array($old) && !$disallow_logs) // fix install problems - no old prefs available
 | |
| 					{
 | |
| 						$new = $this->getPref();
 | |
| 					//	$log->logArrayDiffs($new, $old, 'PREFS_02', false);
 | |
| 						$log->addArray($new,$old);
 | |
| 						unset($new, $old);
 | |
| 						if(deftrue('e_DEBUG_PREFS'))
 | |
| 						{
 | |
| 							$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS,2);
 | |
| 							$log->logMessage(print_a($backtrace,true),  E_MESSAGE_DEBUG);
 | |
| 						}
 | |
| 						
 | |
| 					}
 | |
| 
 | |
| 					// Backup 
 | |
| 					if($this->set_backup === true && e107::getDb()->gen("REPLACE INTO `#core` (e107_name,e107_value) values ('".$this->prefid."_Backup', '".addslashes($dbdata)."') "))
 | |
| 					{
 | |
| 					//	trigger_error("Performing a pref backup", E_USER_NOTICE);
 | |
| 						if(!$disallow_logs) $log->logMessage('Backup of <strong>'.$this->alias.' ('.$this->prefid.')</strong> successfully created.', E_MESSAGE_DEBUG, E_MESSAGE_SUCCESS, $session_messages);
 | |
| 						e107::getCache()->clear_sys('Config_'.$this->alias.'_backup');
 | |
| 						if(deftrue('e_DEBUG_PREFS'))
 | |
| 						{
 | |
| 							$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS,2);
 | |
| 							$log->logMessage(print_a($backtrace,true),  E_MESSAGE_DEBUG);
 | |
| 						}
 | |
| 					}
 | |
| 					
 | |
| 				}
 | |
| 				
 | |
| 				$this->setPrefCache($this->toString(false), true); //reset pref cache - runtime & file
 | |
| 				
 | |
| 				if($this->alias == 'search') // Quick Fix TODO Improve. 
 | |
| 				{
 | |
| 					$logId = 'SEARCH_04';	
 | |
| 				}
 | |
| 				elseif($this->alias == 'notify')
 | |
| 				{
 | |
| 					$logId = 'NOTIFY_01';	
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					$logId = 'PREFS_01';	
 | |
| 				}
 | |
| 
 | |
| 				// FIXME: Admin LAN dependency out of nowhere
 | |
| 				e107::includeLan(e_LANGUAGEDIR . e_LANGUAGE . '/admin/lan_admin.php');
 | |
| 
 | |
| 				$log->addSuccess(LAN_SETSAVED, ($session_messages === null || $session_messages === true));
 | |
| 
 | |
| 				$uid = USERID;
 | |
| 
 | |
| 				if(empty($uid)) // Log extra details of any pref changes made by a non-user.
 | |
| 				{
 | |
| 					$log->addWarning(print_r(debug_backtrace(null,2), true), false);
 | |
| 				}
 | |
| 
 | |
| 				$log->save($logId);
 | |
| 
 | |
| 			//	if(!$disallow_logs) $log->logSuccess('Settings successfully saved.', true, $session_messages)->flushMessages($logId, E_LOG_INFORMATIVE, '', $this->prefid);
 | |
| 				
 | |
| 				
 | |
| 				//BC
 | |
| 				if($this->alias === 'core')
 | |
| 				{
 | |
| 					$pref = $this->getPref();
 | |
| 				}
 | |
| 				e107::getMessage()->moveStack($this->prefid);
 | |
| 				return true;
 | |
| 			}
 | |
| 			elseif(e107::getDb()->getLastErrorNumber())
 | |
| 			{
 | |
| 				if(!$disallow_logs)
 | |
| 					$log->addError('mySQL error #'.e107::getDb()->getLastErrorNumber().': '.e107::getDb()->getLastErrorText(), true, $session_messages)
 | |
| 					->addError('Settings not saved.', true, $session_messages)
 | |
| 					->flushMessages('PREFS_03', E_LOG_INFORMATIVE, '', $this->prefid);
 | |
| 					
 | |
| 				e107::getMessage()->moveStack($this->prefid);
 | |
| 				return false;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if($this->hasError())
 | |
| 		{
 | |
| 			//add errors to the eMessage stack
 | |
| 			//$this->setErrors(true, $session_messages); old - doesn't needed anymore
 | |
| 			if(!$disallow_logs)
 | |
| 				$log->addError('Settings not saved.', true, $session_messages)
 | |
| 				->flushMessages('LAN_FIXME', E_LOG_INFORMATIVE, '', $this->prefid);
 | |
| 				
 | |
| 			e107::getMessage()->moveStack($this->prefid);
 | |
| 			trigger_error("Settings not saved", E_USER_NOTICE);
 | |
| 			return false;
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			e107::getMessage()->addInfo(LAN_SETTINGS_NOT_SAVED_NO_CHANGES_MADE, $this->prefid, $session_messages);
 | |
| 			if(!$disallow_logs) $log->flushMessages('LAN_FIXME', E_LOG_INFORMATIVE, '', $this->prefid);
 | |
| 			e107::getMessage()->moveStack($this->prefid);
 | |
| 			return 0;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get cached data from server cache file
 | |
| 	 *
 | |
| 	 * @param boolean $toArray convert to array
 | |
| 	 * @return string|array|false
 | |
| 	 */
 | |
| 	protected function getPrefCache($toArray = true)
 | |
| 	{
 | |
| 		if(!$this->pref_cache)
 | |
| 		{
 | |
| 			$this->pref_cache = e107::getCache()->retrieve_sys('Config_'.$this->alias, 24 * 60, true);
 | |
| 		}
 | |
| 
 | |
| 		return ($toArray && $this->pref_cache ? e107::unserialize($this->pref_cache) : $this->pref_cache);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Convert data to a string and store it to a server cache file
 | |
| 	 * If $cache_string is an array, it'll be converted to a string
 | |
| 	 * If $save is string, it'll be used for building the cache filename
 | |
| 	 *
 | |
| 	 * @param string|array $cache_string
 | |
| 	 * @param string|boolean $save write to a file
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	protected function setPrefCache($cache_string, $save = false)
 | |
| 	{
 | |
| 		if(is_array($cache_string))
 | |
| 		{
 | |
| 			$cache_string = e107::serialize($cache_string, false);
 | |
| 		}
 | |
| 		if(is_bool($save))
 | |
| 		{
 | |
| 			$this->pref_cache = $cache_string;
 | |
| 		}
 | |
| 		if($save)
 | |
| 		{
 | |
| 			e107::getCache()->set_sys('Config_'.($save !== true ? $save : $this->alias), $cache_string, true);
 | |
| 		}
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Clear pref cache
 | |
| 	 *
 | |
| 	 * @param string $cache_name default to current alias
 | |
| 	 * @param boolean $runtime clear runtime cache as well ($this->pref_cache)
 | |
| 	 * @return e_pref
 | |
| 	 */
 | |
| 	public function clearPrefCache($cache_name = '', $runtime = true)
 | |
| 	{
 | |
| 		if($runtime)
 | |
| 		{
 | |
| 			$this->pref_cache = '';
 | |
| 		}
 | |
| 		e107::getCache()->clear_sys('Config_'.(!empty($cache_name) ? $cache_name : $this->alias));
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Validation
 | |
| 	 *
 | |
| 	 * @param array $data [optional] null to use Posted data
 | |
| 	 * @return boolean
 | |
| 	 */
 | |
| 	public function validate($data = null)
 | |
| 	{
 | |
| 		return parent::validate($data);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set $set_backup option
 | |
| 	 *
 | |
| 	 * @param boolean $optval
 | |
| 	 * @return e_pref
 | |
| 	 *
 | |
| 	 */
 | |
| 	public function setOptionBackup($optval)
 | |
| 	{
 | |
| 		$this->set_backup = $optval;
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Set $serial_bc option
 | |
| 	 *
 | |
| 	 * @param boolean $optval
 | |
| 	 * @return e_pref
 | |
| 	 *
 | |
| 	 */
 | |
| 	public function setOptionSerialize($optval)
 | |
| 	{
 | |
| 		$this->serial_bc = $optval;
 | |
| 		return $this;
 | |
| 	}
 | |
| 
 | |
|     /**
 | |
|      * Override
 | |
|      */
 | |
|     public function delete($ids, $destroy = true, $session_messages = false)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Override
 | |
|      */
 | |
|     protected function dbUpdate($force = false, $session_messages = false)
 | |
|     {
 | |
|     }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Handle core preferences
 | |
|  *
 | |
|  * @package e107
 | |
|  * @category e107_handlers
 | |
|  * @version 1.0
 | |
|  * @author SecretR
 | |
|  * @copyright Copyright (c) 2009, e107 Inc.
 | |
|  */
 | |
| final class e_core_pref extends e_pref
 | |
| {
 | |
| 	/**
 | |
| 	 * Allowed core id array
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	public $aliases = array(
 | |
| 		'core' 			=> 'SitePrefs',
 | |
| 		'core_backup' 	=> 'SitePrefs_Backup',
 | |
| 		'core_old' 		=> 'pref',
 | |
| 		'emote' 		=> 'emote_default', //TODO include other emote packs of the user.
 | |
| 		'menu' 			=> 'menu_pref',
 | |
| 		'search' 		=> 'search_prefs',
 | |
| 		'notify' 		=> 'notify_prefs',
 | |
| 		'history'		=> 'history_prefs',
 | |
| 	);
 | |
| 
 | |
| 	/**
 | |
| 	 * Backward compatibility - list of prefid's which operate wit serialized data
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	// protected $serial_bc_array = array('core_old', 'emote', 'menu', 'search');
 | |
| 	protected $serial_bc_array = array('core_old');
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor
 | |
| 	 *
 | |
| 	 * @param string $alias
 | |
| 	 * @param boolean $load load DB data on startup
 | |
| 	 */
 | |
| 	function __construct($alias, $load = true)
 | |
| 	{
 | |
| 
 | |
| 
 | |
| 		$pref_alias = $alias;
 | |
| 
 | |
| 		if($alias == 'emote')
 | |
| 		{
 | |
| 			$pack = e107::pref('core','emotepack');
 | |
| 			$this->aliases['emote'] = 'emote_'.$pack;
 | |
| 		}
 | |
| 
 | |
| 		$pref_id = $this->getConfigId($alias);
 | |
| 
 | |
| 
 | |
| 		if(!$pref_id)
 | |
| 		{
 | |
| 			$pref_id = $pref_alias = '';
 | |
| 			trigger_error('Core config ID '.$alias.' not found!', E_USER_WARNING);
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		if(in_array($pref_alias, $this->serial_bc_array))
 | |
| 		{
 | |
| 			$this->setOptionSerialize(true);
 | |
| 		}
 | |
| 
 | |
| 		if('core' === $pref_alias)
 | |
| 		{
 | |
| 			$this->setOptionBackup(true);
 | |
| 		}
 | |
| 
 | |
| 		parent::__construct($pref_id, $pref_alias);
 | |
| 		if($load && $pref_id)
 | |
| 		{
 | |
| 			$this->load();
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get config ID
 | |
| 	 * Allowed values: key or value from $alias array
 | |
| 	 * If id not found this method returns false
 | |
| 	 *
 | |
| 	 * @param string $alias
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public function getConfigId($alias)
 | |
| 	{
 | |
| 		$alias = trim($alias);
 | |
| 		if(isset($this->aliases[$alias]))
 | |
| 		{
 | |
| 			return $this->aliases[$alias];
 | |
| 		}
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get config ID
 | |
| 	 * Allowed values: key or value from $alias array
 | |
| 	 * If id not found this method returns false
 | |
| 	 *
 | |
| 	 * @param string $prefid
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public function getAlias($prefid)
 | |
| 	{
 | |
| 		$prefid = trim($prefid);
 | |
| 		return array_search($prefid, $this->aliases);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Export data from core pref and remove if needed. Useful for core pref -> menu table parm migration.
 | |
| 	 * @param array $prefList  key/value pairs.  key = oldpref value = new pref key
 | |
| 	 * @param bool|false $remove
 | |
| 	 * @return array|false if no match found.
 | |
| 	 */
 | |
| 	public function migrateData($prefList=array(), $remove=false)
 | |
| 	{
 | |
| 		$data = self::getData();
 | |
| 		$array = array();
 | |
| 		$save = false;
 | |
| 
 | |
| 		if(empty($prefList))
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		foreach($data as $k=>$v)
 | |
| 		{
 | |
| 			if(isset($prefList[$k]))
 | |
| 			{
 | |
| 				$key = $prefList[$k];
 | |
| 				$array[$key] = $v;
 | |
| 
 | |
| 				if($remove == true)
 | |
| 				{
 | |
| 					self::remove($k);
 | |
| 					$save = true;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		if(empty($array))
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		if(!empty($save))
 | |
| 		{
 | |
| 			self::save(false,true,false);
 | |
| 		}
 | |
| 
 | |
| 		return $array;
 | |
| 
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Handle plugin preferences
 | |
|  *
 | |
|  * @package e107
 | |
|  * @category e107_handlers
 | |
|  * @version 1.0
 | |
|  * @author SecretR
 | |
|  * @copyright Copyright (c) 2009, e107 Inc.
 | |
|  */
 | |
| class e_plugin_pref extends e_pref
 | |
| {
 | |
| 	/**
 | |
| 	 * Unique plugin name
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $plugin_id;
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor
 | |
| 	 * Note: object data will be loaded only if the plugin is installed (no matter of the passed
 | |
| 	 * $load value)
 | |
| 	 *
 | |
| 	 * @param string $plugin_id unique plugin name
 | |
| 	 * @param string $multi_row additional field identifier appended to the $prefid
 | |
| 	 * @param boolean $load load on startup
 | |
| 	 */
 | |
| 	function __construct($plugin_id, $multi_row = '', $load = true)
 | |
| 	{
 | |
| 		$this->plugin_id = $plugin_id;
 | |
| 		if($multi_row)
 | |
| 		{
 | |
| 			$plugin_id = $plugin_id.'_'.$multi_row;
 | |
| 		}
 | |
| 		parent::__construct('plugin_'.$plugin_id, "plugin_".$this->plugin_id);
 | |
| 		if($load && e107::findPref('plug_installed/'.$this->plugin_id))
 | |
| 		{
 | |
| 			$this->load();
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Retrive unique plugin name
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public function getPluginId()
 | |
| 	{
 | |
| 		return $this->plugin_id;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Delete plugin preferences
 | |
| 	 * @see e107_handlers/e_pref#delete()
 | |
| 	 * @return boolean
 | |
| 	 */
 | |
| 	public function delete($ids, $destroy = true, $session_messages = false)
 | |
| 	{
 | |
| 		$ret = false;
 | |
| 		if($this->plugin_id)
 | |
| 		{
 | |
| 			$ret = e107::getDb($this->plugin_id)->delete('core', "e107_name='{$this->plugin_id}'");
 | |
| 			$this->destroy();
 | |
| 		}
 | |
| 		return $ret;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Handle plugin preferences
 | |
|  *
 | |
|  * @package e107
 | |
|  * @category e107_handlers
 | |
|  * @version 1.0
 | |
|  * @author SecretR
 | |
|  * @copyright Copyright (c) 2009, e107 Inc.
 | |
|  */
 | |
| class e_theme_pref extends e_pref
 | |
| {
 | |
| 	/**
 | |
| 	 * Unique plugin name
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	protected $theme_id;
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor
 | |
| 	 * Note: object data will be loaded only if the plugin is installed (no matter of the passed
 | |
| 	 * $load value)
 | |
| 	 *
 | |
| 	 * @param string $theme_id unique plugin name
 | |
| 	 * @param string $multi_row additional field identifier appended to the $prefid
 | |
| 	 * @param boolean $load load on startup
 | |
| 	 */
 | |
| 	function __construct($theme_id, $multi_row = '', $load = true)
 | |
| 	{
 | |
| 		$this->theme_id = $theme_id;
 | |
| 		if($multi_row)
 | |
| 		{
 | |
| 			$theme_id = $theme_id.'_'.$multi_row;
 | |
| 		}
 | |
| 		parent::__construct('theme_'.$theme_id, "theme_".$this->theme_id);
 | |
| 	//	if($load && e107::findPref('plug_installed/'.$this->theme_id))
 | |
| 		{
 | |
| 			$this->load();
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Retrive unique plugin name
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public function getPluginId()
 | |
| 	{
 | |
| 		return $this->theme_id;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Delete plugin preferences
 | |
| 	 * @see e107_handlers/e_pref#delete()
 | |
| 	 * @return boolean
 | |
| 	 */
 | |
| 	public function delete($ids, $destroy = true, $session_messages = false)
 | |
| 	{
 | |
| 		$ret = false;
 | |
| 		if($this->theme_id)
 | |
| 		{
 | |
| 			$ret = e107::getDb($this->theme_id)->delete('core', "e107_name='{$this->theme_id}'");
 | |
| 			$this->destroy();
 | |
| 		}
 | |
| 		return $ret;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * DEPRECATED - see e107::getConfig(), e_core_pref and e_plugin_pref
 | |
|  *
 | |
|  */
 | |
| //
 | |
| // Simple functionality:
 | |
| // Grab all prefs once, in one DB query. Reuse them throughout the session.
 | |
| //
 | |
| // get/set methods serve/consume strings (with slashes taken care of)
 | |
| // getArray/setArray methods serve/consume entire arrays (since most prefs are such!)
 | |
| //
 | |
| // NOTE: Use of this class is VALUABLE (efficient) yet not NECESSARY (i.e. the system
 | |
| //       will not break if it is ignored)... AS LONG AS there is no path consisting of:
 | |
| //             - modify pref value(s) IGNORING this class
 | |
| //  - retrieve pref value(s) USING this class
 | |
| //       (while processing a single web page)
 | |
| //  Just to be safe I have changed a number of menu_pref edits to use setArray().
 | |
| //
 | |
| 
 | |
| class prefs
 | |
| {
 | |
| 	var $prefVals;
 | |
| 	var $prefArrays;
 | |
| 
 | |
| 	// Default prefs to load
 | |
| 	var $DefaultRows = "e107_name='e107' OR e107_name='menu_pref' OR e107_name='notify_prefs'";
 | |
| 
 | |
| 	// Read prefs from DB - get as many rows as are required with a single query.
 | |
| 	// $RowList is an array of pref entries to retrieve.
 | |
| 	// If $use_default is TRUE, $RowList entries are added to the default array. Otherwise only $RowList is used.
 | |
| 	// Returns TRUE on success (measured as getting at least one row of data); false on error.
 | |
| 	// Any data read is buffered (in serialised form) here - retrieve using get()
 | |
| 	/**
 | |
| 	 * @param $RowList
 | |
| 	 * @param $use_default
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	function ExtractPrefs($RowList = "", $use_default = FALSE)
 | |
| 	{
 | |
| 		global $sql;
 | |
| 		$Args = '';
 | |
| 		if($use_default)
 | |
| 		{
 | |
| 			$Args = $this->DefaultRows;
 | |
| 		}
 | |
| 		if(is_array($RowList))
 | |
| 		{
 | |
| 			foreach($RowList as $v)
 | |
| 			{
 | |
| 				$Args .= ($Args ? " OR e107_name='{$v}'" : "e107_name='{$v}'");
 | |
| 			}
 | |
| 		}
 | |
| 		if (!$sql->select('core', '*', $Args, 'default'))
 | |
| 		{
 | |
| 			return FALSE;
 | |
| 		}
 | |
| 		while ($row = $sql->fetch())
 | |
| 		{
 | |
| 			$this->prefVals['core'][$row['e107_name']] = $row['e107_value'];
 | |
| 		}
 | |
| 		return TRUE;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Return current pref string $name from $table (only core for now)
 | |
| 	 *
 | |
| 	 * @param string $Name
 | |
| 	 * @return  string pref value, slashes already stripped. FALSE on error
 | |
| 	 * @access  public
 | |
| 	 */
 | |
| 	function get($Name)
 | |
| 	{
 | |
| 		if(isset($this->prefVals['core'][$Name]))
 | |
| 		{
 | |
| 			if($this->prefVals['core'][$Name] != '### ROW CACHE FALSE ###')
 | |
| 			{
 | |
| 				return $this->prefVals['core'][$Name];		// Dava from cache
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				return false;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// Data not in cache - retrieve from DB
 | |
| 		$get_sql = new db; // required so sql loops don't break using $tp->toHTML().
 | |
| 		if($get_sql->select('core', '*', "`e107_name` = '{$Name}'", 'default'))
 | |
| 		{
 | |
| 			$row = $get_sql->fetch();
 | |
| 			$this->prefVals['core'][$Name] = $row['e107_value'];
 | |
| 			return $this->prefVals['core'][$Name];
 | |
| 		}
 | |
| 		else
 | |
| 		{	// Data not in DB - put a 'doesn't exist' entry in cache to save another DB access
 | |
| 			$this->prefVals['core'][$Name] = '### ROW CACHE FALSE ###';
 | |
| 			return false;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Return current array from pref string $name in $table (core only for now)
 | |
| 	 *
 | |
| 	 * @param string $name -- name of pref row
 | |
| 	 * @return  array pref values
 | |
| 	 * @access     public
 | |
| 	 */
 | |
| 	// retrieve prefs as an array of values
 | |
| 	function getArray($name)
 | |
| 	{
 | |
| 		return e107::unserialize($this->get($name));
 | |
| 		// return unserialize($this->get($name));
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	* Update pref set and cache
 | |
| 	*
 | |
| 	* @param  string val -- pre-serialized string
 | |
| 	* @param  string $name -- name of pref row
 | |
| 	* @param  string $table -- "core" or "user"
 | |
| 	* @global  mixed $$name
 | |
| 	* @access  public
 | |
| 	*
 | |
| 	* set("val")    == 'core', 'pref'
 | |
| 	* set("val","rowname")   == 'core', rowname
 | |
| 	* set("val","","user")   == 'user', 'user_pref' for current user
 | |
| 	* set("val","","user",uid)   == 'user', 'user_pref' for user uid
 | |
| 	* set("val","fieldname","user")  == 'user', fieldname
 | |
| 	*
 | |
| 	*/
 | |
| 	function set($val, $name = "", $table = "core", $uid = USERID) {
 | |
| 		global $sql;
 | |
| 		if (!strlen($name)) {
 | |
| 			switch ($table) {
 | |
| 				case 'core':
 | |
| 				$name = "pref";
 | |
| 				break;
 | |
| 				case 'user':
 | |
| 				$name = "user_pref";
 | |
| 				break;
 | |
| 			}
 | |
| 		}
 | |
| 		$val = addslashes($val);
 | |
| 
 | |
| 		switch ($table )
 | |
| 		{
 | |
| 			case 'core':
 | |
| 			if(!$sql->update($table, "e107_value='$val' WHERE e107_name='$name'"))
 | |
| 			{
 | |
| 				$sql->insert($table, "'{$name}', '{$val}'");
 | |
| 			}
 | |
| 			$this->prefVals[$table][$name] = $val;
 | |
| 			unset($this->prefArrays[$table][$name]);
 | |
| 			break;
 | |
| 			case 'user':
 | |
| 			$sql->update($table, "user_prefs='$val' WHERE user_id=$uid");
 | |
| 			break;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	* Update pref set and cache
 | |
| 	*
 | |
| 	* - @param  string $name -- name of pref row
 | |
| 	* - @param  string $table -- "core" or "user"
 | |
| 	* - @global  $$name
 | |
| 	* - @access  public
 | |
| 	*
 | |
| 	* set()    == core, pref
 | |
| 	* set("rowname")   == core, rowname
 | |
| 	* set("","user")   == user, user_pref for current user
 | |
| 	* set("","user",uid)   == user, user_pref for user uid
 | |
| 	* set("fieldname","user")  == user, fieldname
 | |
| 	*
 | |
| 	* all pref sets other than menu_pref get toDB()
 | |
| 	*/
 | |
| 	function setArray($name = '', $table = 'core', $uid = USERID)
 | |
| 	{
 | |
| 		$tp = e107::getParser();
 | |
| 
 | |
| 		if (!strlen($name))
 | |
| 		{
 | |
| 			switch ($table)
 | |
| 			{
 | |
| 				case 'core':
 | |
| 				$name = 'pref';
 | |
| 				break;
 | |
| 				case 'user':
 | |
| 				$name = 'user_pref';
 | |
| 				break;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		global $$name;
 | |
| 		if ($name != 'menu_pref')
 | |
| 		{
 | |
| 			foreach($$name as $key => $prefvalue)
 | |
| 			{
 | |
| 				$$name[$key] = $tp->toDB($prefvalue);
 | |
| 			}
 | |
| 		}
 | |
| 		$tmp = e107::serialize($$name, FALSE);		// $this->set() adds slashes now
 | |
| 	//	$tmp = serialize($$name);
 | |
| 		$this->set($tmp, $name, $table, $uid);
 | |
| 	}
 | |
| }
 | |
| 
 |