web/wp-includes/functions.php
author ymh <ymh.work@gmail.com>
Mon, 22 Mar 2010 16:36:28 +0100
changeset 5 ac511f1ccc8e
parent 1 0d28b7c10758
permissions -rw-r--r--
add hgignore
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
0d28b7c10758 First commit
ymh
parents:
diff changeset
     1
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
     2
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
     3
 * Main WordPress API
0d28b7c10758 First commit
ymh
parents:
diff changeset
     4
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
     5
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
     6
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
     7
0d28b7c10758 First commit
ymh
parents:
diff changeset
     8
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
     9
 * Converts MySQL DATETIME field to user specified date format.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    10
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    11
 * If $dateformatstring has 'G' value, then gmmktime() function will be used to
0d28b7c10758 First commit
ymh
parents:
diff changeset
    12
 * make the time. If $dateformatstring is set to 'U', then mktime() function
0d28b7c10758 First commit
ymh
parents:
diff changeset
    13
 * will be used to make the time.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    14
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    15
 * The $translate will only be used, if it is set to true and it is by default
0d28b7c10758 First commit
ymh
parents:
diff changeset
    16
 * and if the $wp_locale object has the month and weekday set.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    17
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    18
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
    19
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    20
 * @param string $dateformatstring Either 'G', 'U', or php date format.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    21
 * @param string $mysqlstring Time from mysql DATETIME field.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    22
 * @param bool $translate Optional. Default is true. Will switch format to locale.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    23
 * @return string Date formated by $dateformatstring or locale (if available).
0d28b7c10758 First commit
ymh
parents:
diff changeset
    24
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    25
function mysql2date( $dateformatstring, $mysqlstring, $translate = true ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    26
	global $wp_locale;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    27
	$m = $mysqlstring;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    28
	if ( empty( $m ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    29
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    30
0d28b7c10758 First commit
ymh
parents:
diff changeset
    31
	if( 'G' == $dateformatstring ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    32
		return strtotime( $m . ' +0000' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    33
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    34
0d28b7c10758 First commit
ymh
parents:
diff changeset
    35
	$i = strtotime( $m );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    36
0d28b7c10758 First commit
ymh
parents:
diff changeset
    37
	if( 'U' == $dateformatstring )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    38
		return $i;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    39
0d28b7c10758 First commit
ymh
parents:
diff changeset
    40
	if ( $translate)
0d28b7c10758 First commit
ymh
parents:
diff changeset
    41
	    return date_i18n( $dateformatstring, $i );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    42
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
    43
	    return date( $dateformatstring, $i );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    44
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    45
0d28b7c10758 First commit
ymh
parents:
diff changeset
    46
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    47
 * Retrieve the current time based on specified type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    48
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    49
 * The 'mysql' type will return the time in the format for MySQL DATETIME field.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    50
 * The 'timestamp' type will return the current timestamp.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    51
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    52
 * If $gmt is set to either '1' or 'true', then both types will use GMT time.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    53
 * if $gmt is false, the output is adjusted with the GMT offset in the WordPress option.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    54
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    55
 * @since 1.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
    56
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    57
 * @param string $type Either 'mysql' or 'timestamp'.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    58
 * @param int|bool $gmt Optional. Whether to use GMT timezone. Default is false.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    59
 * @return int|string String if $type is 'gmt', int if $type is 'timestamp'.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    60
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    61
function current_time( $type, $gmt = 0 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    62
	switch ( $type ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    63
		case 'mysql':
0d28b7c10758 First commit
ymh
parents:
diff changeset
    64
			return ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * 3600 ) ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    65
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    66
		case 'timestamp':
0d28b7c10758 First commit
ymh
parents:
diff changeset
    67
			return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * 3600 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    68
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    69
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    70
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    71
0d28b7c10758 First commit
ymh
parents:
diff changeset
    72
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    73
 * Retrieve the date in localized format, based on timestamp.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    74
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    75
 * If the locale specifies the locale month and weekday, then the locale will
0d28b7c10758 First commit
ymh
parents:
diff changeset
    76
 * take over the format for the date. If it isn't, then the date format string
0d28b7c10758 First commit
ymh
parents:
diff changeset
    77
 * will be used instead.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    78
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    79
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
    80
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
    81
 * @param string $dateformatstring Format to display the date.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    82
 * @param int $unixtimestamp Optional. Unix timestamp.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    83
 * @param bool $gmt Optional, default is false. Whether to convert to GMT for time.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    84
 * @return string The date, translated if locale specifies it.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    85
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    86
function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    87
	global $wp_locale;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    88
	$i = $unixtimestamp;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    89
	// Sanity check for PHP 5.1.0-
0d28b7c10758 First commit
ymh
parents:
diff changeset
    90
	if ( false === $i || intval($i) < 0 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    91
		if ( ! $gmt )
0d28b7c10758 First commit
ymh
parents:
diff changeset
    92
			$i = current_time( 'timestamp' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
    93
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
    94
			$i = time();
0d28b7c10758 First commit
ymh
parents:
diff changeset
    95
		// we should not let date() interfere with our
0d28b7c10758 First commit
ymh
parents:
diff changeset
    96
		// specially computed timestamp
0d28b7c10758 First commit
ymh
parents:
diff changeset
    97
		$gmt = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    98
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
    99
0d28b7c10758 First commit
ymh
parents:
diff changeset
   100
	// store original value for language with untypical grammars
0d28b7c10758 First commit
ymh
parents:
diff changeset
   101
	// see http://core.trac.wordpress.org/ticket/9396
0d28b7c10758 First commit
ymh
parents:
diff changeset
   102
	$req_format = $dateformatstring;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   103
0d28b7c10758 First commit
ymh
parents:
diff changeset
   104
	$datefunc = $gmt? 'gmdate' : 'date';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   105
0d28b7c10758 First commit
ymh
parents:
diff changeset
   106
	if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   107
		$datemonth = $wp_locale->get_month( $datefunc( 'm', $i ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   108
		$datemonth_abbrev = $wp_locale->get_month_abbrev( $datemonth );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   109
		$dateweekday = $wp_locale->get_weekday( $datefunc( 'w', $i ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   110
		$dateweekday_abbrev = $wp_locale->get_weekday_abbrev( $dateweekday );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   111
		$datemeridiem = $wp_locale->get_meridiem( $datefunc( 'a', $i ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   112
		$datemeridiem_capital = $wp_locale->get_meridiem( $datefunc( 'A', $i ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   113
		$dateformatstring = ' '.$dateformatstring;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   114
		$dateformatstring = preg_replace( "/([^\\\])D/", "\\1" . backslashit( $dateweekday_abbrev ), $dateformatstring );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   115
		$dateformatstring = preg_replace( "/([^\\\])F/", "\\1" . backslashit( $datemonth ), $dateformatstring );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   116
		$dateformatstring = preg_replace( "/([^\\\])l/", "\\1" . backslashit( $dateweekday ), $dateformatstring );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   117
		$dateformatstring = preg_replace( "/([^\\\])M/", "\\1" . backslashit( $datemonth_abbrev ), $dateformatstring );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   118
		$dateformatstring = preg_replace( "/([^\\\])a/", "\\1" . backslashit( $datemeridiem ), $dateformatstring );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   119
		$dateformatstring = preg_replace( "/([^\\\])A/", "\\1" . backslashit( $datemeridiem_capital ), $dateformatstring );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   120
0d28b7c10758 First commit
ymh
parents:
diff changeset
   121
		$dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   122
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   123
	$j = @$datefunc( $dateformatstring, $i );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   124
	// allow plugins to redo this entirely for languages with untypical grammars
0d28b7c10758 First commit
ymh
parents:
diff changeset
   125
	$j = apply_filters('date_i18n', $j, $req_format, $i, $gmt);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   126
	return $j;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   127
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   128
0d28b7c10758 First commit
ymh
parents:
diff changeset
   129
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   130
 * Convert number to format based on the locale.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   131
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   132
 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   133
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   134
 * @param mixed $number The number to convert based on locale.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   135
 * @param int $decimals Precision of the number of decimal places.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   136
 * @return string Converted number in string format.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   137
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   138
function number_format_i18n( $number, $decimals = null ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   139
	global $wp_locale;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   140
	// let the user override the precision only
0d28b7c10758 First commit
ymh
parents:
diff changeset
   141
	$decimals = ( is_null( $decimals ) ) ? $wp_locale->number_format['decimals'] : intval( $decimals );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   142
0d28b7c10758 First commit
ymh
parents:
diff changeset
   143
	$num = number_format( $number, $decimals, $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   144
0d28b7c10758 First commit
ymh
parents:
diff changeset
   145
	// let the user translate digits from latin to localized language
0d28b7c10758 First commit
ymh
parents:
diff changeset
   146
	return apply_filters( 'number_format_i18n', $num );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   147
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   148
0d28b7c10758 First commit
ymh
parents:
diff changeset
   149
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   150
 * Convert number of bytes largest unit bytes will fit into.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   151
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   152
 * It is easier to read 1kB than 1024 bytes and 1MB than 1048576 bytes. Converts
0d28b7c10758 First commit
ymh
parents:
diff changeset
   153
 * number of bytes to human readable number by taking the number of that unit
0d28b7c10758 First commit
ymh
parents:
diff changeset
   154
 * that the bytes will go into it. Supports TB value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   155
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   156
 * Please note that integers in PHP are limited to 32 bits, unless they are on
0d28b7c10758 First commit
ymh
parents:
diff changeset
   157
 * 64 bit architecture, then they have 64 bit size. If you need to place the
0d28b7c10758 First commit
ymh
parents:
diff changeset
   158
 * larger size then what PHP integer type will hold, then use a string. It will
0d28b7c10758 First commit
ymh
parents:
diff changeset
   159
 * be converted to a double, which should always have 64 bit length.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   160
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   161
 * Technically the correct unit names for powers of 1024 are KiB, MiB etc.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   162
 * @link http://en.wikipedia.org/wiki/Byte
0d28b7c10758 First commit
ymh
parents:
diff changeset
   163
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   164
 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   165
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   166
 * @param int|string $bytes Number of bytes. Note max integer size for integers.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   167
 * @param int $decimals Precision of number of decimal places.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   168
 * @return bool|string False on failure. Number string on success.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   169
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   170
function size_format( $bytes, $decimals = null ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   171
	$quant = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
   172
		// ========================= Origin ====
0d28b7c10758 First commit
ymh
parents:
diff changeset
   173
		'TB' => 1099511627776,  // pow( 1024, 4)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   174
		'GB' => 1073741824,     // pow( 1024, 3)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   175
		'MB' => 1048576,        // pow( 1024, 2)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   176
		'kB' => 1024,           // pow( 1024, 1)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   177
		'B ' => 1,              // pow( 1024, 0)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   178
	);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   179
0d28b7c10758 First commit
ymh
parents:
diff changeset
   180
	foreach ( $quant as $unit => $mag )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   181
		if ( doubleval($bytes) >= $mag )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   182
			return number_format_i18n( $bytes / $mag, $decimals ) . ' ' . $unit;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   183
0d28b7c10758 First commit
ymh
parents:
diff changeset
   184
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   185
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   186
0d28b7c10758 First commit
ymh
parents:
diff changeset
   187
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   188
 * Get the week start and end from the datetime or date string from mysql.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   189
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   190
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
   191
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   192
 * @param string $mysqlstring Date or datetime field type from mysql.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   193
 * @param int $start_of_week Optional. Start of the week as an integer.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   194
 * @return array Keys are 'start' and 'end'.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   195
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   196
function get_weekstartend( $mysqlstring, $start_of_week = '' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   197
	$my = substr( $mysqlstring, 0, 4 ); // Mysql string Year
0d28b7c10758 First commit
ymh
parents:
diff changeset
   198
	$mm = substr( $mysqlstring, 8, 2 ); // Mysql string Month
0d28b7c10758 First commit
ymh
parents:
diff changeset
   199
	$md = substr( $mysqlstring, 5, 2 ); // Mysql string day
0d28b7c10758 First commit
ymh
parents:
diff changeset
   200
	$day = mktime( 0, 0, 0, $md, $mm, $my ); // The timestamp for mysqlstring day.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   201
	$weekday = date( 'w', $day ); // The day of the week from the timestamp
0d28b7c10758 First commit
ymh
parents:
diff changeset
   202
	$i = 86400; // One day
0d28b7c10758 First commit
ymh
parents:
diff changeset
   203
	if( !is_numeric($start_of_week) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   204
		$start_of_week = get_option( 'start_of_week' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   205
0d28b7c10758 First commit
ymh
parents:
diff changeset
   206
	if ( $weekday < $start_of_week )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   207
		$weekday = 7 - $start_of_week - $weekday;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   208
0d28b7c10758 First commit
ymh
parents:
diff changeset
   209
	while ( $weekday > $start_of_week ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   210
		$weekday = date( 'w', $day );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   211
		if ( $weekday < $start_of_week )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   212
			$weekday = 7 - $start_of_week - $weekday;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   213
0d28b7c10758 First commit
ymh
parents:
diff changeset
   214
		$day -= 86400;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   215
		$i = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   216
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   217
	$week['start'] = $day + 86400 - $i;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   218
	$week['end'] = $week['start'] + 604799;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   219
	return $week;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   220
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   221
0d28b7c10758 First commit
ymh
parents:
diff changeset
   222
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   223
 * Unserialize value only if it was serialized.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   224
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   225
 * @since 2.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   226
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   227
 * @param string $original Maybe unserialized original, if is needed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   228
 * @return mixed Unserialized data can be any type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   229
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   230
function maybe_unserialize( $original ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   231
	if ( is_serialized( $original ) ) // don't attempt to unserialize data that wasn't serialized going in
0d28b7c10758 First commit
ymh
parents:
diff changeset
   232
		return @unserialize( $original );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   233
	return $original;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   234
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   235
0d28b7c10758 First commit
ymh
parents:
diff changeset
   236
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   237
 * Check value to find if it was serialized.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   238
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   239
 * If $data is not an string, then returned value will always be false.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   240
 * Serialized data is always a string.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   241
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   242
 * @since 2.0.5
0d28b7c10758 First commit
ymh
parents:
diff changeset
   243
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   244
 * @param mixed $data Value to check to see if was serialized.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   245
 * @return bool False if not serialized and true if it was.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   246
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   247
function is_serialized( $data ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   248
	// if it isn't a string, it isn't serialized
0d28b7c10758 First commit
ymh
parents:
diff changeset
   249
	if ( !is_string( $data ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   250
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   251
	$data = trim( $data );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   252
	if ( 'N;' == $data )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   253
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   254
	if ( !preg_match( '/^([adObis]):/', $data, $badions ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   255
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   256
	switch ( $badions[1] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   257
		case 'a' :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   258
		case 'O' :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   259
		case 's' :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   260
			if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   261
				return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   262
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   263
		case 'b' :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   264
		case 'i' :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   265
		case 'd' :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   266
			if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   267
				return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   268
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   269
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   270
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   271
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   272
0d28b7c10758 First commit
ymh
parents:
diff changeset
   273
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   274
 * Check whether serialized data is of string type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   275
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   276
 * @since 2.0.5
0d28b7c10758 First commit
ymh
parents:
diff changeset
   277
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   278
 * @param mixed $data Serialized data
0d28b7c10758 First commit
ymh
parents:
diff changeset
   279
 * @return bool False if not a serialized string, true if it is.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   280
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   281
function is_serialized_string( $data ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   282
	// if it isn't a string, it isn't a serialized string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   283
	if ( !is_string( $data ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   284
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   285
	$data = trim( $data );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   286
	if ( preg_match( '/^s:[0-9]+:.*;$/s', $data ) ) // this should fetch all serialized strings
0d28b7c10758 First commit
ymh
parents:
diff changeset
   287
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   288
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   289
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   290
0d28b7c10758 First commit
ymh
parents:
diff changeset
   291
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   292
 * Retrieve option value based on setting name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   293
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   294
 * If the option does not exist or does not have a value, then the return value
0d28b7c10758 First commit
ymh
parents:
diff changeset
   295
 * will be false. This is useful to check whether you need to install an option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   296
 * and is commonly used during installation of plugin options and to test
0d28b7c10758 First commit
ymh
parents:
diff changeset
   297
 * whether upgrading is required.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   298
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   299
 * You can "short-circuit" the retrieval of the option from the database for
0d28b7c10758 First commit
ymh
parents:
diff changeset
   300
 * your plugin or core options that aren't protected. You can do so by hooking
0d28b7c10758 First commit
ymh
parents:
diff changeset
   301
 * into the 'pre_option_$option' with the $option being replaced by the option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   302
 * name. You should not try to override special options, but you will not be
0d28b7c10758 First commit
ymh
parents:
diff changeset
   303
 * prevented from doing so.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   304
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   305
 * There is a second filter called 'option_$option' with the $option being
0d28b7c10758 First commit
ymh
parents:
diff changeset
   306
 * replaced with the option name. This gives the value as the only parameter.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   307
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   308
 * If the option was serialized, when the option was added and, or updated, then
0d28b7c10758 First commit
ymh
parents:
diff changeset
   309
 * it will be unserialized, when it is returned.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   310
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   311
 * @since 1.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   312
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   313
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   314
 * @uses apply_filters() Calls 'pre_option_$optionname' false to allow
0d28b7c10758 First commit
ymh
parents:
diff changeset
   315
 *		overwriting the option value in a plugin.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   316
 * @uses apply_filters() Calls 'option_$optionname' with the option name value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   317
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   318
 * @param string $setting Name of option to retrieve. Should already be SQL-escaped
0d28b7c10758 First commit
ymh
parents:
diff changeset
   319
 * @return mixed Value set for the option.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   320
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   321
function get_option( $setting, $default = false ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   322
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   323
0d28b7c10758 First commit
ymh
parents:
diff changeset
   324
	// Allow plugins to short-circuit options.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   325
	$pre = apply_filters( 'pre_option_' . $setting, false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   326
	if ( false !== $pre )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   327
		return $pre;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   328
0d28b7c10758 First commit
ymh
parents:
diff changeset
   329
	// prevent non-existent options from triggering multiple queries
0d28b7c10758 First commit
ymh
parents:
diff changeset
   330
	$notoptions = wp_cache_get( 'notoptions', 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   331
	if ( isset( $notoptions[$setting] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   332
		return $default;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   333
0d28b7c10758 First commit
ymh
parents:
diff changeset
   334
	$alloptions = wp_load_alloptions();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   335
0d28b7c10758 First commit
ymh
parents:
diff changeset
   336
	if ( isset( $alloptions[$setting] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   337
		$value = $alloptions[$setting];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   338
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   339
		$value = wp_cache_get( $setting, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   340
0d28b7c10758 First commit
ymh
parents:
diff changeset
   341
		if ( false === $value ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   342
			if ( defined( 'WP_INSTALLING' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   343
				$suppress = $wpdb->suppress_errors();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   344
			// expected_slashed ($setting)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   345
			$row = $wpdb->get_row( "SELECT option_value FROM $wpdb->options WHERE option_name = '$setting' LIMIT 1" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   346
			if ( defined( 'WP_INSTALLING' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   347
				$wpdb->suppress_errors($suppress);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   348
0d28b7c10758 First commit
ymh
parents:
diff changeset
   349
			if ( is_object( $row) ) { // Has to be get_row instead of get_var because of funkiness with 0, false, null values
0d28b7c10758 First commit
ymh
parents:
diff changeset
   350
				$value = $row->option_value;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   351
				wp_cache_add( $setting, $value, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   352
			} else { // option does not exist, so we must cache its non-existence
0d28b7c10758 First commit
ymh
parents:
diff changeset
   353
				$notoptions[$setting] = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   354
				wp_cache_set( 'notoptions', $notoptions, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   355
				return $default;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   356
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   357
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   358
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   359
0d28b7c10758 First commit
ymh
parents:
diff changeset
   360
	// If home is not set use siteurl.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   361
	if ( 'home' == $setting && '' == $value )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   362
		return get_option( 'siteurl' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   363
0d28b7c10758 First commit
ymh
parents:
diff changeset
   364
	if ( in_array( $setting, array('siteurl', 'home', 'category_base', 'tag_base') ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   365
		$value = untrailingslashit( $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   366
0d28b7c10758 First commit
ymh
parents:
diff changeset
   367
	return apply_filters( 'option_' . $setting, maybe_unserialize( $value ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   368
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   369
0d28b7c10758 First commit
ymh
parents:
diff changeset
   370
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   371
 * Protect WordPress special option from being modified.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   372
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   373
 * Will die if $option is in protected list. Protected options are 'alloptions'
0d28b7c10758 First commit
ymh
parents:
diff changeset
   374
 * and 'notoptions' options.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   375
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   376
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   377
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   378
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   379
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   380
 * @param string $option Option name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   381
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   382
function wp_protect_special_option( $option ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   383
	$protected = array( 'alloptions', 'notoptions' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   384
	if ( in_array( $option, $protected ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   385
		die( sprintf( __( '%s is a protected WP option and may not be modified' ), esc_html( $option ) ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   386
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   387
0d28b7c10758 First commit
ymh
parents:
diff changeset
   388
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   389
 * Print option value after sanitizing for forms.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   390
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   391
 * @uses attr Sanitizes value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   392
 * @since 1.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   393
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   394
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   395
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   396
 * @param string $option Option name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   397
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   398
function form_option( $option ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   399
	echo esc_attr(get_option( $option ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   400
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   401
0d28b7c10758 First commit
ymh
parents:
diff changeset
   402
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   403
 * Retrieve all autoload options or all options, if no autoloaded ones exist.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   404
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   405
 * This is different from wp_load_alloptions() in that this function does not
0d28b7c10758 First commit
ymh
parents:
diff changeset
   406
 * cache its results and will retrieve all options from the database every time
0d28b7c10758 First commit
ymh
parents:
diff changeset
   407
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   408
 * it is called.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   409
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   410
 * @since 1.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   411
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   412
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   413
 * @uses apply_filters() Calls 'pre_option_$optionname' hook with option value as parameter.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   414
 * @uses apply_filters() Calls 'all_options' on options list.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   415
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   416
 * @return array List of all options.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   417
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   418
function get_alloptions() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   419
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   420
	$show = $wpdb->hide_errors();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   421
	if ( !$options = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'" ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   422
		$options = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   423
	$wpdb->show_errors($show);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   424
0d28b7c10758 First commit
ymh
parents:
diff changeset
   425
	foreach ( (array) $options as $option ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   426
		// "When trying to design a foolproof system,
0d28b7c10758 First commit
ymh
parents:
diff changeset
   427
		//  never underestimate the ingenuity of the fools :)" -- Dougal
0d28b7c10758 First commit
ymh
parents:
diff changeset
   428
		if ( in_array( $option->option_name, array( 'siteurl', 'home', 'category_base', 'tag_base' ) ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   429
			$option->option_value = untrailingslashit( $option->option_value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   430
		$value = maybe_unserialize( $option->option_value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   431
		$all_options->{$option->option_name} = apply_filters( 'pre_option_' . $option->option_name, $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   432
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   433
	return apply_filters( 'all_options', $all_options );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   434
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   435
0d28b7c10758 First commit
ymh
parents:
diff changeset
   436
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   437
 * Loads and caches all autoloaded options, if available or all options.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   438
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   439
 * This is different from get_alloptions(), in that this function will cache the
0d28b7c10758 First commit
ymh
parents:
diff changeset
   440
 * options and will return the cached options when called again.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   441
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   442
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   443
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   444
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   445
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   446
 * @return array List all options.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   447
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   448
function wp_load_alloptions() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   449
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   450
0d28b7c10758 First commit
ymh
parents:
diff changeset
   451
	$alloptions = wp_cache_get( 'alloptions', 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   452
0d28b7c10758 First commit
ymh
parents:
diff changeset
   453
	if ( !$alloptions ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   454
		$suppress = $wpdb->suppress_errors();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   455
		if ( !$alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'" ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   456
			$alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   457
		$wpdb->suppress_errors($suppress);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   458
		$alloptions = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   459
		foreach ( (array) $alloptions_db as $o )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   460
			$alloptions[$o->option_name] = $o->option_value;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   461
		wp_cache_add( 'alloptions', $alloptions, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   462
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   463
	return $alloptions;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   464
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   465
0d28b7c10758 First commit
ymh
parents:
diff changeset
   466
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   467
 * Update the value of an option that was already added.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   468
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   469
 * You do not need to serialize values, if the value needs to be serialize, then
0d28b7c10758 First commit
ymh
parents:
diff changeset
   470
 * it will be serialized before it is inserted into the database. Remember,
0d28b7c10758 First commit
ymh
parents:
diff changeset
   471
 * resources can not be serialized or added as an option.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   472
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   473
 * If the option does not exist, then the option will be added with the option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   474
 * value, but you will not be able to set whether it is autoloaded. If you want
0d28b7c10758 First commit
ymh
parents:
diff changeset
   475
 * to set whether an option autoloaded, then you need to use the add_option().
0d28b7c10758 First commit
ymh
parents:
diff changeset
   476
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   477
 * Before the option is updated, then the filter named
0d28b7c10758 First commit
ymh
parents:
diff changeset
   478
 * 'pre_update_option_$option_name', with the $option_name as the $option_name
0d28b7c10758 First commit
ymh
parents:
diff changeset
   479
 * parameter value, will be called. The hook should accept two parameters, the
0d28b7c10758 First commit
ymh
parents:
diff changeset
   480
 * first is the new value and the second is the old value.  Whatever is
0d28b7c10758 First commit
ymh
parents:
diff changeset
   481
 * returned will be used as the new value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   482
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   483
 * After the value has been updated the action named 'update_option_$option_name'
0d28b7c10758 First commit
ymh
parents:
diff changeset
   484
 * will be called.  This action receives two parameters the first being the old
0d28b7c10758 First commit
ymh
parents:
diff changeset
   485
 * value and the second the new value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   486
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   487
 * @since 1.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   488
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   489
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   490
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   491
 * @param string $option_name Option name. Expected to not be SQL-escaped
0d28b7c10758 First commit
ymh
parents:
diff changeset
   492
 * @param mixed $newvalue Option value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   493
 * @return bool False if value was not updated and true if value was updated.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   494
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   495
function update_option( $option_name, $newvalue ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   496
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   497
0d28b7c10758 First commit
ymh
parents:
diff changeset
   498
	wp_protect_special_option( $option_name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   499
0d28b7c10758 First commit
ymh
parents:
diff changeset
   500
	$safe_option_name = esc_sql( $option_name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   501
	$newvalue = sanitize_option( $option_name, $newvalue );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   502
0d28b7c10758 First commit
ymh
parents:
diff changeset
   503
	$oldvalue = get_option( $safe_option_name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   504
0d28b7c10758 First commit
ymh
parents:
diff changeset
   505
	$newvalue = apply_filters( 'pre_update_option_' . $option_name, $newvalue, $oldvalue );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   506
0d28b7c10758 First commit
ymh
parents:
diff changeset
   507
	// If the new and old values are the same, no need to update.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   508
	if ( $newvalue === $oldvalue )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   509
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   510
0d28b7c10758 First commit
ymh
parents:
diff changeset
   511
	if ( false === $oldvalue ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   512
		add_option( $option_name, $newvalue );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   513
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   514
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   515
0d28b7c10758 First commit
ymh
parents:
diff changeset
   516
	$notoptions = wp_cache_get( 'notoptions', 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   517
	if ( is_array( $notoptions ) && isset( $notoptions[$option_name] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   518
		unset( $notoptions[$option_name] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   519
		wp_cache_set( 'notoptions', $notoptions, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   520
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   521
0d28b7c10758 First commit
ymh
parents:
diff changeset
   522
	$_newvalue = $newvalue;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   523
	$newvalue = maybe_serialize( $newvalue );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   524
0d28b7c10758 First commit
ymh
parents:
diff changeset
   525
	do_action( 'update_option', $option_name, $oldvalue, $newvalue );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   526
	$alloptions = wp_load_alloptions();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   527
	if ( isset( $alloptions[$option_name] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   528
		$alloptions[$option_name] = $newvalue;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   529
		wp_cache_set( 'alloptions', $alloptions, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   530
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   531
		wp_cache_set( $option_name, $newvalue, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   532
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   533
0d28b7c10758 First commit
ymh
parents:
diff changeset
   534
	$wpdb->update($wpdb->options, array('option_value' => $newvalue), array('option_name' => $option_name) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   535
0d28b7c10758 First commit
ymh
parents:
diff changeset
   536
	if ( $wpdb->rows_affected == 1 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   537
		do_action( "update_option_{$option_name}", $oldvalue, $_newvalue );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   538
		do_action( 'updated_option', $option_name, $oldvalue, $_newvalue );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   539
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   540
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   541
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   542
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   543
0d28b7c10758 First commit
ymh
parents:
diff changeset
   544
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   545
 * Add a new option.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   546
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   547
 * You do not need to serialize values, if the value needs to be serialize, then
0d28b7c10758 First commit
ymh
parents:
diff changeset
   548
 * it will be serialized before it is inserted into the database. Remember,
0d28b7c10758 First commit
ymh
parents:
diff changeset
   549
 * resources can not be serialized or added as an option.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   550
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   551
 * You can create options without values and then add values later. Does not
0d28b7c10758 First commit
ymh
parents:
diff changeset
   552
 * check whether the option has already been added, but does check that you
0d28b7c10758 First commit
ymh
parents:
diff changeset
   553
 * aren't adding a protected WordPress option. Care should be taken to not name
0d28b7c10758 First commit
ymh
parents:
diff changeset
   554
 * options, the same as the ones which are protected and to not add options
0d28b7c10758 First commit
ymh
parents:
diff changeset
   555
 * that were already added.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   556
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   557
 * The filter named 'add_option_$optionname', with the $optionname being
0d28b7c10758 First commit
ymh
parents:
diff changeset
   558
 * replaced with the option's name, will be called. The hook should accept two
0d28b7c10758 First commit
ymh
parents:
diff changeset
   559
 * parameters, the first is the option name, and the second is the value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   560
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   561
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   562
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   563
 * @since 1.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   564
 * @link http://alex.vort-x.net/blog/ Thanks Alex Stapleton
0d28b7c10758 First commit
ymh
parents:
diff changeset
   565
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   566
 * @param string $name Option name to add. Expects to NOT be SQL escaped.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   567
 * @param mixed $value Optional. Option value, can be anything.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   568
 * @param mixed $deprecated Optional. Description. Not used anymore.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   569
 * @param bool $autoload Optional. Default is enabled. Whether to load the option when WordPress starts up.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   570
 * @return null returns when finished.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   571
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   572
function add_option( $name, $value = '', $deprecated = '', $autoload = 'yes' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   573
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   574
0d28b7c10758 First commit
ymh
parents:
diff changeset
   575
	wp_protect_special_option( $name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   576
	$safe_name = esc_sql( $name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   577
	$value = sanitize_option( $name, $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   578
0d28b7c10758 First commit
ymh
parents:
diff changeset
   579
	// Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
0d28b7c10758 First commit
ymh
parents:
diff changeset
   580
	$notoptions = wp_cache_get( 'notoptions', 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   581
	if ( !is_array( $notoptions ) || !isset( $notoptions[$name] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   582
		if ( false !== get_option( $safe_name ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   583
			return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   584
0d28b7c10758 First commit
ymh
parents:
diff changeset
   585
	$value = maybe_serialize( $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   586
	$autoload = ( 'no' === $autoload ) ? 'no' : 'yes';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   587
	do_action( 'add_option', $name, $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   588
	if ( 'yes' == $autoload ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   589
		$alloptions = wp_load_alloptions();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   590
		$alloptions[$name] = $value;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   591
		wp_cache_set( 'alloptions', $alloptions, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   592
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   593
		wp_cache_set( $name, $value, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   594
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   595
0d28b7c10758 First commit
ymh
parents:
diff changeset
   596
	// This option exists now
0d28b7c10758 First commit
ymh
parents:
diff changeset
   597
	$notoptions = wp_cache_get( 'notoptions', 'options' ); // yes, again... we need it to be fresh
0d28b7c10758 First commit
ymh
parents:
diff changeset
   598
	if ( is_array( $notoptions ) && isset( $notoptions[$name] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   599
		unset( $notoptions[$name] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   600
		wp_cache_set( 'notoptions', $notoptions, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   601
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   602
0d28b7c10758 First commit
ymh
parents:
diff changeset
   603
	$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 ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   604
0d28b7c10758 First commit
ymh
parents:
diff changeset
   605
	do_action( "add_option_{$name}", $name, $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   606
	do_action( 'added_option', $name, $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   607
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
   608
	return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   609
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   610
0d28b7c10758 First commit
ymh
parents:
diff changeset
   611
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   612
 * Removes option by name and prevents removal of protected WordPress options.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   613
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   614
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   615
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   616
 * @since 1.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   617
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   618
 * @param string $name Option name to remove.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   619
 * @return bool True, if succeed. False, if failure.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   620
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   621
function delete_option( $name ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   622
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   623
0d28b7c10758 First commit
ymh
parents:
diff changeset
   624
	wp_protect_special_option( $name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   625
0d28b7c10758 First commit
ymh
parents:
diff changeset
   626
	// Get the ID, if no ID then return
0d28b7c10758 First commit
ymh
parents:
diff changeset
   627
	// expected_slashed ($name)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   628
	$option = $wpdb->get_row( "SELECT autoload FROM $wpdb->options WHERE option_name = '$name'" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   629
	if ( is_null($option) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   630
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   631
	do_action( 'delete_option', $name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   632
	// expected_slashed ($name)
0d28b7c10758 First commit
ymh
parents:
diff changeset
   633
	$wpdb->query( "DELETE FROM $wpdb->options WHERE option_name = '$name'" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   634
	if ( 'yes' == $option->autoload ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   635
		$alloptions = wp_load_alloptions();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   636
		if ( isset( $alloptions[$name] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   637
			unset( $alloptions[$name] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   638
			wp_cache_set( 'alloptions', $alloptions, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   639
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   640
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   641
		wp_cache_delete( $name, 'options' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   642
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   643
	do_action( 'deleted_option', $name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   644
	return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   645
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   646
0d28b7c10758 First commit
ymh
parents:
diff changeset
   647
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   648
 * Delete a transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
   649
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   650
 * @since 2.8.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   651
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   652
 * @subpackage Transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
   653
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   654
 * @param string $transient Transient name. Expected to not be SQL-escaped
0d28b7c10758 First commit
ymh
parents:
diff changeset
   655
 * @return bool true if successful, false otherwise
0d28b7c10758 First commit
ymh
parents:
diff changeset
   656
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   657
function delete_transient($transient) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   658
	global $_wp_using_ext_object_cache, $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   659
0d28b7c10758 First commit
ymh
parents:
diff changeset
   660
	if ( $_wp_using_ext_object_cache ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   661
		return wp_cache_delete($transient, 'transient');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   662
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   663
		$transient = '_transient_' . esc_sql($transient);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   664
		return delete_option($transient);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   665
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   666
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   667
0d28b7c10758 First commit
ymh
parents:
diff changeset
   668
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   669
 * Get the value of a transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
   670
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   671
 * If the transient does not exist or does not have a value, then the return value
0d28b7c10758 First commit
ymh
parents:
diff changeset
   672
 * will be false.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   673
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   674
 * @since 2.8.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   675
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   676
 * @subpackage Transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
   677
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   678
 * @param string $transient Transient name. Expected to not be SQL-escaped
0d28b7c10758 First commit
ymh
parents:
diff changeset
   679
 * @return mixed Value of transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
   680
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   681
function get_transient($transient) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   682
	global $_wp_using_ext_object_cache, $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   683
0d28b7c10758 First commit
ymh
parents:
diff changeset
   684
	$pre = apply_filters( 'pre_transient_' . $transient, false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   685
	if ( false !== $pre )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   686
		return $pre;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   687
0d28b7c10758 First commit
ymh
parents:
diff changeset
   688
	if ( $_wp_using_ext_object_cache ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   689
		$value = wp_cache_get($transient, 'transient');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   690
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   691
		$transient_option = '_transient_' . esc_sql($transient);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   692
		// If option is not in alloptions, it is not autoloaded and thus has a timeout
0d28b7c10758 First commit
ymh
parents:
diff changeset
   693
		$alloptions = wp_load_alloptions();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   694
		if ( !isset( $alloptions[$transient_option] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   695
			$transient_timeout = '_transient_timeout_' . esc_sql($transient);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   696
			if ( get_option($transient_timeout) < time() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   697
				delete_option($transient_option);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   698
				delete_option($transient_timeout);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   699
				return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   700
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   701
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   702
0d28b7c10758 First commit
ymh
parents:
diff changeset
   703
		$value = get_option($transient_option);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   704
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   705
0d28b7c10758 First commit
ymh
parents:
diff changeset
   706
	return apply_filters('transient_' . $transient, $value);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   707
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   708
0d28b7c10758 First commit
ymh
parents:
diff changeset
   709
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   710
 * Set/update the value of a transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
   711
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   712
 * You do not need to serialize values, if the value needs to be serialize, then
0d28b7c10758 First commit
ymh
parents:
diff changeset
   713
 * it will be serialized before it is set.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   714
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   715
 * @since 2.8.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   716
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   717
 * @subpackage Transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
   718
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   719
 * @param string $transient Transient name. Expected to not be SQL-escaped
0d28b7c10758 First commit
ymh
parents:
diff changeset
   720
 * @param mixed $value Transient value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   721
 * @param int $expiration Time until expiration in seconds, default 0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   722
 * @return bool False if value was not set and true if value was set.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   723
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   724
function set_transient($transient, $value, $expiration = 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   725
	global $_wp_using_ext_object_cache, $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   726
0d28b7c10758 First commit
ymh
parents:
diff changeset
   727
	if ( $_wp_using_ext_object_cache ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   728
		return wp_cache_set($transient, $value, 'transient', $expiration);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   729
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   730
		$transient_timeout = '_transient_timeout_' . $transient;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   731
		$transient = '_transient_' . $transient;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   732
		$safe_transient = esc_sql($transient);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   733
		if ( false === get_option( $safe_transient ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   734
			$autoload = 'yes';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   735
			if ( 0 != $expiration ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   736
				$autoload = 'no';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   737
				add_option($transient_timeout, time() + $expiration, '', 'no');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   738
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   739
			return add_option($transient, $value, '', $autoload);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   740
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   741
			if ( 0 != $expiration )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   742
				update_option($transient_timeout, time() + $expiration);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   743
			return update_option($transient, $value);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   744
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   745
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   746
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   747
0d28b7c10758 First commit
ymh
parents:
diff changeset
   748
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   749
 * Saves and restores user interface settings stored in a cookie.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   750
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   751
 * Checks if the current user-settings cookie is updated and stores it. When no
0d28b7c10758 First commit
ymh
parents:
diff changeset
   752
 * cookie exists (different browser used), adds the last saved cookie restoring
0d28b7c10758 First commit
ymh
parents:
diff changeset
   753
 * the settings.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   754
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   755
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   756
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   757
 * @since 2.7.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   758
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   759
function wp_user_settings() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   760
0d28b7c10758 First commit
ymh
parents:
diff changeset
   761
	if ( ! is_admin() )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   762
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   763
0d28b7c10758 First commit
ymh
parents:
diff changeset
   764
	if ( defined('DOING_AJAX') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   765
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   766
0d28b7c10758 First commit
ymh
parents:
diff changeset
   767
	if ( ! $user = wp_get_current_user() )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   768
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   769
0d28b7c10758 First commit
ymh
parents:
diff changeset
   770
	$settings = get_user_option( 'user-settings', $user->ID, false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   771
0d28b7c10758 First commit
ymh
parents:
diff changeset
   772
	if ( isset( $_COOKIE['wp-settings-' . $user->ID] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   773
		$cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user->ID] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   774
0d28b7c10758 First commit
ymh
parents:
diff changeset
   775
		if ( ! empty( $cookie ) && strpos( $cookie, '=' ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   776
			if ( $cookie == $settings )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   777
				return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   778
0d28b7c10758 First commit
ymh
parents:
diff changeset
   779
			$last_time = (int) get_user_option( 'user-settings-time', $user->ID, false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   780
			$saved = isset( $_COOKIE['wp-settings-time-' . $user->ID]) ? preg_replace( '/[^0-9]/', '', $_COOKIE['wp-settings-time-' . $user->ID] ) : 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   781
0d28b7c10758 First commit
ymh
parents:
diff changeset
   782
			if ( $saved > $last_time ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   783
				update_user_option( $user->ID, 'user-settings', $cookie, false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   784
				update_user_option( $user->ID, 'user-settings-time', time() - 5, false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   785
				return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   786
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   787
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   788
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   789
0d28b7c10758 First commit
ymh
parents:
diff changeset
   790
	setcookie( 'wp-settings-' . $user->ID, $settings, time() + 31536000, SITECOOKIEPATH );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   791
	setcookie( 'wp-settings-time-' . $user->ID, time(), time() + 31536000, SITECOOKIEPATH );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   792
	$_COOKIE['wp-settings-' . $user->ID] = $settings;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   793
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   794
0d28b7c10758 First commit
ymh
parents:
diff changeset
   795
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   796
 * Retrieve user interface setting value based on setting name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   797
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   798
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   799
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   800
 * @since 2.7.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   801
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   802
 * @param string $name The name of the setting.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   803
 * @param string $default Optional default value to return when $name is not set.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   804
 * @return mixed the last saved user setting or the default value/false if it doesn't exist.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   805
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   806
function get_user_setting( $name, $default = false ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   807
0d28b7c10758 First commit
ymh
parents:
diff changeset
   808
	$all = get_all_user_settings();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   809
0d28b7c10758 First commit
ymh
parents:
diff changeset
   810
	return isset($all[$name]) ? $all[$name] : $default;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   811
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   812
0d28b7c10758 First commit
ymh
parents:
diff changeset
   813
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   814
 * Add or update user interface setting.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   815
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   816
 * Both $name and $value can contain only ASCII letters, numbers and underscores.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   817
 * This function has to be used before any output has started as it calls setcookie().
0d28b7c10758 First commit
ymh
parents:
diff changeset
   818
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   819
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   820
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   821
 * @since 2.8.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   822
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   823
 * @param string $name The name of the setting.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   824
 * @param string $value The value for the setting.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   825
 * @return bool true if set successfully/false if not.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   826
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   827
function set_user_setting( $name, $value ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   828
0d28b7c10758 First commit
ymh
parents:
diff changeset
   829
	if ( headers_sent() )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   830
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   831
0d28b7c10758 First commit
ymh
parents:
diff changeset
   832
	$all = get_all_user_settings();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   833
	$name = preg_replace( '/[^A-Za-z0-9_]+/', '', $name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   834
0d28b7c10758 First commit
ymh
parents:
diff changeset
   835
	if ( empty($name) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   836
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   837
0d28b7c10758 First commit
ymh
parents:
diff changeset
   838
	$all[$name] = $value;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   839
0d28b7c10758 First commit
ymh
parents:
diff changeset
   840
	return wp_set_all_user_settings($all);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   841
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   842
0d28b7c10758 First commit
ymh
parents:
diff changeset
   843
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   844
 * Delete user interface settings.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   845
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   846
 * Deleting settings would reset them to the defaults.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   847
 * This function has to be used before any output has started as it calls setcookie().
0d28b7c10758 First commit
ymh
parents:
diff changeset
   848
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   849
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   850
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   851
 * @since 2.7.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   852
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   853
 * @param mixed $names The name or array of names of the setting to be deleted.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   854
 * @return bool true if deleted successfully/false if not.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   855
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   856
function delete_user_setting( $names ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   857
0d28b7c10758 First commit
ymh
parents:
diff changeset
   858
	if ( headers_sent() )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   859
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   860
0d28b7c10758 First commit
ymh
parents:
diff changeset
   861
	$all = get_all_user_settings();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   862
	$names = (array) $names;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   863
0d28b7c10758 First commit
ymh
parents:
diff changeset
   864
	foreach ( $names as $name ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   865
		if ( isset($all[$name]) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   866
			unset($all[$name]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   867
			$deleted = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   868
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   869
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   870
0d28b7c10758 First commit
ymh
parents:
diff changeset
   871
	if ( isset($deleted) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   872
		return wp_set_all_user_settings($all);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   873
0d28b7c10758 First commit
ymh
parents:
diff changeset
   874
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   875
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   876
0d28b7c10758 First commit
ymh
parents:
diff changeset
   877
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   878
 * Retrieve all user interface settings.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   879
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   880
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   881
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   882
 * @since 2.7.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   883
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   884
 * @return array the last saved user settings or empty array.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   885
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   886
function get_all_user_settings() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   887
	global $_updated_user_settings;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   888
0d28b7c10758 First commit
ymh
parents:
diff changeset
   889
	if ( ! $user = wp_get_current_user() )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   890
		return array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   891
0d28b7c10758 First commit
ymh
parents:
diff changeset
   892
	if ( isset($_updated_user_settings) && is_array($_updated_user_settings) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   893
		return $_updated_user_settings;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   894
0d28b7c10758 First commit
ymh
parents:
diff changeset
   895
	$all = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   896
	if ( isset($_COOKIE['wp-settings-' . $user->ID]) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   897
		$cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user->ID] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   898
0d28b7c10758 First commit
ymh
parents:
diff changeset
   899
		if ( $cookie && strpos($cookie, '=') ) // the '=' cannot be 1st char
0d28b7c10758 First commit
ymh
parents:
diff changeset
   900
			parse_str($cookie, $all);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   901
0d28b7c10758 First commit
ymh
parents:
diff changeset
   902
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   903
		$option = get_user_option('user-settings', $user->ID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   904
		if ( $option && is_string($option) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   905
			parse_str( $option, $all );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   906
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   907
0d28b7c10758 First commit
ymh
parents:
diff changeset
   908
	return $all;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   909
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   910
0d28b7c10758 First commit
ymh
parents:
diff changeset
   911
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   912
 * Private. Set all user interface settings.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   913
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   914
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   915
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   916
 * @since 2.8.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   917
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   918
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   919
function wp_set_all_user_settings($all) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   920
	global $_updated_user_settings;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   921
0d28b7c10758 First commit
ymh
parents:
diff changeset
   922
	if ( ! $user = wp_get_current_user() )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   923
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   924
0d28b7c10758 First commit
ymh
parents:
diff changeset
   925
	$_updated_user_settings = $all;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   926
	$settings = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   927
	foreach ( $all as $k => $v ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   928
		$v = preg_replace( '/[^A-Za-z0-9_]+/', '', $v );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   929
		$settings .= $k . '=' . $v . '&';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   930
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   931
0d28b7c10758 First commit
ymh
parents:
diff changeset
   932
	$settings = rtrim($settings, '&');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   933
0d28b7c10758 First commit
ymh
parents:
diff changeset
   934
	update_user_option( $user->ID, 'user-settings', $settings, false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   935
	update_user_option( $user->ID, 'user-settings-time', time(), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   936
0d28b7c10758 First commit
ymh
parents:
diff changeset
   937
	return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   938
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   939
0d28b7c10758 First commit
ymh
parents:
diff changeset
   940
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   941
 * Delete the user settings of the current user.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   942
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   943
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   944
 * @subpackage Option
0d28b7c10758 First commit
ymh
parents:
diff changeset
   945
 * @since 2.7.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
   946
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   947
function delete_all_user_settings() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   948
	if ( ! $user = wp_get_current_user() )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   949
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   950
0d28b7c10758 First commit
ymh
parents:
diff changeset
   951
	update_user_option( $user->ID, 'user-settings', '', false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   952
	setcookie('wp-settings-' . $user->ID, ' ', time() - 31536000, SITECOOKIEPATH);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   953
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   954
0d28b7c10758 First commit
ymh
parents:
diff changeset
   955
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   956
 * Serialize data, if needed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   957
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   958
 * @since 2.0.5
0d28b7c10758 First commit
ymh
parents:
diff changeset
   959
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   960
 * @param mixed $data Data that might be serialized.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   961
 * @return mixed A scalar data
0d28b7c10758 First commit
ymh
parents:
diff changeset
   962
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   963
function maybe_serialize( $data ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   964
	if ( is_array( $data ) || is_object( $data ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   965
		return serialize( $data );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   966
0d28b7c10758 First commit
ymh
parents:
diff changeset
   967
	if ( is_serialized( $data ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
   968
		return serialize( $data );
0d28b7c10758 First commit
ymh
parents:
diff changeset
   969
0d28b7c10758 First commit
ymh
parents:
diff changeset
   970
	return $data;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   971
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   972
0d28b7c10758 First commit
ymh
parents:
diff changeset
   973
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   974
 * Retrieve post title from XMLRPC XML.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   975
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   976
 * If the title element is not part of the XML, then the default post title from
0d28b7c10758 First commit
ymh
parents:
diff changeset
   977
 * the $post_default_title will be used instead.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   978
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   979
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
   980
 * @subpackage XMLRPC
0d28b7c10758 First commit
ymh
parents:
diff changeset
   981
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
   982
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   983
 * @global string $post_default_title Default XMLRPC post title.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   984
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
   985
 * @param string $content XMLRPC XML Request content
0d28b7c10758 First commit
ymh
parents:
diff changeset
   986
 * @return string Post title
0d28b7c10758 First commit
ymh
parents:
diff changeset
   987
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   988
function xmlrpc_getposttitle( $content ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   989
	global $post_default_title;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   990
	if ( preg_match( '/<title>(.+?)<\/title>/is', $content, $matchtitle ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   991
		$post_title = $matchtitle[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   992
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   993
		$post_title = $post_default_title;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   994
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   995
	return $post_title;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   996
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
   997
0d28b7c10758 First commit
ymh
parents:
diff changeset
   998
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   999
 * Retrieve the post category or categories from XMLRPC XML.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1000
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1001
 * If the category element is not found, then the default post category will be
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1002
 * used. The return type then would be what $post_default_category. If the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1003
 * category is found, then it will always be an array.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1004
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1005
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1006
 * @subpackage XMLRPC
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1007
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1008
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1009
 * @global string $post_default_category Default XMLRPC post category.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1010
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1011
 * @param string $content XMLRPC XML Request content
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1012
 * @return string|array List of categories or category name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1013
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1014
function xmlrpc_getpostcategory( $content ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1015
	global $post_default_category;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1016
	if ( preg_match( '/<category>(.+?)<\/category>/is', $content, $matchcat ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1017
		$post_category = trim( $matchcat[1], ',' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1018
		$post_category = explode( ',', $post_category );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1019
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1020
		$post_category = $post_default_category;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1021
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1022
	return $post_category;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1023
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1024
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1025
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1026
 * XMLRPC XML content without title and category elements.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1027
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1028
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1029
 * @subpackage XMLRPC
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1030
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1031
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1032
 * @param string $content XMLRPC XML Request content
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1033
 * @return string XMLRPC XML Request content without title and category elements.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1034
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1035
function xmlrpc_removepostdata( $content ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1036
	$content = preg_replace( '/<title>(.+?)<\/title>/si', '', $content );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1037
	$content = preg_replace( '/<category>(.+?)<\/category>/si', '', $content );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1038
	$content = trim( $content );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1039
	return $content;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1040
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1041
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1042
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1043
 * Open the file handle for debugging.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1044
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1045
 * This function is used for XMLRPC feature, but it is general purpose enough
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1046
 * to be used in anywhere.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1047
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1048
 * @see fopen() for mode options.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1049
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1050
 * @subpackage Debug
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1051
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1052
 * @uses $debug Used for whether debugging is enabled.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1053
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1054
 * @param string $filename File path to debug file.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1055
 * @param string $mode Same as fopen() mode parameter.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1056
 * @return bool|resource File handle. False on failure.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1057
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1058
function debug_fopen( $filename, $mode ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1059
	global $debug;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1060
	if ( 1 == $debug ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1061
		$fp = fopen( $filename, $mode );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1062
		return $fp;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1063
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1064
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1065
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1066
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1067
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1068
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1069
 * Write contents to the file used for debugging.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1070
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1071
 * Technically, this can be used to write to any file handle when the global
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1072
 * $debug is set to 1 or true.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1073
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1074
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1075
 * @subpackage Debug
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1076
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1077
 * @uses $debug Used for whether debugging is enabled.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1078
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1079
 * @param resource $fp File handle for debugging file.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1080
 * @param string $string Content to write to debug file.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1081
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1082
function debug_fwrite( $fp, $string ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1083
	global $debug;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1084
	if ( 1 == $debug )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1085
		fwrite( $fp, $string );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1086
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1087
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1088
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1089
 * Close the debugging file handle.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1090
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1091
 * Technically, this can be used to close any file handle when the global $debug
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1092
 * is set to 1 or true.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1093
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1094
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1095
 * @subpackage Debug
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1096
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1097
 * @uses $debug Used for whether debugging is enabled.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1098
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1099
 * @param resource $fp Debug File handle.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1100
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1101
function debug_fclose( $fp ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1102
	global $debug;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1103
	if ( 1 == $debug )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1104
		fclose( $fp );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1105
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1106
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1107
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1108
 * Check content for video and audio links to add as enclosures.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1109
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1110
 * Will not add enclosures that have already been added and will
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1111
 * remove enclosures that are no longer in the post. This is called as
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1112
 * pingbacks and trackbacks.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1113
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1114
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1115
 * @since 1.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1116
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1117
 * @uses $wpdb
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1118
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1119
 * @param string $content Post Content
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1120
 * @param int $post_ID Post ID
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1121
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1122
function do_enclose( $content, $post_ID ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1123
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1124
	include_once( ABSPATH . WPINC . '/class-IXR.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1125
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1126
	$log = debug_fopen( ABSPATH . 'enclosures.log', 'a' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1127
	$post_links = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1128
	debug_fwrite( $log, 'BEGIN ' . date( 'YmdHis', time() ) . "\n" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1129
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1130
	$pung = get_enclosed( $post_ID );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1131
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1132
	$ltrs = '\w';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1133
	$gunk = '/#~:.?+=&%@!\-';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1134
	$punc = '.:?\-';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1135
	$any = $ltrs . $gunk . $punc;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1136
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1137
	preg_match_all( "{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1138
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1139
	debug_fwrite( $log, 'Post contents:' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1140
	debug_fwrite( $log, $content . "\n" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1141
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1142
	foreach ( $pung as $link_test ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1143
		if ( !in_array( $link_test, $post_links_temp[0] ) ) { // link no longer in post
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1144
			$mid = $wpdb->get_col( $wpdb->prepare("SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = 'enclosure' AND meta_value LIKE (%s)", $post_ID, $link_test . '%') );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1145
			do_action( 'delete_postmeta', $mid );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1146
			$wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->postmeta WHERE post_id IN(%s)", implode( ',', $mid ) ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1147
			do_action( 'deleted_postmeta', $mid );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1148
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1149
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1150
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1151
	foreach ( (array) $post_links_temp[0] as $link_test ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1152
		if ( !in_array( $link_test, $pung ) ) { // If we haven't pung it already
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1153
			$test = parse_url( $link_test );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1154
			if ( isset( $test['query'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1155
				$post_links[] = $link_test;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1156
			elseif ( $test['path'] != '/' && $test['path'] != '' )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1157
				$post_links[] = $link_test;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1158
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1159
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1160
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1161
	foreach ( (array) $post_links as $url ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1162
		if ( $url != '' && !$wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = 'enclosure' AND meta_value LIKE (%s)", $post_ID, $url . '%' ) ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1163
			if ( $headers = wp_get_http_headers( $url) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1164
				$len = (int) $headers['content-length'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1165
				$type = $headers['content-type'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1166
				$allowed_types = array( 'video', 'audio' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1167
				if ( in_array( substr( $type, 0, strpos( $type, "/" ) ), $allowed_types ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1168
					$meta_value = "$url\n$len\n$type\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1169
					$wpdb->insert($wpdb->postmeta, array('post_id' => $post_ID, 'meta_key' => 'enclosure', 'meta_value' => $meta_value) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1170
					do_action( 'added_postmeta', $wpdb->insert_id, $post_ID, 'enclosure', $meta_value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1171
				}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1172
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1173
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1174
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1175
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1176
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1177
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1178
 * Perform a HTTP HEAD or GET request.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1179
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1180
 * If $file_path is a writable filename, this will do a GET request and write
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1181
 * the file to that path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1182
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1183
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1184
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1185
 * @param string $url URL to fetch.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1186
 * @param string|bool $file_path Optional. File path to write request to.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1187
 * @param bool $deprecated Deprecated. Not used.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1188
 * @return bool|string False on failure and string of headers if HEAD request.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1189
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1190
function wp_get_http( $url, $file_path = false, $deprecated = false ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1191
	@set_time_limit( 60 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1192
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1193
	$options = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1194
	$options['redirection'] = 5;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1195
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1196
	if ( false == $file_path )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1197
		$options['method'] = 'HEAD';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1198
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1199
		$options['method'] = 'GET';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1200
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1201
	$response = wp_remote_request($url, $options);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1202
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1203
	if ( is_wp_error( $response ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1204
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1205
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1206
	$headers = wp_remote_retrieve_headers( $response );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1207
	$headers['response'] = $response['response']['code'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1208
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1209
	if ( false == $file_path )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1210
		return $headers;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1211
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1212
	// GET request - write it to the supplied filename
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1213
	$out_fp = fopen($file_path, 'w');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1214
	if ( !$out_fp )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1215
		return $headers;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1216
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1217
	fwrite( $out_fp,  $response['body']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1218
	fclose($out_fp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1219
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1220
	return $headers;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1221
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1222
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1223
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1224
 * Retrieve HTTP Headers from URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1225
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1226
 * @since 1.5.1
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1227
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1228
 * @param string $url
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1229
 * @param bool $deprecated Not Used.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1230
 * @return bool|string False on failure, headers on success.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1231
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1232
function wp_get_http_headers( $url, $deprecated = false ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1233
	$response = wp_remote_head( $url );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1234
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1235
	if ( is_wp_error( $response ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1236
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1237
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1238
	return wp_remote_retrieve_headers( $response );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1239
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1240
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1241
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1242
 * Whether today is a new day.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1243
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1244
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1245
 * @uses $day Today
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1246
 * @uses $previousday Previous day
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1247
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1248
 * @return int 1 when new day, 0 if not a new day.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1249
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1250
function is_new_day() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1251
	global $day, $previousday;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1252
	if ( $day != $previousday )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1253
		return 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1254
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1255
		return 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1256
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1257
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1258
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1259
 * Build URL query based on an associative and, or indexed array.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1260
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1261
 * This is a convenient function for easily building url queries. It sets the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1262
 * separator to '&' and uses _http_build_query() function.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1263
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1264
 * @see _http_build_query() Used to build the query
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1265
 * @link http://us2.php.net/manual/en/function.http-build-query.php more on what
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1266
 *		http_build_query() does.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1267
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1268
 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1269
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1270
 * @param array $data URL-encode key/value pairs.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1271
 * @return string URL encoded string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1272
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1273
function build_query( $data ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1274
	return _http_build_query( $data, null, '&', '', false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1275
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1276
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1277
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1278
 * Retrieve a modified URL query string.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1279
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1280
 * You can rebuild the URL and append a new query variable to the URL query by
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1281
 * using this function. You can also retrieve the full URL with query data.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1282
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1283
 * Adding a single key & value or an associative array. Setting a key value to
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1284
 * emptystring removes the key. Omitting oldquery_or_uri uses the $_SERVER
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1285
 * value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1286
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1287
 * @since 1.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1288
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1289
 * @param mixed $param1 Either newkey or an associative_array
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1290
 * @param mixed $param2 Either newvalue or oldquery or uri
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1291
 * @param mixed $param3 Optional. Old query or uri
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1292
 * @return string New URL query string.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1293
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1294
function add_query_arg() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1295
	$ret = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1296
	if ( is_array( func_get_arg(0) ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1297
		if ( @func_num_args() < 2 || false === @func_get_arg( 1 ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1298
			$uri = $_SERVER['REQUEST_URI'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1299
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1300
			$uri = @func_get_arg( 1 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1301
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1302
		if ( @func_num_args() < 3 || false === @func_get_arg( 2 ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1303
			$uri = $_SERVER['REQUEST_URI'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1304
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1305
			$uri = @func_get_arg( 2 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1306
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1307
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1308
	if ( $frag = strstr( $uri, '#' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1309
		$uri = substr( $uri, 0, -strlen( $frag ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1310
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1311
		$frag = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1312
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1313
	if ( preg_match( '|^https?://|i', $uri, $matches ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1314
		$protocol = $matches[0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1315
		$uri = substr( $uri, strlen( $protocol ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1316
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1317
		$protocol = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1318
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1319
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1320
	if ( strpos( $uri, '?' ) !== false ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1321
		$parts = explode( '?', $uri, 2 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1322
		if ( 1 == count( $parts ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1323
			$base = '?';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1324
			$query = $parts[0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1325
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1326
			$base = $parts[0] . '?';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1327
			$query = $parts[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1328
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1329
	} elseif ( !empty( $protocol ) || strpos( $uri, '=' ) === false ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1330
		$base = $uri . '?';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1331
		$query = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1332
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1333
		$base = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1334
		$query = $uri;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1335
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1336
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1337
	wp_parse_str( $query, $qs );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1338
	$qs = urlencode_deep( $qs ); // this re-URL-encodes things that were already in the query string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1339
	if ( is_array( func_get_arg( 0 ) ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1340
		$kayvees = func_get_arg( 0 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1341
		$qs = array_merge( $qs, $kayvees );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1342
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1343
		$qs[func_get_arg( 0 )] = func_get_arg( 1 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1344
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1345
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1346
	foreach ( (array) $qs as $k => $v ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1347
		if ( $v === false )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1348
			unset( $qs[$k] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1349
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1350
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1351
	$ret = build_query( $qs );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1352
	$ret = trim( $ret, '?' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1353
	$ret = preg_replace( '#=(&|$)#', '$1', $ret );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1354
	$ret = $protocol . $base . $ret . $frag;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1355
	$ret = rtrim( $ret, '?' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1356
	return $ret;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1357
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1358
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1359
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1360
 * Removes an item or list from the query string.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1361
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1362
 * @since 1.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1363
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1364
 * @param string|array $key Query key or keys to remove.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1365
 * @param bool $query When false uses the $_SERVER value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1366
 * @return string New URL query string.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1367
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1368
function remove_query_arg( $key, $query=false ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1369
	if ( is_array( $key ) ) { // removing multiple keys
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1370
		foreach ( $key as $k )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1371
			$query = add_query_arg( $k, false, $query );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1372
		return $query;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1373
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1374
	return add_query_arg( $key, false, $query );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1375
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1376
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1377
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1378
 * Walks the array while sanitizing the contents.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1379
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1380
 * @uses $wpdb Used to sanitize values
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1381
 * @since 0.71
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1382
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1383
 * @param array $array Array to used to walk while sanitizing contents.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1384
 * @return array Sanitized $array.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1385
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1386
function add_magic_quotes( $array ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1387
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1388
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1389
	foreach ( (array) $array as $k => $v ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1390
		if ( is_array( $v ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1391
			$array[$k] = add_magic_quotes( $v );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1392
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1393
			$array[$k] = esc_sql( $v );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1394
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1395
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1396
	return $array;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1397
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1398
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1399
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1400
 * HTTP request for URI to retrieve content.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1401
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1402
 * @since 1.5.1
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1403
 * @uses wp_remote_get()
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1404
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1405
 * @param string $uri URI/URL of web page to retrieve.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1406
 * @return bool|string HTTP content. False on failure.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1407
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1408
function wp_remote_fopen( $uri ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1409
	$parsed_url = @parse_url( $uri );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1410
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1411
	if ( !$parsed_url || !is_array( $parsed_url ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1412
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1413
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1414
	$options = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1415
	$options['timeout'] = 10;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1416
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1417
	$response = wp_remote_get( $uri, $options );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1418
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1419
	if ( is_wp_error( $response ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1420
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1421
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1422
	return $response['body'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1423
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1424
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1425
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1426
 * Setup the WordPress query.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1427
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1428
 * @since 2.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1429
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1430
 * @param string $query_vars Default WP_Query arguments.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1431
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1432
function wp( $query_vars = '' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1433
	global $wp, $wp_query, $wp_the_query;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1434
	$wp->main( $query_vars );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1435
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1436
	if( !isset($wp_the_query) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1437
		$wp_the_query = $wp_query;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1438
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1439
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1440
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1441
 * Retrieve the description for the HTTP status.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1442
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1443
 * @since 2.3.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1444
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1445
 * @param int $code HTTP status code.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1446
 * @return string Empty string if not found, or description if found.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1447
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1448
function get_status_header_desc( $code ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1449
	global $wp_header_to_desc;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1450
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1451
	$code = absint( $code );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1452
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1453
	if ( !isset( $wp_header_to_desc ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1454
		$wp_header_to_desc = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1455
			100 => 'Continue',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1456
			101 => 'Switching Protocols',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1457
			102 => 'Processing',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1458
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1459
			200 => 'OK',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1460
			201 => 'Created',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1461
			202 => 'Accepted',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1462
			203 => 'Non-Authoritative Information',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1463
			204 => 'No Content',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1464
			205 => 'Reset Content',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1465
			206 => 'Partial Content',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1466
			207 => 'Multi-Status',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1467
			226 => 'IM Used',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1468
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1469
			300 => 'Multiple Choices',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1470
			301 => 'Moved Permanently',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1471
			302 => 'Found',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1472
			303 => 'See Other',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1473
			304 => 'Not Modified',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1474
			305 => 'Use Proxy',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1475
			306 => 'Reserved',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1476
			307 => 'Temporary Redirect',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1477
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1478
			400 => 'Bad Request',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1479
			401 => 'Unauthorized',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1480
			402 => 'Payment Required',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1481
			403 => 'Forbidden',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1482
			404 => 'Not Found',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1483
			405 => 'Method Not Allowed',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1484
			406 => 'Not Acceptable',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1485
			407 => 'Proxy Authentication Required',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1486
			408 => 'Request Timeout',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1487
			409 => 'Conflict',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1488
			410 => 'Gone',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1489
			411 => 'Length Required',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1490
			412 => 'Precondition Failed',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1491
			413 => 'Request Entity Too Large',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1492
			414 => 'Request-URI Too Long',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1493
			415 => 'Unsupported Media Type',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1494
			416 => 'Requested Range Not Satisfiable',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1495
			417 => 'Expectation Failed',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1496
			422 => 'Unprocessable Entity',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1497
			423 => 'Locked',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1498
			424 => 'Failed Dependency',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1499
			426 => 'Upgrade Required',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1500
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1501
			500 => 'Internal Server Error',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1502
			501 => 'Not Implemented',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1503
			502 => 'Bad Gateway',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1504
			503 => 'Service Unavailable',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1505
			504 => 'Gateway Timeout',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1506
			505 => 'HTTP Version Not Supported',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1507
			506 => 'Variant Also Negotiates',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1508
			507 => 'Insufficient Storage',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1509
			510 => 'Not Extended'
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1510
		);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1511
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1512
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1513
	if ( isset( $wp_header_to_desc[$code] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1514
		return $wp_header_to_desc[$code];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1515
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1516
		return '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1517
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1518
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1519
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1520
 * Set HTTP status header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1521
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1522
 * @since 2.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1523
 * @uses apply_filters() Calls 'status_header' on status header string, HTTP
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1524
 *		HTTP code, HTTP code description, and protocol string as separate
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1525
 *		parameters.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1526
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1527
 * @param int $header HTTP status code
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1528
 * @return null Does not return anything.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1529
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1530
function status_header( $header ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1531
	$text = get_status_header_desc( $header );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1532
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1533
	if ( empty( $text ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1534
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1535
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1536
	$protocol = $_SERVER["SERVER_PROTOCOL"];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1537
	if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1538
		$protocol = 'HTTP/1.0';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1539
	$status_header = "$protocol $header $text";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1540
	if ( function_exists( 'apply_filters' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1541
		$status_header = apply_filters( 'status_header', $status_header, $header, $text, $protocol );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1542
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1543
	return @header( $status_header, true, $header );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1544
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1545
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1546
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1547
 * Gets the header information to prevent caching.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1548
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1549
 * The several different headers cover the different ways cache prevention is handled
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1550
 * by different browsers
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1551
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1552
 * @since 2.8
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1553
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1554
 * @uses apply_filters()
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1555
 * @return array The associative array of header names and field values.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1556
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1557
function wp_get_nocache_headers() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1558
	$headers = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1559
		'Expires' => 'Wed, 11 Jan 1984 05:00:00 GMT',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1560
		'Last-Modified' => gmdate( 'D, d M Y H:i:s' ) . ' GMT',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1561
		'Cache-Control' => 'no-cache, must-revalidate, max-age=0',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1562
		'Pragma' => 'no-cache',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1563
	);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1564
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1565
	if ( function_exists('apply_filters') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1566
		$headers = apply_filters('nocache_headers', $headers);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1567
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1568
	return $headers;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1569
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1570
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1571
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1572
 * Sets the headers to prevent caching for the different browsers.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1573
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1574
 * Different browsers support different nocache headers, so several headers must
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1575
 * be sent so that all of them get the point that no caching should occur.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1576
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1577
 * @since 2.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1578
 * @uses wp_get_nocache_headers()
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1579
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1580
function nocache_headers() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1581
	$headers = wp_get_nocache_headers();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1582
	foreach( (array) $headers as $name => $field_value )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1583
		@header("{$name}: {$field_value}");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1584
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1585
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1586
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1587
 * Set the headers for caching for 10 days with JavaScript content type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1588
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1589
 * @since 2.1.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1590
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1591
function cache_javascript_headers() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1592
	$expiresOffset = 864000; // 10 days
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1593
	header( "Content-Type: text/javascript; charset=" . get_bloginfo( 'charset' ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1594
	header( "Vary: Accept-Encoding" ); // Handle proxies
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1595
	header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $expiresOffset ) . " GMT" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1596
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1597
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1598
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1599
 * Retrieve the number of database queries during the WordPress execution.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1600
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1601
 * @since 2.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1602
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1603
 * @return int Number of database queries
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1604
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1605
function get_num_queries() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1606
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1607
	return $wpdb->num_queries;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1608
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1609
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1610
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1611
 * Whether input is yes or no. Must be 'y' to be true.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1612
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1613
 * @since 1.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1614
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1615
 * @param string $yn Character string containing either 'y' or 'n'
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1616
 * @return bool True if yes, false on anything else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1617
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1618
function bool_from_yn( $yn ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1619
	return ( strtolower( $yn ) == 'y' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1620
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1621
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1622
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1623
 * Loads the feed template from the use of an action hook.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1624
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1625
 * If the feed action does not have a hook, then the function will die with a
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1626
 * message telling the visitor that the feed is not valid.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1627
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1628
 * It is better to only have one hook for each feed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1629
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1630
 * @since 2.1.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1631
 * @uses $wp_query Used to tell if the use a comment feed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1632
 * @uses do_action() Calls 'do_feed_$feed' hook, if a hook exists for the feed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1633
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1634
function do_feed() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1635
	global $wp_query;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1636
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1637
	$feed = get_query_var( 'feed' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1638
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1639
	// Remove the pad, if present.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1640
	$feed = preg_replace( '/^_+/', '', $feed );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1641
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1642
	if ( $feed == '' || $feed == 'feed' )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1643
		$feed = get_default_feed();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1644
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1645
	$hook = 'do_feed_' . $feed;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1646
	if ( !has_action($hook) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1647
		$message = sprintf( __( 'ERROR: %s is not a valid feed template' ), esc_html($feed));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1648
		wp_die($message);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1649
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1650
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1651
	do_action( $hook, $wp_query->is_comment_feed );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1652
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1653
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1654
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1655
 * Load the RDF RSS 0.91 Feed template.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1656
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1657
 * @since 2.1.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1658
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1659
function do_feed_rdf() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1660
	load_template( ABSPATH . WPINC . '/feed-rdf.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1661
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1662
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1663
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1664
 * Load the RSS 1.0 Feed Template
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1665
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1666
 * @since 2.1.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1667
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1668
function do_feed_rss() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1669
	load_template( ABSPATH . WPINC . '/feed-rss.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1670
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1671
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1672
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1673
 * Load either the RSS2 comment feed or the RSS2 posts feed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1674
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1675
 * @since 2.1.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1676
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1677
 * @param bool $for_comments True for the comment feed, false for normal feed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1678
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1679
function do_feed_rss2( $for_comments ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1680
	if ( $for_comments )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1681
		load_template( ABSPATH . WPINC . '/feed-rss2-comments.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1682
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1683
		load_template( ABSPATH . WPINC . '/feed-rss2.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1684
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1685
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1686
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1687
 * Load either Atom comment feed or Atom posts feed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1688
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1689
 * @since 2.1.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1690
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1691
 * @param bool $for_comments True for the comment feed, false for normal feed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1692
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1693
function do_feed_atom( $for_comments ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1694
	if ($for_comments)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1695
		load_template( ABSPATH . WPINC . '/feed-atom-comments.php');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1696
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1697
		load_template( ABSPATH . WPINC . '/feed-atom.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1698
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1699
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1700
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1701
 * Display the robot.txt file content.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1702
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1703
 * The echo content should be with usage of the permalinks or for creating the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1704
 * robot.txt file.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1705
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1706
 * @since 2.1.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1707
 * @uses do_action() Calls 'do_robotstxt' hook for displaying robot.txt rules.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1708
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1709
function do_robots() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1710
	header( 'Content-Type: text/plain; charset=utf-8' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1711
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1712
	do_action( 'do_robotstxt' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1713
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1714
	if ( '0' == get_option( 'blog_public' ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1715
		echo "User-agent: *\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1716
		echo "Disallow: /\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1717
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1718
		echo "User-agent: *\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1719
		echo "Disallow:\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1720
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1721
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1722
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1723
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1724
 * Test whether blog is already installed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1725
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1726
 * The cache will be checked first. If you have a cache plugin, which saves the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1727
 * cache values, then this will work. If you use the default WordPress cache,
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1728
 * and the database goes away, then you might have problems.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1729
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1730
 * Checks for the option siteurl for whether WordPress is installed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1731
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1732
 * @since 2.1.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1733
 * @uses $wpdb
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1734
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1735
 * @return bool Whether blog is already installed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1736
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1737
function is_blog_installed() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1738
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1739
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1740
	// Check cache first. If options table goes away and we have true cached, oh well.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1741
	if ( wp_cache_get( 'is_blog_installed' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1742
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1743
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1744
	$suppress = $wpdb->suppress_errors();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1745
	$alloptions = wp_load_alloptions();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1746
	// If siteurl is not set to autoload, check it specifically
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1747
	if ( !isset( $alloptions['siteurl'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1748
		$installed = $wpdb->get_var( "SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl'" );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1749
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1750
		$installed = $alloptions['siteurl'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1751
	$wpdb->suppress_errors( $suppress );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1752
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1753
	$installed = !empty( $installed );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1754
	wp_cache_set( 'is_blog_installed', $installed );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1755
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1756
	if ( $installed )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1757
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1758
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1759
	$suppress = $wpdb->suppress_errors();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1760
	$tables = $wpdb->get_col('SHOW TABLES');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1761
	$wpdb->suppress_errors( $suppress );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1762
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1763
	// Loop over the WP tables.  If none exist, then scratch install is allowed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1764
	// If one or more exist, suggest table repair since we got here because the options
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1765
	// table could not be accessed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1766
	foreach ($wpdb->tables as $table) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1767
		// If one of the WP tables exist, then we are in an insane state.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1768
		if ( in_array($wpdb->prefix . $table, $tables) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1769
			// If visiting repair.php, return true and let it take over.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1770
			if ( defined('WP_REPAIRING') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1771
				return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1772
			// Die with a DB error.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1773
			$wpdb->error = __('One or more database tables are unavailable.  The database may need to be <a href="maint/repair.php?referrer=is_blog_installed">repaired</a>.');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1774
			dead_db();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1775
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1776
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1777
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1778
	wp_cache_set( 'is_blog_installed', false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1779
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1780
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1781
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1782
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1783
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1784
 * Retrieve URL with nonce added to URL query.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1785
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1786
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1787
 * @subpackage Security
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1788
 * @since 2.0.4
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1789
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1790
 * @param string $actionurl URL to add nonce action
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1791
 * @param string $action Optional. Nonce action name
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1792
 * @return string URL with nonce action added.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1793
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1794
function wp_nonce_url( $actionurl, $action = -1 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1795
	$actionurl = str_replace( '&amp;', '&', $actionurl );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1796
	return esc_html( add_query_arg( '_wpnonce', wp_create_nonce( $action ), $actionurl ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1797
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1798
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1799
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1800
 * Retrieve or display nonce hidden field for forms.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1801
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1802
 * The nonce field is used to validate that the contents of the form came from
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1803
 * the location on the current site and not somewhere else. The nonce does not
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1804
 * offer absolute protection, but should protect against most cases. It is very
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1805
 * important to use nonce field in forms.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1806
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1807
 * If you set $echo to true and set $referer to true, then you will need to
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1808
 * retrieve the {@link wp_referer_field() wp referer field}. If you have the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1809
 * $referer set to true and are echoing the nonce field, it will also echo the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1810
 * referer field.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1811
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1812
 * The $action and $name are optional, but if you want to have better security,
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1813
 * it is strongly suggested to set those two parameters. It is easier to just
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1814
 * call the function without any parameters, because validation of the nonce
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1815
 * doesn't require any parameters, but since crackers know what the default is
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1816
 * it won't be difficult for them to find a way around your nonce and cause
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1817
 * damage.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1818
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1819
 * The input name will be whatever $name value you gave. The input value will be
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1820
 * the nonce creation value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1821
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1822
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1823
 * @subpackage Security
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1824
 * @since 2.0.4
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1825
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1826
 * @param string $action Optional. Action name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1827
 * @param string $name Optional. Nonce name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1828
 * @param bool $referer Optional, default true. Whether to set the referer field for validation.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1829
 * @param bool $echo Optional, default true. Whether to display or return hidden form field.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1830
 * @return string Nonce field.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1831
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1832
function wp_nonce_field( $action = -1, $name = "_wpnonce", $referer = true , $echo = true ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1833
	$name = esc_attr( $name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1834
	$nonce_field = '<input type="hidden" id="' . $name . '" name="' . $name . '" value="' . wp_create_nonce( $action ) . '" />';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1835
	if ( $echo )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1836
		echo $nonce_field;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1837
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1838
	if ( $referer )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1839
		wp_referer_field( $echo, 'previous' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1840
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1841
	return $nonce_field;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1842
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1843
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1844
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1845
 * Retrieve or display referer hidden field for forms.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1846
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1847
 * The referer link is the current Request URI from the server super global. The
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1848
 * input name is '_wp_http_referer', in case you wanted to check manually.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1849
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1850
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1851
 * @subpackage Security
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1852
 * @since 2.0.4
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1853
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1854
 * @param bool $echo Whether to echo or return the referer field.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1855
 * @return string Referer field.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1856
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1857
function wp_referer_field( $echo = true) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1858
	$ref = esc_attr( $_SERVER['REQUEST_URI'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1859
	$referer_field = '<input type="hidden" name="_wp_http_referer" value="'. $ref . '" />';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1860
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1861
	if ( $echo )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1862
		echo $referer_field;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1863
	return $referer_field;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1864
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1865
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1866
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1867
 * Retrieve or display original referer hidden field for forms.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1868
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1869
 * The input name is '_wp_original_http_referer' and will be either the same
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1870
 * value of {@link wp_referer_field()}, if that was posted already or it will
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1871
 * be the current page, if it doesn't exist.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1872
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1873
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1874
 * @subpackage Security
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1875
 * @since 2.0.4
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1876
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1877
 * @param bool $echo Whether to echo the original http referer
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1878
 * @param string $jump_back_to Optional, default is 'current'. Can be 'previous' or page you want to jump back to.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1879
 * @return string Original referer field.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1880
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1881
function wp_original_referer_field( $echo = true, $jump_back_to = 'current' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1882
	$jump_back_to = ( 'previous' == $jump_back_to ) ? wp_get_referer() : $_SERVER['REQUEST_URI'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1883
	$ref = ( wp_get_original_referer() ) ? wp_get_original_referer() : $jump_back_to;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1884
	$orig_referer_field = '<input type="hidden" name="_wp_original_http_referer" value="' . esc_attr( stripslashes( $ref ) ) . '" />';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1885
	if ( $echo )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1886
		echo $orig_referer_field;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1887
	return $orig_referer_field;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1888
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1889
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1890
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1891
 * Retrieve referer from '_wp_http_referer', HTTP referer, or current page respectively.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1892
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1893
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1894
 * @subpackage Security
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1895
 * @since 2.0.4
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1896
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1897
 * @return string|bool False on failure. Referer URL on success.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1898
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1899
function wp_get_referer() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1900
	$ref = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1901
	if ( ! empty( $_REQUEST['_wp_http_referer'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1902
		$ref = $_REQUEST['_wp_http_referer'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1903
	else if ( ! empty( $_SERVER['HTTP_REFERER'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1904
		$ref = $_SERVER['HTTP_REFERER'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1905
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1906
	if ( $ref !== $_SERVER['REQUEST_URI'] )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1907
		return $ref;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1908
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1909
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1910
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1911
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1912
 * Retrieve original referer that was posted, if it exists.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1913
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1914
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1915
 * @subpackage Security
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1916
 * @since 2.0.4
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1917
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1918
 * @return string|bool False if no original referer or original referer if set.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1919
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1920
function wp_get_original_referer() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1921
	if ( !empty( $_REQUEST['_wp_original_http_referer'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1922
		return $_REQUEST['_wp_original_http_referer'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1923
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1924
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1925
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1926
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1927
 * Recursive directory creation based on full path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1928
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1929
 * Will attempt to set permissions on folders.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1930
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1931
 * @since 2.0.1
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1932
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1933
 * @param string $target Full path to attempt to create.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1934
 * @return bool Whether the path was created or not. True if path already exists.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1935
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1936
function wp_mkdir_p( $target ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1937
	// from php.net/mkdir user contributed notes
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1938
	$target = str_replace( '//', '/', $target );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1939
	if ( file_exists( $target ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1940
		return @is_dir( $target );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1941
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1942
	// Attempting to create the directory may clutter up our display.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1943
	if ( @mkdir( $target ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1944
		$stat = @stat( dirname( $target ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1945
		$dir_perms = $stat['mode'] & 0007777;  // Get the permission bits.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1946
		@chmod( $target, $dir_perms );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1947
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1948
	} elseif ( is_dir( dirname( $target ) ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1949
			return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1950
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1951
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1952
	// If the above failed, attempt to create the parent node, then try again.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1953
	if ( ( $target != '/' ) && ( wp_mkdir_p( dirname( $target ) ) ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1954
		return wp_mkdir_p( $target );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1955
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1956
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1957
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1958
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1959
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1960
 * Test if a give filesystem path is absolute ('/foo/bar', 'c:\windows').
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1961
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1962
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1963
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1964
 * @param string $path File path
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1965
 * @return bool True if path is absolute, false is not absolute.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1966
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1967
function path_is_absolute( $path ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1968
	// this is definitive if true but fails if $path does not exist or contains a symbolic link
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1969
	if ( realpath($path) == $path )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1970
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1971
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1972
	if ( strlen($path) == 0 || $path{0} == '.' )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1973
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1974
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1975
	// windows allows absolute paths like this
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1976
	if ( preg_match('#^[a-zA-Z]:\\\\#', $path) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1977
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1978
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1979
	// a path starting with / or \ is absolute; anything else is relative
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1980
	return (bool) preg_match('#^[/\\\\]#', $path);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1981
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1982
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1983
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1984
 * Join two filesystem paths together (e.g. 'give me $path relative to $base').
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1985
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1986
 * If the $path is absolute, then it the full path is returned.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1987
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1988
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1989
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1990
 * @param string $base
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1991
 * @param string $path
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1992
 * @return string The path with the base or absolute path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1993
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1994
function path_join( $base, $path ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1995
	if ( path_is_absolute($path) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1996
		return $path;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1997
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1998
	return rtrim($base, '/') . '/' . ltrim($path, '/');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1999
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2000
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2001
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2002
 * Get an array containing the current upload directory's path and url.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2003
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2004
 * Checks the 'upload_path' option, which should be from the web root folder,
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2005
 * and if it isn't empty it will be used. If it is empty, then the path will be
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2006
 * 'WP_CONTENT_DIR/uploads'. If the 'UPLOADS' constant is defined, then it will
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2007
 * override the 'upload_path' option and 'WP_CONTENT_DIR/uploads' path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2008
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2009
 * The upload URL path is set either by the 'upload_url_path' option or by using
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2010
 * the 'WP_CONTENT_URL' constant and appending '/uploads' to the path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2011
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2012
 * If the 'uploads_use_yearmonth_folders' is set to true (checkbox if checked in
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2013
 * the administration settings panel), then the time will be used. The format
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2014
 * will be year first and then month.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2015
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2016
 * If the path couldn't be created, then an error will be returned with the key
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2017
 * 'error' containing the error message. The error suggests that the parent
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2018
 * directory is not writable by the server.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2019
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2020
 * On success, the returned array will have many indices:
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2021
 * 'path' - base directory and sub directory or full path to upload directory.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2022
 * 'url' - base url and sub directory or absolute URL to upload directory.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2023
 * 'subdir' - sub directory if uploads use year/month folders option is on.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2024
 * 'basedir' - path without subdir.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2025
 * 'baseurl' - URL path without subdir.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2026
 * 'error' - set to false.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2027
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2028
 * @since 2.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2029
 * @uses apply_filters() Calls 'upload_dir' on returned array.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2030
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2031
 * @param string $time Optional. Time formatted in 'yyyy/mm'.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2032
 * @return array See above for description.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2033
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2034
function wp_upload_dir( $time = null ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2035
	$siteurl = get_option( 'siteurl' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2036
	$upload_path = get_option( 'upload_path' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2037
	$upload_path = trim($upload_path);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2038
	if ( empty($upload_path) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2039
		$dir = WP_CONTENT_DIR . '/uploads';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2040
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2041
		$dir = $upload_path;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2042
		if ( 'wp-content/uploads' == $upload_path ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2043
			$dir = WP_CONTENT_DIR . '/uploads';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2044
		} elseif ( 0 !== strpos($dir, ABSPATH) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2045
			// $dir is absolute, $upload_path is (maybe) relative to ABSPATH
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2046
			$dir = path_join( ABSPATH, $dir );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2047
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2048
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2049
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2050
	if ( !$url = get_option( 'upload_url_path' ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2051
		if ( empty($upload_path) || ( 'wp-content/uploads' == $upload_path ) || ( $upload_path == $dir ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2052
			$url = WP_CONTENT_URL . '/uploads';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2053
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2054
			$url = trailingslashit( $siteurl ) . $upload_path;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2055
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2056
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2057
	if ( defined('UPLOADS') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2058
		$dir = ABSPATH . UPLOADS;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2059
		$url = trailingslashit( $siteurl ) . UPLOADS;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2060
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2061
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2062
	$bdir = $dir;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2063
	$burl = $url;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2064
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2065
	$subdir = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2066
	if ( get_option( 'uploads_use_yearmonth_folders' ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2067
		// Generate the yearly and monthly dirs
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2068
		if ( !$time )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2069
			$time = current_time( 'mysql' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2070
		$y = substr( $time, 0, 4 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2071
		$m = substr( $time, 5, 2 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2072
		$subdir = "/$y/$m";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2073
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2074
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2075
	$dir .= $subdir;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2076
	$url .= $subdir;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2077
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2078
	$uploads = apply_filters( 'upload_dir', array( 'path' => $dir, 'url' => $url, 'subdir' => $subdir, 'basedir' => $bdir, 'baseurl' => $burl, 'error' => false ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2079
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2080
	// Make sure we have an uploads dir
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2081
	if ( ! wp_mkdir_p( $uploads['path'] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2082
		$message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $uploads['path'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2083
		return array( 'error' => $message );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2084
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2085
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2086
	return $uploads;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2087
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2088
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2089
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2090
 * Get a filename that is sanitized and unique for the given directory.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2091
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2092
 * If the filename is not unique, then a number will be added to the filename
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2093
 * before the extension, and will continue adding numbers until the filename is
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2094
 * unique.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2095
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2096
 * The callback must accept two parameters, the first one is the directory and
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2097
 * the second is the filename. The callback must be a function.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2098
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2099
 * @since 2.5
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2100
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2101
 * @param string $dir
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2102
 * @param string $filename
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2103
 * @param string $unique_filename_callback Function name, must be a function.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2104
 * @return string New filename, if given wasn't unique.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2105
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2106
function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2107
	// sanitize the file name before we begin processing
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2108
	$filename = sanitize_file_name($filename);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2109
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2110
	// separate the filename into a name and extension
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2111
	$info = pathinfo($filename);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2112
	$ext = !empty($info['extension']) ? '.' . $info['extension'] : '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2113
	$name = basename($filename, $ext);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2114
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2115
	// edge case: if file is named '.ext', treat as an empty name
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2116
	if( $name === $ext )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2117
		$name = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2118
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2119
	// Increment the file number until we have a unique file to save in $dir. Use $override['unique_filename_callback'] if supplied.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2120
	if ( $unique_filename_callback && function_exists( $unique_filename_callback ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2121
		$filename = $unique_filename_callback( $dir, $name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2122
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2123
		$number = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2124
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2125
		// change '.ext' to lower case
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2126
		if ( $ext && strtolower($ext) != $ext ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2127
			$ext2 = strtolower($ext);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2128
			$filename2 = preg_replace( '|' . preg_quote($ext) . '$|', $ext2, $filename );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2129
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2130
			// check for both lower and upper case extension or image sub-sizes may be overwritten
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2131
			while ( file_exists($dir . "/$filename") || file_exists($dir . "/$filename2") ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2132
				$new_number = $number + 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2133
				$filename = str_replace( "$number$ext", "$new_number$ext", $filename );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2134
				$filename2 = str_replace( "$number$ext2", "$new_number$ext2", $filename2 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2135
				$number = $new_number;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2136
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2137
			return $filename2;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2138
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2139
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2140
		while ( file_exists( $dir . "/$filename" ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2141
			if ( '' == "$number$ext" )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2142
				$filename = $filename . ++$number . $ext;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2143
			else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2144
				$filename = str_replace( "$number$ext", ++$number . $ext, $filename );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2145
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2146
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2147
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2148
	return $filename;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2149
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2150
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2151
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2152
 * Create a file in the upload folder with given content.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2153
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2154
 * If there is an error, then the key 'error' will exist with the error message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2155
 * If success, then the key 'file' will have the unique file path, the 'url' key
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2156
 * will have the link to the new file. and the 'error' key will be set to false.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2157
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2158
 * This function will not move an uploaded file to the upload folder. It will
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2159
 * create a new file with the content in $bits parameter. If you move the upload
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2160
 * file, read the content of the uploaded file, and then you can give the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2161
 * filename and content to this function, which will add it to the upload
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2162
 * folder.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2163
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2164
 * The permissions will be set on the new file automatically by this function.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2165
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2166
 * @since 2.0.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2167
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2168
 * @param string $name
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2169
 * @param null $deprecated Not used. Set to null.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2170
 * @param mixed $bits File content
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2171
 * @param string $time Optional. Time formatted in 'yyyy/mm'.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2172
 * @return array
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2173
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2174
function wp_upload_bits( $name, $deprecated, $bits, $time = null ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2175
	if ( empty( $name ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2176
		return array( 'error' => __( 'Empty filename' ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2177
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2178
	$wp_filetype = wp_check_filetype( $name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2179
	if ( !$wp_filetype['ext'] )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2180
		return array( 'error' => __( 'Invalid file type' ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2181
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2182
	$upload = wp_upload_dir( $time );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2183
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2184
	if ( $upload['error'] !== false )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2185
		return $upload;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2186
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2187
	$filename = wp_unique_filename( $upload['path'], $name );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2188
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2189
	$new_file = $upload['path'] . "/$filename";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2190
	if ( ! wp_mkdir_p( dirname( $new_file ) ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2191
		$message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), dirname( $new_file ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2192
		return array( 'error' => $message );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2193
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2194
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2195
	$ifp = @ fopen( $new_file, 'wb' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2196
	if ( ! $ifp )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2197
		return array( 'error' => sprintf( __( 'Could not write file %s' ), $new_file ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2198
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2199
	@fwrite( $ifp, $bits );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2200
	fclose( $ifp );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2201
	// Set correct file permissions
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2202
	$stat = @ stat( dirname( $new_file ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2203
	$perms = $stat['mode'] & 0007777;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2204
	$perms = $perms & 0000666;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2205
	@ chmod( $new_file, $perms );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2206
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2207
	// Compute the URL
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2208
	$url = $upload['url'] . "/$filename";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2209
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2210
	return array( 'file' => $new_file, 'url' => $url, 'error' => false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2211
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2212
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2213
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2214
 * Retrieve the file type based on the extension name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2215
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2216
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2217
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2218
 * @uses apply_filters() Calls 'ext2type' hook on default supported types.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2219
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2220
 * @param string $ext The extension to search.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2221
 * @return string|null The file type, example: audio, video, document, spreadsheet, etc. Null if not found.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2222
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2223
function wp_ext2type( $ext ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2224
	$ext2type = apply_filters('ext2type', array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2225
		'audio' => array('aac','ac3','aif','aiff','mp1','mp2','mp3','m3a','m4a','m4b','ogg','ram','wav','wma'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2226
		'video' => array('asf','avi','divx','dv','mov','mpg','mpeg','mp4','mpv','ogm','qt','rm','vob','wmv', 'm4v'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2227
		'document' => array('doc','docx','pages','odt','rtf','pdf'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2228
		'spreadsheet' => array('xls','xlsx','numbers','ods'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2229
		'interactive' => array('ppt','pptx','key','odp','swf'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2230
		'text' => array('txt'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2231
		'archive' => array('tar','bz2','gz','cab','dmg','rar','sea','sit','sqx','zip'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2232
		'code' => array('css','html','php','js'),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2233
	));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2234
	foreach ( $ext2type as $type => $exts )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2235
		if ( in_array($ext, $exts) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2236
			return $type;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2237
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2238
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2239
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2240
 * Retrieve the file type from the file name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2241
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2242
 * You can optionally define the mime array, if needed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2243
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2244
 * @since 2.0.4
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2245
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2246
 * @param string $filename File name or path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2247
 * @param array $mimes Optional. Key is the file extension with value as the mime type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2248
 * @return array Values with extension first and mime type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2249
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2250
function wp_check_filetype( $filename, $mimes = null ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2251
	if ( empty($mimes) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2252
		$mimes = get_allowed_mime_types();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2253
	$type = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2254
	$ext = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2255
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2256
	foreach ( $mimes as $ext_preg => $mime_match ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2257
		$ext_preg = '!\.(' . $ext_preg . ')$!i';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2258
		if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2259
			$type = $mime_match;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2260
			$ext = $ext_matches[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2261
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2262
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2263
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2264
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2265
	return compact( 'ext', 'type' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2266
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2267
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2268
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2269
 * Retrieve list of allowed mime types and file extensions.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2270
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2271
 * @since 2.8.6
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2272
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2273
 * @return array Array of mime types keyed by the file extension regex corresponding to those types.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2274
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2275
function get_allowed_mime_types() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2276
	static $mimes = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2277
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2278
	if ( !$mimes ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2279
		// Accepted MIME types are set here as PCRE unless provided.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2280
		$mimes = apply_filters( 'upload_mimes', array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2281
		'jpg|jpeg|jpe' => 'image/jpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2282
		'gif' => 'image/gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2283
		'png' => 'image/png',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2284
		'bmp' => 'image/bmp',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2285
		'tif|tiff' => 'image/tiff',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2286
		'ico' => 'image/x-icon',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2287
		'asf|asx|wax|wmv|wmx' => 'video/asf',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2288
		'avi' => 'video/avi',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2289
		'divx' => 'video/divx',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2290
		'flv' => 'video/x-flv',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2291
		'mov|qt' => 'video/quicktime',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2292
		'mpeg|mpg|mpe' => 'video/mpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2293
		'txt|c|cc|h' => 'text/plain',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2294
		'rtx' => 'text/richtext',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2295
		'css' => 'text/css',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2296
		'htm|html' => 'text/html',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2297
		'mp3|m4a' => 'audio/mpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2298
		'mp4|m4v' => 'video/mp4',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2299
		'ra|ram' => 'audio/x-realaudio',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2300
		'wav' => 'audio/wav',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2301
		'ogg' => 'audio/ogg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2302
		'mid|midi' => 'audio/midi',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2303
		'wma' => 'audio/wma',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2304
		'rtf' => 'application/rtf',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2305
		'js' => 'application/javascript',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2306
		'pdf' => 'application/pdf',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2307
		'doc|docx' => 'application/msword',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2308
		'pot|pps|ppt|pptx' => 'application/vnd.ms-powerpoint',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2309
		'wri' => 'application/vnd.ms-write',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2310
		'xla|xls|xlsx|xlt|xlw' => 'application/vnd.ms-excel',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2311
		'mdb' => 'application/vnd.ms-access',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2312
		'mpp' => 'application/vnd.ms-project',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2313
		'swf' => 'application/x-shockwave-flash',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2314
		'class' => 'application/java',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2315
		'tar' => 'application/x-tar',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2316
		'zip' => 'application/zip',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2317
		'gz|gzip' => 'application/x-gzip',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2318
		'exe' => 'application/x-msdownload',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2319
		// openoffice formats
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2320
		'odt' => 'application/vnd.oasis.opendocument.text',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2321
		'odp' => 'application/vnd.oasis.opendocument.presentation',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2322
		'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2323
		'odg' => 'application/vnd.oasis.opendocument.graphics',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2324
		'odc' => 'application/vnd.oasis.opendocument.chart',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2325
		'odb' => 'application/vnd.oasis.opendocument.database',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2326
		'odf' => 'application/vnd.oasis.opendocument.formula',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2327
		) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2328
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2329
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2330
	return $mimes;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2331
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2332
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2333
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2334
 * Retrieve nonce action "Are you sure" message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2335
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2336
 * The action is split by verb and noun. The action format is as follows:
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2337
 * verb-action_extra. The verb is before the first dash and has the format of
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2338
 * letters and no spaces and numbers. The noun is after the dash and before the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2339
 * underscore, if an underscore exists. The noun is also only letters.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2340
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2341
 * The filter will be called for any action, which is not defined by WordPress.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2342
 * You may use the filter for your plugin to explain nonce actions to the user,
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2343
 * when they get the "Are you sure?" message. The filter is in the format of
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2344
 * 'explain_nonce_$verb-$noun' with the $verb replaced by the found verb and the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2345
 * $noun replaced by the found noun. The two parameters that are given to the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2346
 * hook are the localized "Are you sure you want to do this?" message with the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2347
 * extra text (the text after the underscore).
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2348
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2349
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2350
 * @subpackage Security
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2351
 * @since 2.0.4
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2352
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2353
 * @param string $action Nonce action.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2354
 * @return string Are you sure message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2355
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2356
function wp_explain_nonce( $action ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2357
	if ( $action !== -1 && preg_match( '/([a-z]+)-([a-z]+)(_(.+))?/', $action, $matches ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2358
		$verb = $matches[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2359
		$noun = $matches[2];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2360
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2361
		$trans = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2362
		$trans['update']['attachment'] = array( __( 'Your attempt to edit this attachment: &#8220;%s&#8221; has failed.' ), 'get_the_title' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2363
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2364
		$trans['add']['category']      = array( __( 'Your attempt to add this category has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2365
		$trans['delete']['category']   = array( __( 'Your attempt to delete this category: &#8220;%s&#8221; has failed.' ), 'get_cat_name' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2366
		$trans['update']['category']   = array( __( 'Your attempt to edit this category: &#8220;%s&#8221; has failed.' ), 'get_cat_name' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2367
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2368
		$trans['delete']['comment']    = array( __( 'Your attempt to delete this comment: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2369
		$trans['unapprove']['comment'] = array( __( 'Your attempt to unapprove this comment: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2370
		$trans['approve']['comment']   = array( __( 'Your attempt to approve this comment: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2371
		$trans['update']['comment']    = array( __( 'Your attempt to edit this comment: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2372
		$trans['bulk']['comments']     = array( __( 'Your attempt to bulk modify comments has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2373
		$trans['moderate']['comments'] = array( __( 'Your attempt to moderate comments has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2374
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2375
		$trans['add']['bookmark']      = array( __( 'Your attempt to add this link has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2376
		$trans['delete']['bookmark']   = array( __( 'Your attempt to delete this link: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2377
		$trans['update']['bookmark']   = array( __( 'Your attempt to edit this link: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2378
		$trans['bulk']['bookmarks']    = array( __( 'Your attempt to bulk modify links has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2379
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2380
		$trans['add']['page']          = array( __( 'Your attempt to add this page has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2381
		$trans['delete']['page']       = array( __( 'Your attempt to delete this page: &#8220;%s&#8221; has failed.' ), 'get_the_title' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2382
		$trans['update']['page']       = array( __( 'Your attempt to edit this page: &#8220;%s&#8221; has failed.' ), 'get_the_title' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2383
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2384
		$trans['edit']['plugin']       = array( __( 'Your attempt to edit this plugin file: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2385
		$trans['activate']['plugin']   = array( __( 'Your attempt to activate this plugin: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2386
		$trans['deactivate']['plugin'] = array( __( 'Your attempt to deactivate this plugin: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2387
		$trans['upgrade']['plugin']    = array( __( 'Your attempt to upgrade this plugin: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2388
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2389
		$trans['add']['post']          = array( __( 'Your attempt to add this post has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2390
		$trans['delete']['post']       = array( __( 'Your attempt to delete this post: &#8220;%s&#8221; has failed.' ), 'get_the_title' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2391
		$trans['update']['post']       = array( __( 'Your attempt to edit this post: &#8220;%s&#8221; has failed.' ), 'get_the_title' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2392
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2393
		$trans['add']['user']          = array( __( 'Your attempt to add this user has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2394
		$trans['delete']['users']      = array( __( 'Your attempt to delete users has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2395
		$trans['bulk']['users']        = array( __( 'Your attempt to bulk modify users has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2396
		$trans['update']['user']       = array( __( 'Your attempt to edit this user: &#8220;%s&#8221; has failed.' ), 'get_the_author_meta', 'display_name' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2397
		$trans['update']['profile']    = array( __( 'Your attempt to modify the profile for: &#8220;%s&#8221; has failed.' ), 'get_the_author_meta', 'display_name' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2398
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2399
		$trans['update']['options']    = array( __( 'Your attempt to edit your settings has failed.' ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2400
		$trans['update']['permalink']  = array( __( 'Your attempt to change your permalink structure to: %s has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2401
		$trans['edit']['file']         = array( __( 'Your attempt to edit this file: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2402
		$trans['edit']['theme']        = array( __( 'Your attempt to edit this theme file: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2403
		$trans['switch']['theme']      = array( __( 'Your attempt to switch to this theme: &#8220;%s&#8221; has failed.' ), 'use_id' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2404
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2405
		$trans['log']['out']           = array( sprintf( __( 'You are attempting to log out of %s' ), get_bloginfo( 'sitename' ) ), false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2406
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2407
		if ( isset( $trans[$verb][$noun] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2408
			if ( !empty( $trans[$verb][$noun][1] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2409
				$lookup = $trans[$verb][$noun][1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2410
				if ( isset($trans[$verb][$noun][2]) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2411
					$lookup_value = $trans[$verb][$noun][2];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2412
				$object = $matches[4];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2413
				if ( 'use_id' != $lookup ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2414
					if ( isset( $lookup_value ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2415
						$object = call_user_func( $lookup, $lookup_value, $object );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2416
					else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2417
						$object = call_user_func( $lookup, $object );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2418
				}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2419
				return sprintf( $trans[$verb][$noun][0], esc_html($object) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2420
			} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2421
				return $trans[$verb][$noun][0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2422
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2423
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2424
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2425
		return apply_filters( 'explain_nonce_' . $verb . '-' . $noun, __( 'Are you sure you want to do this?' ), isset($matches[4]) ? $matches[4] : '' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2426
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2427
		return apply_filters( 'explain_nonce_' . $action, __( 'Are you sure you want to do this?' ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2428
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2429
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2430
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2431
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2432
 * Display "Are You Sure" message to confirm the action being taken.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2433
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2434
 * If the action has the nonce explain message, then it will be displayed along
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2435
 * with the "Are you sure?" message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2436
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2437
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2438
 * @subpackage Security
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2439
 * @since 2.0.4
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2440
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2441
 * @param string $action The nonce action.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2442
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2443
function wp_nonce_ays( $action ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2444
	$title = __( 'WordPress Failure Notice' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2445
	$html = esc_html( wp_explain_nonce( $action ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2446
	if ( 'log-out' == $action )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2447
		$html .= "</p><p>" . sprintf( __( "Do you really want to <a href='%s'>log out</a>?"), wp_logout_url() );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2448
	elseif ( wp_get_referer() )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2449
		$html .= "</p><p><a href='" . esc_url( remove_query_arg( 'updated', wp_get_referer() ) ) . "'>" . __( 'Please try again.' ) . "</a>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2450
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2451
	wp_die( $html, $title, array('response' => 403) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2452
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2453
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2454
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2455
 * Kill WordPress execution and display HTML message with error message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2456
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2457
 * Call this function complements the die() PHP function. The difference is that
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2458
 * HTML will be displayed to the user. It is recommended to use this function
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2459
 * only, when the execution should not continue any further. It is not
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2460
 * recommended to call this function very often and try to handle as many errors
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2461
 * as possible siliently.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2462
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2463
 * @since 2.0.4
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2464
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2465
 * @param string $message Error message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2466
 * @param string $title Error title.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2467
 * @param string|array $args Optional arguements to control behaviour.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2468
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2469
function wp_die( $message, $title = '', $args = array() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2470
	global $wp_locale;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2471
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2472
	$defaults = array( 'response' => 500 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2473
	$r = wp_parse_args($args, $defaults);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2474
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2475
	$have_gettext = function_exists('__');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2476
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2477
	if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2478
		if ( empty( $title ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2479
			$error_data = $message->get_error_data();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2480
			if ( is_array( $error_data ) && isset( $error_data['title'] ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2481
				$title = $error_data['title'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2482
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2483
		$errors = $message->get_error_messages();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2484
		switch ( count( $errors ) ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2485
		case 0 :
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2486
			$message = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2487
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2488
		case 1 :
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2489
			$message = "<p>{$errors[0]}</p>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2490
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2491
		default :
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2492
			$message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2493
			break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2494
		endswitch;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2495
	} elseif ( is_string( $message ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2496
		$message = "<p>$message</p>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2497
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2498
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2499
	if ( isset( $r['back_link'] ) && $r['back_link'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2500
		$back_text = $have_gettext? __('&laquo; Back') : '&laquo; Back';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2501
		$message .= "\n<p><a href='javascript:history.back()'>$back_text</p>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2502
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2503
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2504
	if ( defined( 'WP_SITEURL' ) && '' != WP_SITEURL )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2505
		$admin_dir = WP_SITEURL . '/wp-admin/';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2506
	elseif ( function_exists( 'get_bloginfo' ) && '' != get_bloginfo( 'wpurl' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2507
		$admin_dir = get_bloginfo( 'wpurl' ) . '/wp-admin/';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2508
	elseif ( strpos( $_SERVER['PHP_SELF'], 'wp-admin' ) !== false )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2509
		$admin_dir = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2510
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2511
		$admin_dir = 'wp-admin/';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2512
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2513
	if ( !function_exists( 'did_action' ) || !did_action( 'admin_head' ) ) :
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2514
	if( !headers_sent() ){
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2515
		status_header( $r['response'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2516
		nocache_headers();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2517
		header( 'Content-Type: text/html; charset=utf-8' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2518
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2519
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2520
	if ( empty($title) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2521
		$title = $have_gettext? __('WordPress &rsaquo; Error') : 'WordPress &rsaquo; Error';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2522
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2523
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2524
	$text_direction = 'ltr';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2525
	if ( isset($r['text_direction']) && $r['text_direction'] == 'rtl' ) $text_direction = 'rtl';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2526
	if ( ( $wp_locale ) && ( 'rtl' == $wp_locale->text_direction ) ) $text_direction = 'rtl';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2527
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2528
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2529
<!-- Ticket #11289, IE bug fix: always pad the error page with enough characters such that it is greater than 512 bytes, even after gzip compression abcdefghijklmnopqrstuvwxyz1234567890aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz11223344556677889900abacbcbdcdcededfefegfgfhghgihihjijikjkjlklkmlmlnmnmononpopoqpqprqrqsrsrtstsubcbcdcdedefefgfabcadefbghicjkldmnoepqrfstugvwxhyz1i234j567k890laabmbccnddeoeffpgghqhiirjjksklltmmnunoovppqwqrrxsstytuuzvvw0wxx1yyz2z113223434455666777889890091abc2def3ghi4jkl5mno6pqr7stu8vwx9yz11aab2bcc3dd4ee5ff6gg7hh8ii9j0jk1kl2lmm3nnoo4p5pq6qrr7ss8tt9uuvv0wwx1x2yyzz13aba4cbcb5dcdc6dedfef8egf9gfh0ghg1ihi2hji3jik4jkj5lkl6kml7mln8mnm9ono -->
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2530
<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) ) language_attributes(); ?>>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2531
<head>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2532
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2533
	<title><?php echo $title ?></title>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2534
	<link rel="stylesheet" href="<?php echo $admin_dir; ?>css/install.css" type="text/css" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2535
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2536
if ( 'rtl' == $text_direction ) : ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2537
	<link rel="stylesheet" href="<?php echo $admin_dir; ?>css/install-rtl.css" type="text/css" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2538
<?php endif; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2539
</head>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2540
<body id="error-page">
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2541
<?php endif; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2542
	<?php echo $message; ?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2543
</body>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2544
</html>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2545
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2546
	die();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2547
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2548
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2549
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2550
 * Retrieve the WordPress home page URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2551
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2552
 * If the constant named 'WP_HOME' exists, then it willl be used and returned by
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2553
 * the function. This can be used to counter the redirection on your local
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2554
 * development environment.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2555
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2556
 * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2557
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2558
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2559
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2560
 * @param string $url URL for the home location
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2561
 * @return string Homepage location.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2562
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2563
function _config_wp_home( $url = '' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2564
	if ( defined( 'WP_HOME' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2565
		return WP_HOME;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2566
	return $url;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2567
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2568
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2569
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2570
 * Retrieve the WordPress site URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2571
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2572
 * If the constant named 'WP_SITEURL' is defined, then the value in that
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2573
 * constant will always be returned. This can be used for debugging a site on
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2574
 * your localhost while not having to change the database to your URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2575
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2576
 * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2577
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2578
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2579
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2580
 * @param string $url URL to set the WordPress site location.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2581
 * @return string The WordPress Site URL
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2582
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2583
function _config_wp_siteurl( $url = '' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2584
	if ( defined( 'WP_SITEURL' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2585
		return WP_SITEURL;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2586
	return $url;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2587
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2588
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2589
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2590
 * Set the localized direction for MCE plugin.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2591
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2592
 * Will only set the direction to 'rtl', if the WordPress locale has the text
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2593
 * direction set to 'rtl'.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2594
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2595
 * Fills in the 'directionality', 'plugins', and 'theme_advanced_button1' array
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2596
 * keys. These keys are then returned in the $input array.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2597
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2598
 * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2599
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2600
 * @subpackage MCE
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2601
 * @since 2.1.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2602
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2603
 * @param array $input MCE plugin array.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2604
 * @return array Direction set for 'rtl', if needed by locale.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2605
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2606
function _mce_set_direction( $input ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2607
	global $wp_locale;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2608
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2609
	if ( 'rtl' == $wp_locale->text_direction ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2610
		$input['directionality'] = 'rtl';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2611
		$input['plugins'] .= ',directionality';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2612
		$input['theme_advanced_buttons1'] .= ',ltr';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2613
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2614
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2615
	return $input;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2616
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2617
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2618
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2619
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2620
 * Convert smiley code to the icon graphic file equivalent.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2621
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2622
 * You can turn off smilies, by going to the write setting screen and unchecking
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2623
 * the box, or by setting 'use_smilies' option to false or removing the option.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2624
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2625
 * Plugins may override the default smiley list by setting the $wpsmiliestrans
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2626
 * to an array, with the key the code the blogger types in and the value the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2627
 * image file.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2628
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2629
 * The $wp_smiliessearch global is for the regular expression and is set each
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2630
 * time the function is called.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2631
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2632
 * The full list of smilies can be found in the function and won't be listed in
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2633
 * the description. Probably should create a Codex page for it, so that it is
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2634
 * available.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2635
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2636
 * @global array $wpsmiliestrans
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2637
 * @global array $wp_smiliessearch
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2638
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2639
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2640
function smilies_init() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2641
	global $wpsmiliestrans, $wp_smiliessearch;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2642
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2643
	// don't bother setting up smilies if they are disabled
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2644
	if ( !get_option( 'use_smilies' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2645
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2646
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2647
	if ( !isset( $wpsmiliestrans ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2648
		$wpsmiliestrans = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2649
		':mrgreen:' => 'icon_mrgreen.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2650
		':neutral:' => 'icon_neutral.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2651
		':twisted:' => 'icon_twisted.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2652
		  ':arrow:' => 'icon_arrow.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2653
		  ':shock:' => 'icon_eek.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2654
		  ':smile:' => 'icon_smile.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2655
		    ':???:' => 'icon_confused.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2656
		   ':cool:' => 'icon_cool.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2657
		   ':evil:' => 'icon_evil.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2658
		   ':grin:' => 'icon_biggrin.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2659
		   ':idea:' => 'icon_idea.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2660
		   ':oops:' => 'icon_redface.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2661
		   ':razz:' => 'icon_razz.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2662
		   ':roll:' => 'icon_rolleyes.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2663
		   ':wink:' => 'icon_wink.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2664
		    ':cry:' => 'icon_cry.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2665
		    ':eek:' => 'icon_surprised.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2666
		    ':lol:' => 'icon_lol.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2667
		    ':mad:' => 'icon_mad.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2668
		    ':sad:' => 'icon_sad.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2669
		      '8-)' => 'icon_cool.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2670
		      '8-O' => 'icon_eek.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2671
		      ':-(' => 'icon_sad.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2672
		      ':-)' => 'icon_smile.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2673
		      ':-?' => 'icon_confused.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2674
		      ':-D' => 'icon_biggrin.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2675
		      ':-P' => 'icon_razz.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2676
		      ':-o' => 'icon_surprised.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2677
		      ':-x' => 'icon_mad.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2678
		      ':-|' => 'icon_neutral.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2679
		      ';-)' => 'icon_wink.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2680
		       '8)' => 'icon_cool.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2681
		       '8O' => 'icon_eek.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2682
		       ':(' => 'icon_sad.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2683
		       ':)' => 'icon_smile.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2684
		       ':?' => 'icon_confused.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2685
		       ':D' => 'icon_biggrin.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2686
		       ':P' => 'icon_razz.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2687
		       ':o' => 'icon_surprised.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2688
		       ':x' => 'icon_mad.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2689
		       ':|' => 'icon_neutral.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2690
		       ';)' => 'icon_wink.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2691
		      ':!:' => 'icon_exclaim.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2692
		      ':?:' => 'icon_question.gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2693
		);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2694
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2695
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2696
	if (count($wpsmiliestrans) == 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2697
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2698
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2699
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2700
	/*
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2701
	 * NOTE: we sort the smilies in reverse key order. This is to make sure
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2702
	 * we match the longest possible smilie (:???: vs :?) as the regular
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2703
	 * expression used below is first-match
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2704
	 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2705
	krsort($wpsmiliestrans);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2706
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2707
	$wp_smiliessearch = '/(?:\s|^)';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2708
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2709
	$subchar = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2710
	foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2711
		$firstchar = substr($smiley, 0, 1);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2712
		$rest = substr($smiley, 1);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2713
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2714
		// new subpattern?
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2715
		if ($firstchar != $subchar) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2716
			if ($subchar != '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2717
				$wp_smiliessearch .= ')|(?:\s|^)';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2718
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2719
			$subchar = $firstchar;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2720
			$wp_smiliessearch .= preg_quote($firstchar, '/') . '(?:';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2721
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2722
			$wp_smiliessearch .= '|';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2723
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2724
		$wp_smiliessearch .= preg_quote($rest, '/');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2725
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2726
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2727
	$wp_smiliessearch .= ')(?:\s|$)/m';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2728
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2729
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2730
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2731
 * Merge user defined arguments into defaults array.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2732
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2733
 * This function is used throughout WordPress to allow for both string or array
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2734
 * to be merged into another array.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2735
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2736
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2737
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2738
 * @param string|array $args Value to merge with $defaults
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2739
 * @param array $defaults Array that serves as the defaults.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2740
 * @return array Merged user defined values with defaults.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2741
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2742
function wp_parse_args( $args, $defaults = '' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2743
	if ( is_object( $args ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2744
		$r = get_object_vars( $args );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2745
	elseif ( is_array( $args ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2746
		$r =& $args;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2747
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2748
		wp_parse_str( $args, $r );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2749
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2750
	if ( is_array( $defaults ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2751
		return array_merge( $defaults, $r );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2752
	return $r;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2753
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2754
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2755
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2756
 * Determines if default embed handlers should be loaded.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2757
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2758
 * Checks to make sure that the embeds library hasn't already been loaded. If
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2759
 * it hasn't, then it will load the embeds library.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2760
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2761
 * @since 2.9
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2762
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2763
function wp_maybe_load_embeds() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2764
	if ( ! apply_filters('load_default_embeds', true) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2765
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2766
	require_once( ABSPATH . WPINC . '/default-embeds.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2767
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2768
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2769
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2770
 * Determines if Widgets library should be loaded.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2771
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2772
 * Checks to make sure that the widgets library hasn't already been loaded. If
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2773
 * it hasn't, then it will load the widgets library and run an action hook.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2774
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2775
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2776
 * @uses add_action() Calls '_admin_menu' hook with 'wp_widgets_add_menu' value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2777
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2778
function wp_maybe_load_widgets() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2779
	if ( ! apply_filters('load_default_widgets', true) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2780
		return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2781
	require_once( ABSPATH . WPINC . '/default-widgets.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2782
	add_action( '_admin_menu', 'wp_widgets_add_menu' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2783
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2784
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2785
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2786
 * Append the Widgets menu to the themes main menu.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2787
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2788
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2789
 * @uses $submenu The administration submenu list.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2790
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2791
function wp_widgets_add_menu() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2792
	global $submenu;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2793
	$submenu['themes.php'][7] = array( __( 'Widgets' ), 'switch_themes', 'widgets.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2794
	ksort( $submenu['themes.php'], SORT_NUMERIC );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2795
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2796
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2797
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2798
 * Flush all output buffers for PHP 5.2.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2799
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2800
 * Make sure all output buffers are flushed before our singletons our destroyed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2801
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2802
 * @since 2.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2803
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2804
function wp_ob_end_flush_all() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2805
	$levels = ob_get_level();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2806
	for ($i=0; $i<$levels; $i++)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2807
		ob_end_flush();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2808
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2809
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2810
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2811
 * Load the correct database class file.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2812
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2813
 * This function is used to load the database class file either at runtime or by
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2814
 * wp-admin/setup-config.php We must globalise $wpdb to ensure that it is
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2815
 * defined globally by the inline code in wp-db.php.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2816
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2817
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2818
 * @global $wpdb WordPress Database Object
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2819
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2820
function require_wp_db() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2821
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2822
	if ( file_exists( WP_CONTENT_DIR . '/db.php' ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2823
		require_once( WP_CONTENT_DIR . '/db.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2824
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2825
		require_once( ABSPATH . WPINC . '/wp-db.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2826
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2827
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2828
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2829
 * Load custom DB error or display WordPress DB error.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2830
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2831
 * If a file exists in the wp-content directory named db-error.php, then it will
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2832
 * be loaded instead of displaying the WordPress DB error. If it is not found,
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2833
 * then the WordPress DB error will be displayed instead.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2834
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2835
 * The WordPress DB error sets the HTTP status header to 500 to try to prevent
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2836
 * search engines from caching the message. Custom DB messages should do the
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2837
 * same.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2838
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2839
 * This function was backported to the the WordPress 2.3.2, but originally was
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2840
 * added in WordPress 2.5.0.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2841
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2842
 * @since 2.3.2
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2843
 * @uses $wpdb
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2844
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2845
function dead_db() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2846
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2847
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2848
	// Load custom DB error template, if present.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2849
	if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2850
		require_once( WP_CONTENT_DIR . '/db-error.php' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2851
		die();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2852
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2853
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2854
	// If installing or in the admin, provide the verbose message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2855
	if ( defined('WP_INSTALLING') || defined('WP_ADMIN') )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2856
		wp_die($wpdb->error);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2857
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2858
	// Otherwise, be terse.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2859
	status_header( 500 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2860
	nocache_headers();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2861
	header( 'Content-Type: text/html; charset=utf-8' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2862
?>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2863
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2864
<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) ) language_attributes(); ?>>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2865
<head>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2866
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2867
	<title>Database Error</title>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2868
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2869
</head>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2870
<body>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2871
	<h1>Error establishing a database connection</h1>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2872
</body>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2873
</html>
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2874
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2875
	die();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2876
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2877
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2878
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2879
 * Converts value to nonnegative integer.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2880
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2881
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2882
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2883
 * @param mixed $maybeint Data you wish to have convered to an nonnegative integer
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2884
 * @return int An nonnegative integer
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2885
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2886
function absint( $maybeint ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2887
	return abs( intval( $maybeint ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2888
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2889
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2890
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2891
 * Determines if the blog can be accessed over SSL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2892
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2893
 * Determines if blog can be accessed over SSL by using cURL to access the site
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2894
 * using the https in the siteurl. Requires cURL extension to work correctly.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2895
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2896
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2897
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2898
 * @return bool Whether or not SSL access is available
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2899
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2900
function url_is_accessable_via_ssl($url)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2901
{
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2902
	if (in_array('curl', get_loaded_extensions())) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2903
		$ssl = preg_replace( '/^http:\/\//', 'https://',  $url );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2904
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2905
		$ch = curl_init();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2906
		curl_setopt($ch, CURLOPT_URL, $ssl);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2907
		curl_setopt($ch, CURLOPT_FAILONERROR, true);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2908
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2909
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2910
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2911
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2912
		curl_exec($ch);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2913
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2914
		$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2915
		curl_close ($ch);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2916
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2917
		if ($status == 200 || $status == 401) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2918
			return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2919
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2920
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2921
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2922
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2923
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2924
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2925
 * Secure URL, if available or the given URL.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2926
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2927
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2928
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2929
 * @param string $url Complete URL path with transport.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2930
 * @return string Secure or regular URL path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2931
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2932
function atom_service_url_filter($url)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2933
{
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2934
	if ( url_is_accessable_via_ssl($url) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2935
		return preg_replace( '/^http:\/\//', 'https://',  $url );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2936
	else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2937
		return $url;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2938
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2939
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2940
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2941
 * Marks a function as deprecated and informs when it has been used.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2942
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2943
 * There is a hook deprecated_function_run that will be called that can be used
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2944
 * to get the backtrace up to what file and function called the deprecated
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2945
 * function.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2946
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2947
 * The current behavior is to trigger an user error if WP_DEBUG is true.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2948
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2949
 * This function is to be used in every function in depreceated.php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2950
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2951
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2952
 * @package Debug
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2953
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2954
 * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2955
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2956
 * @uses do_action() Calls 'deprecated_function_run' and passes the function name and what to use instead.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2957
 * @uses apply_filters() Calls 'deprecated_function_trigger_error' and expects boolean value of true to do trigger or false to not trigger error.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2958
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2959
 * @param string $function The function that was called
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2960
 * @param string $version The version of WordPress that deprecated the function
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2961
 * @param string $replacement Optional. The function that should have been called
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2962
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2963
function _deprecated_function($function, $version, $replacement=null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2964
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2965
	do_action('deprecated_function_run', $function, $replacement);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2966
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2967
	// Allow plugin to filter the output error trigger
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2968
	if( WP_DEBUG && apply_filters( 'deprecated_function_trigger_error', true )) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2969
		if( !is_null($replacement) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2970
			trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.'), $function, $version, $replacement ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2971
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2972
			trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.'), $function, $version ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2973
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2974
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2975
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2976
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2977
 * Marks a file as deprecated and informs when it has been used.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2978
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2979
 * There is a hook deprecated_file_included that will be called that can be used
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2980
 * to get the backtrace up to what file and function included the deprecated
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2981
 * file.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2982
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2983
 * The current behavior is to trigger an user error if WP_DEBUG is true.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2984
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2985
 * This function is to be used in every file that is depreceated
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2986
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2987
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2988
 * @package Debug
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2989
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2990
 * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2991
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2992
 * @uses do_action() Calls 'deprecated_file_included' and passes the file name and what to use instead.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2993
 * @uses apply_filters() Calls 'deprecated_file_trigger_error' and expects boolean value of true to do trigger or false to not trigger error.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2994
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2995
 * @param string $file The file that was included
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2996
 * @param string $version The version of WordPress that deprecated the function
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2997
 * @param string $replacement Optional. The function that should have been called
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2998
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  2999
function _deprecated_file($file, $version, $replacement=null) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3000
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3001
	do_action('deprecated_file_included', $file, $replacement);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3002
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3003
	// Allow plugin to filter the output error trigger
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3004
	if( WP_DEBUG && apply_filters( 'deprecated_file_trigger_error', true ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3005
		if( !is_null($replacement) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3006
			trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.'), $file, $version, $replacement ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3007
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3008
			trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.'), $file, $version ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3009
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3010
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3011
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3012
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3013
 * Is the server running earlier than 1.5.0 version of lighttpd
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3014
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3015
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3016
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3017
 * @return bool Whether the server is running lighttpd < 1.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3018
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3019
function is_lighttpd_before_150() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3020
	$server_parts = explode( '/', isset( $_SERVER['SERVER_SOFTWARE'] )? $_SERVER['SERVER_SOFTWARE'] : '' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3021
	$server_parts[1] = isset( $server_parts[1] )? $server_parts[1] : '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3022
	return  'lighttpd' == $server_parts[0] && -1 == version_compare( $server_parts[1], '1.5.0' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3023
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3024
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3025
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3026
 * Does the specified module exist in the apache config?
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3027
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3028
 * @since 2.5.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3029
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3030
 * @param string $mod e.g. mod_rewrite
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3031
 * @param bool $default The default return value if the module is not found
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3032
 * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3033
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3034
function apache_mod_loaded($mod, $default = false) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3035
	global $is_apache;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3036
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3037
	if ( !$is_apache )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3038
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3039
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3040
	if ( function_exists('apache_get_modules') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3041
		$mods = apache_get_modules();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3042
		if ( in_array($mod, $mods) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3043
			return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3044
	} elseif ( function_exists('phpinfo') ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3045
			ob_start();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3046
			phpinfo(8);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3047
			$phpinfo = ob_get_clean();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3048
			if ( false !== strpos($phpinfo, $mod) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3049
				return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3050
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3051
	return $default;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3052
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3053
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3054
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3055
 * File validates against allowed set of defined rules.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3056
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3057
 * A return value of '1' means that the $file contains either '..' or './'. A
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3058
 * return value of '2' means that the $file contains ':' after the first
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3059
 * character. A return value of '3' means that the file is not in the allowed
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3060
 * files list.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3061
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3062
 * @since 1.2.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3063
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3064
 * @param string $file File path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3065
 * @param array $allowed_files List of allowed files.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3066
 * @return int 0 means nothing is wrong, greater than 0 means something was wrong.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3067
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3068
function validate_file( $file, $allowed_files = '' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3069
	if ( false !== strpos( $file, '..' ))
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3070
		return 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3071
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3072
	if ( false !== strpos( $file, './' ))
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3073
		return 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3074
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3075
	if (!empty ( $allowed_files ) && (!in_array( $file, $allowed_files ) ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3076
		return 3;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3077
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3078
	if (':' == substr( $file, 1, 1 ))
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3079
		return 2;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3080
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3081
	return 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3082
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3083
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3084
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3085
 * Determine if SSL is used.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3086
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3087
 * @since 2.6.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3088
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3089
 * @return bool True if SSL, false if not used.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3090
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3091
function is_ssl() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3092
	if ( isset($_SERVER['HTTPS']) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3093
		if ( 'on' == strtolower($_SERVER['HTTPS']) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3094
			return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3095
		if ( '1' == $_SERVER['HTTPS'] )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3096
			return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3097
	} elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3098
		return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3099
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3100
	return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3101
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3102
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3103
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3104
 * Whether SSL login should be forced.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3105
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3106
 * @since 2.6.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3107
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3108
 * @param string|bool $force Optional.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3109
 * @return bool True if forced, false if not forced.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3110
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3111
function force_ssl_login( $force = null ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3112
	static $forced = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3113
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3114
	if ( !is_null( $force ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3115
		$old_forced = $forced;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3116
		$forced = $force;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3117
		return $old_forced;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3118
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3119
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3120
	return $forced;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3121
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3122
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3123
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3124
 * Whether to force SSL used for the Administration Panels.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3125
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3126
 * @since 2.6.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3127
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3128
 * @param string|bool $force
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3129
 * @return bool True if forced, false if not forced.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3130
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3131
function force_ssl_admin( $force = null ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3132
	static $forced = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3133
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3134
	if ( !is_null( $force ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3135
		$old_forced = $forced;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3136
		$forced = $force;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3137
		return $old_forced;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3138
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3139
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3140
	return $forced;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3141
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3142
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3143
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3144
 * Guess the URL for the site.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3145
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3146
 * Will remove wp-admin links to retrieve only return URLs not in the wp-admin
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3147
 * directory.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3148
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3149
 * @since 2.6.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3150
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3151
 * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3152
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3153
function wp_guess_url() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3154
	if ( defined('WP_SITEURL') && '' != WP_SITEURL ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3155
		$url = WP_SITEURL;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3156
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3157
		$schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3158
		$url = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3159
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3160
	return $url;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3161
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3162
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3163
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3164
 * Suspend cache invalidation.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3165
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3166
 * Turns cache invalidation on and off.  Useful during imports where you don't wont to do invalidations
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3167
 * every time a post is inserted.  Callers must be sure that what they are doing won't lead to an inconsistent
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3168
 * cache when invalidation is suspended.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3169
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3170
 * @since 2.7.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3171
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3172
 * @param bool $suspend Whether to suspend or enable cache invalidation
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3173
 * @return bool The current suspend setting
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3174
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3175
function wp_suspend_cache_invalidation($suspend = true) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3176
	global $_wp_suspend_cache_invalidation;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3177
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3178
	$current_suspend = $_wp_suspend_cache_invalidation;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3179
	$_wp_suspend_cache_invalidation = $suspend;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3180
	return $current_suspend;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3181
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3182
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3183
function get_site_option( $key, $default = false, $use_cache = true ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3184
	// Allow plugins to short-circuit site options.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3185
 	$pre = apply_filters( 'pre_site_option_' . $key, false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3186
 	if ( false !== $pre )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3187
 		return $pre;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3188
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3189
 	$value = get_option($key, $default);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3190
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3191
 	return apply_filters( 'site_option_' . $key, $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3192
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3193
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3194
// expects $key, $value not to be SQL escaped
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3195
function add_site_option( $key, $value ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3196
	$value = apply_filters( 'pre_add_site_option_' . $key, $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3197
	$result =  add_option($key, $value);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3198
	do_action( "add_site_option_{$key}", $key, $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3199
	return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3200
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3201
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3202
function delete_site_option( $key ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3203
	$result = delete_option($key);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3204
	do_action( "delete_site_option_{$key}", $key );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3205
	return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3206
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3207
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3208
// expects $key, $value not to be SQL escaped
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3209
function update_site_option( $key, $value ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3210
	$oldvalue = get_site_option( $key );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3211
	$value = apply_filters( 'pre_update_site_option_' . $key, $value, $oldvalue );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3212
	$result = update_option($key, $value);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3213
	do_action( "update_site_option_{$key}", $key, $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3214
	return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3215
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3216
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3217
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3218
 * Delete a site transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3219
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3220
 * @since 2.890
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3221
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3222
 * @subpackage Transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3223
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3224
 * @param string $transient Transient name. Expected to not be SQL-escaped
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3225
 * @return bool true if successful, false otherwise
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3226
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3227
function delete_site_transient($transient) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3228
	global $_wp_using_ext_object_cache, $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3229
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3230
	if ( $_wp_using_ext_object_cache ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3231
		return wp_cache_delete($transient, 'site-transient');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3232
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3233
		$transient = '_site_transient_' . esc_sql($transient);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3234
		return delete_site_option($transient);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3235
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3236
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3237
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3238
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3239
 * Get the value of a site transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3240
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3241
 * If the transient does not exist or does not have a value, then the return value
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3242
 * will be false.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3243
 * 
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3244
 * @since 2.9.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3245
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3246
 * @subpackage Transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3247
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3248
 * @param string $transient Transient name. Expected to not be SQL-escaped
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3249
 * @return mixed Value of transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3250
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3251
function get_site_transient($transient) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3252
	global $_wp_using_ext_object_cache, $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3253
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3254
	$pre = apply_filters( 'pre_site_transient_' . $transient, false );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3255
	if ( false !== $pre )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3256
		return $pre;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3257
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3258
	if ( $_wp_using_ext_object_cache ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3259
		$value = wp_cache_get($transient, 'site-transient');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3260
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3261
		$transient_option = '_site_transient_' . esc_sql($transient);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3262
		$transient_timeout = '_site_transient_timeout_' . esc_sql($transient);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3263
		if ( get_site_option($transient_timeout) < time() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3264
			delete_site_option($transient_option);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3265
			delete_site_option($transient_timeout);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3266
			return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3267
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3268
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3269
		$value = get_site_option($transient_option);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3270
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3271
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3272
	return apply_filters('site_transient_' . $transient, $value);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3273
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3274
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3275
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3276
 * Set/update the value of a site transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3277
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3278
 * You do not need to serialize values, if the value needs to be serialize, then
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3279
 * it will be serialized before it is set.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3280
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3281
 * @since 2.9.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3282
 * @package WordPress
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3283
 * @subpackage Transient
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3284
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3285
 * @param string $transient Transient name. Expected to not be SQL-escaped
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3286
 * @param mixed $value Transient value.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3287
 * @param int $expiration Time until expiration in seconds, default 0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3288
 * @return bool False if value was not set and true if value was set.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3289
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3290
function set_site_transient($transient, $value, $expiration = 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3291
	global $_wp_using_ext_object_cache, $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3292
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3293
	if ( $_wp_using_ext_object_cache ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3294
		return wp_cache_set($transient, $value, 'site-transient', $expiration);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3295
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3296
		$transient_timeout = '_site_transient_timeout_' . $transient;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3297
		$transient = '_site_transient_' . $transient;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3298
		$safe_transient = esc_sql($transient);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3299
		if ( false === get_site_option( $safe_transient ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3300
			if ( 0 != $expiration )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3301
				add_site_option($transient_timeout, time() + $expiration);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3302
			return add_site_option($transient, $value);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3303
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3304
			if ( 0 != $expiration )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3305
				update_site_option($transient_timeout, time() + $expiration);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3306
			return update_site_option($transient, $value);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3307
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3308
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3309
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3310
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3311
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3312
 * gmt_offset modification for smart timezone handling
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3313
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3314
 * Overrides the gmt_offset option if we have a timezone_string available
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3315
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3316
function wp_timezone_override_offset() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3317
	if ( !wp_timezone_supported() ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3318
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3319
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3320
	if ( !$timezone_string = get_option( 'timezone_string' ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3321
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3322
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3323
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3324
	@date_default_timezone_set( $timezone_string );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3325
	$timezone_object = timezone_open( $timezone_string );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3326
	$datetime_object = date_create();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3327
	if ( false === $timezone_object || false === $datetime_object ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3328
		return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3329
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3330
	return round( timezone_offset_get( $timezone_object, $datetime_object ) / 3600, 2 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3331
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3332
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3333
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3334
 * Check for PHP timezone support
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3335
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3336
function wp_timezone_supported() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3337
	$support = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3338
	if (
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3339
		function_exists( 'date_default_timezone_set' ) &&
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3340
		function_exists( 'timezone_identifiers_list' ) &&
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3341
		function_exists( 'timezone_open' ) &&
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3342
		function_exists( 'timezone_offset_get' )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3343
	) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3344
		$support = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3345
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3346
	return apply_filters( 'timezone_support', $support );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3347
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3348
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3349
function _wp_timezone_choice_usort_callback( $a, $b ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3350
	// Don't use translated versions of Etc
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3351
	if ( 'Etc' === $a['continent'] && 'Etc' === $b['continent'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3352
		// Make the order of these more like the old dropdown
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3353
		if ( 'GMT+' === substr( $a['city'], 0, 4 ) && 'GMT+' === substr( $b['city'], 0, 4 ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3354
			return -1 * ( strnatcasecmp( $a['city'], $b['city'] ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3355
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3356
		if ( 'UTC' === $a['city'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3357
			if ( 'GMT+' === substr( $b['city'], 0, 4 ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3358
				return 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3359
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3360
			return -1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3361
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3362
		if ( 'UTC' === $b['city'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3363
			if ( 'GMT+' === substr( $a['city'], 0, 4 ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3364
				return -1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3365
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3366
			return 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3367
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3368
		return strnatcasecmp( $a['city'], $b['city'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3369
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3370
	if ( $a['t_continent'] == $b['t_continent'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3371
		if ( $a['t_city'] == $b['t_city'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3372
			return strnatcasecmp( $a['t_subcity'], $b['t_subcity'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3373
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3374
		return strnatcasecmp( $a['t_city'], $b['t_city'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3375
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3376
		// Force Etc to the bottom of the list
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3377
		if ( 'Etc' === $a['continent'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3378
			return 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3379
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3380
		if ( 'Etc' === $b['continent'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3381
			return -1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3382
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3383
		return strnatcasecmp( $a['t_continent'], $b['t_continent'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3384
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3385
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3386
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3387
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3388
 * Gives a nicely formatted list of timezone strings // temporary! Not in final
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3389
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3390
 * @param $selected_zone string Selected Zone
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3391
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3392
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3393
function wp_timezone_choice( $selected_zone ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3394
	static $mo_loaded = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3395
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3396
	$continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3397
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3398
	// Load translations for continents and cities
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3399
	if ( !$mo_loaded ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3400
		$locale = get_locale();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3401
		$mofile = WP_LANG_DIR . '/continents-cities-' . $locale . '.mo';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3402
		load_textdomain( 'continents-cities', $mofile );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3403
		$mo_loaded = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3404
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3405
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3406
	$zonen = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3407
	foreach ( timezone_identifiers_list() as $zone ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3408
		$zone = explode( '/', $zone );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3409
		if ( !in_array( $zone[0], $continents ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3410
			continue;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3411
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3412
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3413
		// This determines what gets set and translated - we don't translate Etc/* strings here, they are done later
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3414
		$exists = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3415
			0 => ( isset( $zone[0] ) && $zone[0] ) ? true : false,
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3416
			1 => ( isset( $zone[1] ) && $zone[1] ) ? true : false,
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3417
			2 => ( isset( $zone[2] ) && $zone[2] ) ? true : false
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3418
		);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3419
		$exists[3] = ( $exists[0] && 'Etc' !== $zone[0] ) ? true : false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3420
		$exists[4] = ( $exists[1] && $exists[3] ) ? true : false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3421
		$exists[5] = ( $exists[2] && $exists[3] ) ? true : false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3422
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3423
		$zonen[] = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3424
			'continent'   => ( $exists[0] ? $zone[0] : '' ),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3425
			'city'        => ( $exists[1] ? $zone[1] : '' ),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3426
			'subcity'     => ( $exists[2] ? $zone[2] : '' ),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3427
			't_continent' => ( $exists[3] ? translate( str_replace( '_', ' ', $zone[0] ), 'continents-cities' ) : '' ),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3428
			't_city'      => ( $exists[4] ? translate( str_replace( '_', ' ', $zone[1] ), 'continents-cities' ) : '' ),
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3429
			't_subcity'   => ( $exists[5] ? translate( str_replace( '_', ' ', $zone[2] ), 'continents-cities' ) : '' )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3430
		);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3431
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3432
	usort( $zonen, '_wp_timezone_choice_usort_callback' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3433
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3434
	$structure = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3435
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3436
	if ( empty( $selected_zone ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3437
		$structure[] = '<option selected="selected" value="">' . __( 'Select a city' ) . '</option>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3438
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3439
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3440
	foreach ( $zonen as $key => $zone ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3441
		// Build value in an array to join later
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3442
		$value = array( $zone['continent'] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3443
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3444
		if ( empty( $zone['city'] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3445
			// It's at the continent level (generally won't happen)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3446
			$display = $zone['t_continent'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3447
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3448
			// It's inside a continent group
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3449
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3450
			// Continent optgroup
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3451
			if ( !isset( $zonen[$key - 1] ) || $zonen[$key - 1]['continent'] !== $zone['continent'] ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3452
				$label = $zone['t_continent'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3453
				$structure[] = '<optgroup label="'. esc_attr( $label ) .'">';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3454
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3455
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3456
			// Add the city to the value
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3457
			$value[] = $zone['city'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3458
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3459
			$display = $zone['t_city'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3460
			if ( !empty( $zone['subcity'] ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3461
				// Add the subcity to the value
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3462
				$value[] = $zone['subcity'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3463
				$display .= ' - ' . $zone['t_subcity'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3464
			}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3465
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3466
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3467
		// Build the value
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3468
		$value = join( '/', $value );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3469
		$selected = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3470
		if ( $value === $selected_zone ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3471
			$selected = 'selected="selected" ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3472
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3473
		$structure[] = '<option ' . $selected . 'value="' . esc_attr( $value ) . '">' . esc_html( $display ) . "</option>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3474
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3475
		// Close continent optgroup
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3476
		if ( !empty( $zone['city'] ) && ( !isset($zonen[$key + 1]) || (isset( $zonen[$key + 1] ) && $zonen[$key + 1]['continent'] !== $zone['continent']) ) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3477
			$structure[] = '</optgroup>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3478
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3479
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3480
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3481
	// Do UTC
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3482
	$structure[] = '<optgroup label="'. esc_attr__( 'UTC' ) .'">';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3483
	$selected = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3484
	if ( 'UTC' === $selected_zone )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3485
		$selected = 'selected="selected" ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3486
	$structure[] = '<option ' . $selected . 'value="' . esc_attr( 'UTC' ) . '">' . __('UTC') . '</option>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3487
	$structure[] = '</optgroup>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3488
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3489
	// Do manual UTC offsets
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3490
	$structure[] = '<optgroup label="'. esc_attr__( 'Manual Offsets' ) .'">';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3491
	$offset_range = array (-12, -11.5, -11, -10.5, -10, -9.5, -9, -8.5, -8, -7.5, -7, -6.5, -6, -5.5, -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5,
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3492
		0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 5.75, 6, 6.5, 7, 7.5, 8, 8.5, 8.75, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.75, 13, 13.75, 14);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3493
	foreach ( $offset_range as $offset ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3494
		if ( 0 <= $offset )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3495
			$offset_name = '+' . $offset;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3496
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3497
			$offset_name = (string) $offset;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3498
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3499
		$offset_value = $offset_name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3500
		$offset_name = str_replace(array('.25','.5','.75'), array(':15',':30',':45'), $offset_name);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3501
		$offset_name = 'UTC' . $offset_name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3502
		$offset_value = 'UTC' . $offset_value;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3503
		$selected = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3504
		if ( $offset_value === $selected_zone )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3505
			$selected = 'selected="selected" ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3506
		$structure[] = '<option ' . $selected . 'value="' . esc_attr( $offset_value ) . '">' . esc_html( $offset_name ) . "</option>";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3507
		
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3508
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3509
	$structure[] = '</optgroup>';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3510
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3511
	return join( "\n", $structure );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3512
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3513
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3514
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3515
 * Strip close comment and close php tags from file headers used by WP
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3516
 * See http://core.trac.wordpress.org/ticket/8497
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3517
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3518
 * @since 2.8
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3519
**/
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3520
function _cleanup_header_comment($str) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3521
	return trim(preg_replace("/\s*(?:\*\/|\?>).*/", '', $str));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3522
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3523
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3524
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3525
 * Permanently deletes posts, pages, attachments, and comments which have been in the trash for EMPTY_TRASH_DAYS.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3526
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3527
 * @since 2.9.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3528
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3529
 * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3530
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3531
function wp_scheduled_delete() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3532
	global $wpdb;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3533
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3534
	$delete_timestamp = time() - (60*60*24*EMPTY_TRASH_DAYS);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3535
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3536
	$posts_to_delete = $wpdb->get_results($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_wp_trash_meta_time' AND meta_value < '%d'", $delete_timestamp), ARRAY_A);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3537
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3538
	foreach ( (array) $posts_to_delete as $post ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3539
		$post_id = (int) $post['post_id'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3540
		if ( !$post_id )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3541
			continue;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3542
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3543
		$del_post = get_post($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3544
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3545
		if ( !$del_post || 'trash' != $del_post->post_status ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3546
			delete_post_meta($post_id, '_wp_trash_meta_status');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3547
			delete_post_meta($post_id, '_wp_trash_meta_time');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3548
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3549
			wp_delete_post($post_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3550
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3551
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3552
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3553
	$comments_to_delete = $wpdb->get_results($wpdb->prepare("SELECT comment_id FROM $wpdb->commentmeta WHERE meta_key = '_wp_trash_meta_time' AND meta_value < '%d'", $delete_timestamp), ARRAY_A);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3554
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3555
	foreach ( (array) $comments_to_delete as $comment ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3556
		$comment_id = (int) $comment['comment_id'];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3557
		if ( !$comment_id )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3558
			continue;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3559
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3560
		$del_comment = get_comment($comment_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3561
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3562
		if ( !$del_comment || 'trash' != $del_comment->comment_approved ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3563
			delete_comment_meta($comment_id, '_wp_trash_meta_time');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3564
			delete_comment_meta($comment_id, '_wp_trash_meta_status');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3565
		} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3566
			wp_delete_comment($comment_id);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3567
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3568
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3569
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3570
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3571
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3572
 * Parse the file contents to retrieve its metadata.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3573
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3574
 * Searches for metadata for a file, such as a plugin or theme.  Each piece of 
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3575
 * metadata must be on its own line. For a field spanning multple lines, it
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3576
 * must not have any newlines or only parts of it will be displayed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3577
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3578
 * Some users have issues with opening large files and manipulating the contents
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3579
 * for want is usually the first 1kiB or 2kiB. This function stops pulling in
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3580
 * the file contents when it has all of the required data.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3581
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3582
 * The first 8kiB of the file will be pulled in and if the file data is not
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3583
 * within that first 8kiB, then the author should correct their plugin file
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3584
 * and move the data headers to the top.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3585
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3586
 * The file is assumed to have permissions to allow for scripts to read
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3587
 * the file. This is not checked however and the file is only opened for
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3588
 * reading.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3589
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3590
 * @since 2.9.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3591
 *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3592
 * @param string $file Path to the file
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3593
 * @param bool $markup If the returned data should have HTML markup applied
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3594
 * @param string $context If specified adds filter hook "extra_<$context>_headers" 
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3595
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3596
function get_file_data( $file, $default_headers, $context = '' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3597
	// We don't need to write to the file, so just open for reading.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3598
	$fp = fopen( $file, 'r' );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3599
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3600
	// Pull only the first 8kiB of the file in.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3601
	$file_data = fread( $fp, 8192 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3602
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3603
	// PHP will close file handle, but we are good citizens.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3604
	fclose( $fp );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3605
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3606
	if( $context != '' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3607
		$extra_headers = apply_filters( "extra_$context".'_headers', array() );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3608
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3609
		$extra_headers = array_flip( $extra_headers );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3610
		foreach( $extra_headers as $key=>$value ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3611
			$extra_headers[$key] = $key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3612
		}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3613
		$all_headers = array_merge($extra_headers, $default_headers);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3614
	} else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3615
		$all_headers = $default_headers;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3616
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3617
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3618
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3619
	foreach ( $all_headers as $field => $regex ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3620
		preg_match( '/' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, ${$field});
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3621
		if ( !empty( ${$field} ) )
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3622
			${$field} = _cleanup_header_comment( ${$field}[1] );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3623
		else
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3624
			${$field} = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3625
	}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3626
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3627
	$file_data = compact( array_keys( $all_headers ) );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3628
	
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3629
	return $file_data;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3630
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3631
/*
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3632
 * Used internally to tidy up the search terms
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3633
 * 
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3634
 * @private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3635
 * @since 2.9.0
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3636
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3637
function _search_terms_tidy($t) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3638
	return trim($t, "\"'\n\r ");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3639
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  3640
?>