wp/wp-includes/functions.php
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * Main WordPress API
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
require( ABSPATH . WPINC . '/option.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * Converts given date string into a different format.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * $format should be either a PHP date format string, e.g. 'U' for a Unix
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * timestamp, or 'G' for a Unix timestamp assuming that $date is GMT.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * If $translate is true then the given date and format string will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * be passed to date_i18n() for translation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 * @param string $format Format of the date to return.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 * @param string $date Date string to convert.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 * @param bool $translate Whether the return date should be translated. Default is true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 * @return string|int Formatted date string, or Unix timestamp.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
function mysql2date( $format, $date, $translate = true ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
	if ( empty( $date ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
	if ( 'G' == $format )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
		return strtotime( $date . ' +0000' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
	$i = strtotime( $date );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
	if ( 'U' == $format )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		return $i;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
	if ( $translate )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		return date_i18n( $format, $i );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		return date( $format, $i );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
 * Retrieve the current time based on specified type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
 * The 'mysql' type will return the time in the format for MySQL DATETIME field.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
 * The 'timestamp' type will return the current timestamp.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
 * If $gmt is set to either '1' or 'true', then both types will use GMT time.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
 * if $gmt is false, the output is adjusted with the GMT offset in the WordPress option.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
 * @since 1.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
 * @param string $type Either 'mysql' or 'timestamp'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
 * @param int|bool $gmt Optional. Whether to use GMT timezone. Default is false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
 * @return int|string String if $type is 'gmt', int if $type is 'timestamp'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
function current_time( $type, $gmt = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	switch ( $type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
		case 'mysql':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
			return ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
		case 'timestamp':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
			return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
 * Retrieve the date in localized format, based on timestamp.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
 * If the locale specifies the locale month and weekday, then the locale will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
 * take over the format for the date. If it isn't, then the date format string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
 * will be used instead.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
 * @param string $dateformatstring Format to display the date.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
 * @param int $unixtimestamp Optional. Unix timestamp.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
 * @param bool $gmt Optional, default is false. Whether to convert to GMT for time.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
 * @return string The date, translated if locale specifies it.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
	global $wp_locale;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
	$i = $unixtimestamp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
	if ( false === $i ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
		if ( ! $gmt )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
			$i = current_time( 'timestamp' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
			$i = time();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
		// we should not let date() interfere with our
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
		// specially computed timestamp
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
		$gmt = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
	// store original value for language with untypical grammars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
	// see http://core.trac.wordpress.org/ticket/9396
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
	$req_format = $dateformatstring;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
	$datefunc = $gmt? 'gmdate' : 'date';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
	if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
		$datemonth = $wp_locale->get_month( $datefunc( 'm', $i ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
		$datemonth_abbrev = $wp_locale->get_month_abbrev( $datemonth );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		$dateweekday = $wp_locale->get_weekday( $datefunc( 'w', $i ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
		$dateweekday_abbrev = $wp_locale->get_weekday_abbrev( $dateweekday );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
		$datemeridiem = $wp_locale->get_meridiem( $datefunc( 'a', $i ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		$datemeridiem_capital = $wp_locale->get_meridiem( $datefunc( 'A', $i ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		$dateformatstring = ' '.$dateformatstring;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
		$dateformatstring = preg_replace( "/([^\\\])D/", "\\1" . backslashit( $dateweekday_abbrev ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		$dateformatstring = preg_replace( "/([^\\\])F/", "\\1" . backslashit( $datemonth ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		$dateformatstring = preg_replace( "/([^\\\])l/", "\\1" . backslashit( $dateweekday ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		$dateformatstring = preg_replace( "/([^\\\])M/", "\\1" . backslashit( $datemonth_abbrev ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
		$dateformatstring = preg_replace( "/([^\\\])a/", "\\1" . backslashit( $datemeridiem ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
		$dateformatstring = preg_replace( "/([^\\\])A/", "\\1" . backslashit( $datemeridiem_capital ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		$dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
	$timezone_formats = array( 'P', 'I', 'O', 'T', 'Z', 'e' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
	$timezone_formats_re = implode( '|', $timezone_formats );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
	if ( preg_match( "/$timezone_formats_re/", $dateformatstring ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
		$timezone_string = get_option( 'timezone_string' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
		if ( $timezone_string ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			$timezone_object = timezone_open( $timezone_string );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
			$date_object = date_create( null, $timezone_object );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			foreach( $timezone_formats as $timezone_format ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
				if ( false !== strpos( $dateformatstring, $timezone_format ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
					$formatted = date_format( $date_object, $timezone_format );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
					$dateformatstring = ' '.$dateformatstring;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
					$dateformatstring = preg_replace( "/([^\\\])$timezone_format/", "\\1" . backslashit( $formatted ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
					$dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
	$j = @$datefunc( $dateformatstring, $i );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
	// allow plugins to redo this entirely for languages with untypical grammars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
	$j = apply_filters('date_i18n', $j, $req_format, $i, $gmt);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
	return $j;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
 * Convert integer number to format based on the locale.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
 * @param int $number The number to convert based on locale.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
 * @param int $decimals Precision of the number of decimal places.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
 * @return string Converted number in string format.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
function number_format_i18n( $number, $decimals = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
	global $wp_locale;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
	$formatted = number_format( $number, absint( $decimals ), $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
	return apply_filters( 'number_format_i18n', $formatted );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
 * Convert number of bytes largest unit bytes will fit into.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
 * It is easier to read 1kB than 1024 bytes and 1MB than 1048576 bytes. Converts
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
 * number of bytes to human readable number by taking the number of that unit
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
 * that the bytes will go into it. Supports TB value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
 * Please note that integers in PHP are limited to 32 bits, unless they are on
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
 * 64 bit architecture, then they have 64 bit size. If you need to place the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
 * larger size then what PHP integer type will hold, then use a string. It will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
 * be converted to a double, which should always have 64 bit length.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
 * Technically the correct unit names for powers of 1024 are KiB, MiB etc.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
 * @link http://en.wikipedia.org/wiki/Byte
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
 * @param int|string $bytes Number of bytes. Note max integer size for integers.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
 * @param int $decimals Precision of number of decimal places. Deprecated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
 * @return bool|string False on failure. Number string on success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
function size_format( $bytes, $decimals = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
	$quant = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
		// ========================= Origin ====
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
		'TB' => 1099511627776,  // pow( 1024, 4)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
		'GB' => 1073741824,     // pow( 1024, 3)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
		'MB' => 1048576,        // pow( 1024, 2)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
		'kB' => 1024,           // pow( 1024, 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
		'B ' => 1,              // pow( 1024, 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
	foreach ( $quant as $unit => $mag )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
		if ( doubleval($bytes) >= $mag )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
			return number_format_i18n( $bytes / $mag, $decimals ) . ' ' . $unit;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
 * Get the week start and end from the datetime or date string from mysql.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
 * @param string $mysqlstring Date or datetime field type from mysql.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
 * @param int $start_of_week Optional. Start of the week as an integer.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
 * @return array Keys are 'start' and 'end'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
function get_weekstartend( $mysqlstring, $start_of_week = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
	$my = substr( $mysqlstring, 0, 4 ); // Mysql string Year
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
	$mm = substr( $mysqlstring, 8, 2 ); // Mysql string Month
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
	$md = substr( $mysqlstring, 5, 2 ); // Mysql string day
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
	$day = mktime( 0, 0, 0, $md, $mm, $my ); // The timestamp for mysqlstring day.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
	$weekday = date( 'w', $day ); // The day of the week from the timestamp
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
	if ( !is_numeric($start_of_week) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
		$start_of_week = get_option( 'start_of_week' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
	if ( $weekday < $start_of_week )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
		$weekday += 7;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
	$start = $day - DAY_IN_SECONDS * ( $weekday - $start_of_week ); // The most recent week start day on or before $day
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
	$end = $start + 7 * DAY_IN_SECONDS - 1; // $start + 7 days - 1 second
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
	return compact( 'start', 'end' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
 * Unserialize value only if it was serialized.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
 * @param string $original Maybe unserialized original, if is needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
 * @return mixed Unserialized data can be any type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
function maybe_unserialize( $original ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
	if ( is_serialized( $original ) ) // don't attempt to unserialize data that wasn't serialized going in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
		return @unserialize( $original );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
	return $original;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
 * Check value to find if it was serialized.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
 * If $data is not an string, then returned value will always be false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
 * Serialized data is always a string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
 * @since 2.0.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
 * @param mixed $data Value to check to see if was serialized.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
 * @param bool $strict Optional. Whether to be strict about the end of the string. Defaults true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
 * @return bool False if not serialized and true if it was.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
function is_serialized( $data, $strict = true ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
	// if it isn't a string, it isn't serialized
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
	if ( ! is_string( $data ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
	$data = trim( $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
 	if ( 'N;' == $data )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
	$length = strlen( $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
	if ( $length < 4 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
	if ( ':' !== $data[1] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
	if ( $strict ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
		$lastc = $data[ $length - 1 ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
		if ( ';' !== $lastc && '}' !== $lastc )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
		$semicolon = strpos( $data, ';' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
		$brace     = strpos( $data, '}' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
		// Either ; or } must exist.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
		if ( false === $semicolon && false === $brace )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
		// But neither must be in the first X characters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
		if ( false !== $semicolon && $semicolon < 3 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
		if ( false !== $brace && $brace < 4 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
	$token = $data[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
	switch ( $token ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
		case 's' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
			if ( $strict ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
				if ( '"' !== $data[ $length - 2 ] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
			} elseif ( false === strpos( $data, '"' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
			// or else fall through
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
		case 'a' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
		case 'O' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
			return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
		case 'b' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
		case 'i' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
		case 'd' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
			$end = $strict ? '$' : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
			return (bool) preg_match( "/^{$token}:[0-9.E-]+;$end/", $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
 * Check whether serialized data is of string type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
 * @since 2.0.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
 * @param mixed $data Serialized data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
 * @return bool False if not a serialized string, true if it is.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
function is_serialized_string( $data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
	// if it isn't a string, it isn't a serialized string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
	if ( !is_string( $data ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
	$data = trim( $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
	$length = strlen( $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
	if ( $length < 4 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
	elseif ( ':' !== $data[1] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
	elseif ( ';' !== $data[$length-1] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
	elseif ( $data[0] !== 's' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
	elseif ( '"' !== $data[$length-2] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
 * Serialize data, if needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
 * @since 2.0.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
 * @param mixed $data Data that might be serialized.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
 * @return mixed A scalar data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
function maybe_serialize( $data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
	if ( is_array( $data ) || is_object( $data ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
		return serialize( $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
	// Double serialization is required for backward compatibility.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
	// See http://core.trac.wordpress.org/ticket/12930
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
	if ( is_serialized( $data, false ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
		return serialize( $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
	return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
 * Retrieve post title from XMLRPC XML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
 * If the title element is not part of the XML, then the default post title from
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
 * the $post_default_title will be used instead.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
 * @subpackage XMLRPC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
 * @global string $post_default_title Default XMLRPC post title.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
 * @param string $content XMLRPC XML Request content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
 * @return string Post title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
function xmlrpc_getposttitle( $content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
	global $post_default_title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
	if ( preg_match( '/<title>(.+?)<\/title>/is', $content, $matchtitle ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
		$post_title = $matchtitle[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
		$post_title = $post_default_title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
	return $post_title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
 * Retrieve the post category or categories from XMLRPC XML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
 * If the category element is not found, then the default post category will be
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
 * used. The return type then would be what $post_default_category. If the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
 * category is found, then it will always be an array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
 * @subpackage XMLRPC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
 * @global string $post_default_category Default XMLRPC post category.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
 * @param string $content XMLRPC XML Request content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
 * @return string|array List of categories or category name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
function xmlrpc_getpostcategory( $content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
	global $post_default_category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
	if ( preg_match( '/<category>(.+?)<\/category>/is', $content, $matchcat ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
		$post_category = trim( $matchcat[1], ',' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
		$post_category = explode( ',', $post_category );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
		$post_category = $post_default_category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
	return $post_category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
 * XMLRPC XML content without title and category elements.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
 * @subpackage XMLRPC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
 * @param string $content XMLRPC XML Request content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
 * @return string XMLRPC XML Request content without title and category elements.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
function xmlrpc_removepostdata( $content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
	$content = preg_replace( '/<title>(.+?)<\/title>/si', '', $content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
	$content = preg_replace( '/<category>(.+?)<\/category>/si', '', $content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
	$content = trim( $content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
	return $content;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
 * Use RegEx to extract URLs from arbitrary content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
 * @param string $content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
 * @return array URLs found in passed string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
function wp_extract_urls( $content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
	preg_match_all(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
		"#((?:[\w-]+://?|[\w\d]+[.])[^\s()<>]+[.](?:\([\w\d]+\)|(?:[^`!()\[\]{};:'\".,<>?«»“”‘’\s]|(?:[:]\d+)?/?)+))#",
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
		$content,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
		$post_links
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
	$post_links = array_unique( array_map( 'html_entity_decode', $post_links[0] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
	return array_values( $post_links );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
 * Check content for video and audio links to add as enclosures.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
 * Will not add enclosures that have already been added and will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
 * remove enclosures that are no longer in the post. This is called as
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
 * pingbacks and trackbacks.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
 * @uses $wpdb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
 * @param string $content Post Content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
 * @param int $post_ID Post ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
function do_enclose( $content, $post_ID ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
	//TODO: Tidy this ghetto code up and make the debug code optional
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
	include_once( ABSPATH . WPINC . '/class-IXR.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
	$post_links = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
	$pung = get_enclosed( $post_ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
	$post_links_temp = wp_extract_urls( $content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
	foreach ( $pung as $link_test ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
		if ( ! in_array( $link_test, $post_links_temp ) ) { // link no longer in post
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
			$mids = $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, like_escape( $link_test ) . '%') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
			foreach ( $mids as $mid )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
				delete_metadata_by_mid( 'post', $mid );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
	foreach ( (array) $post_links_temp as $link_test ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
		if ( !in_array( $link_test, $pung ) ) { // If we haven't pung it already
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
			$test = @parse_url( $link_test );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
			if ( false === $test )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
			if ( isset( $test['query'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
				$post_links[] = $link_test;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
			elseif ( isset($test['path']) && ( $test['path'] != '/' ) &&  ($test['path'] != '' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
				$post_links[] = $link_test;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
	foreach ( (array) $post_links as $url ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
		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, like_escape( $url ) . '%' ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
			if ( $headers = wp_get_http_headers( $url) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
				$len = isset( $headers['content-length'] ) ? (int) $headers['content-length'] : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
				$type = isset( $headers['content-type'] ) ? $headers['content-type'] : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
				$allowed_types = array( 'video', 'audio' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
				// Check to see if we can figure out the mime type from
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
				// the extension
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
				$url_parts = @parse_url( $url );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
				if ( false !== $url_parts ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
					$extension = pathinfo( $url_parts['path'], PATHINFO_EXTENSION );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
					if ( !empty( $extension ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
						foreach ( wp_get_mime_types() as $exts => $mime ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
							if ( preg_match( '!^(' . $exts . ')$!i', $extension ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
								$type = $mime;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
				if ( in_array( substr( $type, 0, strpos( $type, "/" ) ), $allowed_types ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
					add_post_meta( $post_ID, 'enclosure', "$url\n$len\n$mime\n" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
 * Perform a HTTP HEAD or GET request.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
 * If $file_path is a writable filename, this will do a GET request and write
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
 * the file to that path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
 * @param string $url URL to fetch.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
 * @param string|bool $file_path Optional. File path to write request to.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
 * @param int $red (private) The number of Redirects followed, Upon 5 being hit, returns false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
 * @return bool|string False on failure and string of headers if HEAD request.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
function wp_get_http( $url, $file_path = false, $red = 1 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
	@set_time_limit( 60 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
	if ( $red > 5 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
	$options = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
	$options['redirection'] = 5;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
	if ( false == $file_path )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
		$options['method'] = 'HEAD';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
		$options['method'] = 'GET';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
	$response = wp_safe_remote_request( $url, $options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
	if ( is_wp_error( $response ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
	$headers = wp_remote_retrieve_headers( $response );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
	$headers['response'] = wp_remote_retrieve_response_code( $response );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
	// WP_HTTP no longer follows redirects for HEAD requests.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
	if ( 'HEAD' == $options['method'] && in_array($headers['response'], array(301, 302)) && isset( $headers['location'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
		return wp_get_http( $headers['location'], $file_path, ++$red );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
	if ( false == $file_path )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
		return $headers;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
	// GET request - write it to the supplied filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
	$out_fp = fopen($file_path, 'w');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
	if ( !$out_fp )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
		return $headers;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
	fwrite( $out_fp,  wp_remote_retrieve_body( $response ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
	fclose($out_fp);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
	clearstatcache();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
	return $headers;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
 * Retrieve HTTP Headers from URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
 * @since 1.5.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
 * @param string $url
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
 * @param bool $deprecated Not Used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
 * @return bool|string False on failure, headers on success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
function wp_get_http_headers( $url, $deprecated = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
	if ( !empty( $deprecated ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
		_deprecated_argument( __FUNCTION__, '2.7' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
	$response = wp_safe_remote_head( $url );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
	if ( is_wp_error( $response ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
	return wp_remote_retrieve_headers( $response );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
 * Whether today is a new day.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
 * @uses $day Today
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
 * @uses $previousday Previous day
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
 * @return int 1 when new day, 0 if not a new day.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
function is_new_day() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
	global $currentday, $previousday;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
	if ( $currentday != $previousday )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
		return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
		return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
 * Build URL query based on an associative and, or indexed array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
 * This is a convenient function for easily building url queries. It sets the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
 * separator to '&' and uses _http_build_query() function.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
 * @see _http_build_query() Used to build the query
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
 * @link http://us2.php.net/manual/en/function.http-build-query.php more on what
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
 *		http_build_query() does.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
 * @param array $data URL-encode key/value pairs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
 * @return string URL encoded string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
function build_query( $data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
	return _http_build_query( $data, null, '&', '', false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
// from php.net (modified by Mark Jaquith to behave like the native PHP5 function)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
function _http_build_query($data, $prefix=null, $sep=null, $key='', $urlencode=true) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
	$ret = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
	foreach ( (array) $data as $k => $v ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
		if ( $urlencode)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
			$k = urlencode($k);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
		if ( is_int($k) && $prefix != null )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
			$k = $prefix.$k;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
		if ( !empty($key) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
			$k = $key . '%5B' . $k . '%5D';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
		if ( $v === null )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
		elseif ( $v === FALSE )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
			$v = '0';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
		if ( is_array($v) || is_object($v) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
			array_push($ret,_http_build_query($v, '', $sep, $k, $urlencode));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
		elseif ( $urlencode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
			array_push($ret, $k.'='.urlencode($v));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
			array_push($ret, $k.'='.$v);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
	if ( null === $sep )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
		$sep = ini_get('arg_separator.output');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
	return implode($sep, $ret);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
 * Retrieve a modified URL query string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
 * You can rebuild the URL and append a new query variable to the URL query by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
 * using this function. You can also retrieve the full URL with query data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
 * Adding a single key & value or an associative array. Setting a key value to
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
 * an empty string removes the key. Omitting oldquery_or_uri uses the $_SERVER
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
 * value. Additional values provided are expected to be encoded appropriately
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
 * with urlencode() or rawurlencode().
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
 * @param mixed $param1 Either newkey or an associative_array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
 * @param mixed $param2 Either newvalue or oldquery or uri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
 * @param mixed $param3 Optional. Old query or uri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
 * @return string New URL query string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
function add_query_arg() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
	$ret = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
	$args = func_get_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
	if ( is_array( $args[0] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
		if ( count( $args ) < 2 || false === $args[1] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
			$uri = $_SERVER['REQUEST_URI'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
			$uri = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
		if ( count( $args ) < 3 || false === $args[2] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
			$uri = $_SERVER['REQUEST_URI'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
			$uri = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
	if ( $frag = strstr( $uri, '#' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
		$uri = substr( $uri, 0, -strlen( $frag ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
		$frag = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
	if ( 0 === stripos( $uri, 'http://' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
		$protocol = 'http://';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
		$uri = substr( $uri, 7 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
	} elseif ( 0 === stripos( $uri, 'https://' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
		$protocol = 'https://';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
		$uri = substr( $uri, 8 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
		$protocol = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
	if ( strpos( $uri, '?' ) !== false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
		list( $base, $query ) = explode( '?', $uri, 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
		$base .= '?';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
	} elseif ( $protocol || strpos( $uri, '=' ) === false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
		$base = $uri . '?';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
		$query = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
		$base = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
		$query = $uri;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
	wp_parse_str( $query, $qs );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
	$qs = urlencode_deep( $qs ); // this re-URL-encodes things that were already in the query string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
	if ( is_array( $args[0] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
		$kayvees = $args[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
		$qs = array_merge( $qs, $kayvees );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
		$qs[ $args[0] ] = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
	foreach ( $qs as $k => $v ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
		if ( $v === false )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
			unset( $qs[$k] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
	$ret = build_query( $qs );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
	$ret = trim( $ret, '?' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
	$ret = preg_replace( '#=(&|$)#', '$1', $ret );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
	$ret = $protocol . $base . $ret . $frag;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
	$ret = rtrim( $ret, '?' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
	return $ret;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
 * Removes an item or list from the query string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
 * @param string|array $key Query key or keys to remove.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
 * @param bool $query When false uses the $_SERVER value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
 * @return string New URL query string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
function remove_query_arg( $key, $query=false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
	if ( is_array( $key ) ) { // removing multiple keys
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
		foreach ( $key as $k )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
			$query = add_query_arg( $k, false, $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
		return $query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
	return add_query_arg( $key, false, $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
 * Walks the array while sanitizing the contents.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
 * @param array $array Array to walk while sanitizing contents.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
 * @return array Sanitized $array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
function add_magic_quotes( $array ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
	foreach ( (array) $array as $k => $v ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
		if ( is_array( $v ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
			$array[$k] = add_magic_quotes( $v );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
			$array[$k] = addslashes( $v );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
	return $array;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
 * HTTP request for URI to retrieve content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
 * @since 1.5.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
 * @uses wp_remote_get()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
 * @param string $uri URI/URL of web page to retrieve.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
 * @return bool|string HTTP content. False on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
function wp_remote_fopen( $uri ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
	$parsed_url = @parse_url( $uri );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
	if ( !$parsed_url || !is_array( $parsed_url ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
	$options = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
	$options['timeout'] = 10;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
	$response = wp_safe_remote_get( $uri, $options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
	if ( is_wp_error( $response ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
	return wp_remote_retrieve_body( $response );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
 * Set up the WordPress query.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
 * @param string $query_vars Default WP_Query arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
function wp( $query_vars = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
	global $wp, $wp_query, $wp_the_query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
	$wp->main( $query_vars );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
	if ( !isset($wp_the_query) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
		$wp_the_query = $wp_query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
 * Retrieve the description for the HTTP status.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
 * @param int $code HTTP status code.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
 * @return string Empty string if not found, or description if found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
function get_status_header_desc( $code ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
	global $wp_header_to_desc;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
	$code = absint( $code );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
	if ( !isset( $wp_header_to_desc ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
		$wp_header_to_desc = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
			100 => 'Continue',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
			101 => 'Switching Protocols',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
			102 => 'Processing',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
			200 => 'OK',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
			201 => 'Created',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
			202 => 'Accepted',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
			203 => 'Non-Authoritative Information',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
			204 => 'No Content',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
			205 => 'Reset Content',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
			206 => 'Partial Content',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
			207 => 'Multi-Status',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
			226 => 'IM Used',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
			300 => 'Multiple Choices',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
			301 => 'Moved Permanently',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
			302 => 'Found',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
			303 => 'See Other',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
			304 => 'Not Modified',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
			305 => 'Use Proxy',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
			306 => 'Reserved',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
			307 => 'Temporary Redirect',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
			400 => 'Bad Request',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
			401 => 'Unauthorized',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
			402 => 'Payment Required',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
			403 => 'Forbidden',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
			404 => 'Not Found',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
			405 => 'Method Not Allowed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
			406 => 'Not Acceptable',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
			407 => 'Proxy Authentication Required',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
			408 => 'Request Timeout',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
			409 => 'Conflict',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
			410 => 'Gone',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
			411 => 'Length Required',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
			412 => 'Precondition Failed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
			413 => 'Request Entity Too Large',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
			414 => 'Request-URI Too Long',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
			415 => 'Unsupported Media Type',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
			416 => 'Requested Range Not Satisfiable',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
			417 => 'Expectation Failed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
			422 => 'Unprocessable Entity',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
			423 => 'Locked',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
			424 => 'Failed Dependency',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
			426 => 'Upgrade Required',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
			500 => 'Internal Server Error',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
			501 => 'Not Implemented',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
			502 => 'Bad Gateway',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
			503 => 'Service Unavailable',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
			504 => 'Gateway Timeout',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
			505 => 'HTTP Version Not Supported',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
			506 => 'Variant Also Negotiates',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
			507 => 'Insufficient Storage',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
			510 => 'Not Extended'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
	if ( isset( $wp_header_to_desc[$code] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
		return $wp_header_to_desc[$code];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
		return '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
 * Set HTTP status header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
 * @uses apply_filters() Calls 'status_header' on status header string, HTTP
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
 *		HTTP code, HTTP code description, and protocol string as separate
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
 *		parameters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
 * @param int $header HTTP status code
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
 * @return unknown
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
function status_header( $header ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
	$text = get_status_header_desc( $header );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
	if ( empty( $text ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
	$protocol = $_SERVER["SERVER_PROTOCOL"];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
	if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
		$protocol = 'HTTP/1.0';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
	$status_header = "$protocol $header $text";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
	if ( function_exists( 'apply_filters' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
		$status_header = apply_filters( 'status_header', $status_header, $header, $text, $protocol );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
	return @header( $status_header, true, $header );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
 * Gets the header information to prevent caching.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
 * The several different headers cover the different ways cache prevention is handled
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
 * by different browsers
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
 * @since 2.8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
 * @uses apply_filters()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
 * @return array The associative array of header names and field values.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
function wp_get_nocache_headers() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
	$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
		'Expires' => 'Wed, 11 Jan 1984 05:00:00 GMT',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
		'Cache-Control' => 'no-cache, must-revalidate, max-age=0',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
		'Pragma' => 'no-cache',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
	if ( function_exists('apply_filters') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
		$headers = (array) apply_filters('nocache_headers', $headers);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
	$headers['Last-Modified'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
	return $headers;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
 * Sets the headers to prevent caching for the different browsers.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
 * Different browsers support different nocache headers, so several headers must
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
 * be sent so that all of them get the point that no caching should occur.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
 * @uses wp_get_nocache_headers()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
function nocache_headers() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
	$headers = wp_get_nocache_headers();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
	unset( $headers['Last-Modified'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
	// In PHP 5.3+, make sure we are not sending a Last-Modified header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
	if ( function_exists( 'header_remove' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
		@header_remove( 'Last-Modified' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
		// In PHP 5.2, send an empty Last-Modified header, but only as a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
		// last resort to override a header already sent. #WP23021
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
		foreach ( headers_list() as $header ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
			if ( 0 === stripos( $header, 'Last-Modified' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
				$headers['Last-Modified'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
	foreach( $headers as $name => $field_value )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
		@header("{$name}: {$field_value}");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
 * Set the headers for caching for 10 days with JavaScript content type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
function cache_javascript_headers() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
	$expiresOffset = 10 * DAY_IN_SECONDS;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
	header( "Content-Type: text/javascript; charset=" . get_bloginfo( 'charset' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
	header( "Vary: Accept-Encoding" ); // Handle proxies
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
	header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $expiresOffset ) . " GMT" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
 * Retrieve the number of database queries during the WordPress execution.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
 * @return int Number of database queries
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
function get_num_queries() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
	return $wpdb->num_queries;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
 * Whether input is yes or no. Must be 'y' to be true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
 * @since 1.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
 * @param string $yn Character string containing either 'y' or 'n'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
 * @return bool True if yes, false on anything else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
function bool_from_yn( $yn ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
	return ( strtolower( $yn ) == 'y' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
 * Loads the feed template from the use of an action hook.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
 * If the feed action does not have a hook, then the function will die with a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
 * message telling the visitor that the feed is not valid.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
 * It is better to only have one hook for each feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
 * @uses $wp_query Used to tell if the use a comment feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
 * @uses do_action() Calls 'do_feed_$feed' hook, if a hook exists for the feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
function do_feed() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
	global $wp_query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
	$feed = get_query_var( 'feed' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
	// Remove the pad, if present.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
	$feed = preg_replace( '/^_+/', '', $feed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
	if ( $feed == '' || $feed == 'feed' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
		$feed = get_default_feed();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
	$hook = 'do_feed_' . $feed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
	if ( ! has_action( $hook ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
		wp_die( __( 'ERROR: This is not a valid feed template.' ), '', array( 'response' => 404 ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
	do_action( $hook, $wp_query->is_comment_feed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
 * Load the RDF RSS 0.91 Feed template.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
function do_feed_rdf() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
	load_template( ABSPATH . WPINC . '/feed-rdf.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
 * Load the RSS 1.0 Feed Template.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
function do_feed_rss() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
	load_template( ABSPATH . WPINC . '/feed-rss.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
 * Load either the RSS2 comment feed or the RSS2 posts feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
 * @param bool $for_comments True for the comment feed, false for normal feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
function do_feed_rss2( $for_comments ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
	if ( $for_comments )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
		load_template( ABSPATH . WPINC . '/feed-rss2-comments.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
		load_template( ABSPATH . WPINC . '/feed-rss2.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
 * Load either Atom comment feed or Atom posts feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
 * @param bool $for_comments True for the comment feed, false for normal feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
function do_feed_atom( $for_comments ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
	if ($for_comments)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
		load_template( ABSPATH . WPINC . '/feed-atom-comments.php');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
		load_template( ABSPATH . WPINC . '/feed-atom.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
 * Display the robots.txt file content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
 * The echo content should be with usage of the permalinks or for creating the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
 * robots.txt file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
 * @uses do_action() Calls 'do_robotstxt' hook for displaying robots.txt rules.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
function do_robots() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
	header( 'Content-Type: text/plain; charset=utf-8' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
	do_action( 'do_robotstxt' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
	$output = "User-agent: *\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
	$public = get_option( 'blog_public' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
	if ( '0' == $public ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
		$output .= "Disallow: /\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
		$site_url = parse_url( site_url() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
		$path = ( !empty( $site_url['path'] ) ) ? $site_url['path'] : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
		$output .= "Disallow: $path/wp-admin/\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
		$output .= "Disallow: $path/wp-includes/\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
	echo apply_filters('robots_txt', $output, $public);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
 * Test whether blog is already installed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
 * The cache will be checked first. If you have a cache plugin, which saves the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
 * cache values, then this will work. If you use the default WordPress cache,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
 * and the database goes away, then you might have problems.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
 * Checks for the option siteurl for whether WordPress is installed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
 * @uses $wpdb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
 * @return bool Whether blog is already installed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
function is_blog_installed() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
	// Check cache first. If options table goes away and we have true cached, oh well.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
	if ( wp_cache_get( 'is_blog_installed' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
	$suppress = $wpdb->suppress_errors();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
	if ( ! defined( 'WP_INSTALLING' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
		$alloptions = wp_load_alloptions();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
	// If siteurl is not set to autoload, check it specifically
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
	if ( !isset( $alloptions['siteurl'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
		$installed = $wpdb->get_var( "SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl'" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
		$installed = $alloptions['siteurl'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
	$wpdb->suppress_errors( $suppress );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
	$installed = !empty( $installed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
	wp_cache_set( 'is_blog_installed', $installed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
	if ( $installed )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
	// If visiting repair.php, return true and let it take over.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
	if ( defined( 'WP_REPAIRING' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
	$suppress = $wpdb->suppress_errors();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
	// Loop over the WP tables. If none exist, then scratch install is allowed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
	// If one or more exist, suggest table repair since we got here because the options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
	// table could not be accessed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
	$wp_tables = $wpdb->tables();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
	foreach ( $wp_tables as $table ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
		// The existence of custom user tables shouldn't suggest an insane state or prevent a clean install.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
		if ( defined( 'CUSTOM_USER_TABLE' ) && CUSTOM_USER_TABLE == $table )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
		if ( defined( 'CUSTOM_USER_META_TABLE' ) && CUSTOM_USER_META_TABLE == $table )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
		if ( ! $wpdb->get_results( "DESCRIBE $table;" ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
		// One or more tables exist. We are insane.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
		wp_load_translations_early();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
		// Die with a DB error.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
		$wpdb->error = sprintf( __( 'One or more database tables are unavailable. The database may need to be <a href="%s">repaired</a>.' ), 'maint/repair.php?referrer=is_blog_installed' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
		dead_db();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
	$wpdb->suppress_errors( $suppress );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
	wp_cache_set( 'is_blog_installed', false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
 * Retrieve URL with nonce added to URL query.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
 * @subpackage Security
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
 * @param string $actionurl URL to add nonce action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
 * @param string $action Optional. Nonce action name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
 * @param string $name Optional. Nonce name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
 * @return string URL with nonce action added.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
function wp_nonce_url( $actionurl, $action = -1, $name = '_wpnonce' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
	$actionurl = str_replace( '&amp;', '&', $actionurl );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
	return esc_html( add_query_arg( $name, wp_create_nonce( $action ), $actionurl ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
 * Retrieve or display nonce hidden field for forms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
 * The nonce field is used to validate that the contents of the form came from
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
 * the location on the current site and not somewhere else. The nonce does not
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
 * offer absolute protection, but should protect against most cases. It is very
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
 * important to use nonce field in forms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
 * The $action and $name are optional, but if you want to have better security,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
 * it is strongly suggested to set those two parameters. It is easier to just
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
 * call the function without any parameters, because validation of the nonce
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
 * doesn't require any parameters, but since crackers know what the default is
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
 * it won't be difficult for them to find a way around your nonce and cause
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
 * damage.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
 * The input name will be whatever $name value you gave. The input value will be
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
 * the nonce creation value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
 * @subpackage Security
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
 * @param string $action Optional. Action name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
 * @param string $name Optional. Nonce name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
 * @param bool $referer Optional, default true. Whether to set the referer field for validation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
 * @param bool $echo Optional, default true. Whether to display or return hidden form field.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
 * @return string Nonce field.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
function wp_nonce_field( $action = -1, $name = "_wpnonce", $referer = true , $echo = true ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
	$name = esc_attr( $name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
	$nonce_field = '<input type="hidden" id="' . $name . '" name="' . $name . '" value="' . wp_create_nonce( $action ) . '" />';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
	if ( $referer )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
		$nonce_field .= wp_referer_field( false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
	if ( $echo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
		echo $nonce_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
	return $nonce_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
 * Retrieve or display referer hidden field for forms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
 * The referer link is the current Request URI from the server super global. The
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
 * input name is '_wp_http_referer', in case you wanted to check manually.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
 * @subpackage Security
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
 * @param bool $echo Whether to echo or return the referer field.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
 * @return string Referer field.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
function wp_referer_field( $echo = true ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
	$referer_field = '<input type="hidden" name="_wp_http_referer" value="'. esc_attr( wp_unslash( $_SERVER['REQUEST_URI'] ) ) . '" />';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
	if ( $echo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
		echo $referer_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
	return $referer_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
 * Retrieve or display original referer hidden field for forms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
 * The input name is '_wp_original_http_referer' and will be either the same
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
 * value of {@link wp_referer_field()}, if that was posted already or it will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
 * be the current page, if it doesn't exist.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
 * @subpackage Security
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
 * @param bool $echo Whether to echo the original http referer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
 * @param string $jump_back_to Optional, default is 'current'. Can be 'previous' or page you want to jump back to.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
 * @return string Original referer field.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
function wp_original_referer_field( $echo = true, $jump_back_to = 'current' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
	if ( ! $ref = wp_get_original_referer() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
		$ref = 'previous' == $jump_back_to ? wp_get_referer() : wp_unslash( $_SERVER['REQUEST_URI'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
	$orig_referer_field = '<input type="hidden" name="_wp_original_http_referer" value="' . esc_attr( $ref ) . '" />';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
	if ( $echo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
		echo $orig_referer_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
	return $orig_referer_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
 * Retrieve referer from '_wp_http_referer' or HTTP referer. If it's the same
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
 * as the current request URL, will return false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
 * @subpackage Security
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
 * @return string|bool False on failure. Referer URL on success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
function wp_get_referer() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
	if ( ! function_exists( 'wp_validate_redirect' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
	$ref = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
	if ( ! empty( $_REQUEST['_wp_http_referer'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
		$ref = wp_unslash( $_REQUEST['_wp_http_referer'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
	else if ( ! empty( $_SERVER['HTTP_REFERER'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
		$ref = wp_unslash( $_SERVER['HTTP_REFERER'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
	if ( $ref && $ref !== wp_unslash( $_SERVER['REQUEST_URI'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
		return wp_validate_redirect( $ref, false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
 * Retrieve original referer that was posted, if it exists.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
 * @subpackage Security
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
 * @return string|bool False if no original referer or original referer if set.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
function wp_get_original_referer() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
	if ( ! empty( $_REQUEST['_wp_original_http_referer'] ) && function_exists( 'wp_validate_redirect' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
		return wp_validate_redirect( wp_unslash( $_REQUEST['_wp_original_http_referer'] ), false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
 * Recursive directory creation based on full path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
 * Will attempt to set permissions on folders.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
 * @since 2.0.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
 * @param string $target Full path to attempt to create.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
 * @return bool Whether the path was created. True if path already exists.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
function wp_mkdir_p( $target ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
	$wrapper = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
	// strip the protocol
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
	if( wp_is_stream( $target ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
		list( $wrapper, $target ) = explode( '://', $target, 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
	// from php.net/mkdir user contributed notes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
	$target = str_replace( '//', '/', $target );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
	// put the wrapper back on the target
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
	if( $wrapper !== null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
		$target = $wrapper . '://' . $target;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
	// safe mode fails with a trailing slash under certain PHP versions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
	$target = rtrim($target, '/'); // Use rtrim() instead of untrailingslashit to avoid formatting.php dependency.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
	if ( empty($target) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
		$target = '/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
	if ( file_exists( $target ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
		return @is_dir( $target );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
	// We need to find the permissions of the parent folder that exists and inherit that.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
	$target_parent = dirname( $target );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
	while ( '.' != $target_parent && ! is_dir( $target_parent ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
		$target_parent = dirname( $target_parent );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
	// Get the permission bits.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
	if ( $target_parent && '.' != $target_parent ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
		$stat = @stat( $target_parent );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
		$dir_perms = $stat['mode'] & 0007777;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
		$dir_perms = 0777;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
	if ( @mkdir( $target, $dir_perms, true ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
 * Test if a give filesystem path is absolute ('/foo/bar', 'c:\windows').
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
 * @param string $path File path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
 * @return bool True if path is absolute, false is not absolute.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
function path_is_absolute( $path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
	// this is definitive if true but fails if $path does not exist or contains a symbolic link
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
	if ( realpath($path) == $path )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
	if ( strlen($path) == 0 || $path[0] == '.' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
	// windows allows absolute paths like this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
	if ( preg_match('#^[a-zA-Z]:\\\\#', $path) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
	// a path starting with / or \ is absolute; anything else is relative
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
	return ( $path[0] == '/' || $path[0] == '\\' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
 * Join two filesystem paths together (e.g. 'give me $path relative to $base').
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
 * If the $path is absolute, then it the full path is returned.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
 * @param string $base
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
 * @param string $path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
 * @return string The path with the base or absolute path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
function path_join( $base, $path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
	if ( path_is_absolute($path) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
		return $path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
	return rtrim($base, '/') . '/' . ltrim($path, '/');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
 * Determines a writable directory for temporary files.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
 * Function's preference is the return value of <code>sys_get_temp_dir()</code>,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
 * followed by your PHP temporary upload directory, followed by WP_CONTENT_DIR,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
 * before finally defaulting to /tmp/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
 * In the event that this function does not find a writable location,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
 * It may be overridden by the <code>WP_TEMP_DIR</code> constant in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
 * your <code>wp-config.php</code> file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
 * @return string Writable temporary directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
function get_temp_dir() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
	static $temp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
	if ( defined('WP_TEMP_DIR') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
		return trailingslashit(WP_TEMP_DIR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
	if ( $temp )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
		return trailingslashit( rtrim( $temp, '\\' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
	if ( function_exists('sys_get_temp_dir') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
		$temp = sys_get_temp_dir();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
		if ( @is_dir( $temp ) && wp_is_writable( $temp ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
			return trailingslashit( rtrim( $temp, '\\' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
	$temp = ini_get('upload_tmp_dir');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
	if ( @is_dir( $temp ) && wp_is_writable( $temp ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
		return trailingslashit( rtrim( $temp, '\\' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
	$temp = WP_CONTENT_DIR . '/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
	if ( is_dir( $temp ) && wp_is_writable( $temp ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
		return $temp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
	$temp = '/tmp/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
	return $temp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
 * Determine if a directory is writable.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
 * This function is used to work around certain ACL issues
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
 * in PHP primarily affecting Windows Servers.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
 * @see win_is_writable()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
 * @param string $path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
function wp_is_writable( $path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
	if ( 'WIN' === strtoupper( substr( PHP_OS, 0, 3 ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
		return win_is_writable( $path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
		return @is_writable( $path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
 * Workaround for Windows bug in is_writable() function
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
 * PHP has issues with Windows ACL's for determine if a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
 * directory is writable or not, this works around them by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
 * checking the ability to open files rather than relying
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
 * upon PHP to interprate the OS ACL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
 * @link http://bugs.php.net/bug.php?id=27609
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
 * @link http://bugs.php.net/bug.php?id=30931
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
 * @since 2.8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
 * @param string $path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
function win_is_writable( $path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
	if ( $path[strlen( $path ) - 1] == '/' ) // if it looks like a directory, check a random file within the directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
		return win_is_writable( $path . uniqid( mt_rand() ) . '.tmp');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
	else if ( is_dir( $path ) ) // If it's a directory (and not a file) check a random file within the directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
		return win_is_writable( $path . '/' . uniqid( mt_rand() ) . '.tmp' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
	// check tmp file for read/write capabilities
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
	$should_delete_tmp_file = !file_exists( $path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
	$f = @fopen( $path, 'a' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
	if ( $f === false )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
	fclose( $f );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
	if ( $should_delete_tmp_file )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
		unlink( $path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
	return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
 * Get an array containing the current upload directory's path and url.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
 * Checks the 'upload_path' option, which should be from the web root folder,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
 * and if it isn't empty it will be used. If it is empty, then the path will be
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
 * 'WP_CONTENT_DIR/uploads'. If the 'UPLOADS' constant is defined, then it will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
 * override the 'upload_path' option and 'WP_CONTENT_DIR/uploads' path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
 * The upload URL path is set either by the 'upload_url_path' option or by using
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
 * the 'WP_CONTENT_URL' constant and appending '/uploads' to the path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
 * If the 'uploads_use_yearmonth_folders' is set to true (checkbox if checked in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
 * the administration settings panel), then the time will be used. The format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
 * will be year first and then month.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1540
 * If the path couldn't be created, then an error will be returned with the key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
 * 'error' containing the error message. The error suggests that the parent
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
 * directory is not writable by the server.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1544
 * On success, the returned array will have many indices:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
 * 'path' - base directory and sub directory or full path to upload directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
 * 'url' - base url and sub directory or absolute URL to upload directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
 * 'subdir' - sub directory if uploads use year/month folders option is on.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
 * 'basedir' - path without subdir.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
 * 'baseurl' - URL path without subdir.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
 * 'error' - set to false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
 * @uses apply_filters() Calls 'upload_dir' on returned array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
 * @param string $time Optional. Time formatted in 'yyyy/mm'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
 * @return array See above for description.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
function wp_upload_dir( $time = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
	$siteurl = get_option( 'siteurl' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
	$upload_path = trim( get_option( 'upload_path' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
	if ( empty( $upload_path ) || 'wp-content/uploads' == $upload_path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
		$dir = WP_CONTENT_DIR . '/uploads';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
	} elseif ( 0 !== strpos( $upload_path, ABSPATH ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
		// $dir is absolute, $upload_path is (maybe) relative to ABSPATH
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
		$dir = path_join( ABSPATH, $upload_path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
		$dir = $upload_path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
	if ( !$url = get_option( 'upload_url_path' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
		if ( empty($upload_path) || ( 'wp-content/uploads' == $upload_path ) || ( $upload_path == $dir ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
			$url = WP_CONTENT_URL . '/uploads';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
			$url = trailingslashit( $siteurl ) . $upload_path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
	// Obey the value of UPLOADS. This happens as long as ms-files rewriting is disabled.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
	// We also sometimes obey UPLOADS when rewriting is enabled -- see the next block.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
	if ( defined( 'UPLOADS' ) && ! ( is_multisite() && get_site_option( 'ms_files_rewriting' ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
		$dir = ABSPATH . UPLOADS;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
		$url = trailingslashit( $siteurl ) . UPLOADS;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
	// If multisite (and if not the main site in a post-MU network)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
	if ( is_multisite() && ! ( is_main_network() && is_main_site() && defined( 'MULTISITE' ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
		if ( ! get_site_option( 'ms_files_rewriting' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
			// If ms-files rewriting is disabled (networks created post-3.5), it is fairly straightforward:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
			// Append sites/%d if we're not on the main site (for post-MU networks). (The extra directory
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
			// prevents a four-digit ID from conflicting with a year-based directory for the main site.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
			// But if a MU-era network has disabled ms-files rewriting manually, they don't need the extra
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
			// directory, as they never had wp-content/uploads for the main site.)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
			if ( defined( 'MULTISITE' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
				$ms_dir = '/sites/' . get_current_blog_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
				$ms_dir = '/' . get_current_blog_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
			$dir .= $ms_dir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
			$url .= $ms_dir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
		} elseif ( defined( 'UPLOADS' ) && ! ms_is_switched() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
			// Handle the old-form ms-files.php rewriting if the network still has that enabled.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
			// When ms-files rewriting is enabled, then we only listen to UPLOADS when:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
			//   1) we are not on the main site in a post-MU network,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
			//      as wp-content/uploads is used there, and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
			//   2) we are not switched, as ms_upload_constants() hardcodes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
			//      these constants to reflect the original blog ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
			//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
			// Rather than UPLOADS, we actually use BLOGUPLOADDIR if it is set, as it is absolute.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
			// (And it will be set, see ms_upload_constants().) Otherwise, UPLOADS can be used, as
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
			// as it is relative to ABSPATH. For the final piece: when UPLOADS is used with ms-files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
			// rewriting in multisite, the resulting URL is /files. (#WP22702 for background.)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
			if ( defined( 'BLOGUPLOADDIR' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
				$dir = untrailingslashit( BLOGUPLOADDIR );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
				$dir = ABSPATH . UPLOADS;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
			$url = trailingslashit( $siteurl ) . 'files';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
	$basedir = $dir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
	$baseurl = $url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
	$subdir = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
	if ( get_option( 'uploads_use_yearmonth_folders' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
		// Generate the yearly and monthly dirs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
		if ( !$time )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
			$time = current_time( 'mysql' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
		$y = substr( $time, 0, 4 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
		$m = substr( $time, 5, 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
		$subdir = "/$y/$m";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
	$dir .= $subdir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
	$url .= $subdir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
	$uploads = apply_filters( 'upload_dir',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
		array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
			'path'    => $dir,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
			'url'     => $url,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
			'subdir'  => $subdir,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
			'basedir' => $basedir,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
			'baseurl' => $baseurl,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
			'error'   => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
		) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
	// Make sure we have an uploads dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
	if ( ! wp_mkdir_p( $uploads['path'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
		if ( 0 === strpos( $uploads['basedir'], ABSPATH ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
			$error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
			$error_path = basename( $uploads['basedir'] ) . $uploads['subdir'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
		$message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $error_path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
		$uploads['error'] = $message;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
	return $uploads;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
 * Get a filename that is sanitized and unique for the given directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
 * If the filename is not unique, then a number will be added to the filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
 * before the extension, and will continue adding numbers until the filename is
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
 * unique.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
 * The callback is passed three parameters, the first one is the directory, the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
 * second is the filename, and the third is the extension.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1676
 * @param string $dir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
 * @param string $filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1678
 * @param mixed $unique_filename_callback Callback.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1679
 * @return string New filename, if given wasn't unique.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1680
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
	// sanitize the file name before we begin processing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
	$filename = sanitize_file_name($filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
	// separate the filename into a name and extension
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
	$info = pathinfo($filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
	$ext = !empty($info['extension']) ? '.' . $info['extension'] : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
	$name = basename($filename, $ext);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
	// edge case: if file is named '.ext', treat as an empty name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
	if ( $name === $ext )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
		$name = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
	// Increment the file number until we have a unique file to save in $dir. Use callback if supplied.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
	if ( $unique_filename_callback && is_callable( $unique_filename_callback ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
		$filename = call_user_func( $unique_filename_callback, $dir, $name, $ext );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
		$number = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
		// change '.ext' to lower case
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
		if ( $ext && strtolower($ext) != $ext ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
			$ext2 = strtolower($ext);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
			$filename2 = preg_replace( '|' . preg_quote($ext) . '$|', $ext2, $filename );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
			// check for both lower and upper case extension or image sub-sizes may be overwritten
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
			while ( file_exists($dir . "/$filename") || file_exists($dir . "/$filename2") ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
				$new_number = $number + 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
				$filename = str_replace( "$number$ext", "$new_number$ext", $filename );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
				$filename2 = str_replace( "$number$ext2", "$new_number$ext2", $filename2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
				$number = $new_number;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
			return $filename2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
		while ( file_exists( $dir . "/$filename" ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
			if ( '' == "$number$ext" )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
				$filename = $filename . ++$number . $ext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
				$filename = str_replace( "$number$ext", ++$number . $ext, $filename );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
	return $filename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
 * Create a file in the upload folder with given content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
 * If there is an error, then the key 'error' will exist with the error message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
 * If success, then the key 'file' will have the unique file path, the 'url' key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
 * will have the link to the new file. and the 'error' key will be set to false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
 * This function will not move an uploaded file to the upload folder. It will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
 * create a new file with the content in $bits parameter. If you move the upload
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
 * file, read the content of the uploaded file, and then you can give the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
 * filename and content to this function, which will add it to the upload
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
 * folder.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
 * The permissions will be set on the new file automatically by this function.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
 * @param string $name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
 * @param null $deprecated Never used. Set to null.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
 * @param mixed $bits File content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
 * @param string $time Optional. Time formatted in 'yyyy/mm'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
function wp_upload_bits( $name, $deprecated, $bits, $time = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
	if ( !empty( $deprecated ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
		_deprecated_argument( __FUNCTION__, '2.0' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
	if ( empty( $name ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
		return array( 'error' => __( 'Empty filename' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
	$wp_filetype = wp_check_filetype( $name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
	if ( ! $wp_filetype['ext'] && ! current_user_can( 'unfiltered_upload' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
		return array( 'error' => __( 'Invalid file type' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
	$upload = wp_upload_dir( $time );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
	if ( $upload['error'] !== false )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
		return $upload;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
	$upload_bits_error = apply_filters( 'wp_upload_bits', array( 'name' => $name, 'bits' => $bits, 'time' => $time ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
	if ( !is_array( $upload_bits_error ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
		$upload[ 'error' ] = $upload_bits_error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
		return $upload;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
	$filename = wp_unique_filename( $upload['path'], $name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
	$new_file = $upload['path'] . "/$filename";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
	if ( ! wp_mkdir_p( dirname( $new_file ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
		if ( 0 === strpos( $upload['basedir'], ABSPATH ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
			$error_path = str_replace( ABSPATH, '', $upload['basedir'] ) . $upload['subdir'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1777
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1778
			$error_path = basename( $upload['basedir'] ) . $upload['subdir'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1780
		$message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $error_path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
		return array( 'error' => $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1784
	$ifp = @ fopen( $new_file, 'wb' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1785
	if ( ! $ifp )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
		return array( 'error' => sprintf( __( 'Could not write file %s' ), $new_file ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
	@fwrite( $ifp, $bits );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
	fclose( $ifp );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
	clearstatcache();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
	// Set correct file permissions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
	$stat = @ stat( dirname( $new_file ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
	$perms = $stat['mode'] & 0007777;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
	$perms = $perms & 0000666;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
	@ chmod( $new_file, $perms );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
	clearstatcache();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
	// Compute the URL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
	$url = $upload['url'] . "/$filename";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
	return array( 'file' => $new_file, 'url' => $url, 'error' => false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1804
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1806
 * Retrieve the file type based on the extension name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
 * @uses apply_filters() Calls 'ext2type' hook on default supported types.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1812
 * @param string $ext The extension to search.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
 * @return string|null The file type, example: audio, video, document, spreadsheet, etc. Null if not found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1814
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
function wp_ext2type( $ext ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1816
	$ext = strtolower( $ext );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1817
	$ext2type = apply_filters( 'ext2type', array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1818
		'image'       => array( 'jpg', 'jpeg', 'jpe',  'gif',  'png',  'bmp',   'tif',  'tiff', 'ico' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1819
		'audio'       => array( 'aac', 'ac3',  'aif',  'aiff', 'm3a',  'm4a',   'm4b',  'mka',  'mp1',  'mp2',  'mp3', 'ogg', 'oga', 'ram', 'wav', 'wma' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
		'video'       => array( 'asf', 'avi',  'divx', 'dv',   'flv',  'm4v',   'mkv',  'mov',  'mp4',  'mpeg', 'mpg', 'mpv', 'ogm', 'ogv', 'qt',  'rm', 'vob', 'wmv' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
		'document'    => array( 'doc', 'docx', 'docm', 'dotm', 'odt',  'pages', 'pdf',  'rtf',  'wp',   'wpd' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1822
		'spreadsheet' => array( 'numbers',     'ods',  'xls',  'xlsx', 'xlsm',  'xlsb' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
		'interactive' => array( 'swf', 'key',  'ppt',  'pptx', 'pptm', 'pps',   'ppsx', 'ppsm', 'sldx', 'sldm', 'odp' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
		'text'        => array( 'asc', 'csv',  'tsv',  'txt' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
		'archive'     => array( 'bz2', 'cab',  'dmg',  'gz',   'rar',  'sea',   'sit',  'sqx',  'tar',  'tgz',  'zip', '7z' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
		'code'        => array( 'css', 'htm',  'html', 'php',  'js' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
	) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1829
	foreach ( $ext2type as $type => $exts )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1830
		if ( in_array( $ext, $exts ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1831
			return $type;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1833
	return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
 * Retrieve the file type from the file name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1838
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1839
 * You can optionally define the mime array, if needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1840
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1841
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1842
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1843
 * @param string $filename File name or path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1844
 * @param array $mimes Optional. Key is the file extension with value as the mime type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1845
 * @return array Values with extension first and mime type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1846
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1847
function wp_check_filetype( $filename, $mimes = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1848
	if ( empty($mimes) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1849
		$mimes = get_allowed_mime_types();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1850
	$type = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
	$ext = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1852
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1853
	foreach ( $mimes as $ext_preg => $mime_match ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1854
		$ext_preg = '!\.(' . $ext_preg . ')$!i';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
		if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
			$type = $mime_match;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1857
			$ext = $ext_matches[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1861
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
	return compact( 'ext', 'type' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
 * Attempt to determine the real file type of a file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1867
 * If unable to, the file name extension will be used to determine type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
 * If it's determined that the extension does not match the file's real type,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1870
 * then the "proper_filename" value will be set with a proper filename and extension.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
 * Currently this function only supports validating images known to getimagesize().
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1873
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1874
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1875
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1876
 * @param string $file Full path to the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1877
 * @param string $filename The name of the file (may differ from $file due to $file being in a tmp directory)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1878
 * @param array $mimes Optional. Key is the file extension with value as the mime type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1879
 * @return array Values for the extension, MIME, and either a corrected filename or false if original $filename is valid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1880
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1881
function wp_check_filetype_and_ext( $file, $filename, $mimes = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1883
	$proper_filename = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1884
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1885
	// Do basic extension validation and MIME mapping
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1886
	$wp_filetype = wp_check_filetype( $filename, $mimes );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1887
	extract( $wp_filetype );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1888
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1889
	// We can't do any further validation without a file to work with
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1890
	if ( ! file_exists( $file ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1891
		return compact( 'ext', 'type', 'proper_filename' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1892
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1893
	// We're able to validate images using GD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1894
	if ( $type && 0 === strpos( $type, 'image/' ) && function_exists('getimagesize') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1895
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1896
		// Attempt to figure out what type of image it actually is
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1897
		$imgstats = @getimagesize( $file );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1898
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1899
		// If getimagesize() knows what kind of image it really is and if the real MIME doesn't match the claimed MIME
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1900
		if ( !empty($imgstats['mime']) && $imgstats['mime'] != $type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1901
			// This is a simplified array of MIMEs that getimagesize() can detect and their extensions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1902
			// You shouldn't need to use this filter, but it's here just in case
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1903
			$mime_to_ext = apply_filters( 'getimagesize_mimes_to_exts', array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1904
				'image/jpeg' => 'jpg',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1905
				'image/png'  => 'png',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1906
				'image/gif'  => 'gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
				'image/bmp'  => 'bmp',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1908
				'image/tiff' => 'tif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
			) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
			// Replace whatever is after the last period in the filename with the correct extension
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
			if ( ! empty( $mime_to_ext[ $imgstats['mime'] ] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
				$filename_parts = explode( '.', $filename );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1914
				array_pop( $filename_parts );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1915
				$filename_parts[] = $mime_to_ext[ $imgstats['mime'] ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1916
				$new_filename = implode( '.', $filename_parts );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1917
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1918
				if ( $new_filename != $filename )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1919
					$proper_filename = $new_filename; // Mark that it changed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1920
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1921
				// Redefine the extension / MIME
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1922
				$wp_filetype = wp_check_filetype( $new_filename, $mimes );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1923
				extract( $wp_filetype );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1924
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1925
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1926
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1927
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1928
	// Let plugins try and validate other types of files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1929
	// Should return an array in the style of array( 'ext' => $ext, 'type' => $type, 'proper_filename' => $proper_filename )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1930
	return apply_filters( 'wp_check_filetype_and_ext', compact( 'ext', 'type', 'proper_filename' ), $file, $filename, $mimes );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1931
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1932
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1933
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1934
 * Retrieve list of mime types and file extensions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1935
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1936
 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1937
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1938
 * @uses apply_filters() Calls 'mime_types' on returned array. This filter should
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1939
 * be used to add types, not remove them. To remove types use the upload_mimes filter.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1940
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1941
 * @return array Array of mime types keyed by the file extension regex corresponding to those types.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1942
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1943
function wp_get_mime_types() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1944
	// Accepted MIME types are set here as PCRE unless provided.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1945
	return apply_filters( 'mime_types', array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1946
	// Image formats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1947
	'jpg|jpeg|jpe' => 'image/jpeg',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1948
	'gif' => 'image/gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1949
	'png' => 'image/png',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1950
	'bmp' => 'image/bmp',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1951
	'tif|tiff' => 'image/tiff',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1952
	'ico' => 'image/x-icon',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1953
	// Video formats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1954
	'asf|asx' => 'video/x-ms-asf',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1955
	'wmv' => 'video/x-ms-wmv',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1956
	'wmx' => 'video/x-ms-wmx',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1957
	'wm' => 'video/x-ms-wm',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1958
	'avi' => 'video/avi',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1959
	'divx' => 'video/divx',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1960
	'flv' => 'video/x-flv',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1961
	'mov|qt' => 'video/quicktime',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1962
	'mpeg|mpg|mpe' => 'video/mpeg',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1963
	'mp4|m4v' => 'video/mp4',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1964
	'ogv' => 'video/ogg',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1965
	'webm' => 'video/webm',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1966
	'mkv' => 'video/x-matroska',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1967
	// Text formats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1968
	'txt|asc|c|cc|h' => 'text/plain',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1969
	'csv' => 'text/csv',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1970
	'tsv' => 'text/tab-separated-values',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1971
	'ics' => 'text/calendar',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1972
	'rtx' => 'text/richtext',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1973
	'css' => 'text/css',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1974
	'htm|html' => 'text/html',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1975
	// Audio formats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1976
	'mp3|m4a|m4b' => 'audio/mpeg',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1977
	'ra|ram' => 'audio/x-realaudio',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1978
	'wav' => 'audio/wav',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1979
	'ogg|oga' => 'audio/ogg',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1980
	'mid|midi' => 'audio/midi',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1981
	'wma' => 'audio/x-ms-wma',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1982
	'wax' => 'audio/x-ms-wax',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1983
	'mka' => 'audio/x-matroska',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1984
	// Misc application formats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1985
	'rtf' => 'application/rtf',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1986
	'js' => 'application/javascript',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1987
	'pdf' => 'application/pdf',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1988
	'swf' => 'application/x-shockwave-flash',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1989
	'class' => 'application/java',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1990
	'tar' => 'application/x-tar',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1991
	'zip' => 'application/zip',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1992
	'gz|gzip' => 'application/x-gzip',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1993
	'rar' => 'application/rar',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1994
	'7z' => 'application/x-7z-compressed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1995
	'exe' => 'application/x-msdownload',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1996
	// MS Office formats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1997
	'doc' => 'application/msword',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1998
	'pot|pps|ppt' => 'application/vnd.ms-powerpoint',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1999
	'wri' => 'application/vnd.ms-write',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2000
	'xla|xls|xlt|xlw' => 'application/vnd.ms-excel',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2001
	'mdb' => 'application/vnd.ms-access',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2002
	'mpp' => 'application/vnd.ms-project',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2003
	'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2004
	'docm' => 'application/vnd.ms-word.document.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2005
	'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2006
	'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2007
	'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2008
	'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2009
	'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2010
	'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2011
	'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2012
	'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2013
	'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2014
	'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2015
	'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2016
	'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2017
	'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2018
	'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2019
	'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2020
	'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2021
	'sldm' => 'application/vnd.ms-powerpoint.slide.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2022
	'onetoc|onetoc2|onetmp|onepkg' => 'application/onenote',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2023
	// OpenOffice formats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2024
	'odt' => 'application/vnd.oasis.opendocument.text',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2025
	'odp' => 'application/vnd.oasis.opendocument.presentation',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2026
	'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2027
	'odg' => 'application/vnd.oasis.opendocument.graphics',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2028
	'odc' => 'application/vnd.oasis.opendocument.chart',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2029
	'odb' => 'application/vnd.oasis.opendocument.database',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2030
	'odf' => 'application/vnd.oasis.opendocument.formula',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2031
	// WordPerfect formats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2032
	'wp|wpd' => 'application/wordperfect',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2033
	// iWork formats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2034
	'key' => 'application/vnd.apple.keynote',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2035
	'numbers' => 'application/vnd.apple.numbers',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2036
	'pages' => 'application/vnd.apple.pages',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2037
	) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2038
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2039
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2040
 * Retrieve list of allowed mime types and file extensions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2041
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2042
 * @since 2.8.6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2043
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2044
 * @uses apply_filters() Calls 'upload_mimes' on returned array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2045
 * @uses wp_get_upload_mime_types() to fetch the list of mime types
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2046
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2047
 * @param int|WP_User $user Optional. User to check. Defaults to current user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2048
 * @return array Array of mime types keyed by the file extension regex corresponding to those types.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2049
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2050
function get_allowed_mime_types( $user = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2051
	$t = wp_get_mime_types();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2052
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2053
	unset( $t['swf'], $t['exe'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2054
	if ( function_exists( 'current_user_can' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2055
		$unfiltered = $user ? user_can( $user, 'unfiltered_html' ) : current_user_can( 'unfiltered_html' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2056
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2057
	if ( empty( $unfiltered ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2058
		unset( $t['htm|html'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2059
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2060
	return apply_filters( 'upload_mimes', $t, $user );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2061
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2062
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2063
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2064
 * Display "Are You Sure" message to confirm the action being taken.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2065
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2066
 * If the action has the nonce explain message, then it will be displayed along
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2067
 * with the "Are you sure?" message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2068
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2069
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2070
 * @subpackage Security
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2071
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2072
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2073
 * @param string $action The nonce action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2074
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2075
function wp_nonce_ays( $action ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2076
	$title = __( 'WordPress Failure Notice' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2077
	if ( 'log-out' == $action ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2078
		$html = sprintf( __( 'You are attempting to log out of %s' ), get_bloginfo( 'name' ) ) . '</p><p>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2079
		$html .= sprintf( __( "Do you really want to <a href='%s'>log out</a>?"), wp_logout_url() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2080
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2081
		$html = __( 'Are you sure you want to do this?' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2082
		if ( wp_get_referer() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2083
			$html .= "</p><p><a href='" . esc_url( remove_query_arg( 'updated', wp_get_referer() ) ) . "'>" . __( 'Please try again.' ) . "</a>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2084
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2085
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2086
	wp_die( $html, $title, array('response' => 403) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2087
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2088
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2089
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2090
 * Kill WordPress execution and display HTML message with error message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2091
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2092
 * This function complements the die() PHP function. The difference is that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2093
 * HTML will be displayed to the user. It is recommended to use this function
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2094
 * only, when the execution should not continue any further. It is not
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2095
 * recommended to call this function very often and try to handle as many errors
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2096
 * as possible silently.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2097
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2098
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2099
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2100
 * @param string $message Error message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2101
 * @param string $title Error title.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2102
 * @param string|array $args Optional arguments to control behavior.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2103
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2104
function wp_die( $message = '', $title = '', $args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2105
	if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2106
		$function = apply_filters( 'wp_die_ajax_handler', '_ajax_wp_die_handler' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2107
	elseif ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2108
		$function = apply_filters( 'wp_die_xmlrpc_handler', '_xmlrpc_wp_die_handler' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2109
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2110
		$function = apply_filters( 'wp_die_handler', '_default_wp_die_handler' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2111
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2112
	call_user_func( $function, $message, $title, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2113
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2115
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2116
 * Kill WordPress execution and display HTML message with error message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2117
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2118
 * This is the default handler for wp_die if you want a custom one for your
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2119
 * site then you can overload using the wp_die_handler filter in wp_die
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2120
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2121
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2122
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2123
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2124
 * @param string $message Error message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2125
 * @param string $title Error title.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2126
 * @param string|array $args Optional arguments to control behavior.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2127
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2128
function _default_wp_die_handler( $message, $title = '', $args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2129
	$defaults = array( 'response' => 500 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2130
	$r = wp_parse_args($args, $defaults);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2132
	$have_gettext = function_exists('__');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2134
	if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2135
		if ( empty( $title ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2136
			$error_data = $message->get_error_data();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2137
			if ( is_array( $error_data ) && isset( $error_data['title'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2138
				$title = $error_data['title'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2139
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2140
		$errors = $message->get_error_messages();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2141
		switch ( count( $errors ) ) :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2142
		case 0 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2143
			$message = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2144
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2145
		case 1 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2146
			$message = "<p>{$errors[0]}</p>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2147
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2148
		default :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2149
			$message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2150
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2151
		endswitch;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2152
	} elseif ( is_string( $message ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2153
		$message = "<p>$message</p>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2154
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2155
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2156
	if ( isset( $r['back_link'] ) && $r['back_link'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2157
		$back_text = $have_gettext? __('&laquo; Back') : '&laquo; Back';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2158
		$message .= "\n<p><a href='javascript:history.back()'>$back_text</a></p>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2159
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2160
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2161
	if ( ! did_action( 'admin_head' ) ) :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2162
		if ( !headers_sent() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2163
			status_header( $r['response'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2164
			nocache_headers();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2165
			header( 'Content-Type: text/html; charset=utf-8' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2166
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2168
		if ( empty($title) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2169
			$title = $have_gettext ? __('WordPress &rsaquo; Error') : 'WordPress &rsaquo; Error';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2170
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2171
		$text_direction = 'ltr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2172
		if ( isset($r['text_direction']) && 'rtl' == $r['text_direction'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2173
			$text_direction = 'rtl';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2174
		elseif ( function_exists( 'is_rtl' ) && is_rtl() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2175
			$text_direction = 'rtl';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2176
?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2177
<!DOCTYPE html>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2178
<!-- 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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2179
-->
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2180
<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) && function_exists( 'is_rtl' ) ) language_attributes(); else echo "dir='$text_direction'"; ?>>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2181
<head>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2182
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2183
	<title><?php echo $title ?></title>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2184
	<style type="text/css">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2185
		html {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2186
			background: #f9f9f9;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2187
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2188
		body {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2189
			background: #fff;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2190
			color: #333;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2191
			font-family: sans-serif;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2192
			margin: 2em auto;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2193
			padding: 1em 2em;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2194
			-webkit-border-radius: 3px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2195
			border-radius: 3px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2196
			border: 1px solid #dfdfdf;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2197
			max-width: 700px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2198
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2199
		h1 {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2200
			border-bottom: 1px solid #dadada;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2201
			clear: both;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2202
			color: #666;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2203
			font: 24px Georgia, "Times New Roman", Times, serif;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2204
			margin: 30px 0 0 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2205
			padding: 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2206
			padding-bottom: 7px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2207
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2208
		#error-page {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2209
			margin-top: 50px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2210
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2211
		#error-page p {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2212
			font-size: 14px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2213
			line-height: 1.5;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2214
			margin: 25px 0 20px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2215
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2216
		#error-page code {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2217
			font-family: Consolas, Monaco, monospace;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2218
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2219
		ul li {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2220
			margin-bottom: 10px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2221
			font-size: 14px ;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2222
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2223
		a {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2224
			color: #21759B;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2225
			text-decoration: none;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2226
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2227
		a:hover {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2228
			color: #D54E21;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2229
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2230
		.button {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2231
			display: inline-block;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2232
			text-decoration: none;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2233
			font-size: 14px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2234
			line-height: 23px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2235
			height: 24px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2236
			margin: 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2237
			padding: 0 10px 1px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2238
			cursor: pointer;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2239
			border-width: 1px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2240
			border-style: solid;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2241
			-webkit-border-radius: 3px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2242
			border-radius: 3px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2243
			white-space: nowrap;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2244
			-webkit-box-sizing: border-box;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2245
			-moz-box-sizing:    border-box;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2246
			box-sizing:         border-box;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2247
			background: #f3f3f3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2248
			background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#f4f4f4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2249
			background-image: -webkit-linear-gradient(top, #fefefe, #f4f4f4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2250
			background-image:    -moz-linear-gradient(top, #fefefe, #f4f4f4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2251
			background-image:      -o-linear-gradient(top, #fefefe, #f4f4f4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2252
			background-image:   linear-gradient(to bottom, #fefefe, #f4f4f4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2253
			border-color: #bbb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2254
		 	color: #333;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2255
			text-shadow: 0 1px 0 #fff;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2256
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2257
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2258
		.button.button-large {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2259
			height: 29px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2260
			line-height: 28px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2261
			padding: 0 12px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2262
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2264
		.button:hover,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2265
		.button:focus {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2266
			background: #f3f3f3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2267
			background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2268
			background-image: -webkit-linear-gradient(top, #fff, #f3f3f3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2269
			background-image:    -moz-linear-gradient(top, #fff, #f3f3f3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2270
			background-image:     -ms-linear-gradient(top, #fff, #f3f3f3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2271
			background-image:      -o-linear-gradient(top, #fff, #f3f3f3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2272
			background-image:   linear-gradient(to bottom, #fff, #f3f3f3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2273
			border-color: #999;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2274
			color: #222;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2275
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2276
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2277
		.button:focus  {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2278
			-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2279
			box-shadow: 1px 1px 1px rgba(0,0,0,.2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2280
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2281
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2282
		.button:active {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2283
			outline: none;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2284
			background: #eee;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2285
			background-image: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#fefefe));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2286
			background-image: -webkit-linear-gradient(top, #f4f4f4, #fefefe);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2287
			background-image:    -moz-linear-gradient(top, #f4f4f4, #fefefe);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2288
			background-image:     -ms-linear-gradient(top, #f4f4f4, #fefefe);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2289
			background-image:      -o-linear-gradient(top, #f4f4f4, #fefefe);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2290
			background-image:   linear-gradient(to bottom, #f4f4f4, #fefefe);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2291
			border-color: #999;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2292
			color: #333;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2293
			text-shadow: 0 -1px 0 #fff;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2294
			-webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2295
		 	box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2296
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2297
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2298
		<?php if ( 'rtl' == $text_direction ) : ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2299
		body { font-family: Tahoma, Arial; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2300
		<?php endif; ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2301
	</style>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2302
</head>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2303
<body id="error-page">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2304
<?php endif; // ! did_action( 'admin_head' ) ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2305
	<?php echo $message; ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2306
</body>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2307
</html>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2308
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2309
	die();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2310
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2311
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2312
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2313
 * Kill WordPress execution and display XML message with error message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2314
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2315
 * This is the handler for wp_die when processing XMLRPC requests.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2316
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2317
 * @since 3.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2318
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2319
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2320
 * @param string $message Error message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2321
 * @param string $title Error title.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2322
 * @param string|array $args Optional arguments to control behavior.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2323
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2324
function _xmlrpc_wp_die_handler( $message, $title = '', $args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2325
	global $wp_xmlrpc_server;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2326
	$defaults = array( 'response' => 500 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2328
	$r = wp_parse_args($args, $defaults);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2329
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2330
	if ( $wp_xmlrpc_server ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2331
		$error = new IXR_Error( $r['response'] , $message);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2332
		$wp_xmlrpc_server->output( $error->getXml() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2333
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2334
	die();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2335
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2336
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2337
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2338
 * Kill WordPress ajax execution.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2339
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2340
 * This is the handler for wp_die when processing Ajax requests.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2341
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2342
 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2343
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2344
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2345
 * @param string $message Optional. Response to print.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2346
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2347
function _ajax_wp_die_handler( $message = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2348
	if ( is_scalar( $message ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2349
		die( (string) $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2350
	die( '0' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2351
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2352
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2353
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2354
 * Kill WordPress execution.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2355
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2356
 * This is the handler for wp_die when processing APP requests.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2357
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2358
 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2359
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2360
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2361
 * @param string $message Optional. Response to print.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2362
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2363
function _scalar_wp_die_handler( $message = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2364
	if ( is_scalar( $message ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2365
		die( (string) $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2366
	die();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2367
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2368
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2369
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2370
 * Send a JSON response back to an Ajax request.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2371
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2372
 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2373
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2374
 * @param mixed $response Variable (usually an array or object) to encode as JSON, then print and die.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2375
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2376
function wp_send_json( $response ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2377
	@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2378
	echo json_encode( $response );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2379
	if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2380
		wp_die();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2381
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2382
		die;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2383
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2384
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2385
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2386
 * Send a JSON response back to an Ajax request, indicating success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2387
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2388
 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2389
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2390
 * @param mixed $data Data to encode as JSON, then print and die.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2391
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2392
function wp_send_json_success( $data = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2393
	$response = array( 'success' => true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2394
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2395
	if ( isset( $data ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2396
		$response['data'] = $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2397
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2398
	wp_send_json( $response );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2399
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2400
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2401
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2402
 * Send a JSON response back to an Ajax request, indicating failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2403
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2404
 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2405
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2406
 * @param mixed $data Data to encode as JSON, then print and die.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2407
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2408
function wp_send_json_error( $data = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2409
	$response = array( 'success' => false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2410
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2411
	if ( isset( $data ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2412
		$response['data'] = $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2413
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2414
	wp_send_json( $response );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2415
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2416
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2417
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2418
 * Retrieve the WordPress home page URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2419
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2420
 * If the constant named 'WP_HOME' exists, then it will be used and returned by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2421
 * the function. This can be used to counter the redirection on your local
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2422
 * development environment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2423
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2424
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2425
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2426
 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2427
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2428
 * @param string $url URL for the home location
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2429
 * @return string Homepage location.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2430
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2431
function _config_wp_home( $url = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2432
	if ( defined( 'WP_HOME' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2433
		return untrailingslashit( WP_HOME );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2434
	return $url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2435
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2436
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2437
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2438
 * Retrieve the WordPress site URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2439
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2440
 * If the constant named 'WP_SITEURL' is defined, then the value in that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2441
 * constant will always be returned. This can be used for debugging a site on
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2442
 * your localhost while not having to change the database to your URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2443
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2444
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2445
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2446
 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2447
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2448
 * @param string $url URL to set the WordPress site location.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2449
 * @return string The WordPress Site URL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2450
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2451
function _config_wp_siteurl( $url = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2452
	if ( defined( 'WP_SITEURL' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2453
		return untrailingslashit( WP_SITEURL );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2454
	return $url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2455
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2456
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2457
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2458
 * Set the localized direction for MCE plugin.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2459
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2460
 * Will only set the direction to 'rtl', if the WordPress locale has the text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2461
 * direction set to 'rtl'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2462
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2463
 * Fills in the 'directionality', 'plugins', and 'theme_advanced_button1' array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2464
 * keys. These keys are then returned in the $input array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2465
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2466
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2467
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2468
 * @subpackage MCE
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2469
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2470
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2471
 * @param array $input MCE plugin array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2472
 * @return array Direction set for 'rtl', if needed by locale.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2473
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2474
function _mce_set_direction( $input ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2475
	if ( is_rtl() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2476
		$input['directionality'] = 'rtl';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2477
		$input['plugins'] .= ',directionality';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2478
		$input['theme_advanced_buttons1'] .= ',ltr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2479
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2480
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2481
	return $input;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2482
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2483
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2484
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2485
 * Convert smiley code to the icon graphic file equivalent.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2486
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2487
 * You can turn off smilies, by going to the write setting screen and unchecking
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2488
 * the box, or by setting 'use_smilies' option to false or removing the option.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2489
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2490
 * Plugins may override the default smiley list by setting the $wpsmiliestrans
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2491
 * to an array, with the key the code the blogger types in and the value the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2492
 * image file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2493
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2494
 * The $wp_smiliessearch global is for the regular expression and is set each
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2495
 * time the function is called.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2496
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2497
 * The full list of smilies can be found in the function and won't be listed in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2498
 * the description. Probably should create a Codex page for it, so that it is
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2499
 * available.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2500
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2501
 * @global array $wpsmiliestrans
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2502
 * @global array $wp_smiliessearch
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2503
 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2504
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2505
function smilies_init() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2506
	global $wpsmiliestrans, $wp_smiliessearch;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2507
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2508
	// don't bother setting up smilies if they are disabled
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2509
	if ( !get_option( 'use_smilies' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2510
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2511
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2512
	if ( !isset( $wpsmiliestrans ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2513
		$wpsmiliestrans = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2514
		':mrgreen:' => 'icon_mrgreen.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2515
		':neutral:' => 'icon_neutral.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2516
		':twisted:' => 'icon_twisted.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2517
		  ':arrow:' => 'icon_arrow.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2518
		  ':shock:' => 'icon_eek.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2519
		  ':smile:' => 'icon_smile.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2520
		    ':???:' => 'icon_confused.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2521
		   ':cool:' => 'icon_cool.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2522
		   ':evil:' => 'icon_evil.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2523
		   ':grin:' => 'icon_biggrin.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2524
		   ':idea:' => 'icon_idea.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2525
		   ':oops:' => 'icon_redface.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2526
		   ':razz:' => 'icon_razz.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2527
		   ':roll:' => 'icon_rolleyes.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2528
		   ':wink:' => 'icon_wink.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2529
		    ':cry:' => 'icon_cry.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2530
		    ':eek:' => 'icon_surprised.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2531
		    ':lol:' => 'icon_lol.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2532
		    ':mad:' => 'icon_mad.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2533
		    ':sad:' => 'icon_sad.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2534
		      '8-)' => 'icon_cool.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2535
		      '8-O' => 'icon_eek.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2536
		      ':-(' => 'icon_sad.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2537
		      ':-)' => 'icon_smile.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2538
		      ':-?' => 'icon_confused.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2539
		      ':-D' => 'icon_biggrin.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2540
		      ':-P' => 'icon_razz.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2541
		      ':-o' => 'icon_surprised.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2542
		      ':-x' => 'icon_mad.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2543
		      ':-|' => 'icon_neutral.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2544
		      ';-)' => 'icon_wink.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2545
		// This one transformation breaks regular text with frequency.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2546
		//     '8)' => 'icon_cool.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2547
		       '8O' => 'icon_eek.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2548
		       ':(' => 'icon_sad.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2549
		       ':)' => 'icon_smile.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2550
		       ':?' => 'icon_confused.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2551
		       ':D' => 'icon_biggrin.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2552
		       ':P' => 'icon_razz.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2553
		       ':o' => 'icon_surprised.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2554
		       ':x' => 'icon_mad.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2555
		       ':|' => 'icon_neutral.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2556
		       ';)' => 'icon_wink.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2557
		      ':!:' => 'icon_exclaim.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2558
		      ':?:' => 'icon_question.gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2559
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2560
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2561
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2562
	if (count($wpsmiliestrans) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2563
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2564
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2565
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2566
	/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2567
	 * NOTE: we sort the smilies in reverse key order. This is to make sure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2568
	 * we match the longest possible smilie (:???: vs :?) as the regular
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2569
	 * expression used below is first-match
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2570
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2571
	krsort($wpsmiliestrans);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2572
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2573
	$wp_smiliessearch = '/(?:\s|^)';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2574
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2575
	$subchar = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2576
	foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2577
		$firstchar = substr($smiley, 0, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2578
		$rest = substr($smiley, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2579
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2580
		// new subpattern?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2581
		if ($firstchar != $subchar) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2582
			if ($subchar != '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2583
				$wp_smiliessearch .= ')|(?:\s|^)';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2584
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2585
			$subchar = $firstchar;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2586
			$wp_smiliessearch .= preg_quote($firstchar, '/') . '(?:';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2587
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2588
			$wp_smiliessearch .= '|';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2589
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2590
		$wp_smiliessearch .= preg_quote($rest, '/');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2591
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2592
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2593
	$wp_smiliessearch .= ')(?:\s|$)/m';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2594
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2595
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2596
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2597
 * Merge user defined arguments into defaults array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2598
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2599
 * This function is used throughout WordPress to allow for both string or array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2600
 * to be merged into another array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2601
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2602
 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2603
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2604
 * @param string|array $args Value to merge with $defaults
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2605
 * @param array $defaults Array that serves as the defaults.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2606
 * @return array Merged user defined values with defaults.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2607
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2608
function wp_parse_args( $args, $defaults = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2609
	if ( is_object( $args ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2610
		$r = get_object_vars( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2611
	elseif ( is_array( $args ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2612
		$r =& $args;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2613
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2614
		wp_parse_str( $args, $r );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2615
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2616
	if ( is_array( $defaults ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2617
		return array_merge( $defaults, $r );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2618
	return $r;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2619
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2620
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2621
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2622
 * Clean up an array, comma- or space-separated list of IDs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2623
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2624
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2625
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2626
 * @param array|string $list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2627
 * @return array Sanitized array of IDs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2628
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2629
function wp_parse_id_list( $list ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2630
	if ( !is_array($list) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2631
		$list = preg_split('/[\s,]+/', $list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2632
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2633
	return array_unique(array_map('absint', $list));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2634
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2635
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2636
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2637
 * Extract a slice of an array, given a list of keys.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2638
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2639
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2640
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2641
 * @param array $array The original array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2642
 * @param array $keys The list of keys
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2643
 * @return array The array slice
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2644
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2645
function wp_array_slice_assoc( $array, $keys ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2646
	$slice = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2647
	foreach ( $keys as $key )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2648
		if ( isset( $array[ $key ] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2649
			$slice[ $key ] = $array[ $key ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2650
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2651
	return $slice;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2652
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2653
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2654
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2655
 * Filters a list of objects, based on a set of key => value arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2656
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2657
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2658
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2659
 * @param array $list An array of objects to filter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2660
 * @param array $args An array of key => value arguments to match against each object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2661
 * @param string $operator The logical operation to perform. 'or' means only one element
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2662
 *	from the array needs to match; 'and' means all elements must match. The default is 'and'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2663
 * @param bool|string $field A field from the object to place instead of the entire object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2664
 * @return array A list of objects or object fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2665
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2666
function wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2667
	if ( ! is_array( $list ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2668
		return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2669
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2670
	$list = wp_list_filter( $list, $args, $operator );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2671
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2672
	if ( $field )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2673
		$list = wp_list_pluck( $list, $field );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2674
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2675
	return $list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2676
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2677
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2678
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2679
 * Filters a list of objects, based on a set of key => value arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2680
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2681
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2682
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2683
 * @param array $list An array of objects to filter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2684
 * @param array $args An array of key => value arguments to match against each object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2685
 * @param string $operator The logical operation to perform:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2686
 *    'AND' means all elements from the array must match;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2687
 *    'OR' means only one element needs to match;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2688
 *    'NOT' means no elements may match.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2689
 *   The default is 'AND'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2690
 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2691
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2692
function wp_list_filter( $list, $args = array(), $operator = 'AND' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2693
	if ( ! is_array( $list ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2694
		return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2695
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2696
	if ( empty( $args ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2697
		return $list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2698
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2699
	$operator = strtoupper( $operator );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2700
	$count = count( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2701
	$filtered = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2702
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2703
	foreach ( $list as $key => $obj ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2704
		$to_match = (array) $obj;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2705
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2706
		$matched = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2707
		foreach ( $args as $m_key => $m_value ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2708
			if ( array_key_exists( $m_key, $to_match ) && $m_value == $to_match[ $m_key ] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2709
				$matched++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2710
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2711
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2712
		if ( ( 'AND' == $operator && $matched == $count )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2713
		  || ( 'OR' == $operator && $matched > 0 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2714
		  || ( 'NOT' == $operator && 0 == $matched ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2715
			$filtered[$key] = $obj;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2716
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2717
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2718
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2719
	return $filtered;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2720
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2721
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2722
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2723
 * Pluck a certain field out of each object in a list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2724
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2725
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2726
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2727
 * @param array $list A list of objects or arrays
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2728
 * @param int|string $field A field from the object to place instead of the entire object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2729
 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2730
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2731
function wp_list_pluck( $list, $field ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2732
	foreach ( $list as $key => $value ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2733
		if ( is_object( $value ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2734
			$list[ $key ] = $value->$field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2735
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2736
			$list[ $key ] = $value[ $field ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2737
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2738
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2739
	return $list;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2740
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2741
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2742
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2743
 * Determines if Widgets library should be loaded.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2744
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2745
 * Checks to make sure that the widgets library hasn't already been loaded. If
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2746
 * it hasn't, then it will load the widgets library and run an action hook.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2747
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2748
 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2749
 * @uses add_action() Calls '_admin_menu' hook with 'wp_widgets_add_menu' value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2750
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2751
function wp_maybe_load_widgets() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2752
	if ( ! apply_filters('load_default_widgets', true) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2753
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2754
	require_once( ABSPATH . WPINC . '/default-widgets.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2755
	add_action( '_admin_menu', 'wp_widgets_add_menu' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2756
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2757
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2758
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2759
 * Append the Widgets menu to the themes main menu.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2760
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2761
 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2762
 * @uses $submenu The administration submenu list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2763
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2764
function wp_widgets_add_menu() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2765
	global $submenu;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2766
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2767
	if ( ! current_theme_supports( 'widgets' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2768
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2769
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2770
	$submenu['themes.php'][7] = array( __( 'Widgets' ), 'edit_theme_options', 'widgets.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2771
	ksort( $submenu['themes.php'], SORT_NUMERIC );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2772
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2773
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2774
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2775
 * Flush all output buffers for PHP 5.2.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2776
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2777
 * Make sure all output buffers are flushed before our singletons our destroyed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2778
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2779
 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2780
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2781
function wp_ob_end_flush_all() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2782
	$levels = ob_get_level();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2783
	for ($i=0; $i<$levels; $i++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2784
		ob_end_flush();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2785
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2786
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2787
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2788
 * Load custom DB error or display WordPress DB error.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2789
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2790
 * If a file exists in the wp-content directory named db-error.php, then it will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2791
 * be loaded instead of displaying the WordPress DB error. If it is not found,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2792
 * then the WordPress DB error will be displayed instead.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2793
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2794
 * The WordPress DB error sets the HTTP status header to 500 to try to prevent
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2795
 * search engines from caching the message. Custom DB messages should do the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2796
 * same.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2797
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2798
 * This function was backported to WordPress 2.3.2, but originally was added
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2799
 * in WordPress 2.5.0.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2800
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2801
 * @since 2.3.2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2802
 * @uses $wpdb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2803
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2804
function dead_db() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2805
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2806
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2807
	// Load custom DB error template, if present.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2808
	if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2809
		require_once( WP_CONTENT_DIR . '/db-error.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2810
		die();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2811
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2812
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2813
	// If installing or in the admin, provide the verbose message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2814
	if ( defined('WP_INSTALLING') || defined('WP_ADMIN') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2815
		wp_die($wpdb->error);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2816
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2817
	// Otherwise, be terse.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2818
	status_header( 500 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2819
	nocache_headers();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2820
	header( 'Content-Type: text/html; charset=utf-8' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2821
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2822
	wp_load_translations_early();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2823
?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2824
<!DOCTYPE html>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2825
<html xmlns="http://www.w3.org/1999/xhtml"<?php if ( is_rtl() ) echo ' dir="rtl"'; ?>>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2826
<head>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2827
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2828
	<title><?php _e( 'Database Error' ); ?></title>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2829
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2830
</head>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2831
<body>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2832
	<h1><?php _e( 'Error establishing a database connection' ); ?></h1>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2833
</body>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2834
</html>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2835
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2836
	die();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2837
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2838
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2839
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2840
 * Converts value to nonnegative integer.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2841
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2842
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2843
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2844
 * @param mixed $maybeint Data you wish to have converted to a nonnegative integer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2845
 * @return int An nonnegative integer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2846
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2847
function absint( $maybeint ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2848
	return abs( intval( $maybeint ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2849
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2850
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2851
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2852
 * Determines if the blog can be accessed over SSL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2853
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2854
 * Determines if blog can be accessed over SSL by using cURL to access the site
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2855
 * using the https in the siteurl. Requires cURL extension to work correctly.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2856
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2857
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2858
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2859
 * @param string $url
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2860
 * @return bool Whether SSL access is available
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2861
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2862
function url_is_accessable_via_ssl($url)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2863
{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2864
	if ( in_array( 'curl', get_loaded_extensions() ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2865
		$ssl = set_url_scheme( $url, 'https' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2866
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2867
		$ch = curl_init();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2868
		curl_setopt($ch, CURLOPT_URL, $ssl);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2869
		curl_setopt($ch, CURLOPT_FAILONERROR, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2870
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2871
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2872
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2873
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2874
		curl_exec($ch);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2875
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2876
		$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2877
		curl_close ($ch);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2878
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2879
		if ($status == 200 || $status == 401) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2880
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2881
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2882
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2883
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2884
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2885
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2886
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2887
 * Marks a function as deprecated and informs when it has been used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2888
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2889
 * There is a hook deprecated_function_run that will be called that can be used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2890
 * to get the backtrace up to what file and function called the deprecated
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2891
 * function.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2892
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2893
 * The current behavior is to trigger a user error if WP_DEBUG is true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2894
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2895
 * This function is to be used in every function that is deprecated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2896
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2897
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2898
 * @subpackage Debug
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2899
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2900
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2901
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2902
 * @uses do_action() Calls 'deprecated_function_run' and passes the function name, what to use instead,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2903
 *   and the version the function was deprecated in.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2904
 * @uses apply_filters() Calls 'deprecated_function_trigger_error' and expects boolean value of true to do
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2905
 *   trigger or false to not trigger error.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2906
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2907
 * @param string $function The function that was called
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2908
 * @param string $version The version of WordPress that deprecated the function
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2909
 * @param string $replacement Optional. The function that should have been called
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2910
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2911
function _deprecated_function( $function, $version, $replacement = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2912
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2913
	do_action( 'deprecated_function_run', $function, $replacement, $version );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2914
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2915
	// Allow plugin to filter the output error trigger
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2916
	if ( WP_DEBUG && apply_filters( 'deprecated_function_trigger_error', true ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2917
		if ( function_exists( '__' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2918
			if ( ! is_null( $replacement ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2919
				trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.'), $function, $version, $replacement ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2920
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2921
				trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.'), $function, $version ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2922
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2923
			if ( ! is_null( $replacement ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2924
				trigger_error( sprintf( '%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.', $function, $version, $replacement ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2925
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2926
				trigger_error( sprintf( '%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.', $function, $version ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2927
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2928
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2929
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2930
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2931
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2932
 * Marks a file as deprecated and informs when it has been used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2933
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2934
 * There is a hook deprecated_file_included that will be called that can be used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2935
 * to get the backtrace up to what file and function included the deprecated
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2936
 * file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2937
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2938
 * The current behavior is to trigger a user error if WP_DEBUG is true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2939
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2940
 * This function is to be used in every file that is deprecated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2941
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2942
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2943
 * @subpackage Debug
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2944
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2945
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2946
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2947
 * @uses do_action() Calls 'deprecated_file_included' and passes the file name, what to use instead,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2948
 *   the version in which the file was deprecated, and any message regarding the change.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2949
 * @uses apply_filters() Calls 'deprecated_file_trigger_error' and expects boolean value of true to do
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2950
 *   trigger or false to not trigger error.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2951
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2952
 * @param string $file The file that was included
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2953
 * @param string $version The version of WordPress that deprecated the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2954
 * @param string $replacement Optional. The file that should have been included based on ABSPATH
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2955
 * @param string $message Optional. A message regarding the change
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2956
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2957
function _deprecated_file( $file, $version, $replacement = null, $message = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2958
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2959
	do_action( 'deprecated_file_included', $file, $replacement, $version, $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2960
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2961
	// Allow plugin to filter the output error trigger
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2962
	if ( WP_DEBUG && apply_filters( 'deprecated_file_trigger_error', true ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2963
		$message = empty( $message ) ? '' : ' ' . $message;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2964
		if ( function_exists( '__' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2965
			if ( ! is_null( $replacement ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2966
				trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.'), $file, $version, $replacement ) . $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2967
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2968
				trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.'), $file, $version ) . $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2969
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2970
			if ( ! is_null( $replacement ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2971
				trigger_error( sprintf( '%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.', $file, $version, $replacement ) . $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2972
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2973
				trigger_error( sprintf( '%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.', $file, $version ) . $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2974
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2975
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2976
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2977
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2978
 * Marks a function argument as deprecated and informs when it has been used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2979
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2980
 * This function is to be used whenever a deprecated function argument is used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2981
 * Before this function is called, the argument must be checked for whether it was
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2982
 * used by comparing it to its default value or evaluating whether it is empty.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2983
 * For example:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2984
 * <code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2985
 * if ( !empty($deprecated) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2986
 * 	_deprecated_argument( __FUNCTION__, '3.0' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2987
 * </code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2988
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2989
 * There is a hook deprecated_argument_run that will be called that can be used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2990
 * to get the backtrace up to what file and function used the deprecated
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2991
 * argument.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2992
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2993
 * The current behavior is to trigger a user error if WP_DEBUG is true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2994
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2995
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2996
 * @subpackage Debug
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2997
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2998
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2999
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3000
 * @uses do_action() Calls 'deprecated_argument_run' and passes the function name, a message on the change,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3001
 *   and the version in which the argument was deprecated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3002
 * @uses apply_filters() Calls 'deprecated_argument_trigger_error' and expects boolean value of true to do
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3003
 *   trigger or false to not trigger error.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3004
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3005
 * @param string $function The function that was called
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3006
 * @param string $version The version of WordPress that deprecated the argument used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3007
 * @param string $message Optional. A message regarding the change.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3008
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3009
function _deprecated_argument( $function, $version, $message = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3010
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3011
	do_action( 'deprecated_argument_run', $function, $message, $version );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3012
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3013
	// Allow plugin to filter the output error trigger
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3014
	if ( WP_DEBUG && apply_filters( 'deprecated_argument_trigger_error', true ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3015
		if ( function_exists( '__' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3016
			if ( ! is_null( $message ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3017
				trigger_error( sprintf( __('%1$s was called with an argument that is <strong>deprecated</strong> since version %2$s! %3$s'), $function, $version, $message ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3018
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3019
				trigger_error( sprintf( __('%1$s was called with an argument that is <strong>deprecated</strong> since version %2$s with no alternative available.'), $function, $version ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3020
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3021
			if ( ! is_null( $message ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3022
				trigger_error( sprintf( '%1$s was called with an argument that is <strong>deprecated</strong> since version %2$s! %3$s', $function, $version, $message ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3023
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3024
				trigger_error( sprintf( '%1$s was called with an argument that is <strong>deprecated</strong> since version %2$s with no alternative available.', $function, $version ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3025
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3026
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3027
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3028
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3029
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3030
 * Marks something as being incorrectly called.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3031
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3032
 * There is a hook doing_it_wrong_run that will be called that can be used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3033
 * to get the backtrace up to what file and function called the deprecated
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3034
 * function.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3035
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3036
 * The current behavior is to trigger a user error if WP_DEBUG is true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3037
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3038
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3039
 * @subpackage Debug
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3040
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3041
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3042
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3043
 * @uses do_action() Calls 'doing_it_wrong_run' and passes the function arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3044
 * @uses apply_filters() Calls 'doing_it_wrong_trigger_error' and expects boolean value of true to do
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3045
 *   trigger or false to not trigger error.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3046
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3047
 * @param string $function The function that was called.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3048
 * @param string $message A message explaining what has been done incorrectly.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3049
 * @param string $version The version of WordPress where the message was added.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3050
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3051
function _doing_it_wrong( $function, $message, $version ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3052
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3053
	do_action( 'doing_it_wrong_run', $function, $message, $version );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3054
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3055
	// Allow plugin to filter the output error trigger
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3056
	if ( WP_DEBUG && apply_filters( 'doing_it_wrong_trigger_error', true ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3057
		if ( function_exists( '__' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3058
			$version = is_null( $version ) ? '' : sprintf( __( '(This message was added in version %s.)' ), $version );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3059
			$message .= ' ' . __( 'Please see <a href="http://codex.wordpress.org/Debugging_in_WordPress">Debugging in WordPress</a> for more information.' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3060
			trigger_error( sprintf( __( '%1$s was called <strong>incorrectly</strong>. %2$s %3$s' ), $function, $message, $version ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3061
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3062
			$version = is_null( $version ) ? '' : sprintf( '(This message was added in version %s.)', $version );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3063
			$message .= ' Please see <a href="http://codex.wordpress.org/Debugging_in_WordPress">Debugging in WordPress</a> for more information.';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3064
			trigger_error( sprintf( '%1$s was called <strong>incorrectly</strong>. %2$s %3$s', $function, $message, $version ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3065
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3066
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3067
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3068
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3069
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3070
 * Is the server running earlier than 1.5.0 version of lighttpd?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3071
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3072
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3073
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3074
 * @return bool Whether the server is running lighttpd < 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3075
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3076
function is_lighttpd_before_150() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3077
	$server_parts = explode( '/', isset( $_SERVER['SERVER_SOFTWARE'] )? $_SERVER['SERVER_SOFTWARE'] : '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3078
	$server_parts[1] = isset( $server_parts[1] )? $server_parts[1] : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3079
	return  'lighttpd' == $server_parts[0] && -1 == version_compare( $server_parts[1], '1.5.0' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3080
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3081
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3082
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3083
 * Does the specified module exist in the Apache config?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3084
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3085
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3086
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3087
 * @param string $mod e.g. mod_rewrite
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3088
 * @param bool $default The default return value if the module is not found
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3089
 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3090
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3091
function apache_mod_loaded($mod, $default = false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3092
	global $is_apache;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3093
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3094
	if ( !$is_apache )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3095
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3096
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3097
	if ( function_exists('apache_get_modules') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3098
		$mods = apache_get_modules();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3099
		if ( in_array($mod, $mods) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3100
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3101
	} elseif ( function_exists('phpinfo') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3102
			ob_start();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3103
			phpinfo(8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3104
			$phpinfo = ob_get_clean();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3105
			if ( false !== strpos($phpinfo, $mod) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3106
				return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3107
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3108
	return $default;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3109
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3111
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3112
 * Check if IIS 7+ supports pretty permalinks.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3113
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3114
 * @since 2.8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3115
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3116
 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3117
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3118
function iis7_supports_permalinks() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3119
	global $is_iis7;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3121
	$supports_permalinks = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3122
	if ( $is_iis7 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3123
		/* First we check if the DOMDocument class exists. If it does not exist, then we cannot
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3124
		 * easily update the xml configuration file, hence we just bail out and tell user that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3125
		 * pretty permalinks cannot be used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3126
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3127
		 * Next we check if the URL Rewrite Module 1.1 is loaded and enabled for the web site. When
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3128
		 * URL Rewrite 1.1 is loaded it always sets a server variable called 'IIS_UrlRewriteModule'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3129
		 * Lastly we make sure that PHP is running via FastCGI. This is important because if it runs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3130
		 * via ISAPI then pretty permalinks will not work.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3131
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3132
		$supports_permalinks = class_exists('DOMDocument') && isset($_SERVER['IIS_UrlRewriteModule']) && ( php_sapi_name() == 'cgi-fcgi' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3133
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3134
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3135
	return apply_filters('iis7_supports_permalinks', $supports_permalinks);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3136
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3138
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3139
 * File validates against allowed set of defined rules.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3140
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3141
 * A return value of '1' means that the $file contains either '..' or './'. A
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3142
 * return value of '2' means that the $file contains ':' after the first
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3143
 * character. A return value of '3' means that the file is not in the allowed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3144
 * files list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3145
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3146
 * @since 1.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3147
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3148
 * @param string $file File path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3149
 * @param array $allowed_files List of allowed files.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3150
 * @return int 0 means nothing is wrong, greater than 0 means something was wrong.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3151
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3152
function validate_file( $file, $allowed_files = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3153
	if ( false !== strpos( $file, '..' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3154
		return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3155
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3156
	if ( false !== strpos( $file, './' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3157
		return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3158
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3159
	if ( ! empty( $allowed_files ) && ! in_array( $file, $allowed_files ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3160
		return 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3162
	if (':' == substr( $file, 1, 1 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3163
		return 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3165
	return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3166
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3168
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3169
 * Determine if SSL is used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3170
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3171
 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3172
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3173
 * @return bool True if SSL, false if not used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3174
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3175
function is_ssl() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3176
	if ( isset($_SERVER['HTTPS']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3177
		if ( 'on' == strtolower($_SERVER['HTTPS']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3178
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3179
		if ( '1' == $_SERVER['HTTPS'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3180
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3181
	} elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3182
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3183
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3184
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3185
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3186
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3187
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3188
 * Whether SSL login should be forced.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3189
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3190
 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3191
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3192
 * @param string|bool $force Optional.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3193
 * @return bool True if forced, false if not forced.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3194
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3195
function force_ssl_login( $force = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3196
	static $forced = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3198
	if ( !is_null( $force ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3199
		$old_forced = $forced;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3200
		$forced = $force;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3201
		return $old_forced;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3202
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3203
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3204
	return $forced;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3205
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3207
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3208
 * Whether to force SSL used for the Administration Screens.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3209
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3210
 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3211
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3212
 * @param string|bool $force
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3213
 * @return bool True if forced, false if not forced.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3214
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3215
function force_ssl_admin( $force = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3216
	static $forced = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3217
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3218
	if ( !is_null( $force ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3219
		$old_forced = $forced;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3220
		$forced = $force;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3221
		return $old_forced;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3222
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3223
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3224
	return $forced;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3225
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3226
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3227
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3228
 * Guess the URL for the site.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3229
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3230
 * Will remove wp-admin links to retrieve only return URLs not in the wp-admin
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3231
 * directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3232
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3233
 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3234
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3235
 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3236
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3237
function wp_guess_url() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3238
	if ( defined('WP_SITEURL') && '' != WP_SITEURL ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3239
		$url = WP_SITEURL;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3240
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3241
		$abspath_fix = str_replace( '\\', '/', ABSPATH );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3242
		$script_filename_dir = dirname( $_SERVER['SCRIPT_FILENAME'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3243
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3244
		// The request is for the admin
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3245
		if ( strpos( $_SERVER['REQUEST_URI'], 'wp-admin' ) !== false || strpos( $_SERVER['REQUEST_URI'], 'wp-login.php' ) !== false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3246
			$path = preg_replace( '#/(wp-admin/.*|wp-login.php)#i', '', $_SERVER['REQUEST_URI'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3247
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3248
		// The request is for a file in ABSPATH
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3249
		} elseif ( $script_filename_dir . '/' == $abspath_fix ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3250
			// Strip off any file/query params in the path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3251
			$path = preg_replace( '#/[^/]*$#i', '', $_SERVER['PHP_SELF'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3252
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3253
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3254
			if ( false !== strpos( $_SERVER['SCRIPT_FILENAME'], $abspath_fix ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3255
				// Request is hitting a file inside ABSPATH
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3256
				$directory = str_replace( ABSPATH, '', $script_filename_dir );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3257
				// Strip off the sub directory, and any file/query paramss
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3258
				$path = preg_replace( '#/' . preg_quote( $directory, '#' ) . '/[^/]*$#i', '' , $_SERVER['REQUEST_URI'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3259
			} elseif ( false !== strpos( $abspath_fix, $script_filename_dir ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3260
				// Request is hitting a file above ABSPATH
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3261
				$subdirectory = str_replace( $script_filename_dir, '', $abspath_fix );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3262
				// Strip off any file/query params from the path, appending the sub directory to the install
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3263
				$path = preg_replace( '#/[^/]*$#i', '' , $_SERVER['REQUEST_URI'] ) . $subdirectory;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3264
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3265
				$path = $_SERVER['REQUEST_URI'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3266
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3267
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3268
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3269
		$schema = is_ssl() ? 'https://' : 'http://'; // set_url_scheme() is not defined yet
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3270
		$url = $schema . $_SERVER['HTTP_HOST'] . $path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3271
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3272
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3273
	return rtrim($url, '/');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3274
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3275
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3276
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3277
 * Temporarily suspend cache additions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3278
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3279
 * Stops more data being added to the cache, but still allows cache retrieval.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3280
 * This is useful for actions, such as imports, when a lot of data would otherwise
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3281
 * be almost uselessly added to the cache.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3282
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3283
 * Suspension lasts for a single page load at most. Remember to call this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3284
 * function again if you wish to re-enable cache adds earlier.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3285
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3286
 * @since 3.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3287
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3288
 * @param bool $suspend Optional. Suspends additions if true, re-enables them if false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3289
 * @return bool The current suspend setting
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3290
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3291
function wp_suspend_cache_addition( $suspend = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3292
	static $_suspend = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3293
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3294
	if ( is_bool( $suspend ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3295
		$_suspend = $suspend;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3296
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3297
	return $_suspend;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3298
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3299
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3300
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3301
 * Suspend cache invalidation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3302
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3303
 * Turns cache invalidation on and off. Useful during imports where you don't wont to do invalidations
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3304
 * every time a post is inserted. Callers must be sure that what they are doing won't lead to an inconsistent
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3305
 * cache when invalidation is suspended.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3306
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3307
 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3308
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3309
 * @param bool $suspend Whether to suspend or enable cache invalidation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3310
 * @return bool The current suspend setting
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3311
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3312
function wp_suspend_cache_invalidation($suspend = true) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3313
	global $_wp_suspend_cache_invalidation;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3314
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3315
	$current_suspend = $_wp_suspend_cache_invalidation;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3316
	$_wp_suspend_cache_invalidation = $suspend;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3317
	return $current_suspend;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3318
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3320
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3321
 * Whether a site is the main site of the current network.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3322
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3323
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3324
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3325
 * @param int $site_id Optional. Site ID to test. Defaults to current site.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3326
 * @return bool True if $site_id is the main site of the network, or if not running multisite.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3327
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3328
function is_main_site( $site_id = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3329
	// This is the current network's information; 'site' is old terminology.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3330
	global $current_site;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3331
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3332
	if ( ! is_multisite() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3333
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3334
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3335
	if ( ! $site_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3336
		$site_id = get_current_blog_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3337
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3338
	return (int) $site_id === (int) $current_site->blog_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3339
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3340
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3341
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3342
 * Whether a network is the main network of the multisite install.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3343
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3344
 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3345
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3346
 * @param int $network_id Optional. Network ID to test. Defaults to current network.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3347
 * @return bool True if $network_id is the main network, or if not running multisite.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3348
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3349
function is_main_network( $network_id = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3350
	global $current_site, $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3351
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3352
	if ( ! is_multisite() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3353
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3355
	$current_network_id = (int) $current_site->id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3357
	if ( ! $network_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3358
		$network_id = $current_network_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3359
	$network_id = (int) $network_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3360
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3361
	if ( defined( 'PRIMARY_NETWORK_ID' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3362
		return $network_id === (int) PRIMARY_NETWORK_ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3364
	if ( 1 === $current_network_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3365
		return $network_id === $current_network_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3367
	$primary_network_id = (int) wp_cache_get( 'primary_network_id', 'site-options' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3368
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3369
	if ( $primary_network_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3370
		return $network_id === $primary_network_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3371
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3372
	$primary_network_id = (int) $wpdb->get_var( "SELECT id FROM $wpdb->site ORDER BY id LIMIT 1" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3373
	wp_cache_add( 'primary_network_id', $primary_network_id, 'site-options' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3375
	return $network_id === $primary_network_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3376
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3377
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3378
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3379
 * Whether global terms are enabled.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3380
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3381
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3382
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3383
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3384
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3385
 * @return bool True if multisite and global terms enabled
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3386
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3387
function global_terms_enabled() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3388
	if ( ! is_multisite() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3389
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3390
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3391
	static $global_terms = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3392
	if ( is_null( $global_terms ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3393
		$filter = apply_filters( 'global_terms_enabled', null );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3394
		if ( ! is_null( $filter ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3395
			$global_terms = (bool) $filter;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3396
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3397
			$global_terms = (bool) get_site_option( 'global_terms_enabled', false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3398
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3399
	return $global_terms;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3400
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3401
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3402
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3403
 * gmt_offset modification for smart timezone handling.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3404
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3405
 * Overrides the gmt_offset option if we have a timezone_string available.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3406
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3407
 * @since 2.8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3408
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3409
 * @return float|bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3410
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3411
function wp_timezone_override_offset() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3412
	if ( !$timezone_string = get_option( 'timezone_string' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3413
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3414
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3415
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3416
	$timezone_object = timezone_open( $timezone_string );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3417
	$datetime_object = date_create();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3418
	if ( false === $timezone_object || false === $datetime_object ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3419
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3420
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3421
	return round( timezone_offset_get( $timezone_object, $datetime_object ) / HOUR_IN_SECONDS, 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3422
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3423
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3424
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3425
 * Sort-helper for timezones.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3426
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3427
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3428
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3429
 * @param array $a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3430
 * @param array $b
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3431
 * @return int
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3432
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3433
function _wp_timezone_choice_usort_callback( $a, $b ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3434
	// Don't use translated versions of Etc
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3435
	if ( 'Etc' === $a['continent'] && 'Etc' === $b['continent'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3436
		// Make the order of these more like the old dropdown
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3437
		if ( 'GMT+' === substr( $a['city'], 0, 4 ) && 'GMT+' === substr( $b['city'], 0, 4 ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3438
			return -1 * ( strnatcasecmp( $a['city'], $b['city'] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3439
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3440
		if ( 'UTC' === $a['city'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3441
			if ( 'GMT+' === substr( $b['city'], 0, 4 ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3442
				return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3443
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3444
			return -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3445
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3446
		if ( 'UTC' === $b['city'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3447
			if ( 'GMT+' === substr( $a['city'], 0, 4 ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3448
				return -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3449
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3450
			return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3451
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3452
		return strnatcasecmp( $a['city'], $b['city'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3453
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3454
	if ( $a['t_continent'] == $b['t_continent'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3455
		if ( $a['t_city'] == $b['t_city'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3456
			return strnatcasecmp( $a['t_subcity'], $b['t_subcity'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3457
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3458
		return strnatcasecmp( $a['t_city'], $b['t_city'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3459
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3460
		// Force Etc to the bottom of the list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3461
		if ( 'Etc' === $a['continent'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3462
			return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3463
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3464
		if ( 'Etc' === $b['continent'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3465
			return -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3466
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3467
		return strnatcasecmp( $a['t_continent'], $b['t_continent'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3468
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3469
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3470
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3471
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3472
 * Gives a nicely formatted list of timezone strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3473
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3474
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3475
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3476
 * @param string $selected_zone Selected Zone
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3477
 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3478
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3479
function wp_timezone_choice( $selected_zone ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3480
	static $mo_loaded = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3481
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3482
	$continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3483
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3484
	// Load translations for continents and cities
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3485
	if ( !$mo_loaded ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3486
		$locale = get_locale();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3487
		$mofile = WP_LANG_DIR . '/continents-cities-' . $locale . '.mo';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3488
		load_textdomain( 'continents-cities', $mofile );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3489
		$mo_loaded = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3490
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3491
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3492
	$zonen = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3493
	foreach ( timezone_identifiers_list() as $zone ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3494
		$zone = explode( '/', $zone );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3495
		if ( !in_array( $zone[0], $continents ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3496
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3497
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3498
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3499
		// This determines what gets set and translated - we don't translate Etc/* strings here, they are done later
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3500
		$exists = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3501
			0 => ( isset( $zone[0] ) && $zone[0] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3502
			1 => ( isset( $zone[1] ) && $zone[1] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3503
			2 => ( isset( $zone[2] ) && $zone[2] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3504
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3505
		$exists[3] = ( $exists[0] && 'Etc' !== $zone[0] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3506
		$exists[4] = ( $exists[1] && $exists[3] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3507
		$exists[5] = ( $exists[2] && $exists[3] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3508
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3509
		$zonen[] = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3510
			'continent'   => ( $exists[0] ? $zone[0] : '' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3511
			'city'        => ( $exists[1] ? $zone[1] : '' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3512
			'subcity'     => ( $exists[2] ? $zone[2] : '' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3513
			't_continent' => ( $exists[3] ? translate( str_replace( '_', ' ', $zone[0] ), 'continents-cities' ) : '' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3514
			't_city'      => ( $exists[4] ? translate( str_replace( '_', ' ', $zone[1] ), 'continents-cities' ) : '' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3515
			't_subcity'   => ( $exists[5] ? translate( str_replace( '_', ' ', $zone[2] ), 'continents-cities' ) : '' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3516
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3517
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3518
	usort( $zonen, '_wp_timezone_choice_usort_callback' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3519
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3520
	$structure = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3521
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3522
	if ( empty( $selected_zone ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3523
		$structure[] = '<option selected="selected" value="">' . __( 'Select a city' ) . '</option>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3524
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3525
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3526
	foreach ( $zonen as $key => $zone ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3527
		// Build value in an array to join later
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3528
		$value = array( $zone['continent'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3529
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3530
		if ( empty( $zone['city'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3531
			// It's at the continent level (generally won't happen)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3532
			$display = $zone['t_continent'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3533
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3534
			// It's inside a continent group
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3535
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3536
			// Continent optgroup
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3537
			if ( !isset( $zonen[$key - 1] ) || $zonen[$key - 1]['continent'] !== $zone['continent'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3538
				$label = $zone['t_continent'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3539
				$structure[] = '<optgroup label="'. esc_attr( $label ) .'">';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3540
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3541
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3542
			// Add the city to the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3543
			$value[] = $zone['city'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3544
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3545
			$display = $zone['t_city'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3546
			if ( !empty( $zone['subcity'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3547
				// Add the subcity to the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3548
				$value[] = $zone['subcity'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3549
				$display .= ' - ' . $zone['t_subcity'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3550
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3551
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3552
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3553
		// Build the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3554
		$value = join( '/', $value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3555
		$selected = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3556
		if ( $value === $selected_zone ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3557
			$selected = 'selected="selected" ';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3558
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3559
		$structure[] = '<option ' . $selected . 'value="' . esc_attr( $value ) . '">' . esc_html( $display ) . "</option>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3560
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3561
		// Close continent optgroup
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3562
		if ( !empty( $zone['city'] ) && ( !isset($zonen[$key + 1]) || (isset( $zonen[$key + 1] ) && $zonen[$key + 1]['continent'] !== $zone['continent']) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3563
			$structure[] = '</optgroup>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3564
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3565
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3566
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3567
	// Do UTC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3568
	$structure[] = '<optgroup label="'. esc_attr__( 'UTC' ) .'">';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3569
	$selected = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3570
	if ( 'UTC' === $selected_zone )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3571
		$selected = 'selected="selected" ';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3572
	$structure[] = '<option ' . $selected . 'value="' . esc_attr( 'UTC' ) . '">' . __('UTC') . '</option>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3573
	$structure[] = '</optgroup>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3574
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3575
	// Do manual UTC offsets
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3576
	$structure[] = '<optgroup label="'. esc_attr__( 'Manual Offsets' ) .'">';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3577
	$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,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3578
		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);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3579
	foreach ( $offset_range as $offset ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3580
		if ( 0 <= $offset )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3581
			$offset_name = '+' . $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3582
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3583
			$offset_name = (string) $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3584
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3585
		$offset_value = $offset_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3586
		$offset_name = str_replace(array('.25','.5','.75'), array(':15',':30',':45'), $offset_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3587
		$offset_name = 'UTC' . $offset_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3588
		$offset_value = 'UTC' . $offset_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3589
		$selected = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3590
		if ( $offset_value === $selected_zone )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3591
			$selected = 'selected="selected" ';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3592
		$structure[] = '<option ' . $selected . 'value="' . esc_attr( $offset_value ) . '">' . esc_html( $offset_name ) . "</option>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3593
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3594
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3595
	$structure[] = '</optgroup>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3596
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3597
	return join( "\n", $structure );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3598
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3599
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3600
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3601
 * Strip close comment and close php tags from file headers used by WP.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3602
 * See http://core.trac.wordpress.org/ticket/8497
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3603
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3604
 * @since 2.8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3605
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3606
 * @param string $str
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3607
 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3608
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3609
function _cleanup_header_comment($str) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3610
	return trim(preg_replace("/\s*(?:\*\/|\?>).*/", '', $str));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3611
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3612
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3613
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3614
 * Permanently deletes posts, pages, attachments, and comments which have been in the trash for EMPTY_TRASH_DAYS.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3615
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3616
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3617
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3618
function wp_scheduled_delete() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3619
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3620
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3621
	$delete_timestamp = time() - ( DAY_IN_SECONDS * EMPTY_TRASH_DAYS );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3623
	$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);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3624
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3625
	foreach ( (array) $posts_to_delete as $post ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3626
		$post_id = (int) $post['post_id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3627
		if ( !$post_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3628
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3630
		$del_post = get_post($post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3631
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3632
		if ( !$del_post || 'trash' != $del_post->post_status ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3633
			delete_post_meta($post_id, '_wp_trash_meta_status');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3634
			delete_post_meta($post_id, '_wp_trash_meta_time');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3635
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3636
			wp_delete_post($post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3637
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3638
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3639
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3640
	$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);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3641
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3642
	foreach ( (array) $comments_to_delete as $comment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3643
		$comment_id = (int) $comment['comment_id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3644
		if ( !$comment_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3645
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3646
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3647
		$del_comment = get_comment($comment_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3648
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3649
		if ( !$del_comment || 'trash' != $del_comment->comment_approved ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3650
			delete_comment_meta($comment_id, '_wp_trash_meta_time');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3651
			delete_comment_meta($comment_id, '_wp_trash_meta_status');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3652
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3653
			wp_delete_comment($comment_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3654
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3655
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3656
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3657
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3658
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3659
 * Retrieve metadata from a file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3660
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3661
 * Searches for metadata in the first 8kiB of a file, such as a plugin or theme.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3662
 * Each piece of metadata must be on its own line. Fields can not span multiple
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3663
 * lines, the value will get cut at the end of the first line.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3664
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3665
 * If the file data is not within that first 8kiB, then the author should correct
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3666
 * their plugin file and move the data headers to the top.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3667
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3668
 * @see http://codex.wordpress.org/File_Header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3669
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3670
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3671
 * @param string $file Path to the file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3672
 * @param array $default_headers List of headers, in the format array('HeaderKey' => 'Header Name')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3673
 * @param string $context If specified adds filter hook "extra_{$context}_headers"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3674
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3675
function get_file_data( $file, $default_headers, $context = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3676
	// We don't need to write to the file, so just open for reading.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3677
	$fp = fopen( $file, 'r' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3678
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3679
	// Pull only the first 8kiB of the file in.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3680
	$file_data = fread( $fp, 8192 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3681
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3682
	// PHP will close file handle, but we are good citizens.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3683
	fclose( $fp );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3684
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3685
	// Make sure we catch CR-only line endings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3686
	$file_data = str_replace( "\r", "\n", $file_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3687
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3688
	if ( $context && $extra_headers = apply_filters( "extra_{$context}_headers", array() ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3689
		$extra_headers = array_combine( $extra_headers, $extra_headers ); // keys equal values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3690
		$all_headers = array_merge( $extra_headers, (array) $default_headers );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3691
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3692
		$all_headers = $default_headers;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3693
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3694
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3695
	foreach ( $all_headers as $field => $regex ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3696
		if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $match[1] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3697
			$all_headers[ $field ] = _cleanup_header_comment( $match[1] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3698
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3699
			$all_headers[ $field ] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3700
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3701
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3702
	return $all_headers;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3703
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3705
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3706
 * Returns true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3707
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3708
 * Useful for returning true to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3709
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3710
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3711
 * @see __return_false()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3712
 * @return bool true
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3713
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3714
function __return_true() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3715
	return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3716
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3717
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3718
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3719
 * Returns false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3720
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3721
 * Useful for returning false to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3722
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3723
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3724
 * @see __return_true()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3725
 * @return bool false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3726
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3727
function __return_false() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3728
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3729
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3730
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3731
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3732
 * Returns 0.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3733
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3734
 * Useful for returning 0 to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3735
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3736
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3737
 * @see __return_zero()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3738
 * @return int 0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3739
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3740
function __return_zero() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3741
	return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3742
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3743
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3744
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3745
 * Returns an empty array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3746
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3747
 * Useful for returning an empty array to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3748
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3749
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3750
 * @see __return_zero()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3751
 * @return array Empty array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3752
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3753
function __return_empty_array() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3754
	return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3755
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3756
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3757
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3758
 * Returns null.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3759
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3760
 * Useful for returning null to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3761
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3762
 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3763
 * @return null
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3764
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3765
function __return_null() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3766
	return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3767
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3768
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3769
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3770
 * Returns an empty string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3771
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3772
 * Useful for returning an empty string to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3773
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3774
 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3775
 * @see __return_null()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3776
 * @return string Empty string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3777
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3778
function __return_empty_string() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3779
	return '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3780
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3781
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3782
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3783
 * Send a HTTP header to disable content type sniffing in browsers which support it.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3784
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3785
 * @link http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3786
 * @link http://src.chromium.org/viewvc/chrome?view=rev&revision=6985
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3787
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3788
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3789
 * @return none
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3790
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3791
function send_nosniff_header() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3792
	@header( 'X-Content-Type-Options: nosniff' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3793
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3794
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3795
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3796
 * Returns a MySQL expression for selecting the week number based on the start_of_week option.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3797
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3798
 * @internal
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3799
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3800
 * @param string $column
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3801
 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3802
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3803
function _wp_mysql_week( $column ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3804
	switch ( $start_of_week = (int) get_option( 'start_of_week' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3805
	default :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3806
	case 0 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3807
		return "WEEK( $column, 0 )";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3808
	case 1 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3809
		return "WEEK( $column, 1 )";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3810
	case 2 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3811
	case 3 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3812
	case 4 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3813
	case 5 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3814
	case 6 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3815
		return "WEEK( DATE_SUB( $column, INTERVAL $start_of_week DAY ), 0 )";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3816
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3817
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3818
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3819
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3820
 * Finds hierarchy loops using a callback function that maps object IDs to parent IDs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3821
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3822
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3823
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3824
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3825
 * @param callback $callback function that accepts ( ID, $callback_args ) and outputs parent_ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3826
 * @param int $start The ID to start the loop check at
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3827
 * @param int $start_parent the parent_ID of $start to use instead of calling $callback( $start ). Use null to always use $callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3828
 * @param array $callback_args optional additional arguments to send to $callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3829
 * @return array IDs of all members of loop
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3830
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3831
function wp_find_hierarchy_loop( $callback, $start, $start_parent, $callback_args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3832
	$override = is_null( $start_parent ) ? array() : array( $start => $start_parent );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3833
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3834
	if ( !$arbitrary_loop_member = wp_find_hierarchy_loop_tortoise_hare( $callback, $start, $override, $callback_args ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3835
		return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3836
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3837
	return wp_find_hierarchy_loop_tortoise_hare( $callback, $arbitrary_loop_member, $override, $callback_args, true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3838
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3839
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3840
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3841
 * Uses the "The Tortoise and the Hare" algorithm to detect loops.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3842
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3843
 * For every step of the algorithm, the hare takes two steps and the tortoise one.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3844
 * If the hare ever laps the tortoise, there must be a loop.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3845
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3846
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3847
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3848
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3849
 * @param callback $callback function that accepts ( ID, callback_arg, ... ) and outputs parent_ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3850
 * @param int $start The ID to start the loop check at
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3851
 * @param array $override an array of ( ID => parent_ID, ... ) to use instead of $callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3852
 * @param array $callback_args optional additional arguments to send to $callback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3853
 * @param bool $_return_loop Return loop members or just detect presence of loop?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3854
 *             Only set to true if you already know the given $start is part of a loop
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3855
 *             (otherwise the returned array might include branches)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3856
 * @return mixed scalar ID of some arbitrary member of the loop, or array of IDs of all members of loop if $_return_loop
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3857
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3858
function wp_find_hierarchy_loop_tortoise_hare( $callback, $start, $override = array(), $callback_args = array(), $_return_loop = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3859
	$tortoise = $hare = $evanescent_hare = $start;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3860
	$return = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3861
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3862
	// Set evanescent_hare to one past hare
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3863
	// Increment hare two steps
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3864
	while (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3865
		$tortoise
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3866
	&&
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3867
		( $evanescent_hare = isset( $override[$hare] ) ? $override[$hare] : call_user_func_array( $callback, array_merge( array( $hare ), $callback_args ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3868
	&&
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3869
		( $hare = isset( $override[$evanescent_hare] ) ? $override[$evanescent_hare] : call_user_func_array( $callback, array_merge( array( $evanescent_hare ), $callback_args ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3870
	) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3871
		if ( $_return_loop )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3872
			$return[$tortoise] = $return[$evanescent_hare] = $return[$hare] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3873
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3874
		// tortoise got lapped - must be a loop
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3875
		if ( $tortoise == $evanescent_hare || $tortoise == $hare )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3876
			return $_return_loop ? $return : $tortoise;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3877
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3878
		// Increment tortoise by one step
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3879
		$tortoise = isset( $override[$tortoise] ) ? $override[$tortoise] : call_user_func_array( $callback, array_merge( array( $tortoise ), $callback_args ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3880
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3881
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3882
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3883
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3884
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3885
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3886
 * Send a HTTP header to limit rendering of pages to same origin iframes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3887
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3888
 * @link https://developer.mozilla.org/en/the_x-frame-options_response_header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3889
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3890
 * @since 3.1.3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3891
 * @return none
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3892
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3893
function send_frame_options_header() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3894
	@header( 'X-Frame-Options: SAMEORIGIN' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3895
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3896
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3897
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3898
 * Retrieve a list of protocols to allow in HTML attributes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3899
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3900
 * @since 3.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3901
 * @see wp_kses()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3902
 * @see esc_url()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3903
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3904
 * @return array Array of allowed protocols
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3905
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3906
function wp_allowed_protocols() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3907
	static $protocols;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3908
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3909
	if ( empty( $protocols ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3910
		$protocols = array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3911
		$protocols = apply_filters( 'kses_allowed_protocols', $protocols );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3912
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3913
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3914
	return $protocols;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3915
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3916
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3917
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3918
 * Return a comma separated string of functions that have been called to get to the current point in code.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3919
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3920
 * @link http://core.trac.wordpress.org/ticket/19589
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3921
 * @since 3.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3922
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3923
 * @param string $ignore_class A class to ignore all function calls within - useful when you want to just give info about the callee
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3924
 * @param int $skip_frames A number of stack frames to skip - useful for unwinding back to the source of the issue
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3925
 * @param bool $pretty Whether or not you want a comma separated string or raw array returned
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3926
 * @return string|array Either a string containing a reversed comma separated trace or an array of individual calls.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3927
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3928
function wp_debug_backtrace_summary( $ignore_class = null, $skip_frames = 0, $pretty = true ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3929
	if ( version_compare( PHP_VERSION, '5.2.5', '>=' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3930
		$trace = debug_backtrace( false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3931
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3932
		$trace = debug_backtrace();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3933
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3934
	$caller = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3935
	$check_class = ! is_null( $ignore_class );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3936
	$skip_frames++; // skip this function
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3937
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3938
	foreach ( $trace as $call ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3939
		if ( $skip_frames > 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3940
			$skip_frames--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3941
		} elseif ( isset( $call['class'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3942
			if ( $check_class && $ignore_class == $call['class'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3943
				continue; // Filter out calls
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3944
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3945
			$caller[] = "{$call['class']}{$call['type']}{$call['function']}";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3946
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3947
			if ( in_array( $call['function'], array( 'do_action', 'apply_filters' ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3948
				$caller[] = "{$call['function']}('{$call['args'][0]}')";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3949
			} elseif ( in_array( $call['function'], array( 'include', 'include_once', 'require', 'require_once' ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3950
				$caller[] = $call['function'] . "('" . str_replace( array( WP_CONTENT_DIR, ABSPATH ) , '', $call['args'][0] ) . "')";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3951
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3952
				$caller[] = $call['function'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3953
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3954
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3955
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3956
	if ( $pretty )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3957
		return join( ', ', array_reverse( $caller ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3958
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3959
		return $caller;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3960
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3961
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3962
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3963
 * Retrieve ids that are not already present in the cache
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3964
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3965
 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3966
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3967
 * @param array $object_ids ID list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3968
 * @param string $cache_key The cache bucket to check against
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3969
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3970
 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3971
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3972
function _get_non_cached_ids( $object_ids, $cache_key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3973
	$clean = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3974
	foreach ( $object_ids as $id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3975
		$id = (int) $id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3976
		if ( !wp_cache_get( $id, $cache_key ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3977
			$clean[] = $id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3978
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3979
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3980
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3981
	return $clean;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3982
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3983
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3984
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3985
 * Test if the current device has the capability to upload files.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3986
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3987
 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3988
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3989
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3990
 * @return bool true|false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3991
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3992
function _device_can_upload() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3993
	if ( ! wp_is_mobile() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3994
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3995
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3996
	$ua = $_SERVER['HTTP_USER_AGENT'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3997
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3998
	if ( strpos($ua, 'iPhone') !== false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3999
		|| strpos($ua, 'iPad') !== false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4000
		|| strpos($ua, 'iPod') !== false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4001
			return preg_match( '#OS ([\d_]+) like Mac OS X#', $ua, $version ) && version_compare( $version[1], '6', '>=' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4002
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4003
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4004
	return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4005
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4006
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4007
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4008
 * Test if a given path is a stream URL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4009
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4010
 * @param string $path The resource path or URL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4011
 * @return bool True if the path is a stream URL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4012
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4013
function wp_is_stream( $path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4014
	$wrappers = stream_get_wrappers();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4015
	$wrappers_re = '(' . join('|', $wrappers) . ')';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4016
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4017
	return preg_match( "!^$wrappers_re://!", $path ) === 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4018
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4019
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4020
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4021
 * Test if the supplied date is valid for the Gregorian calendar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4022
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4023
 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4024
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4025
 * @return bool true|false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4026
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4027
function wp_checkdate( $month, $day, $year, $source_date ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4028
	return apply_filters( 'wp_checkdate', checkdate( $month, $day, $year ), $source_date );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4029
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4030
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4031
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4032
 * Load the auth check for monitoring whether the user is still logged in.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4033
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4034
 * Can be disabled with remove_action( 'admin_enqueue_scripts', 'wp_auth_check_load' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4035
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4036
 * This is disabled for certain screens where a login screen could cause an
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4037
 * inconvenient interruption. A filter called wp_auth_check_load can be used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4038
 * for fine-grained control.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4039
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4040
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4041
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4042
function wp_auth_check_load() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4043
	if ( ! is_admin() && ! is_user_logged_in() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4044
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4045
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4046
	if ( defined( 'IFRAME_REQUEST' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4047
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4048
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4049
	$screen = get_current_screen();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4050
	$hidden = array( 'update', 'update-network', 'update-core', 'update-core-network', 'upgrade', 'upgrade-network', 'network' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4051
	$show = ! in_array( $screen->id, $hidden );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4052
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4053
	if ( apply_filters( 'wp_auth_check_load', $show, $screen ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4054
		wp_enqueue_style( 'wp-auth-check' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4055
		wp_enqueue_script( 'wp-auth-check' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4056
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4057
		add_action( 'admin_print_footer_scripts', 'wp_auth_check_html', 5 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4058
		add_action( 'wp_print_footer_scripts', 'wp_auth_check_html', 5 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4059
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4060
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4061
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4062
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4063
 * Output the HTML that shows the wp-login dialog when the user is no longer logged in.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4064
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4065
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4066
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4067
function wp_auth_check_html() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4068
	$login_url = wp_login_url();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4069
	$current_domain = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4070
	$same_domain = ( strpos( $login_url, $current_domain ) === 0 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4071
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4072
	if ( $same_domain && force_ssl_login() && ! force_ssl_admin() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4073
		$same_domain = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4074
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4075
	// Let plugins change this if they know better.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4076
	$same_domain = apply_filters( 'wp_auth_check_same_domain', $same_domain );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4077
	$wrap_class = $same_domain ? 'hidden' : 'hidden fallback';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4078
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4079
	?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4080
	<div id="wp-auth-check-wrap" class="<?php echo $wrap_class; ?>">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4081
	<div id="wp-auth-check-bg"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4082
	<div id="wp-auth-check">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4083
	<div class="wp-auth-check-close" tabindex="0" title="<?php esc_attr_e('Close'); ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4084
	<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4085
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4086
	if ( $same_domain ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4087
		?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4088
		<div id="wp-auth-check-form" data-src="<?php echo esc_url( add_query_arg( array( 'interim-login' => 1 ), $login_url ) ); ?>"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4089
		<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4090
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4091
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4092
	?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4093
	<div class="wp-auth-fallback">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4094
		<p><b class="wp-auth-fallback-expired" tabindex="0"><?php _e('Session expired'); ?></b></p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4095
		<p><a href="<?php echo esc_url( $login_url ); ?>" target="_blank"><?php _e('Please log in again.'); ?></a>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4096
		<?php _e('The login page will open in a new window. After logging in you can close it and return to this page.'); ?></p>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4097
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4098
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4099
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4100
	<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4101
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4102
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4103
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4104
 * Check whether a user is still logged in, for the heartbeat.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4105
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4106
 * Send a result that shows a log-in box if the user is no longer logged in,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4107
 * or if their cookie is within the grace period.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4108
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4109
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4110
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4111
function wp_auth_check( $response, $data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4112
	$response['wp-auth-check'] = is_user_logged_in() && empty( $GLOBALS['login_grace_period'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4113
	return $response;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4114
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4115
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4116
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4117
 * Return RegEx body to liberally match an opening HTML tag that:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4118
 * 1. Is self-closing or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4119
 * 2. Has no body but has a closing tag of the same name or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4120
 * 3. Contains a body and a closing tag of the same name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4121
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4122
 * Note: this RegEx does not balance inner tags and does not attempt to produce valid HTML
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4123
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4124
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4125
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4126
 * @param string $tag An HTML tag name. Example: 'video'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4127
 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4128
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4129
function get_tag_regex( $tag ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4130
	if ( empty( $tag ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4131
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4132
	return sprintf( '<%1$s[^<]*(?:>[\s\S]*<\/%1$s>|\s*\/>)', tag_escape( $tag ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4133
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4134
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4135
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4136
 * Return a canonical form of the provided charset appropriate for passing to PHP
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4137
 * functions such as htmlspecialchars() and charset html attributes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4138
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4139
 * @link http://core.trac.wordpress.org/ticket/23688
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4140
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4141
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4142
 * @param string A charset name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4143
 * @return string The canonical form of the charset
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4144
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4145
function _canonical_charset( $charset ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4146
	if ( 'UTF-8' === $charset || 'utf-8' === $charset || 'utf8' === $charset ||
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4147
		'UTF8' === $charset )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4148
		return 'UTF-8';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4149
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4150
	if ( 'ISO-8859-1' === $charset || 'iso-8859-1' === $charset ||
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4151
		'iso8859-1' === $charset || 'ISO8859-1' === $charset )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4152
		return 'ISO-8859-1';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4153
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4154
	return $charset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4155
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4156
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4157
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4158
 * Sets the mbstring internal encoding to a binary safe encoding whne func_overload is enabled.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4159
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4160
 * When mbstring.func_overload is in use for multi-byte encodings, the results from strlen() and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4161
 * similar functions respect the utf8 characters, causing binary data to return incorrect lengths.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4162
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4163
 * This function overrides the mbstring encoding to a binary-safe encoding, and resets it to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4164
 * users expected encoding afterwards through the `reset_mbstring_encoding` function.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4165
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4166
 * It is safe to recursively call this function, however each `mbstring_binary_safe_encoding()`
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4167
 * call must be followed up with an equal number of `reset_mbstring_encoding()` calls.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4168
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4169
 * @see reset_mbstring_encoding()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4170
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4171
 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4172
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4173
 * @param bool $reset Whether to reset the encoding back to a previously-set encoding.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4174
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4175
function mbstring_binary_safe_encoding( $reset = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4176
	static $encodings = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4177
	static $overloaded = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4178
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4179
	if ( is_null( $overloaded ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4180
		$overloaded = function_exists( 'mb_internal_encoding' ) && ( ini_get( 'mbstring.func_overload' ) & 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4181
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4182
	if ( false === $overloaded )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4183
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4184
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4185
	if ( ! $reset ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4186
		$encoding = mb_internal_encoding();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4187
		array_push( $encodings, $encoding );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4188
		mb_internal_encoding( 'ISO-8859-1' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4189
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4190
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4191
	if ( $reset && $encodings ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4192
		$encoding = array_pop( $encodings );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4193
		mb_internal_encoding( $encoding );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4194
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4195
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4196
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4197
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4198
 * Resets the mbstring internal encoding to a users previously set encoding.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4199
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4200
 * @see mbstring_binary_safe_encoding()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4201
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4202
 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4203
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4204
function reset_mbstring_encoding() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4205
	mbstring_binary_safe_encoding( true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4206
}