getUserState()

 for 1.5.x

 先日、$mainframe が持つ getUserStateFromRequest() の問題点について挙げた。

 フォームの入力をセッションに保持しつつ、リクエストから取得したい要望を満たすため、問題点を踏まえた上で Model に搭載すると便利かもしれないメソッドを作った。

class MyModel extends JModel {
	/**
	 * get user state key
	 *
	 * @param string base name
	 * @return string key
	 */
	function getUserStateKey($name) {
		$key = '';
		$option = JRequest::getVar('option');
		$option and $key = $option . '.';
		$view = JRequest::getVar('view');
		$view and $key .= $view . '.';
		return $key.$name;
	}

	/**
	 * alias $mainframe->getUserStateFromRequest()
	 *
	 * @param string $name  Variable name
	 * @param string $default Default value if the variable does not exist
	 * @param string $hash  Where the var should come from (POST, GET, FILES, COOKIE, METHOD)
	 * @param string $type  Return type for the variable, for valid values see {@link JFilterInput::clean()}
	 * @param int  $mask  Filter mask for the variable
	 * @return mixed Requested variable
	 * @since 1.5
	 */
	function getUserState($name, $default = null, $hash = 'default', $type = 'none', $mask = 0) {
		$key = $this->getUserStateKey($name);
		global $mainframe;
		$value = $mainframe->getUserState($key);
		$value = JRequest::getVar($name, $value, $hash, $type, $mask);
		if ($type === 'int' && isset($value)) {
			$value = (int) $value;
		}
		$mainframe->setUserState($key, $value);
		return $value;
	}

	/**
	 * alias $mainframe->setUserState()
	 *
	 * @param string name
	 * @param mixed value
	 */
	function setUserState($name, $value) {
		$key = $this->getUserStateKey($name);
		global $mainframe;
		$mainframe->setUserState($key, $value);
	}

	/**
	 * alias $mainframe->setUserState($name, null)
	 *
	 * @param string name
	 * @param mixed value
	 */
	function delUserState($name) {
		$this->setUserState($name, null);
	}
}