";
+ }
- 300 => 'Multiple Choices',
- 301 => 'Moved Permanently',
- 302 => 'Found',
- 303 => 'See Other',
- 304 => 'Not Modified',
- 305 => 'Use Proxy',
- 307 => 'Temporary Redirect',
+ if ( ! did_action( 'admin_head' ) ) :
+ if ( !headers_sent() ) {
+ status_header( $r['response'] );
+ nocache_headers();
+ header( 'Content-Type: text/html; charset=utf-8' );
+ }
- 400 => 'Bad Request',
- 401 => 'Unauthorized',
- 403 => 'Forbidden',
- 404 => 'Not Found',
- 405 => 'Method Not Allowed',
- 406 => 'Not Acceptable',
- 407 => 'Proxy Authentication Required',
- 408 => 'Request Timeout',
- 409 => 'Conflict',
- 410 => 'Gone',
- 411 => 'Length Required',
- 412 => 'Precondition Failed',
- 413 => 'Request Entity Too Large',
- 414 => 'Request-URI Too Long',
- 415 => 'Unsupported Media Type',
- 416 => 'Requested Range Not Satisfiable',
- 417 => 'Expectation Failed',
+ if ( empty($title) )
+ $title = $have_gettext ? __('WordPress › Error') : 'WordPress › Error';
- 500 => 'Internal Server Error',
- 501 => 'Not Implemented',
- 502 => 'Bad Gateway',
- 503 => 'Service Unavailable',
- 504 => 'Gateway Timeout',
- 505 => 'HTTP Version Not Supported'
- );
- }
+ $text_direction = 'ltr';
+ if ( isset($r['text_direction']) && 'rtl' == $r['text_direction'] )
+ $text_direction = 'rtl';
+ elseif ( function_exists( 'is_rtl' ) && is_rtl() )
+ $text_direction = 'rtl';
+?>
+
+
+>
+
+
+
+
+
+
+
+
+
+
+ 500 );
- if ( empty( $text ) )
- return false;
+ $r = wp_parse_args($args, $defaults);
- $protocol = $_SERVER["SERVER_PROTOCOL"];
- if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol )
- $protocol = 'HTTP/1.0';
- $status_header = "$protocol $header $text";
- if ( function_exists( 'apply_filters' ) )
- $status_header = apply_filters( 'status_header', $status_header, $header, $text, $protocol );
+ if ( $wp_xmlrpc_server ) {
+ $error = new IXR_Error( $r['response'] , $message);
+ $wp_xmlrpc_server->output( $error->getXml() );
+ }
+ die();
+}
- if ( version_compare( phpversion(), '4.3.0', '>=' ) )
- return @header( $status_header, true, $header );
- else
- return @header( $status_header );
+/**
+ * Kill WordPress ajax execution.
+ *
+ * This is the handler for wp_die when processing Ajax requests.
+ *
+ * @since 3.4.0
+ * @access private
+ *
+ * @param string $message Optional. Response to print.
+ */
+function _ajax_wp_die_handler( $message = '' ) {
+ if ( is_scalar( $message ) )
+ die( (string) $message );
+ die( '0' );
}
/**
- * Sets the headers to prevent caching for the different browsers.
+ * Kill WordPress execution.
*
- * Different browsers support different nocache headers, so several headers must
- * be sent so that all of them get the point that no caching should occur.
+ * This is the handler for wp_die when processing APP requests.
*
- * @since 2.0.0
+ * @since 3.4.0
+ * @access private
+ *
+ * @param string $message Optional. Response to print.
*/
-function nocache_headers() {
- // why are these @-silenced when other header calls aren't?
- @header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' );
- @header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
- @header( 'Cache-Control: no-cache, must-revalidate, max-age=0' );
- @header( 'Pragma: no-cache' );
+function _scalar_wp_die_handler( $message = '' ) {
+ if ( is_scalar( $message ) )
+ die( (string) $message );
+ die();
}
/**
- * Set the headers for caching for 10 days with JavaScript content type.
+ * Retrieve the WordPress home page URL.
*
- * @since 2.1.0
+ * If the constant named 'WP_HOME' exists, then it will be used and returned by
+ * the function. This can be used to counter the redirection on your local
+ * development environment.
+ *
+ * @access private
+ * @package WordPress
+ * @since 2.2.0
+ *
+ * @param string $url URL for the home location
+ * @return string Homepage location.
*/
-function cache_javascript_headers() {
- $expiresOffset = 864000; // 10 days
- header( "Content-Type: text/javascript; charset=" . get_bloginfo( 'charset' ) );
- header( "Vary: Accept-Encoding" ); // Handle proxies
- header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $expiresOffset ) . " GMT" );
+function _config_wp_home( $url = '' ) {
+ if ( defined( 'WP_HOME' ) )
+ return untrailingslashit( WP_HOME );
+ return $url;
}
/**
- * Retrieve the number of database queries during the WordPress execution.
+ * Retrieve the WordPress site URL.
*
- * @since 2.0.0
+ * If the constant named 'WP_SITEURL' is defined, then the value in that
+ * constant will always be returned. This can be used for debugging a site on
+ * your localhost while not having to change the database to your URL.
*
- * @return int Number of database queries
+ * @access private
+ * @package WordPress
+ * @since 2.2.0
+ *
+ * @param string $url URL to set the WordPress site location.
+ * @return string The WordPress Site URL
*/
-function get_num_queries() {
- global $wpdb;
- return $wpdb->num_queries;
+function _config_wp_siteurl( $url = '' ) {
+ if ( defined( 'WP_SITEURL' ) )
+ return untrailingslashit( WP_SITEURL );
+ return $url;
}
/**
- * Whether input is yes or no. Must be 'y' to be true.
+ * Set the localized direction for MCE plugin.
*
- * @since 1.0.0
+ * Will only set the direction to 'rtl', if the WordPress locale has the text
+ * direction set to 'rtl'.
*
- * @param string $yn Character string containing either 'y' or 'n'
- * @return bool True if yes, false on anything else
+ * Fills in the 'directionality', 'plugins', and 'theme_advanced_button1' array
+ * keys. These keys are then returned in the $input array.
+ *
+ * @access private
+ * @package WordPress
+ * @subpackage MCE
+ * @since 2.1.0
+ *
+ * @param array $input MCE plugin array.
+ * @return array Direction set for 'rtl', if needed by locale.
*/
-function bool_from_yn( $yn ) {
- return ( strtolower( $yn ) == 'y' );
+function _mce_set_direction( $input ) {
+ if ( is_rtl() ) {
+ $input['directionality'] = 'rtl';
+ $input['plugins'] .= ',directionality';
+ $input['theme_advanced_buttons1'] .= ',ltr';
+ }
+
+ return $input;
}
/**
- * Loads the feed template from the use of an action hook.
+ * Convert smiley code to the icon graphic file equivalent.
*
- * If the feed action does not have a hook, then the function will die with a
- * message telling the visitor that the feed is not valid.
+ * You can turn off smilies, by going to the write setting screen and unchecking
+ * the box, or by setting 'use_smilies' option to false or removing the option.
*
- * It is better to only have one hook for each feed.
+ * Plugins may override the default smiley list by setting the $wpsmiliestrans
+ * to an array, with the key the code the blogger types in and the value the
+ * image file.
+ *
+ * The $wp_smiliessearch global is for the regular expression and is set each
+ * time the function is called.
+ *
+ * The full list of smilies can be found in the function and won't be listed in
+ * the description. Probably should create a Codex page for it, so that it is
+ * available.
*
- * @since 2.1.0
- * @uses $wp_query Used to tell if the use a comment feed.
- * @uses do_action() Calls 'do_feed_$feed' hook, if a hook exists for the feed.
+ * @global array $wpsmiliestrans
+ * @global array $wp_smiliessearch
+ * @since 2.2.0
*/
-function do_feed() {
- global $wp_query;
-
- $feed = get_query_var( 'feed' );
+function smilies_init() {
+ global $wpsmiliestrans, $wp_smiliessearch;
- // Remove the pad, if present.
- $feed = preg_replace( '/^_+/', '', $feed );
+ // don't bother setting up smilies if they are disabled
+ if ( !get_option( 'use_smilies' ) )
+ return;
- if ( $feed == '' || $feed == 'feed' )
- $feed = get_default_feed();
+ if ( !isset( $wpsmiliestrans ) ) {
+ $wpsmiliestrans = array(
+ ':mrgreen:' => 'icon_mrgreen.gif',
+ ':neutral:' => 'icon_neutral.gif',
+ ':twisted:' => 'icon_twisted.gif',
+ ':arrow:' => 'icon_arrow.gif',
+ ':shock:' => 'icon_eek.gif',
+ ':smile:' => 'icon_smile.gif',
+ ':???:' => 'icon_confused.gif',
+ ':cool:' => 'icon_cool.gif',
+ ':evil:' => 'icon_evil.gif',
+ ':grin:' => 'icon_biggrin.gif',
+ ':idea:' => 'icon_idea.gif',
+ ':oops:' => 'icon_redface.gif',
+ ':razz:' => 'icon_razz.gif',
+ ':roll:' => 'icon_rolleyes.gif',
+ ':wink:' => 'icon_wink.gif',
+ ':cry:' => 'icon_cry.gif',
+ ':eek:' => 'icon_surprised.gif',
+ ':lol:' => 'icon_lol.gif',
+ ':mad:' => 'icon_mad.gif',
+ ':sad:' => 'icon_sad.gif',
+ '8-)' => 'icon_cool.gif',
+ '8-O' => 'icon_eek.gif',
+ ':-(' => 'icon_sad.gif',
+ ':-)' => 'icon_smile.gif',
+ ':-?' => 'icon_confused.gif',
+ ':-D' => 'icon_biggrin.gif',
+ ':-P' => 'icon_razz.gif',
+ ':-o' => 'icon_surprised.gif',
+ ':-x' => 'icon_mad.gif',
+ ':-|' => 'icon_neutral.gif',
+ ';-)' => 'icon_wink.gif',
+ // This one transformation breaks regular text with frequency.
+ // '8)' => 'icon_cool.gif',
+ '8O' => 'icon_eek.gif',
+ ':(' => 'icon_sad.gif',
+ ':)' => 'icon_smile.gif',
+ ':?' => 'icon_confused.gif',
+ ':D' => 'icon_biggrin.gif',
+ ':P' => 'icon_razz.gif',
+ ':o' => 'icon_surprised.gif',
+ ':x' => 'icon_mad.gif',
+ ':|' => 'icon_neutral.gif',
+ ';)' => 'icon_wink.gif',
+ ':!:' => 'icon_exclaim.gif',
+ ':?:' => 'icon_question.gif',
+ );
+ }
- $hook = 'do_feed_' . $feed;
- if ( !has_action($hook) ) {
- $message = sprintf( __( 'ERROR: %s is not a valid feed template' ), wp_specialchars($feed));
- wp_die($message);
+ if (count($wpsmiliestrans) == 0) {
+ return;
}
- do_action( $hook, $wp_query->is_comment_feed );
-}
+ /*
+ * NOTE: we sort the smilies in reverse key order. This is to make sure
+ * we match the longest possible smilie (:???: vs :?) as the regular
+ * expression used below is first-match
+ */
+ krsort($wpsmiliestrans);
-/**
- * Load the RDF RSS 0.91 Feed template.
- *
- * @since 2.1.0
- */
-function do_feed_rdf() {
- load_template( ABSPATH . WPINC . '/feed-rdf.php' );
-}
+ $wp_smiliessearch = '/(?:\s|^)';
-/**
- * Load the RSS 1.0 Feed Template
- *
- * @since 2.1.0
- */
-function do_feed_rss() {
- load_template( ABSPATH . WPINC . '/feed-rss.php' );
+ $subchar = '';
+ foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
+ $firstchar = substr($smiley, 0, 1);
+ $rest = substr($smiley, 1);
+
+ // new subpattern?
+ if ($firstchar != $subchar) {
+ if ($subchar != '') {
+ $wp_smiliessearch .= ')|(?:\s|^)';
+ }
+ $subchar = $firstchar;
+ $wp_smiliessearch .= preg_quote($firstchar, '/') . '(?:';
+ } else {
+ $wp_smiliessearch .= '|';
+ }
+ $wp_smiliessearch .= preg_quote($rest, '/');
+ }
+
+ $wp_smiliessearch .= ')(?:\s|$)/m';
}
/**
- * Load either the RSS2 comment feed or the RSS2 posts feed.
+ * Merge user defined arguments into defaults array.
*
- * @since 2.1.0
+ * This function is used throughout WordPress to allow for both string or array
+ * to be merged into another array.
*
- * @param bool $for_comments True for the comment feed, false for normal feed.
+ * @since 2.2.0
+ *
+ * @param string|array $args Value to merge with $defaults
+ * @param array $defaults Array that serves as the defaults.
+ * @return array Merged user defined values with defaults.
*/
-function do_feed_rss2( $for_comments ) {
- if ( $for_comments )
- load_template( ABSPATH . WPINC . '/feed-rss2-comments.php' );
+function wp_parse_args( $args, $defaults = '' ) {
+ if ( is_object( $args ) )
+ $r = get_object_vars( $args );
+ elseif ( is_array( $args ) )
+ $r =& $args;
else
- load_template( ABSPATH . WPINC . '/feed-rss2.php' );
+ wp_parse_str( $args, $r );
+
+ if ( is_array( $defaults ) )
+ return array_merge( $defaults, $r );
+ return $r;
}
/**
- * Load either Atom comment feed or Atom posts feed.
+ * Clean up an array, comma- or space-separated list of IDs.
*
- * @since 2.1.0
+ * @since 3.0.0
*
- * @param bool $for_comments True for the comment feed, false for normal feed.
+ * @param array|string $list
+ * @return array Sanitized array of IDs
*/
-function do_feed_atom( $for_comments ) {
- if ($for_comments)
- load_template( ABSPATH . WPINC . '/feed-atom-comments.php');
- else
- load_template( ABSPATH . WPINC . '/feed-atom.php' );
+function wp_parse_id_list( $list ) {
+ if ( !is_array($list) )
+ $list = preg_split('/[\s,]+/', $list);
+
+ return array_unique(array_map('absint', $list));
}
/**
- * Display the robot.txt file content.
+ * Extract a slice of an array, given a list of keys.
*
- * The echo content should be with usage of the permalinks or for creating the
- * robot.txt file.
+ * @since 3.1.0
*
- * @since 2.1.0
- * @uses do_action() Calls 'do_robotstxt' hook for displaying robot.txt rules.
+ * @param array $array The original array
+ * @param array $keys The list of keys
+ * @return array The array slice
*/
-function do_robots() {
- header( 'Content-Type: text/plain; charset=utf-8' );
-
- do_action( 'do_robotstxt' );
+function wp_array_slice_assoc( $array, $keys ) {
+ $slice = array();
+ foreach ( $keys as $key )
+ if ( isset( $array[ $key ] ) )
+ $slice[ $key ] = $array[ $key ];
- if ( '0' == get_option( 'blog_public' ) ) {
- echo "User-agent: *\n";
- echo "Disallow: /\n";
- } else {
- echo "User-agent: *\n";
- echo "Disallow:\n";
- }
+ return $slice;
}
/**
- * Test whether blog is already installed.
- *
- * The cache will be checked first. If you have a cache plugin, which saves the
- * cache values, then this will work. If you use the default WordPress cache,
- * and the database goes away, then you might have problems.
- *
- * Checks for the option siteurl for whether WordPress is installed.
+ * Filters a list of objects, based on a set of key => value arguments.
*
- * @since 2.1.0
- * @uses $wpdb
+ * @since 3.0.0
*
- * @return bool Whether blog is already installed.
+ * @param array $list An array of objects to filter
+ * @param array $args An array of key => value arguments to match against each object
+ * @param string $operator The logical operation to perform. 'or' means only one element
+ * from the array needs to match; 'and' means all elements must match. The default is 'and'.
+ * @param bool|string $field A field from the object to place instead of the entire object
+ * @return array A list of objects or object fields
*/
-function is_blog_installed() {
- global $wpdb;
-
- // Check cache first. If options table goes away and we have true cached, oh well.
- if ( wp_cache_get('is_blog_installed') )
- return true;
+function wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false ) {
+ if ( ! is_array( $list ) )
+ return array();
- $suppress = $wpdb->suppress_errors();
- $installed = $wpdb->get_var( "SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl'" );
- $wpdb->suppress_errors($suppress);
+ $list = wp_list_filter( $list, $args, $operator );
- $installed = !empty( $installed ) ? true : false;
- wp_cache_set('is_blog_installed', $installed);
+ if ( $field )
+ $list = wp_list_pluck( $list, $field );
- return $installed;
+ return $list;
}
/**
- * Retrieve URL with nonce added to URL query.
+ * Filters a list of objects, based on a set of key => value arguments.
*
- * @package WordPress
- * @subpackage Security
- * @since 2.0.4
+ * @since 3.1.0
*
- * @param string $actionurl URL to add nonce action
- * @param string $action Optional. Nonce action name
- * @return string URL with nonce action added.
+ * @param array $list An array of objects to filter
+ * @param array $args An array of key => value arguments to match against each object
+ * @param string $operator The logical operation to perform:
+ * 'AND' means all elements from the array must match;
+ * 'OR' means only one element needs to match;
+ * 'NOT' means no elements may match.
+ * The default is 'AND'.
+ * @return array
*/
-function wp_nonce_url( $actionurl, $action = -1 ) {
- $actionurl = str_replace( '&', '&', $actionurl );
- return wp_specialchars( add_query_arg( '_wpnonce', wp_create_nonce( $action ), $actionurl ) );
-}
+function wp_list_filter( $list, $args = array(), $operator = 'AND' ) {
+ if ( ! is_array( $list ) )
+ return array();
-/**
- * Retrieve or display nonce hidden field for forms.
- *
- * The nonce field is used to validate that the contents of the form came from
- * the location on the current site and not somewhere else. The nonce does not
- * offer absolute protection, but should protect against most cases. It is very
- * important to use nonce field in forms.
- *
- * If you set $echo to true and set $referer to true, then you will need to
- * retrieve the {@link wp_referer_field() wp referer field}. If you have the
- * $referer set to true and are echoing the nonce field, it will also echo the
- * referer field.
- *
- * The $action and $name are optional, but if you want to have better security,
- * it is strongly suggested to set those two parameters. It is easier to just
- * call the function without any parameters, because validation of the nonce
- * doesn't require any parameters, but since crackers know what the default is
- * it won't be difficult for them to find a way around your nonce and cause
- * damage.
- *
- * The input name will be whatever $name value you gave. The input value will be
- * the nonce creation value.
- *
- * @package WordPress
- * @subpackage Security
- * @since 2.0.4
- *
- * @param string $action Optional. Action name.
- * @param string $name Optional. Nonce name.
- * @param bool $referer Optional, default true. Whether to set the referer field for validation.
- * @param bool $echo Optional, default true. Whether to display or return hidden form field.
- * @return string Nonce field.
- */
-function wp_nonce_field( $action = -1, $name = "_wpnonce", $referer = true , $echo = true ) {
- $name = attribute_escape( $name );
- $nonce_field = '';
- if ( $echo )
- echo $nonce_field;
+ if ( empty( $args ) )
+ return $list;
- if ( $referer )
- wp_referer_field( $echo, 'previous' );
+ $operator = strtoupper( $operator );
+ $count = count( $args );
+ $filtered = array();
- return $nonce_field;
-}
+ foreach ( $list as $key => $obj ) {
+ $to_match = (array) $obj;
-/**
- * Retrieve or display referer hidden field for forms.
- *
- * The referer link is the current Request URI from the server super global. The
- * input name is '_wp_http_referer', in case you wanted to check manually.
- *
- * @package WordPress
- * @subpackage Security
- * @since 2.0.4
- *
- * @param bool $echo Whether to echo or return the referer field.
- * @return string Referer field.
- */
-function wp_referer_field( $echo = true) {
- $ref = attribute_escape( $_SERVER['REQUEST_URI'] );
- $referer_field = '';
+ $matched = 0;
+ foreach ( $args as $m_key => $m_value ) {
+ if ( $m_value == $to_match[ $m_key ] )
+ $matched++;
+ }
- if ( $echo )
- echo $referer_field;
- return $referer_field;
+ if ( ( 'AND' == $operator && $matched == $count )
+ || ( 'OR' == $operator && $matched > 0 )
+ || ( 'NOT' == $operator && 0 == $matched ) ) {
+ $filtered[$key] = $obj;
+ }
+ }
+
+ return $filtered;
}
/**
- * Retrieve or display original referer hidden field for forms.
- *
- * The input name is '_wp_original_http_referer' and will be either the same
- * value of {@link wp_referer_field()}, if that was posted already or it will
- * be the current page, if it doesn't exist.
+ * Pluck a certain field out of each object in a list.
*
- * @package WordPress
- * @subpackage Security
- * @since 2.0.4
+ * @since 3.1.0
*
- * @param bool $echo Whether to echo the original http referer
- * @param string $jump_back_to Optional, default is 'current'. Can be 'previous' or page you want to jump back to.
- * @return string Original referer field.
+ * @param array $list A list of objects or arrays
+ * @param int|string $field A field from the object to place instead of the entire object
+ * @return array
*/
-function wp_original_referer_field( $echo = true, $jump_back_to = 'current' ) {
- $jump_back_to = ( 'previous' == $jump_back_to ) ? wp_get_referer() : $_SERVER['REQUEST_URI'];
- $ref = ( wp_get_original_referer() ) ? wp_get_original_referer() : $jump_back_to;
- $orig_referer_field = '';
- if ( $echo )
- echo $orig_referer_field;
- return $orig_referer_field;
+function wp_list_pluck( $list, $field ) {
+ foreach ( $list as $key => $value ) {
+ if ( is_object( $value ) )
+ $list[ $key ] = $value->$field;
+ else
+ $list[ $key ] = $value[ $field ];
+ }
+
+ return $list;
}
/**
- * Retrieve referer from '_wp_http_referer', HTTP referer, or current page respectively.
+ * Determines if Widgets library should be loaded.
*
- * @package WordPress
- * @subpackage Security
- * @since 2.0.4
+ * Checks to make sure that the widgets library hasn't already been loaded. If
+ * it hasn't, then it will load the widgets library and run an action hook.
*
- * @return string|bool False on failure. Referer URL on success.
+ * @since 2.2.0
+ * @uses add_action() Calls '_admin_menu' hook with 'wp_widgets_add_menu' value.
*/
-function wp_get_referer() {
- $ref = '';
- if ( ! empty( $_REQUEST['_wp_http_referer'] ) )
- $ref = $_REQUEST['_wp_http_referer'];
- else if ( ! empty( $_SERVER['HTTP_REFERER'] ) )
- $ref = $_SERVER['HTTP_REFERER'];
+function wp_maybe_load_widgets() {
+ if ( ! apply_filters('load_default_widgets', true) )
+ return;
+ require_once( ABSPATH . WPINC . '/default-widgets.php' );
+ add_action( '_admin_menu', 'wp_widgets_add_menu' );
+}
- if ( $ref !== $_SERVER['REQUEST_URI'] )
- return $ref;
- return false;
+/**
+ * Append the Widgets menu to the themes main menu.
+ *
+ * @since 2.2.0
+ * @uses $submenu The administration submenu list.
+ */
+function wp_widgets_add_menu() {
+ global $submenu;
+ $submenu['themes.php'][7] = array( __( 'Widgets' ), 'edit_theme_options', 'widgets.php' );
+ ksort( $submenu['themes.php'], SORT_NUMERIC );
}
/**
- * Retrieve original referer that was posted, if it exists.
+ * Flush all output buffers for PHP 5.2.
*
- * @package WordPress
- * @subpackage Security
- * @since 2.0.4
+ * Make sure all output buffers are flushed before our singletons our destroyed.
*
- * @return string|bool False if no original referer or original referer if set.
+ * @since 2.2.0
*/
-function wp_get_original_referer() {
- if ( !empty( $_REQUEST['_wp_original_http_referer'] ) )
- return $_REQUEST['_wp_original_http_referer'];
- return false;
+function wp_ob_end_flush_all() {
+ $levels = ob_get_level();
+ for ($i=0; $i<$levels; $i++)
+ ob_end_flush();
}
/**
- * Recursive directory creation based on full path.
+ * Load custom DB error or display WordPress DB error.
*
- * Will attempt to set permissions on folders.
+ * If a file exists in the wp-content directory named db-error.php, then it will
+ * be loaded instead of displaying the WordPress DB error. If it is not found,
+ * then the WordPress DB error will be displayed instead.
*
- * @since 2.0.1
+ * The WordPress DB error sets the HTTP status header to 500 to try to prevent
+ * search engines from caching the message. Custom DB messages should do the
+ * same.
*
- * @param string $target Full path to attempt to create.
- * @return bool Whether the path was created or not. True if path already exists.
+ * This function was backported to the the WordPress 2.3.2, but originally was
+ * added in WordPress 2.5.0.
+ *
+ * @since 2.3.2
+ * @uses $wpdb
*/
-function wp_mkdir_p( $target ) {
- // from php.net/mkdir user contributed notes
- $target = str_replace( '//', '/', $target );
- if ( file_exists( $target ) )
- return @is_dir( $target );
+function dead_db() {
+ global $wpdb;
- // Attempting to create the directory may clutter up our display.
- if ( @mkdir( $target ) ) {
- $stat = @stat( dirname( $target ) );
- $dir_perms = $stat['mode'] & 0007777; // Get the permission bits.
- @chmod( $target, $dir_perms );
- return true;
- } elseif ( is_dir( dirname( $target ) ) ) {
- return false;
+ // Load custom DB error template, if present.
+ if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) {
+ require_once( WP_CONTENT_DIR . '/db-error.php' );
+ die();
}
- // If the above failed, attempt to create the parent node, then try again.
- if ( ( $target != '/' ) && ( wp_mkdir_p( dirname( $target ) ) ) )
- return wp_mkdir_p( $target );
+ // If installing or in the admin, provide the verbose message.
+ if ( defined('WP_INSTALLING') || defined('WP_ADMIN') )
+ wp_die($wpdb->error);
- return false;
+ // Otherwise, be terse.
+ status_header( 500 );
+ nocache_headers();
+ header( 'Content-Type: text/html; charset=utf-8' );
+
+ wp_load_translations_early();
+?>
+
+>
+
+
+
+
+
+
+
+
+
+deprecated since version %2$s! Use %3$s instead.'), $function, $version, $replacement ) );
else
- $url = trailingslashit( $siteurl ) . $upload_path;
- }
-
- if ( defined('UPLOADS') ) {
- $dir = ABSPATH . UPLOADS;
- $url = trailingslashit( $siteurl ) . UPLOADS;
- }
-
- $bdir = $dir;
- $burl = $url;
-
- $subdir = '';
- if ( get_option( 'uploads_use_yearmonth_folders' ) ) {
- // Generate the yearly and monthly dirs
- if ( !$time )
- $time = current_time( 'mysql' );
- $y = substr( $time, 0, 4 );
- $m = substr( $time, 5, 2 );
- $subdir = "/$y/$m";
- }
-
- $dir .= $subdir;
- $url .= $subdir;
-
- // Make sure we have an uploads dir
- if ( ! wp_mkdir_p( $dir ) ) {
- $message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $dir );
- return array( 'error' => $message );
+ trigger_error( sprintf( __('%1$s is deprecated since version %2$s with no alternative available.'), $function, $version ) );
}
-
- $uploads = array( 'path' => $dir, 'url' => $url, 'subdir' => $subdir, 'basedir' => $bdir, 'baseurl' => $burl, 'error' => false );
-
- return apply_filters( 'upload_dir', $uploads );
}
/**
- * Get a filename that is sanitized and unique for the given directory.
+ * Marks a file as deprecated and informs when it has been used.
*
- * If the filename is not unique, then a number will be added to the filename
- * before the extension, and will continue adding numbers until the filename is
- * unique.
+ * There is a hook deprecated_file_included that will be called that can be used
+ * to get the backtrace up to what file and function included the deprecated
+ * file.
*
- * The callback must accept two parameters, the first one is the directory and
- * the second is the filename. The callback must be a function.
+ * The current behavior is to trigger a user error if WP_DEBUG is true.
*
- * @since 2.5
+ * This function is to be used in every file that is deprecated.
*
- * @param string $dir
- * @param string $filename
- * @param string $unique_filename_callback Function name, must be a function.
- * @return string New filename, if given wasn't unique.
+ * @package WordPress
+ * @subpackage Debug
+ * @since 2.5.0
+ * @access private
+ *
+ * @uses do_action() Calls 'deprecated_file_included' and passes the file name, what to use instead,
+ * the version in which the file was deprecated, and any message regarding the change.
+ * @uses apply_filters() Calls 'deprecated_file_trigger_error' and expects boolean value of true to do
+ * trigger or false to not trigger error.
+ *
+ * @param string $file The file that was included
+ * @param string $version The version of WordPress that deprecated the file
+ * @param string $replacement Optional. The file that should have been included based on ABSPATH
+ * @param string $message Optional. A message regarding the change
*/
-function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) {
- $filename = strtolower( $filename );
- // separate the filename into a name and extension
- $info = pathinfo($filename);
- $ext = !empty($info['extension']) ? $info['extension'] : '';
- $name = basename($filename, ".{$ext}");
-
- // edge case: if file is named '.ext', treat as an empty name
- if( $name === ".$ext" )
- $name = '';
+function _deprecated_file( $file, $version, $replacement = null, $message = '' ) {
- // Increment the file number until we have a unique file to save in $dir. Use $override['unique_filename_callback'] if supplied.
- if ( $unique_filename_callback && function_exists( $unique_filename_callback ) ) {
- $filename = $unique_filename_callback( $dir, $name );
- } else {
- $number = '';
-
- if ( !empty( $ext ) )
- $ext = strtolower( ".$ext" );
-
- $filename = str_replace( $ext, '', $filename );
- // Strip % so the server doesn't try to decode entities.
- $filename = str_replace('%', '', sanitize_title_with_dashes( $filename ) ) . $ext;
+ do_action( 'deprecated_file_included', $file, $replacement, $version, $message );
- while ( file_exists( $dir . "/$filename" ) ) {
- if ( '' == "$number$ext" )
- $filename = $filename . ++$number . $ext;
- else
- $filename = str_replace( "$number$ext", ++$number . $ext, $filename );
- }
+ // Allow plugin to filter the output error trigger
+ if ( WP_DEBUG && apply_filters( 'deprecated_file_trigger_error', true ) ) {
+ $message = empty( $message ) ? '' : ' ' . $message;
+ if ( ! is_null( $replacement ) )
+ trigger_error( sprintf( __('%1$s is deprecated since version %2$s! Use %3$s instead.'), $file, $version, $replacement ) . $message );
+ else
+ trigger_error( sprintf( __('%1$s is deprecated since version %2$s with no alternative available.'), $file, $version ) . $message );
}
+}
+/**
+ * Marks a function argument as deprecated and informs when it has been used.
+ *
+ * This function is to be used whenever a deprecated function argument is used.
+ * Before this function is called, the argument must be checked for whether it was
+ * used by comparing it to its default value or evaluating whether it is empty.
+ * For example:
+ *
+ * if ( !empty($deprecated) )
+ * _deprecated_argument( __FUNCTION__, '3.0' );
+ *
+ *
+ * There is a hook deprecated_argument_run that will be called that can be used
+ * to get the backtrace up to what file and function used the deprecated
+ * argument.
+ *
+ * The current behavior is to trigger a user error if WP_DEBUG is true.
+ *
+ * @package WordPress
+ * @subpackage Debug
+ * @since 3.0.0
+ * @access private
+ *
+ * @uses do_action() Calls 'deprecated_argument_run' and passes the function name, a message on the change,
+ * and the version in which the argument was deprecated.
+ * @uses apply_filters() Calls 'deprecated_argument_trigger_error' and expects boolean value of true to do
+ * trigger or false to not trigger error.
+ *
+ * @param string $function The function that was called
+ * @param string $version The version of WordPress that deprecated the argument used
+ * @param string $message Optional. A message regarding the change.
+ */
+function _deprecated_argument( $function, $version, $message = null ) {
- return $filename;
+ do_action( 'deprecated_argument_run', $function, $message, $version );
+
+ // Allow plugin to filter the output error trigger
+ if ( WP_DEBUG && apply_filters( 'deprecated_argument_trigger_error', true ) ) {
+ if ( ! is_null( $message ) )
+ trigger_error( sprintf( __('%1$s was called with an argument that is deprecated since version %2$s! %3$s'), $function, $version, $message ) );
+ else
+ trigger_error( sprintf( __('%1$s was called with an argument that is deprecated since version %2$s with no alternative available.'), $function, $version ) );
+ }
}
/**
- * Create a file in the upload folder with given content.
+ * Marks something as being incorrectly called.
*
- * If there is an error, then the key 'error' will exist with the error message.
- * If success, then the key 'file' will have the unique file path, the 'url' key
- * will have the link to the new file. and the 'error' key will be set to false.
+ * There is a hook doing_it_wrong_run that will be called that can be used
+ * to get the backtrace up to what file and function called the deprecated
+ * function.
*
- * This function will not move an uploaded file to the upload folder. It will
- * create a new file with the content in $bits parameter. If you move the upload
- * file, read the content of the uploaded file, and then you can give the
- * filename and content to this function, which will add it to the upload
- * folder.
+ * The current behavior is to trigger a user error if WP_DEBUG is true.
*
- * The permissions will be set on the new file automatically by this function.
+ * @package WordPress
+ * @subpackage Debug
+ * @since 3.1.0
+ * @access private
*
- * @since 2.0.0
+ * @uses do_action() Calls 'doing_it_wrong_run' and passes the function arguments.
+ * @uses apply_filters() Calls 'doing_it_wrong_trigger_error' and expects boolean value of true to do
+ * trigger or false to not trigger error.
*
- * @param string $name
- * @param null $deprecated Not used. Set to null.
- * @param mixed $bits File content
- * @param string $time Optional. Time formatted in 'yyyy/mm'.
- * @return array
+ * @param string $function The function that was called.
+ * @param string $message A message explaining what has been done incorrectly.
+ * @param string $version The version of WordPress where the message was added.
*/
-function wp_upload_bits( $name, $deprecated, $bits, $time = null ) {
- if ( empty( $name ) )
- return array( 'error' => __( 'Empty filename' ) );
-
- $wp_filetype = wp_check_filetype( $name );
- if ( !$wp_filetype['ext'] )
- return array( 'error' => __( 'Invalid file type' ) );
-
- $upload = wp_upload_dir( $time );
-
- if ( $upload['error'] !== false )
- return $upload;
+function _doing_it_wrong( $function, $message, $version ) {
- $filename = wp_unique_filename( $upload['path'], $name );
+ do_action( 'doing_it_wrong_run', $function, $message, $version );
- $new_file = $upload['path'] . "/$filename";
- if ( ! wp_mkdir_p( dirname( $new_file ) ) ) {
- $message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), dirname( $new_file ) );
- return array( 'error' => $message );
+ // Allow plugin to filter the output error trigger
+ if ( WP_DEBUG && apply_filters( 'doing_it_wrong_trigger_error', true ) ) {
+ $version = is_null( $version ) ? '' : sprintf( __( '(This message was added in version %s.)' ), $version );
+ $message .= ' ' . __( 'Please see Debugging in WordPress for more information.' );
+ trigger_error( sprintf( __( '%1$s was called incorrectly. %2$s %3$s' ), $function, $message, $version ) );
}
-
- $ifp = @ fopen( $new_file, 'wb' );
- if ( ! $ifp )
- return array( 'error' => sprintf( __( 'Could not write file %s' ), $new_file ) );
-
- @fwrite( $ifp, $bits );
- fclose( $ifp );
- // Set correct file permissions
- $stat = @ stat( dirname( $new_file ) );
- $perms = $stat['mode'] & 0007777;
- $perms = $perms & 0000666;
- @ chmod( $new_file, $perms );
-
- // Compute the URL
- $url = $upload['url'] . "/$filename";
-
- return array( 'file' => $new_file, 'url' => $url, 'error' => false );
}
/**
- * Retrieve the file type based on the extension name.
+ * Is the server running earlier than 1.5.0 version of lighttpd?
*
- * @package WordPress
* @since 2.5.0
- * @uses apply_filters() Calls 'ext2type' hook on default supported types.
*
- * @param string $ext The extension to search.
- * @return string|null The file type, example: audio, video, document, spreadsheet, etc. Null if not found.
+ * @return bool Whether the server is running lighttpd < 1.5.0
*/
-function wp_ext2type( $ext ) {
- $ext2type = apply_filters('ext2type', array(
- 'audio' => array('aac','ac3','aif','aiff','mp1','mp2','mp3','m3a','m4a','m4b','ogg','ram','wav','wma'),
- 'video' => array('asf','avi','divx','dv','mov','mpg','mpeg','mp4','mpv','ogm','qt','rm','vob','wmv'),
- 'document' => array('doc','docx','pages','odt','rtf','pdf'),
- 'spreadsheet' => array('xls','xlsx','numbers','ods'),
- 'interactive' => array('ppt','pptx','key','odp','swf'),
- 'text' => array('txt'),
- 'archive' => array('tar','bz2','gz','cab','dmg','rar','sea','sit','sqx','zip'),
- 'code' => array('css','html','php','js'),
- ));
- foreach ( $ext2type as $type => $exts )
- if ( in_array($ext, $exts) )
- return $type;
+function is_lighttpd_before_150() {
+ $server_parts = explode( '/', isset( $_SERVER['SERVER_SOFTWARE'] )? $_SERVER['SERVER_SOFTWARE'] : '' );
+ $server_parts[1] = isset( $server_parts[1] )? $server_parts[1] : '';
+ return 'lighttpd' == $server_parts[0] && -1 == version_compare( $server_parts[1], '1.5.0' );
}
/**
- * Retrieve the file type from the file name.
+ * Does the specified module exist in the Apache config?
*
- * You can optionally define the mime array, if needed.
- *
- * @since 2.0.4
+ * @since 2.5.0
*
- * @param string $filename File name or path.
- * @param array $mimes Optional. Key is the file extension with value as the mime type.
- * @return array Values with extension first and mime type.
+ * @param string $mod e.g. mod_rewrite
+ * @param bool $default The default return value if the module is not found
+ * @return bool
*/
-function wp_check_filetype( $filename, $mimes = null ) {
- // Accepted MIME types are set here as PCRE unless provided.
- $mimes = ( is_array( $mimes ) ) ? $mimes : apply_filters( 'upload_mimes', array(
- 'jpg|jpeg|jpe' => 'image/jpeg',
- 'gif' => 'image/gif',
- 'png' => 'image/png',
- 'bmp' => 'image/bmp',
- 'tif|tiff' => 'image/tiff',
- 'ico' => 'image/x-icon',
- 'asf|asx|wax|wmv|wmx' => 'video/asf',
- 'avi' => 'video/avi',
- 'divx' => 'video/divx',
- 'mov|qt' => 'video/quicktime',
- 'mpeg|mpg|mpe|mp4' => 'video/mpeg',
- 'txt|c|cc|h' => 'text/plain',
- 'rtx' => 'text/richtext',
- 'css' => 'text/css',
- 'htm|html' => 'text/html',
- 'mp3|m4a' => 'audio/mpeg',
- 'ra|ram' => 'audio/x-realaudio',
- 'wav' => 'audio/wav',
- 'ogg' => 'audio/ogg',
- 'mid|midi' => 'audio/midi',
- 'wma' => 'audio/wma',
- 'rtf' => 'application/rtf',
- 'js' => 'application/javascript',
- 'pdf' => 'application/pdf',
- 'doc|docx' => 'application/msword',
- 'pot|pps|ppt|pptx' => 'application/vnd.ms-powerpoint',
- 'wri' => 'application/vnd.ms-write',
- 'xla|xls|xlsx|xlt|xlw' => 'application/vnd.ms-excel',
- 'mdb' => 'application/vnd.ms-access',
- 'mpp' => 'application/vnd.ms-project',
- 'swf' => 'application/x-shockwave-flash',
- 'class' => 'application/java',
- 'tar' => 'application/x-tar',
- 'zip' => 'application/zip',
- 'gz|gzip' => 'application/x-gzip',
- 'exe' => 'application/x-msdownload',
- // openoffice formats
- 'odt' => 'application/vnd.oasis.opendocument.text',
- 'odp' => 'application/vnd.oasis.opendocument.presentation',
- 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
- 'odg' => 'application/vnd.oasis.opendocument.graphics',
- 'odc' => 'application/vnd.oasis.opendocument.chart',
- 'odb' => 'application/vnd.oasis.opendocument.database',
- 'odf' => 'application/vnd.oasis.opendocument.formula',
- )
- );
+function apache_mod_loaded($mod, $default = false) {
+ global $is_apache;
- $type = false;
- $ext = false;
+ if ( !$is_apache )
+ return false;
- foreach ( $mimes as $ext_preg => $mime_match ) {
- $ext_preg = '!\.(' . $ext_preg . ')$!i';
- if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
- $type = $mime_match;
- $ext = $ext_matches[1];
- break;
- }
+ if ( function_exists('apache_get_modules') ) {
+ $mods = apache_get_modules();
+ if ( in_array($mod, $mods) )
+ return true;
+ } elseif ( function_exists('phpinfo') ) {
+ ob_start();
+ phpinfo(8);
+ $phpinfo = ob_get_clean();
+ if ( false !== strpos($phpinfo, $mod) )
+ return true;
}
-
- return compact( 'ext', 'type' );
+ return $default;
}
/**
- * Retrieve nonce action "Are you sure" message.
- *
- * The action is split by verb and noun. The action format is as follows:
- * verb-action_extra. The verb is before the first dash and has the format of
- * letters and no spaces and numbers. The noun is after the dash and before the
- * underscore, if an underscore exists. The noun is also only letters.
+ * Check if IIS 7 supports pretty permalinks.
*
- * The filter will be called for any action, which is not defined by WordPress.
- * You may use the filter for your plugin to explain nonce actions to the user,
- * when they get the "Are you sure?" message. The filter is in the format of
- * 'explain_nonce_$verb-$noun' with the $verb replaced by the found verb and the
- * $noun replaced by the found noun. The two parameters that are given to the
- * hook are the localized "Are you sure you want to do this?" message with the
- * extra text (the text after the underscore).
- *
- * @package WordPress
- * @subpackage Security
- * @since 2.0.4
+ * @since 2.8.0
*
- * @param string $action Nonce action.
- * @return string Are you sure message.
+ * @return bool
*/
-function wp_explain_nonce( $action ) {
- if ( $action !== -1 && preg_match( '/([a-z]+)-([a-z]+)(_(.+))?/', $action, $matches ) ) {
- $verb = $matches[1];
- $noun = $matches[2];
-
- $trans = array();
- $trans['update']['attachment'] = array( __( 'Your attempt to edit this attachment: "%s" has failed.' ), 'get_the_title' );
-
- $trans['add']['category'] = array( __( 'Your attempt to add this category has failed.' ), false );
- $trans['delete']['category'] = array( __( 'Your attempt to delete this category: "%s" has failed.' ), 'get_catname' );
- $trans['update']['category'] = array( __( 'Your attempt to edit this category: "%s" has failed.' ), 'get_catname' );
-
- $trans['delete']['comment'] = array( __( 'Your attempt to delete this comment: "%s" has failed.' ), 'use_id' );
- $trans['unapprove']['comment'] = array( __( 'Your attempt to unapprove this comment: "%s" has failed.' ), 'use_id' );
- $trans['approve']['comment'] = array( __( 'Your attempt to approve this comment: "%s" has failed.' ), 'use_id' );
- $trans['update']['comment'] = array( __( 'Your attempt to edit this comment: "%s" has failed.' ), 'use_id' );
- $trans['bulk']['comments'] = array( __( 'Your attempt to bulk modify comments has failed.' ), false );
- $trans['moderate']['comments'] = array( __( 'Your attempt to moderate comments has failed.' ), false );
-
- $trans['add']['bookmark'] = array( __( 'Your attempt to add this link has failed.' ), false );
- $trans['delete']['bookmark'] = array( __( 'Your attempt to delete this link: "%s" has failed.' ), 'use_id' );
- $trans['update']['bookmark'] = array( __( 'Your attempt to edit this link: "%s" has failed.' ), 'use_id' );
- $trans['bulk']['bookmarks'] = array( __( 'Your attempt to bulk modify links has failed.' ), false );
-
- $trans['add']['page'] = array( __( 'Your attempt to add this page has failed.' ), false );
- $trans['delete']['page'] = array( __( 'Your attempt to delete this page: "%s" has failed.' ), 'get_the_title' );
- $trans['update']['page'] = array( __( 'Your attempt to edit this page: "%s" has failed.' ), 'get_the_title' );
-
- $trans['edit']['plugin'] = array( __( 'Your attempt to edit this plugin file: "%s" has failed.' ), 'use_id' );
- $trans['activate']['plugin'] = array( __( 'Your attempt to activate this plugin: "%s" has failed.' ), 'use_id' );
- $trans['deactivate']['plugin'] = array( __( 'Your attempt to deactivate this plugin: "%s" has failed.' ), 'use_id' );
- $trans['upgrade']['plugin'] = array( __( 'Your attempt to upgrade this plugin: "%s" has failed.' ), 'use_id' );
-
- $trans['add']['post'] = array( __( 'Your attempt to add this post has failed.' ), false );
- $trans['delete']['post'] = array( __( 'Your attempt to delete this post: "%s" has failed.' ), 'get_the_title' );
- $trans['update']['post'] = array( __( 'Your attempt to edit this post: "%s" has failed.' ), 'get_the_title' );
-
- $trans['add']['user'] = array( __( 'Your attempt to add this user has failed.' ), false );
- $trans['delete']['users'] = array( __( 'Your attempt to delete users has failed.' ), false );
- $trans['bulk']['users'] = array( __( 'Your attempt to bulk modify users has failed.' ), false );
- $trans['update']['user'] = array( __( 'Your attempt to edit this user: "%s" has failed.' ), 'get_author_name' );
- $trans['update']['profile'] = array( __( 'Your attempt to modify the profile for: "%s" has failed.' ), 'get_author_name' );
-
- $trans['update']['options'] = array( __( 'Your attempt to edit your settings has failed.' ), false );
- $trans['update']['permalink'] = array( __( 'Your attempt to change your permalink structure to: %s has failed.' ), 'use_id' );
- $trans['edit']['file'] = array( __( 'Your attempt to edit this file: "%s" has failed.' ), 'use_id' );
- $trans['edit']['theme'] = array( __( 'Your attempt to edit this theme file: "%s" has failed.' ), 'use_id' );
- $trans['switch']['theme'] = array( __( 'Your attempt to switch to this theme: "%s" has failed.' ), 'use_id' );
-
- $trans['log']['out'] = array( sprintf( __( 'You are attempting to log out of %s' ), get_bloginfo( 'sitename' ) ), false );
-
- if ( isset( $trans[$verb][$noun] ) ) {
- if ( !empty( $trans[$verb][$noun][1] ) ) {
- $lookup = $trans[$verb][$noun][1];
- $object = $matches[4];
- if ( 'use_id' != $lookup )
- $object = call_user_func( $lookup, $object );
- return sprintf( $trans[$verb][$noun][0], wp_specialchars($object) );
- } else {
- return $trans[$verb][$noun][0];
- }
- }
+function iis7_supports_permalinks() {
+ global $is_iis7;
+
+ $supports_permalinks = false;
+ if ( $is_iis7 ) {
+ /* First we check if the DOMDocument class exists. If it does not exist,
+ * which is the case for PHP 4.X, then we cannot easily update the xml configuration file,
+ * hence we just bail out and tell user that pretty permalinks cannot be used.
+ * This is not a big issue because PHP 4.X is going to be deprecated and for IIS it
+ * is recommended to use PHP 5.X NTS.
+ * Next we check if the URL Rewrite Module 1.1 is loaded and enabled for the web site. When
+ * URL Rewrite 1.1 is loaded it always sets a server variable called 'IIS_UrlRewriteModule'.
+ * Lastly we make sure that PHP is running via FastCGI. This is important because if it runs
+ * via ISAPI then pretty permalinks will not work.
+ */
+ $supports_permalinks = class_exists('DOMDocument') && isset($_SERVER['IIS_UrlRewriteModule']) && ( php_sapi_name() == 'cgi-fcgi' );
}
- return apply_filters( 'explain_nonce_' . $verb . '-' . $noun, __( 'Are you sure you want to do this?' ), $matches[4] );
+ return apply_filters('iis7_supports_permalinks', $supports_permalinks);
}
/**
- * Display "Are You Sure" message to confirm the action being taken.
+ * File validates against allowed set of defined rules.
*
- * If the action has the nonce explain message, then it will be displayed along
- * with the "Are you sure?" message.
+ * A return value of '1' means that the $file contains either '..' or './'. A
+ * return value of '2' means that the $file contains ':' after the first
+ * character. A return value of '3' means that the file is not in the allowed
+ * files list.
*
- * @package WordPress
- * @subpackage Security
- * @since 2.0.4
+ * @since 1.2.0
*
- * @param string $action The nonce action.
+ * @param string $file File path.
+ * @param array $allowed_files List of allowed files.
+ * @return int 0 means nothing is wrong, greater than 0 means something was wrong.
*/
-function wp_nonce_ays( $action ) {
- $title = __( 'WordPress Failure Notice' );
- $html = wp_specialchars( wp_explain_nonce( $action ) );
- if ( wp_get_referer() )
- $html .= "