global $wgUsePathInfo;
if( isset( $_SERVER['PATH_INFO'] ) && $wgUsePathInfo ) {
# Stuff it!
- $_REQUEST['title'] = substr( $_SERVER['PATH_INFO'], 1 );
- }
- global $wgUseLatin1;
- if( !$wgUseLatin1 ) {
- require_once( 'normal/UtfNormal.php' );
- wfProfileIn( 'WebRequest:normalizeUnicode-fix' );
- $this->normalizeUnicode( $_REQUEST );
- wfProfileOut( 'WebRequest:normalizeUnicode-fix' );
+ $_GET['title'] = $_REQUEST['title'] =
+ substr( $_SERVER['PATH_INFO'], 1 );
}
}
/**
* Recursively strips slashes from the given array;
* used for undoing the evil that is magic_quotes_gpc.
+ * @param array &$arr will be modified
+ * @return array the original array
* @private
*/
function &fix_magic_quotes( &$arr ) {
/**
* Recursively normalizes UTF-8 strings in the given array.
+ * @param array $data string or array
+ * @return cleaned-up version of the given
* @private
*/
- function normalizeUnicode( &$arr ) {
- foreach( $arr as $key => $val ) {
- if( is_array( $val ) ) {
- $this->normalizeUnicode( $arr[$key ] );
- } else {
- $arr[$key] = UtfNormal::cleanUp( $val );
+ function normalizeUnicode( $data ) {
+ if( is_array( $data ) ) {
+ foreach( $data as $key => $val ) {
+ $data[$key] = $this->normalizeUnicode( $val );
}
+ } else {
+ $data = UtfNormal::cleanUp( $data );
}
+ return $data;
}
/**
* Fetch a value from the given array or return $default if it's not set.
+ * @param array &$arr
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
* @private
*/
function getGPCVal( &$arr, $name, $default ) {
if( isset( $arr[$name] ) ) {
- return $arr[$name];
+ global $wgUseLatin1, $wgServer, $wgContLang;
+ $data = $arr[$name];
+ if( isset( $_GET[$name] ) &&
+ !is_array( $data ) &&
+ ( empty( $_SERVER['HTTP_REFERER'] ) ||
+ strncmp($wgServer, $_SERVER['HTTP_REFERER'], strlen( $wgServer ) ) ) ) {
+ # For links that came from outside, check for alternate/legacy
+ # character encoding.
+ if( isset( $wgContLang ) ) {
+ $data = $wgContLang->checkTitleEncoding( $data );
+ }
+ }
+ if( !$wgUseLatin1 ) {
+ require_once( 'normal/UtfNormal.php' );
+ $data = $this->normalizeUnicode( $data );
+ }
+ return $data;
} else {
return $default;
}
}
-
+
/**
- * Fetch a value from the given array or return $default if it's not set.
- * \r is stripped from the text, and with some language modules there is
- * an input transliteration applied.
- * @private
+ * Fetch a scalar from the input or return $default if it's not set.
+ * Returns a string. Arrays are discarded.
+ *
+ * @param string $name
+ * @param string $default optional default (or NULL)
+ * @return string
*/
- function getGPCText( &$arr, $name, $default ) {
- # Text fields may be in an alternate encoding which we should check.
- # Also, strip CRLF line endings down to LF to achieve consistency.
- global $wgLang;
- if( isset( $arr[$name] ) ) {
- return str_replace( "\r\n", "\n", $wgLang->recodeInput( $arr[$name] ) );
+ function getVal( $name, $default = NULL ) {
+ $val = $this->getGPCVal( $_REQUEST, $name, $default );
+ if( is_array( $val ) ) {
+ $val = $default;
+ }
+ if( is_null( $val ) ) {
+ return null;
} else {
- return $default;
+ return (string)$val;
}
}
/**
- * Fetch a value from the input or return $default if it's not set.
- * Value may be of any type -- even an array -- and is not altered.
+ * Fetch an array from the input or return $default if it's not set.
+ * If source was scalar, will return an array with a single element.
+ * If no source and no default, returns NULL.
+ *
+ * @param string $name
+ * @param array $default optional default (or NULL)
+ * @return array
*/
- function getVal( $name, $default = NULL ) {
- return $this->getGPCVal( $_REQUEST, $name, $default );
+ function getArray( $name, $default = NULL ) {
+ $val = $this->getGPCVal( $_REQUEST, $name, $default );
+ if( is_null( $val ) ) {
+ return null;
+ } else {
+ return (array)$val;
+ }
}
-
+
/**
* Fetch an integer value from the input or return $default if not set.
- * Guaranteed to return an integer; non-integer input will typically
+ * Guaranteed to return an integer; non-numeric input will typically
* return 0.
+ * @param string $name
+ * @param int $default
+ * @return int
*/
function getInt( $name, $default = 0 ) {
return IntVal( $this->getVal( $name, $default ) );
* Fetch a boolean value from the input or return $default if not set.
* Guaranteed to return true or false, with normal PHP semantics for
* boolean interpretation of strings.
+ * @param string $name
+ * @param bool $default
+ * @return bool
*/
function getBool( $name, $default = false ) {
return $this->getVal( $name, $default ) ? true : false;
* Return true if the named value is set in the input, whatever that
* value is (even "0"). Return false if the named value is not set.
* Example use is checking for the presence of check boxes in forms.
+ * @param string $name
+ * @return bool
*/
function getCheck( $name ) {
# Checkboxes and buttons are only present when clicked
* set. \r is stripped from the text, and with some language modules there
* is an input transliteration applied. This should generally be used for
* form <textarea> and <input> fields.
+ *
+ * @param string $name
+ * @param string $default optional
+ * @return string
*/
function getText( $name, $default = '' ) {
- return $this->getGPCText( $_REQUEST, $name, $default );
+ global $wgContLang;
+ $val = $this->getVal( $name, $default );
+ return str_replace( "\r\n", "\n",
+ $wgContLang->recodeInput( $val ) );
}
/**
*
* Note that values retrieved by the object may come from the
* GET URL etc even on a POST request.
+ *
+ * @return bool
*/
function wasPosted() {
return $_SERVER['REQUEST_METHOD'] == 'POST';
/**
* Returns true if there is a session cookie set.
* This does not necessarily mean that the user is logged in!
+ *
+ * @return bool
*/
function checkSessionCookie() {
return isset( $_COOKIE[ini_get('session.name')] );
/**
* Return the path portion of the request URI.
+ * @return string
*/
function getRequestURL() {
return $_SERVER['REQUEST_URI'];
/**
* Return the request URI with the canonical service and hostname.
+ * @return string
*/
function getFullRequestURL() {
global $wgServer;
/**
* Take an arbitrary query and rewrite the present URL to include it
+ * @param string $query Query string fragment; do not include initial '?'
+ * @return string
*/
function appendQuery( $query ) {
global $wgTitle;
/**
* HTML-safe version of appendQuery().
+ * @param string $query Query string fragment; do not include initial '?'
+ * @return string
*/
function escapeAppendQuery( $query ) {
return htmlspecialchars( $this->appendQuery( $query ) );
}
+ /**
+ * Check for limit and offset parameters on the input, and return sensible
+ * defaults if not given. The limit must be positive and is capped at 5000.
+ * Offset must be positive but is not capped.
+ *
+ * @param int $deflimit Limit to use if no input and the user hasn't set the option.
+ * @param string $optionname To specify an option other than rclimit to pull from.
+ * @return array first element is limit, second is offset
+ */
function getLimitOffset( $deflimit = 50, $optionname = 'rclimit' ) {
global $wgUser;
/**
* Return the path to the temporary file where PHP has stored the upload.
- * Returns NULL if no such thing.
+ * @param string $key
+ * @return string or NULL if no such file.
*/
function getFileTempname( $key ) {
if( !isset( $_FILES[$key] ) ) {
/**
* Return the size of the upload, or 0.
+ * @param string $key
+ * @return integer
*/
function getFileSize( $key ) {
if( !isset( $_FILES[$key] ) ) {
* to deal with weird input from Safari with non-ASCII filenames.
*
* Other than this the name is not verified for being a safe filename.
+ *
+ * @param string $key
+ * @return string or NULL if no such file.
*/
function getFileName( $key ) {
if( !isset( $_FILES[$key] ) ) {
var $data = null;
var $wasPosted = false;
- function WebRequest( $data, $wasPosted = false ) {
+ function FauxRequest( $data, $wasPosted = false ) {
if( is_array( $data ) ) {
$this->data = $data;
} else {
- wfDebugDieBacktrace( "FauxReqeust() got bogus data" );
+ wfDebugDieBacktrace( "FauxRequest() got bogus data" );
}
$this->wasPosted = $wasPosted;
}