X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/d3b1ea255664edd2deef17f900a655613d20820d..refs/tags/wordpress-2.9.2:/wp-includes/functions.php
diff --git a/wp-includes/functions.php b/wp-includes/functions.php
index cfd12bad..1df479e6 100644
--- a/wp-includes/functions.php
+++ b/wp-includes/functions.php
@@ -497,7 +497,7 @@ function update_option( $option_name, $newvalue ) {
wp_protect_special_option( $option_name );
- $safe_option_name = $wpdb->escape( $option_name );
+ $safe_option_name = esc_sql( $option_name );
$newvalue = sanitize_option( $option_name, $newvalue );
$oldvalue = get_option( $safe_option_name );
@@ -522,6 +522,7 @@ function update_option( $option_name, $newvalue ) {
$_newvalue = $newvalue;
$newvalue = maybe_serialize( $newvalue );
+ do_action( 'update_option', $option_name, $oldvalue, $newvalue );
$alloptions = wp_load_alloptions();
if ( isset( $alloptions[$option_name] ) ) {
$alloptions[$option_name] = $newvalue;
@@ -534,6 +535,7 @@ function update_option( $option_name, $newvalue ) {
if ( $wpdb->rows_affected == 1 ) {
do_action( "update_option_{$option_name}", $oldvalue, $_newvalue );
+ do_action( 'updated_option', $option_name, $oldvalue, $_newvalue );
return true;
}
return false;
@@ -571,7 +573,7 @@ function add_option( $name, $value = '', $deprecated = '', $autoload = 'yes' ) {
global $wpdb;
wp_protect_special_option( $name );
- $safe_name = $wpdb->escape( $name );
+ $safe_name = esc_sql( $name );
$value = sanitize_option( $name, $value );
// Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
@@ -582,7 +584,7 @@ function add_option( $name, $value = '', $deprecated = '', $autoload = 'yes' ) {
$value = maybe_serialize( $value );
$autoload = ( 'no' === $autoload ) ? 'no' : 'yes';
-
+ do_action( 'add_option', $name, $value );
if ( 'yes' == $autoload ) {
$alloptions = wp_load_alloptions();
$alloptions[$name] = $value;
@@ -598,9 +600,11 @@ function add_option( $name, $value = '', $deprecated = '', $autoload = 'yes' ) {
wp_cache_set( 'notoptions', $notoptions, 'options' );
}
- $wpdb->insert($wpdb->options, array('option_name' => $name, 'option_value' => $value, 'autoload' => $autoload) );
+ $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", $name, $value, $autoload ) );
do_action( "add_option_{$name}", $name, $value );
+ do_action( 'added_option', $name, $value );
+
return;
}
@@ -621,9 +625,10 @@ function delete_option( $name ) {
// Get the ID, if no ID then return
// expected_slashed ($name)
- $option = $wpdb->get_row( "SELECT option_id, autoload FROM $wpdb->options WHERE option_name = '$name'" );
- if ( is_null($option) || !$option->option_id )
+ $option = $wpdb->get_row( "SELECT autoload FROM $wpdb->options WHERE option_name = '$name'" );
+ if ( is_null($option) )
return false;
+ do_action( 'delete_option', $name );
// expected_slashed ($name)
$wpdb->query( "DELETE FROM $wpdb->options WHERE option_name = '$name'" );
if ( 'yes' == $option->autoload ) {
@@ -635,6 +640,7 @@ function delete_option( $name ) {
} else {
wp_cache_delete( $name, 'options' );
}
+ do_action( 'deleted_option', $name );
return true;
}
@@ -654,7 +660,7 @@ function delete_transient($transient) {
if ( $_wp_using_ext_object_cache ) {
return wp_cache_delete($transient, 'transient');
} else {
- $transient = '_transient_' . $wpdb->escape($transient);
+ $transient = '_transient_' . esc_sql($transient);
return delete_option($transient);
}
}
@@ -682,11 +688,11 @@ function get_transient($transient) {
if ( $_wp_using_ext_object_cache ) {
$value = wp_cache_get($transient, 'transient');
} else {
- $transient_option = '_transient_' . $wpdb->escape($transient);
+ $transient_option = '_transient_' . esc_sql($transient);
// If option is not in alloptions, it is not autoloaded and thus has a timeout
$alloptions = wp_load_alloptions();
if ( !isset( $alloptions[$transient_option] ) ) {
- $transient_timeout = '_transient_timeout_' . $wpdb->escape($transient);
+ $transient_timeout = '_transient_timeout_' . esc_sql($transient);
if ( get_option($transient_timeout) < time() ) {
delete_option($transient_option);
delete_option($transient_timeout);
@@ -723,7 +729,7 @@ function set_transient($transient, $value, $expiration = 0) {
} else {
$transient_timeout = '_transient_timeout_' . $transient;
$transient = '_transient_' . $transient;
- $safe_transient = $wpdb->escape($transient);
+ $safe_transient = esc_sql($transient);
if ( false === get_option( $safe_transient ) ) {
$autoload = 'yes';
if ( 0 != $expiration ) {
@@ -964,34 +970,6 @@ function maybe_serialize( $data ) {
return $data;
}
-/**
- * Strip HTML and put links at the bottom of stripped content.
- *
- * Searches for all of the links, strips them out of the content, and places
- * them at the bottom of the content with numbers.
- *
- * @since 0.71
- *
- * @param string $content Content to get links
- * @return string HTML stripped out of content with links at the bottom.
- */
-function make_url_footnote( $content ) {
- preg_match_all( '/(.+?)<\/a>/', $content, $matches );
- $links_summary = "\n";
- for ( $i=0; $i
" . __( 'Please try again.' ) . ""; - elseif ( 'log-out' == $action ) + if ( 'log-out' == $action ) $html .= "
" . sprintf( __( "Do you really want to log out?"), wp_logout_url() ); + elseif ( wp_get_referer() ) + $html .= "
" . __( 'Please try again.' ) . ""; - wp_die( $html, $title); + wp_die( $html, $title, array('response' => 403) ); } /** @@ -2487,6 +2526,7 @@ function wp_die( $message, $title = '', $args = array() ) { if ( ( $wp_locale ) && ( 'rtl' == $wp_locale->text_direction ) ) $text_direction = 'rtl'; ?> + >
@@ -2501,7 +2541,6 @@ if ( 'rtl' == $text_direction ) : ?> - deprecated since version %2$s! Use %3$s instead.'), $function, $version, $replacement ) ); else @@ -2928,8 +2980,7 @@ function _deprecated_function($function, $version, $replacement=null) { * to get the backtrace up to what file and function included the deprecated * file. * - * The current behavior is to trigger an user error if WP_DEBUG is defined and - * is true. + * The current behavior is to trigger an user error if WP_DEBUG is true. * * This function is to be used in every file that is depreceated * @@ -2950,7 +3001,7 @@ function _deprecated_file($file, $version, $replacement=null) { do_action('deprecated_file_included', $file, $replacement); // Allow plugin to filter the output error trigger - if( defined('WP_DEBUG') && ( true === WP_DEBUG ) && apply_filters( 'deprecated_file_trigger_error', true )) { + if( WP_DEBUG && apply_filters( 'deprecated_file_trigger_error', true ) ) { if( !is_null($replacement) ) trigger_error( sprintf( __('%1$s is deprecated since version %2$s! Use %3$s instead.'), $file, $version, $replacement ) ); else @@ -3021,12 +3072,12 @@ function validate_file( $file, $allowed_files = '' ) { if ( false !== strpos( $file, './' )) return 1; - if (':' == substr( $file, 1, 1 )) - return 2; - if (!empty ( $allowed_files ) && (!in_array( $file, $allowed_files ) ) ) return 3; + if (':' == substr( $file, 1, 1 )) + return 2; + return 0; } @@ -3057,10 +3108,10 @@ function is_ssl() { * @param string|bool $force Optional. * @return bool True if forced, false if not forced. */ -function force_ssl_login($force = '') { - static $forced; +function force_ssl_login( $force = null ) { + static $forced = false; - if ( '' != $force ) { + if ( !is_null( $force ) ) { $old_forced = $forced; $forced = $force; return $old_forced; @@ -3077,10 +3128,10 @@ function force_ssl_login($force = '') { * @param string|bool $force * @return bool True if forced, false if not forced. */ -function force_ssl_admin($force = '') { - static $forced; +function force_ssl_admin( $force = null ) { + static $forced = false; - if ( '' != $force ) { + if ( !is_null( $force ) ) { $old_forced = $forced; $forced = $force; return $old_forced; @@ -3130,150 +3181,335 @@ function wp_suspend_cache_invalidation($suspend = true) { } function get_site_option( $key, $default = false, $use_cache = true ) { - return get_option($key, $default); + // Allow plugins to short-circuit site options. + $pre = apply_filters( 'pre_site_option_' . $key, false ); + if ( false !== $pre ) + return $pre; + + $value = get_option($key, $default); + + return apply_filters( 'site_option_' . $key, $value ); } // expects $key, $value not to be SQL escaped function add_site_option( $key, $value ) { - return add_option($key, $value); + $value = apply_filters( 'pre_add_site_option_' . $key, $value ); + $result = add_option($key, $value); + do_action( "add_site_option_{$key}", $key, $value ); + return $result; +} + +function delete_site_option( $key ) { + $result = delete_option($key); + do_action( "delete_site_option_{$key}", $key ); + return $result; } // expects $key, $value not to be SQL escaped function update_site_option( $key, $value ) { - return update_option($key, $value); + $oldvalue = get_site_option( $key ); + $value = apply_filters( 'pre_update_site_option_' . $key, $value, $oldvalue ); + $result = update_option($key, $value); + do_action( "update_site_option_{$key}", $key, $value ); + return $result; } /** - * gmt_offset modification for smart timezone handling + * Delete a site transient * - * Overrides the gmt_offset option if we have a timezone_string available + * @since 2.890 + * @package WordPress + * @subpackage Transient + * + * @param string $transient Transient name. Expected to not be SQL-escaped + * @return bool true if successful, false otherwise */ -function wp_timezone_override_offset() { - if (!wp_timezone_supported()) return false; +function delete_site_transient($transient) { + global $_wp_using_ext_object_cache, $wpdb; - $tz = get_option('timezone_string'); - if (empty($tz)) return false; + if ( $_wp_using_ext_object_cache ) { + return wp_cache_delete($transient, 'site-transient'); + } else { + $transient = '_site_transient_' . esc_sql($transient); + return delete_site_option($transient); + } +} - @date_default_timezone_set($tz); +/** + * Get the value of a site transient + * + * If the transient does not exist or does not have a value, then the return value + * will be false. + * + * @since 2.9.0 + * @package WordPress + * @subpackage Transient + * + * @param string $transient Transient name. Expected to not be SQL-escaped + * @return mixed Value of transient + */ +function get_site_transient($transient) { + global $_wp_using_ext_object_cache, $wpdb; - $dateTimeZoneSelected = timezone_open($tz); - $dateTimeServer = date_create(); - if ($dateTimeZoneSelected === false || $dateTimeServer === false) return false; + $pre = apply_filters( 'pre_site_transient_' . $transient, false ); + if ( false !== $pre ) + return $pre; - $timeOffset = timezone_offset_get($dateTimeZoneSelected, $dateTimeServer); - $timeOffset = $timeOffset / 3600; + if ( $_wp_using_ext_object_cache ) { + $value = wp_cache_get($transient, 'site-transient'); + } else { + $transient_option = '_site_transient_' . esc_sql($transient); + $transient_timeout = '_site_transient_timeout_' . esc_sql($transient); + if ( get_site_option($transient_timeout) < time() ) { + delete_site_option($transient_option); + delete_site_option($transient_timeout); + return false; + } + + $value = get_site_option($transient_option); + } - return $timeOffset; + return apply_filters('site_transient_' . $transient, $value); } /** - * Check for PHP timezone support + * Set/update the value of a site transient + * + * You do not need to serialize values, if the value needs to be serialize, then + * it will be serialized before it is set. + * + * @since 2.9.0 + * @package WordPress + * @subpackage Transient * + * @param string $transient Transient name. Expected to not be SQL-escaped + * @param mixed $value Transient value. + * @param int $expiration Time until expiration in seconds, default 0 + * @return bool False if value was not set and true if value was set. */ -function wp_timezone_supported() { - if (function_exists('date_default_timezone_set') - && function_exists('timezone_identifiers_list') - && function_exists('timezone_open') - && function_exists('timezone_offset_get') - ) - return apply_filters('timezone_support',true); +function set_site_transient($transient, $value, $expiration = 0) { + global $_wp_using_ext_object_cache, $wpdb; + + if ( $_wp_using_ext_object_cache ) { + return wp_cache_set($transient, $value, 'site-transient', $expiration); + } else { + $transient_timeout = '_site_transient_timeout_' . $transient; + $transient = '_site_transient_' . $transient; + $safe_transient = esc_sql($transient); + if ( false === get_site_option( $safe_transient ) ) { + if ( 0 != $expiration ) + add_site_option($transient_timeout, time() + $expiration); + return add_site_option($transient, $value); + } else { + if ( 0 != $expiration ) + update_site_option($transient_timeout, time() + $expiration); + return update_site_option($transient, $value); + } + } +} - return apply_filters('timezone_support',false); +/** + * gmt_offset modification for smart timezone handling + * + * Overrides the gmt_offset option if we have a timezone_string available + */ +function wp_timezone_override_offset() { + if ( !wp_timezone_supported() ) { + return false; + } + if ( !$timezone_string = get_option( 'timezone_string' ) ) { + return false; + } + + @date_default_timezone_set( $timezone_string ); + $timezone_object = timezone_open( $timezone_string ); + $datetime_object = date_create(); + if ( false === $timezone_object || false === $datetime_object ) { + return false; + } + return round( timezone_offset_get( $timezone_object, $datetime_object ) / 3600, 2 ); +} + +/** + * Check for PHP timezone support + */ +function wp_timezone_supported() { + $support = false; + if ( + function_exists( 'date_default_timezone_set' ) && + function_exists( 'timezone_identifiers_list' ) && + function_exists( 'timezone_open' ) && + function_exists( 'timezone_offset_get' ) + ) { + $support = true; + } + return apply_filters( 'timezone_support', $support ); +} + +function _wp_timezone_choice_usort_callback( $a, $b ) { + // Don't use translated versions of Etc + if ( 'Etc' === $a['continent'] && 'Etc' === $b['continent'] ) { + // Make the order of these more like the old dropdown + if ( 'GMT+' === substr( $a['city'], 0, 4 ) && 'GMT+' === substr( $b['city'], 0, 4 ) ) { + return -1 * ( strnatcasecmp( $a['city'], $b['city'] ) ); + } + if ( 'UTC' === $a['city'] ) { + if ( 'GMT+' === substr( $b['city'], 0, 4 ) ) { + return 1; + } + return -1; + } + if ( 'UTC' === $b['city'] ) { + if ( 'GMT+' === substr( $a['city'], 0, 4 ) ) { + return -1; + } + return 1; + } + return strnatcasecmp( $a['city'], $b['city'] ); + } + if ( $a['t_continent'] == $b['t_continent'] ) { + if ( $a['t_city'] == $b['t_city'] ) { + return strnatcasecmp( $a['t_subcity'], $b['t_subcity'] ); + } + return strnatcasecmp( $a['t_city'], $b['t_city'] ); + } else { + // Force Etc to the bottom of the list + if ( 'Etc' === $a['continent'] ) { + return 1; + } + if ( 'Etc' === $b['continent'] ) { + return -1; + } + return strnatcasecmp( $a['t_continent'], $b['t_continent'] ); + } } /** * Gives a nicely formatted list of timezone strings // temporary! Not in final * - * @param string $selectedzone - which zone should be the selected one + * @param $selected_zone string Selected Zone * */ -function wp_timezone_choice($selectedzone) { +function wp_timezone_choice( $selected_zone ) { static $mo_loaded = false; - $continents = array('Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific', 'Etc'); + $continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific'); // Load translations for continents and cities - if ( ! $mo_loaded ) { + if ( !$mo_loaded ) { $locale = get_locale(); - $mofile = WP_LANG_DIR . "/continents-cities-$locale.mo"; - load_textdomain('continents-cities', $mofile); + $mofile = WP_LANG_DIR . '/continents-cities-' . $locale . '.mo'; + load_textdomain( 'continents-cities', $mofile ); $mo_loaded = true; } - $all = timezone_identifiers_list(); - - $i = 0; - foreach ( $all as $zone ) { - $zone = explode('/',$zone); - if ( ! in_array($zone[0], $continents) ) - continue; - if ( $zone[0] == 'Etc' && in_array($zone[1], array('UCT', 'GMT', 'GMT0', 'GMT+0', 'GMT-0', 'Greenwich', 'Universal', 'Zulu')) ) + $zonen = array(); + foreach ( timezone_identifiers_list() as $zone ) { + $zone = explode( '/', $zone ); + if ( !in_array( $zone[0], $continents ) ) { continue; - $zonen[$i]['continent'] = isset($zone[0]) ? $zone[0] : ''; - $zonen[$i]['city'] = isset($zone[1]) ? $zone[1] : ''; - $zonen[$i]['subcity'] = isset($zone[2]) ? $zone[2] : ''; - $i++; - } - - usort($zonen, create_function( - '$a, $b', ' - $t = create_function(\'$s\', \'return translate(str_replace("_", " ", $s), "continents-cities");\'); - $a_continent = $t($a["continent"]); - $b_continent = $t($b["continent"]); - $a_city = $t($a["city"]); - $b_city = $t($b["city"]); - $a_subcity = $t($a["subcity"]); - $b_subcity = $t($b["subcity"]); - if ( $a_continent == $b_continent && $a_city == $b_city ) - return strnatcasecmp($a_subcity, $b_subcity); - elseif ( $a_continent == $b_continent ) - return strnatcasecmp($a_city, $b_city); - else - return strnatcasecmp($a_continent, $b_continent); - ')); - - $structure = ''; - $pad = ' '; - - if ( empty($selectedzone) ) - $structure .= '\n"; - foreach ( $zonen as $zone ) { - extract($zone); - if ( empty($selectcontinent) && !empty($city) ) { - $selectcontinent = $continent; - $structure .= '\n"; - $selectcontinent = ''; - if ( !empty($city) ) { - $selectcontinent = $continent; - $structure .= '\n"; - return $structure; -} + // Do UTC + $structure[] = '