<?php
namespace W3TC;

/**
 * W3 Request object
 */

/**
 * class Request
 */
class Util_Request {
	/**
	 * Returns request value
	 *
	 * @param string  $key
	 * @param mixed   $default
	 * @return mixed
	 */
	static function get( $key, $default = null ) {
		$request = Util_Request::get_request();

		if ( isset( $request[$key] ) ) {
			$value = $request[$key];

			if ( defined( 'TEMPLATEPATH' ) ) {
				$value = Util_Environment::stripslashes( $value );
			}

			return $value;
		}

		return $default;
	}

	/**
	 * Returns string value
	 *
	 * @param string  $key
	 * @param string  $default
	 * @param boolean $trim
	 * @return string
	 */
	static function get_string( $key, $default = '', $trim = true ) {
		$value = (string) Util_Request::get( $key, $default );

		return ( $trim ) ? trim( $value ) : $value;
	}

	static function get_label( $key, $default = '' ) {
		$v = self::get_string( $key, $default);
		return preg_replace('/[^A-Za-z0-9_\\-]/', '', $v);
	}

	/**
	 * Returns integer value
	 *
	 * @param string  $key
	 * @param integer $default
	 * @return integer
	 */
	static function get_integer( $key, $default = 0 ) {
		return (integer) Util_Request::get( $key, $default );
	}

	/**
	 * Returns double value
	 *
	 * @param string  $key
	 * @param double|float $default
	 * @return double
	 */
	static function get_double( $key, $default = 0. ) {
		return (double) Util_Request::get( $key, $default );
	}

	/**
	 * Returns boolean value
	 *
	 * @param string  $key
	 * @param boolean $default
	 * @return boolean
	 */
	static function get_boolean( $key, $default = false ) {
		return Util_Environment::to_boolean( Util_Request::get( $key, $default ) );
	}

	/**
	 * Returns array value
	 *
	 * @param string  $key
	 * @param array   $default
	 * @return array
	 */
	static function get_array( $key, $default = array() ) {
		$value = Util_Request::get( $key );

		if ( is_array( $value ) ) {
			return $value;
		} elseif ( $value != '' ) {
			return preg_split( "/[\r\n,;]+/", trim( $value ) );
		}

		return $default;
	}

	/**
	 * Returns array value
	 *
	 * @param string  $prefix
	 * @param array   $default
	 * @return array
	 */
	static function get_as_array( $prefix, $default = array() ) {
		$request = Util_Request::get_request();
		$array = array();
		foreach ( $request as $key => $value ) {
			if ( strpos( $key, $prefix ) === 0 || strpos( $key, str_replace( '.', '_', $prefix ) ) === 0 ) {
				$array[substr( $key, strlen( $prefix ) )] = $value;
			}
		}
		return $array;
	}

	/**
	 * Returns request array
	 *
	 * @return array
	 */
	static function get_request() {
		if ( !isset( $_GET ) ) {
			$_GET = array();
		}

		if ( !isset( $_POST ) ) {
			$_POST = array();
		}

		return array_merge( $_GET, $_POST );
	}
}
