wp/wp-includes/functions.php
author ymh <ymh.work@gmail.com>
Mon, 14 Oct 2019 17:39:30 +0200
changeset 7 cf61fcea0001
parent 5 5e2f62d02dcd
child 9 177826044cd9
permissions -rw-r--r--
resynchronize code repo with production
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
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    11
 * Convert given date string into a different format.
0
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
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    21
 * @param string $format    Format of the date to return.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    22
 * @param string $date      Date string to convert.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    23
 * @param bool   $translate Whether the return date should be translated. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    24
 * @return string|int|bool Formatted date string or Unix timestamp. False if $date is empty.
0
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.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    49
 * Other strings will be interpreted as PHP date formats (e.g. 'Y-m-d').
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
 * 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
    52
 * 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
    53
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
 * @since 1.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    56
 * @param string   $type Type of time to retrieve. Accepts 'mysql', 'timestamp', or PHP date
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    57
 *                       format string (e.g. 'Y-m-d').
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    58
 * @param int|bool $gmt  Optional. Whether to use GMT timezone. Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    59
 * @return int|string Integer if $type is 'timestamp', string otherwise.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
function current_time( $type, $gmt = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
	switch ( $type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		case 'mysql':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
			return ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		case 'timestamp':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
			return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    67
		default:
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    68
			return ( $gmt ) ? date( $type ) : date( $type, time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) );
0
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
 * Retrieve the date in localized format, based on timestamp.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
 * If the locale specifies the locale month and weekday, then the locale will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
 * 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
    77
 * will be used instead.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    81
 * @global WP_Locale $wp_locale
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    82
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    83
 * @param string   $dateformatstring Format to display the date.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    84
 * @param bool|int $unixtimestamp    Optional. Unix timestamp. Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    85
 * @param bool     $gmt              Optional. Whether to use GMT timezone. Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    86
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
 * @return string The date, translated if locale specifies it.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
	global $wp_locale;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
	$i = $unixtimestamp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
	if ( false === $i ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    94
		$i = current_time( 'timestamp', $gmt );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    97
	/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    98
	 * Store original value for language with untypical grammars.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    99
	 * See https://core.trac.wordpress.org/ticket/9396
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   100
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
	$req_format = $dateformatstring;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
	if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   104
		$datemonth = $wp_locale->get_month( date( 'm', $i ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
		$datemonth_abbrev = $wp_locale->get_month_abbrev( $datemonth );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   106
		$dateweekday = $wp_locale->get_weekday( date( 'w', $i ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		$dateweekday_abbrev = $wp_locale->get_weekday_abbrev( $dateweekday );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   108
		$datemeridiem = $wp_locale->get_meridiem( date( 'a', $i ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   109
		$datemeridiem_capital = $wp_locale->get_meridiem( date( 'A', $i ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		$dateformatstring = ' '.$dateformatstring;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		$dateformatstring = preg_replace( "/([^\\\])D/", "\\1" . backslashit( $dateweekday_abbrev ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
		$dateformatstring = preg_replace( "/([^\\\])F/", "\\1" . backslashit( $datemonth ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		$dateformatstring = preg_replace( "/([^\\\])l/", "\\1" . backslashit( $dateweekday ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		$dateformatstring = preg_replace( "/([^\\\])M/", "\\1" . backslashit( $datemonth_abbrev ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		$dateformatstring = preg_replace( "/([^\\\])a/", "\\1" . backslashit( $datemeridiem ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
		$dateformatstring = preg_replace( "/([^\\\])A/", "\\1" . backslashit( $datemeridiem_capital ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		$dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
	$timezone_formats = array( 'P', 'I', 'O', 'T', 'Z', 'e' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
	$timezone_formats_re = implode( '|', $timezone_formats );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
	if ( preg_match( "/$timezone_formats_re/", $dateformatstring ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
		$timezone_string = get_option( 'timezone_string' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
		if ( $timezone_string ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
			$timezone_object = timezone_open( $timezone_string );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			$date_object = date_create( null, $timezone_object );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   127
			foreach ( $timezone_formats as $timezone_format ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
				if ( false !== strpos( $dateformatstring, $timezone_format ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
					$formatted = date_format( $date_object, $timezone_format );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
					$dateformatstring = ' '.$dateformatstring;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
					$dateformatstring = preg_replace( "/([^\\\])$timezone_format/", "\\1" . backslashit( $formatted ), $dateformatstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
					$dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
				}
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
	}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   137
	$j = @date( $dateformatstring, $i );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   138
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   139
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   140
	 * Filters the date formatted based on the locale.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   141
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   142
	 * @since 2.8.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   143
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   144
	 * @param string $j          Formatted date string.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   145
	 * @param string $req_format Format to display the date.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   146
	 * @param int    $i          Unix timestamp.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   147
	 * @param bool   $gmt        Whether to convert to GMT for time. Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   148
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   149
	$j = apply_filters( 'date_i18n', $j, $req_format, $i, $gmt );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
	return $j;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   154
 * Determines if the date should be declined.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   155
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   156
 * If the locale specifies that month names require a genitive case in certain
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   157
 * formats (like 'j F Y'), the month name will be replaced with a correct form.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   158
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   159
 * @since 4.4.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   160
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   161
 * @global WP_Locale $wp_locale
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   162
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   163
 * @param string $date Formatted date string.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   164
 * @return string The date, declined if locale specifies it.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   165
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   166
function wp_maybe_decline_date( $date ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   167
	global $wp_locale;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   168
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   169
	// i18n functions are not available in SHORTINIT mode
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   170
	if ( ! function_exists( '_x' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   171
		return $date;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   172
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   173
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   174
	/* translators: If months in your language require a genitive case,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   175
	 * translate this to 'on'. Do not translate into your own language.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   176
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   177
	if ( 'on' === _x( 'off', 'decline months names: on or off' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   178
		// Match a format like 'j F Y' or 'j. F'
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   179
		if ( @preg_match( '#^\d{1,2}\.? [^\d ]+#u', $date ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   180
			$months          = $wp_locale->month;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   181
			$months_genitive = $wp_locale->month_genitive;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   182
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   183
			foreach ( $months as $key => $month ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   184
				$months[ $key ] = '# ' . $month . '( |$)#u';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   185
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   186
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   187
			foreach ( $months_genitive as $key => $month ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   188
				$months_genitive[ $key ] = ' ' . $month . '$1';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   189
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   190
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   191
			$date = preg_replace( $months, $months_genitive, $date );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   192
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   193
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   194
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   195
	// Used for locale-specific rules
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   196
	$locale = get_locale();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   197
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   198
	if ( 'ca' === $locale ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   199
		// " de abril| de agost| de octubre..." -> " d'abril| d'agost| d'octubre..."
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   200
		$date = preg_replace( '# de ([ao])#i', " d'\\1", $date );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   201
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   202
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   203
	return $date;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   204
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   205
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   206
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   207
 * Convert float number to format based on the locale.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   211
 * @global WP_Locale $wp_locale
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   212
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   213
 * @param float $number   The number to convert based on locale.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   214
 * @param int   $decimals Optional. Precision of the number of decimal places. Default 0.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
 * @return string Converted number in string format.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
function number_format_i18n( $number, $decimals = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
	global $wp_locale;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   219
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   220
	if ( isset( $wp_locale ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   221
		$formatted = number_format( $number, absint( $decimals ), $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   222
	} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   223
		$formatted = number_format( $number, absint( $decimals ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   224
	}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   225
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   226
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   227
	 * Filters the number formatted based on the locale.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   228
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   229
	 * @since 2.8.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   230
	 * @since 4.9.0 The `$number` and `$decimals` arguments were added.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   231
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   232
	 * @param string $formatted Converted number in string format.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   233
	 * @param float  $number    The number to convert based on locale.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   234
	 * @param int    $decimals  Precision of the number of decimal places.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   235
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   236
	return apply_filters( 'number_format_i18n', $formatted, $number, $decimals );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
 * Convert number of bytes largest unit bytes will fit into.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   242
 * It is easier to read 1 KB than 1024 bytes and 1 MB than 1048576 bytes. Converts
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
 * 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
   244
 * that the bytes will go into it. Supports TB value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
 * 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
   247
 * 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
   248
 * 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
   249
 * be converted to a double, which should always have 64 bit length.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
 * Technically the correct unit names for powers of 1024 are KiB, MiB etc.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   255
 * @param int|string $bytes    Number of bytes. Note max integer size for integers.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   256
 * @param int        $decimals Optional. Precision of number of decimal places. Default 0.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   257
 * @return string|false False on failure. Number string on success.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
function size_format( $bytes, $decimals = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
	$quant = array(
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   261
		'TB' => TB_IN_BYTES,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   262
		'GB' => GB_IN_BYTES,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   263
		'MB' => MB_IN_BYTES,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   264
		'KB' => KB_IN_BYTES,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   265
		'B'  => 1,
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
	);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   267
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   268
	if ( 0 === $bytes ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   269
		return number_format_i18n( 0, $decimals ) . ' B';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   270
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   271
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   272
	foreach ( $quant as $unit => $mag ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   273
		if ( doubleval( $bytes ) >= $mag ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
			return number_format_i18n( $bytes / $mag, $decimals ) . ' ' . $unit;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   275
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   276
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   282
 * Get the week start and end from the datetime or date string from MySQL.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   286
 * @param string     $mysqlstring   Date or datetime field type from MySQL.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   287
 * @param int|string $start_of_week Optional. Start of the week as an integer. Default empty string.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
 * @return array Keys are 'start' and 'end'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
function get_weekstartend( $mysqlstring, $start_of_week = '' ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   291
	// MySQL string year.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   292
	$my = substr( $mysqlstring, 0, 4 );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   293
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   294
	// MySQL string month.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   295
	$mm = substr( $mysqlstring, 8, 2 );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   296
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   297
	// MySQL string day.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   298
	$md = substr( $mysqlstring, 5, 2 );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   299
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   300
	// The timestamp for MySQL string day.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   301
	$day = mktime( 0, 0, 0, $md, $mm, $my );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   302
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   303
	// The day of the week from the timestamp.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   304
	$weekday = date( 'w', $day );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   305
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
	if ( !is_numeric($start_of_week) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
		$start_of_week = get_option( 'start_of_week' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
	if ( $weekday < $start_of_week )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
		$weekday += 7;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   312
	// The most recent week start day on or before $day.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   313
	$start = $day - DAY_IN_SECONDS * ( $weekday - $start_of_week );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   314
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   315
	// $start + 1 week - 1 second.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   316
	$end = $start + WEEK_IN_SECONDS - 1;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
	return compact( 'start', 'end' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
 * Unserialize value only if it was serialized.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
 * @param string $original Maybe unserialized original, if is needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
 * @return mixed Unserialized data can be any type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
function maybe_unserialize( $original ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
	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
   330
		return @unserialize( $original );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
	return $original;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
 * Check value to find if it was serialized.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
 * If $data is not an string, then returned value will always be false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
 * Serialized data is always a string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
 * @since 2.0.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   342
 * @param string $data   Value to check to see if was serialized.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   343
 * @param bool   $strict Optional. Whether to be strict about the end of the string. Default true.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
 * @return bool False if not serialized and true if it was.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
function is_serialized( $data, $strict = true ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   347
	// if it isn't a string, it isn't serialized.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   348
	if ( ! is_string( $data ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
		return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   350
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
	$data = trim( $data );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   352
 	if ( 'N;' == $data ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
		return true;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   354
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   355
	if ( strlen( $data ) < 4 ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
		return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   357
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   358
	if ( ':' !== $data[1] ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
		return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   360
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
	if ( $strict ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   362
		$lastc = substr( $data, -1 );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   363
		if ( ';' !== $lastc && '}' !== $lastc ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
			return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   365
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
		$semicolon = strpos( $data, ';' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
		$brace     = strpos( $data, '}' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
		// Either ; or } must exist.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
		if ( false === $semicolon && false === $brace )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
		// But neither must be in the first X characters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
		if ( false !== $semicolon && $semicolon < 3 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
		if ( false !== $brace && $brace < 4 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
	$token = $data[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
	switch ( $token ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
		case 's' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
			if ( $strict ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   382
				if ( '"' !== substr( $data, -2, 1 ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
					return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   384
				}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
			} elseif ( false === strpos( $data, '"' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
			// or else fall through
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
		case 'a' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
		case 'O' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
			return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
		case 'b' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
		case 'i' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
		case 'd' :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
			$end = $strict ? '$' : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
			return (bool) preg_match( "/^{$token}:[0-9.E-]+;$end/", $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
 * Check whether serialized data is of string type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
 * @since 2.0.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   406
 * @param string $data Serialized data.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
 * @return bool False if not a serialized string, true if it is.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
function is_serialized_string( $data ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   410
	// if it isn't a string, it isn't a serialized string.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   411
	if ( ! is_string( $data ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
		return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   413
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
	$data = trim( $data );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   415
	if ( strlen( $data ) < 4 ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
		return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   417
	} elseif ( ':' !== $data[1] ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
		return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   419
	} elseif ( ';' !== substr( $data, -1 ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
		return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   421
	} elseif ( $data[0] !== 's' ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
		return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   423
	} elseif ( '"' !== substr( $data, -2, 1 ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
		return false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   425
	} else {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
		return true;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   427
	}
0
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
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
 * Serialize data, if needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
 * @since 2.0.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   435
 * @param string|array|object $data Data that might be serialized.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
 * @return mixed A scalar data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
function maybe_serialize( $data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
	if ( is_array( $data ) || is_object( $data ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
		return serialize( $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
	// Double serialization is required for backward compatibility.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   443
	// See https://core.trac.wordpress.org/ticket/12930
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   444
	// Also the world will end. See WP 3.6.1.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
	if ( is_serialized( $data, false ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
		return serialize( $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
	return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
 * Retrieve post title from XMLRPC XML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
 * 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
   455
 * the $post_default_title will be used instead.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   459
 * @global string $post_default_title Default XML-RPC post title.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
 * @param string $content XMLRPC XML Request content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
 * @return string Post title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
function xmlrpc_getposttitle( $content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
	global $post_default_title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
	if ( preg_match( '/<title>(.+?)<\/title>/is', $content, $matchtitle ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
		$post_title = $matchtitle[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
		$post_title = $post_default_title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
	return $post_title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
 * Retrieve the post category or categories from XMLRPC XML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
 * 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
   478
 * used. The return type then would be what $post_default_category. If the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
 * category is found, then it will always be an array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   483
 * @global string $post_default_category Default XML-RPC post category.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
 * @param string $content XMLRPC XML Request content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
 * @return string|array List of categories or category name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
function xmlrpc_getpostcategory( $content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
	global $post_default_category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
	if ( preg_match( '/<category>(.+?)<\/category>/is', $content, $matchcat ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
		$post_category = trim( $matchcat[1], ',' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
		$post_category = explode( ',', $post_category );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
		$post_category = $post_default_category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
	return $post_category;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
 * XMLRPC XML content without title and category elements.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   504
 * @param string $content XML-RPC XML Request content.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
 * @return string XMLRPC XML Request content without title and category elements.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
function xmlrpc_removepostdata( $content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
	$content = preg_replace( '/<title>(.+?)<\/title>/si', '', $content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
	$content = preg_replace( '/<category>(.+?)<\/category>/si', '', $content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
	$content = trim( $content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
	return $content;
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
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   515
 * Use RegEx to extract URLs from arbitrary content.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   519
 * @param string $content Content to extract URLs from.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   520
 * @return array URLs found in passed string.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
function wp_extract_urls( $content ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
	preg_match_all(
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   524
		"#([\"']?)("
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   525
			. "(?:([\w-]+:)?//?)"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   526
			. "[^\s()<>]+"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   527
			. "[.]"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   528
			. "(?:"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   529
				. "\([\w\d]+\)|"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   530
				. "(?:"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   531
					. "[^`!()\[\]{};:'\".,<>«»“”‘’\s]|"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   532
					. "(?:[:]\d+)?/?"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   533
				. ")+"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   534
			. ")"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   535
		. ")\\1#",
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
		$content,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
		$post_links
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   540
	$post_links = array_unique( array_map( 'html_entity_decode', $post_links[2] ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
	return array_values( $post_links );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
 * Check content for video and audio links to add as enclosures.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
 * Will not add enclosures that have already been added and will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
 * remove enclosures that are no longer in the post. This is called as
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
 * pingbacks and trackbacks.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   554
 * @global wpdb $wpdb WordPress database abstraction object.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   555
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   556
 * @param string $content Post Content.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   557
 * @param int    $post_ID Post ID.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
function do_enclose( $content, $post_ID ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
	//TODO: Tidy this ghetto code up and make the debug code optional
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
	include_once( ABSPATH . WPINC . '/class-IXR.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
	$post_links = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
	$pung = get_enclosed( $post_ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
	$post_links_temp = wp_extract_urls( $content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
	foreach ( $pung as $link_test ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
		if ( ! in_array( $link_test, $post_links_temp ) ) { // link no longer in post
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   573
			$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, $wpdb->esc_like( $link_test ) . '%') );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
			foreach ( $mids as $mid )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
				delete_metadata_by_mid( 'post', $mid );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
	foreach ( (array) $post_links_temp as $link_test ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
		if ( !in_array( $link_test, $pung ) ) { // If we haven't pung it already
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
			$test = @parse_url( $link_test );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
			if ( false === $test )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
			if ( isset( $test['query'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
				$post_links[] = $link_test;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
			elseif ( isset($test['path']) && ( $test['path'] != '/' ) &&  ($test['path'] != '' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
				$post_links[] = $link_test;
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
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   591
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   592
	 * Filters the list of enclosure links before querying the database.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   593
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   594
	 * Allows for the addition and/or removal of potential enclosures to save
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   595
	 * to postmeta before checking the database for existing enclosures.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   596
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   597
	 * @since 4.4.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   598
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   599
	 * @param array $post_links An array of enclosure links.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   600
	 * @param int   $post_ID    Post ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   601
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   602
	$post_links = apply_filters( 'enclosure_links', $post_links, $post_ID );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   603
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
	foreach ( (array) $post_links as $url ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   605
		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, $wpdb->esc_like( $url ) . '%' ) ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
			if ( $headers = wp_get_http_headers( $url) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
				$len = isset( $headers['content-length'] ) ? (int) $headers['content-length'] : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
				$type = isset( $headers['content-type'] ) ? $headers['content-type'] : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
				$allowed_types = array( 'video', 'audio' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
				// Check to see if we can figure out the mime type from
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
				// the extension
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
				$url_parts = @parse_url( $url );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
				if ( false !== $url_parts ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
					$extension = pathinfo( $url_parts['path'], PATHINFO_EXTENSION );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
					if ( !empty( $extension ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
						foreach ( wp_get_mime_types() as $exts => $mime ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
							if ( preg_match( '!^(' . $exts . ')$!i', $extension ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
								$type = $mime;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
							}
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
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
				if ( in_array( substr( $type, 0, strpos( $type, "/" ) ), $allowed_types ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
					add_post_meta( $post_ID, 'enclosure', "$url\n$len\n$mime\n" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
 * Retrieve HTTP Headers from URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
 * @since 1.5.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   640
 * @param string $url        URL to retrieve HTTP headers from.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   641
 * @param bool   $deprecated Not Used.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
 * @return bool|string False on failure, headers on success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
function wp_get_http_headers( $url, $deprecated = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
	if ( !empty( $deprecated ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   646
		_deprecated_argument( __FUNCTION__, '2.7.0' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
	$response = wp_safe_remote_head( $url );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
	if ( is_wp_error( $response ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
	return wp_remote_retrieve_headers( $response );
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
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   657
 * Whether the publish date of the current post in the loop is different from the
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   658
 * publish date of the previous post in the loop.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
 * @since 0.71
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   661
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   662
 * @global string $currentday  The day of the current post in the loop.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   663
 * @global string $previousday The day of the previous post in the loop.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
 * @return int 1 when new day, 0 if not a new day.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
function is_new_day() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
	global $currentday, $previousday;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
	if ( $currentday != $previousday )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
		return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
		return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
 * Build URL query based on an associative and, or indexed array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
 * This is a convenient function for easily building url queries. It sets the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
 * separator to '&' and uses _http_build_query() function.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   681
 * @since 2.3.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   682
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
 * @see _http_build_query() Used to build the query
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   684
 * @link https://secure.php.net/manual/en/function.http-build-query.php for more on what
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   685
 *		 http_build_query() does.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
 * @param array $data URL-encode key/value pairs.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   688
 * @return string URL-encoded string.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
function build_query( $data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
	return _http_build_query( $data, null, '&', '', false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   694
/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   695
 * From php.net (modified by Mark Jaquith to behave like the native PHP5 function).
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   696
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   697
 * @since 3.2.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   698
 * @access private
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   699
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   700
 * @see https://secure.php.net/manual/en/function.http-build-query.php
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   701
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   702
 * @param array|object  $data       An array or object of data. Converted to array.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   703
 * @param string        $prefix     Optional. Numeric index. If set, start parameter numbering with it.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   704
 *                                  Default null.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   705
 * @param string        $sep        Optional. Argument separator; defaults to 'arg_separator.output'.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   706
 *                                  Default null.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   707
 * @param string        $key        Optional. Used to prefix key name. Default empty.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   708
 * @param bool          $urlencode  Optional. Whether to use urlencode() in the result. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   709
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   710
 * @return string The query string.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   711
 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   712
function _http_build_query( $data, $prefix = null, $sep = null, $key = '', $urlencode = true ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
	$ret = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
	foreach ( (array) $data as $k => $v ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
		if ( $urlencode)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
			$k = urlencode($k);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
		if ( is_int($k) && $prefix != null )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
			$k = $prefix.$k;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
		if ( !empty($key) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
			$k = $key . '%5B' . $k . '%5D';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
		if ( $v === null )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
			continue;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   724
		elseif ( $v === false )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
			$v = '0';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
		if ( is_array($v) || is_object($v) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
			array_push($ret,_http_build_query($v, '', $sep, $k, $urlencode));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
		elseif ( $urlencode )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
			array_push($ret, $k.'='.urlencode($v));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
			array_push($ret, $k.'='.$v);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
	if ( null === $sep )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
		$sep = ini_get('arg_separator.output');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
	return implode($sep, $ret);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   742
 * Retrieves a modified URL query string.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   743
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   744
 * You can rebuild the URL and append query variables to the URL query by using this function.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   745
 * There are two ways to use this function; either a single key and value, or an associative array.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   746
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   747
 * Using a single key and value:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   748
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   749
 *     add_query_arg( 'key', 'value', 'http://example.com' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   750
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   751
 * Using an associative array:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   752
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   753
 *     add_query_arg( array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   754
 *         'key1' => 'value1',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   755
 *         'key2' => 'value2',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   756
 *     ), 'http://example.com' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   757
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   758
 * Omitting the URL from either use results in the current URL being used
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   759
 * (the value of `$_SERVER['REQUEST_URI']`).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   760
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   761
 * Values are expected to be encoded appropriately with urlencode() or rawurlencode().
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   762
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   763
 * Setting any query variable's value to boolean false removes the key (see remove_query_arg()).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   764
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   765
 * Important: The return value of add_query_arg() is not escaped by default. Output should be
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   766
 * late-escaped with esc_url() or similar to help prevent vulnerability to cross-site scripting
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   767
 * (XSS) attacks.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   771
 * @param string|array $key   Either a query variable key, or an associative array of query variables.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   772
 * @param string       $value Optional. Either a query variable value, or a URL to act upon.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   773
 * @param string       $url   Optional. A URL to act upon.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   774
 * @return string New URL query string (unescaped).
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
function add_query_arg() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
	$args = func_get_args();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
	if ( is_array( $args[0] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
		if ( count( $args ) < 2 || false === $args[1] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
			$uri = $_SERVER['REQUEST_URI'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
			$uri = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
		if ( count( $args ) < 3 || false === $args[2] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
			$uri = $_SERVER['REQUEST_URI'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
			$uri = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
	if ( $frag = strstr( $uri, '#' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
		$uri = substr( $uri, 0, -strlen( $frag ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
		$frag = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
	if ( 0 === stripos( $uri, 'http://' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
		$protocol = 'http://';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
		$uri = substr( $uri, 7 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
	} elseif ( 0 === stripos( $uri, 'https://' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
		$protocol = 'https://';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
		$uri = substr( $uri, 8 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
		$protocol = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
	if ( strpos( $uri, '?' ) !== false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
		list( $base, $query ) = explode( '?', $uri, 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
		$base .= '?';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
	} elseif ( $protocol || strpos( $uri, '=' ) === false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
		$base = $uri . '?';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
		$query = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
		$base = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
		$query = $uri;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
	wp_parse_str( $query, $qs );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
	$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
   818
	if ( is_array( $args[0] ) ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   819
		foreach ( $args[0] as $k => $v ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   820
			$qs[ $k ] = $v;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   821
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
		$qs[ $args[0] ] = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
	foreach ( $qs as $k => $v ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
		if ( $v === false )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
			unset( $qs[$k] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
	$ret = build_query( $qs );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
	$ret = trim( $ret, '?' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
	$ret = preg_replace( '#=(&|$)#', '$1', $ret );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
	$ret = $protocol . $base . $ret . $frag;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
	$ret = rtrim( $ret, '?' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
	return $ret;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   840
 * Removes an item or items from a query string.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   844
 * @param string|array $key   Query key or keys to remove.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   845
 * @param bool|string  $query Optional. When false uses the current URL. Default false.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
 * @return string New URL query string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   848
function remove_query_arg( $key, $query = false ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
	if ( is_array( $key ) ) { // removing multiple keys
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
		foreach ( $key as $k )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
			$query = add_query_arg( $k, false, $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
		return $query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
	return add_query_arg( $key, false, $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   858
 * Returns an array of single-use query variable names that can be removed from a URL.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   859
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   860
 * @since 4.4.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   861
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   862
 * @return array An array of parameters to remove from the URL.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   863
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   864
function wp_removable_query_args() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   865
	$removable_query_args = array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   866
		'activate',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   867
		'activated',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   868
		'approved',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   869
		'deactivate',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   870
		'deleted',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   871
		'disabled',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   872
		'enabled',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   873
		'error',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   874
		'hotkeys_highlight_first',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   875
		'hotkeys_highlight_last',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   876
		'locked',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   877
		'message',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   878
		'same',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   879
		'saved',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   880
		'settings-updated',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   881
		'skipped',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   882
		'spammed',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   883
		'trashed',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   884
		'unspammed',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   885
		'untrashed',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   886
		'update',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   887
		'updated',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   888
		'wp-post-new-reload',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   889
	);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   890
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   891
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   892
	 * Filters the list of query variables to remove.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   893
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   894
	 * @since 4.2.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   895
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   896
	 * @param array $removable_query_args An array of query variables to remove from a URL.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   897
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   898
	return apply_filters( 'removable_query_args', $removable_query_args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   899
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   900
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   901
/**
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
 * Walks the array while sanitizing the contents.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
 * @since 0.71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
 * @param array $array Array to walk while sanitizing contents.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
 * @return array Sanitized $array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
function add_magic_quotes( $array ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
	foreach ( (array) $array as $k => $v ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
		if ( is_array( $v ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
			$array[$k] = add_magic_quotes( $v );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
			$array[$k] = addslashes( $v );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
		}
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 $array;
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
 * HTTP request for URI to retrieve content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
 * @since 1.5.1
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   924
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   925
 * @see wp_safe_remote_get()
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
 * @param string $uri URI/URL of web page to retrieve.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   928
 * @return false|string HTTP content. False on failure.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
function wp_remote_fopen( $uri ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
	$parsed_url = @parse_url( $uri );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
	if ( !$parsed_url || !is_array( $parsed_url ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
	$options = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
	$options['timeout'] = 10;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
	$response = wp_safe_remote_get( $uri, $options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
	if ( is_wp_error( $response ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
	return wp_remote_retrieve_body( $response );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
 * Set up the WordPress query.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   952
 * @global WP       $wp_locale
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   953
 * @global WP_Query $wp_query
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   954
 * @global WP_Query $wp_the_query
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   955
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   956
 * @param string|array $query_vars Default WP_Query arguments.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
function wp( $query_vars = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
	global $wp, $wp_query, $wp_the_query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
	$wp->main( $query_vars );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
	if ( !isset($wp_the_query) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
		$wp_the_query = $wp_query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
 * Retrieve the description for the HTTP status.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   971
 * @global array $wp_header_to_desc
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   972
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
 * @param int $code HTTP status code.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
 * @return string Empty string if not found, or description if found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
function get_status_header_desc( $code ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
	global $wp_header_to_desc;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
	$code = absint( $code );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
	if ( !isset( $wp_header_to_desc ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
		$wp_header_to_desc = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
			100 => 'Continue',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
			101 => 'Switching Protocols',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
			102 => 'Processing',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
			200 => 'OK',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
			201 => 'Created',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
			202 => 'Accepted',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
			203 => 'Non-Authoritative Information',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
			204 => 'No Content',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
			205 => 'Reset Content',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
			206 => 'Partial Content',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
			207 => 'Multi-Status',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
			226 => 'IM Used',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
			300 => 'Multiple Choices',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
			301 => 'Moved Permanently',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
			302 => 'Found',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
			303 => 'See Other',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
			304 => 'Not Modified',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
			305 => 'Use Proxy',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
			306 => 'Reserved',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
			307 => 'Temporary Redirect',
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1005
			308 => 'Permanent Redirect',
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
			400 => 'Bad Request',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
			401 => 'Unauthorized',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
			402 => 'Payment Required',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
			403 => 'Forbidden',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
			404 => 'Not Found',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
			405 => 'Method Not Allowed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
			406 => 'Not Acceptable',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
			407 => 'Proxy Authentication Required',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
			408 => 'Request Timeout',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
			409 => 'Conflict',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
			410 => 'Gone',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
			411 => 'Length Required',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
			412 => 'Precondition Failed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
			413 => 'Request Entity Too Large',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
			414 => 'Request-URI Too Long',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
			415 => 'Unsupported Media Type',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
			416 => 'Requested Range Not Satisfiable',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
			417 => 'Expectation Failed',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1025
			418 => 'I\'m a teapot',
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1026
			421 => 'Misdirected Request',
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
			422 => 'Unprocessable Entity',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
			423 => 'Locked',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
			424 => 'Failed Dependency',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
			426 => 'Upgrade Required',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1031
			428 => 'Precondition Required',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1032
			429 => 'Too Many Requests',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1033
			431 => 'Request Header Fields Too Large',
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1034
			451 => 'Unavailable For Legal Reasons',
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
			500 => 'Internal Server Error',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
			501 => 'Not Implemented',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
			502 => 'Bad Gateway',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
			503 => 'Service Unavailable',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
			504 => 'Gateway Timeout',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
			505 => 'HTTP Version Not Supported',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
			506 => 'Variant Also Negotiates',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
			507 => 'Insufficient Storage',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1044
			510 => 'Not Extended',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1045
			511 => 'Network Authentication Required',
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
	if ( isset( $wp_header_to_desc[$code] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
		return $wp_header_to_desc[$code];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
		return '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
 * Set HTTP status header.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
 * @since 2.0.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1059
 * @since 4.4.0 Added the `$description` parameter.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1060
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1061
 * @see get_status_header_desc()
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1062
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1063
 * @param int    $code        HTTP status code.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1064
 * @param string $description Optional. A custom description for the HTTP status.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1065
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1066
function status_header( $code, $description = '' ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1067
	if ( ! $description ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1068
		$description = get_status_header_desc( $code );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1069
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1070
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1071
	if ( empty( $description ) ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1072
		return;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1073
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1074
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1075
	$protocol = wp_get_server_protocol();
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1076
	$status_header = "$protocol $code $description";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
	if ( function_exists( 'apply_filters' ) )
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1078
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1079
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1080
		 * Filters an HTTP status header.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1081
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1082
		 * @since 2.2.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1083
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1084
		 * @param string $status_header HTTP status header.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1085
		 * @param int    $code          HTTP status code.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1086
		 * @param string $description   Description for the status code.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1087
		 * @param string $protocol      Server protocol.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1088
		 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1089
		$status_header = apply_filters( 'status_header', $status_header, $code, $description, $protocol );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1090
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1091
	@header( $status_header, true, $code );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1095
 * Get the header information to prevent caching.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1096
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1097
 * The several different headers cover the different ways cache prevention
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1098
 * is handled by different browsers
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
 * @since 2.8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
 * @return array The associative array of header names and field values.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
function wp_get_nocache_headers() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
	$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
		'Expires' => 'Wed, 11 Jan 1984 05:00:00 GMT',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
		'Cache-Control' => 'no-cache, must-revalidate, max-age=0',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
	if ( function_exists('apply_filters') ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1111
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1112
		 * Filters the cache-controlling headers.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1113
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1114
		 * @since 2.8.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1115
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1116
		 * @see wp_get_nocache_headers()
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1117
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1118
		 * @param array $headers {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1119
		 *     Header names and field values.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1120
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1121
		 *     @type string $Expires       Expires header.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1122
		 *     @type string $Cache-Control Cache-Control header.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1123
		 * }
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1124
		 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1125
		$headers = (array) apply_filters( 'nocache_headers', $headers );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
	$headers['Last-Modified'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
	return $headers;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1132
 * Set the headers to prevent caching for the different browsers.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1133
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1134
 * Different browsers support different nocache headers, so several
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1135
 * headers must be sent so that all of them get the point that no
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1136
 * caching should occur.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
 * @since 2.0.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1139
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1140
 * @see wp_get_nocache_headers()
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
function nocache_headers() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
	$headers = wp_get_nocache_headers();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
	unset( $headers['Last-Modified'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
	// 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
  1148
	if ( function_exists( 'header_remove' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
		@header_remove( 'Last-Modified' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
		// 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
  1152
		// last resort to override a header already sent. #WP23021
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
		foreach ( headers_list() as $header ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
			if ( 0 === stripos( $header, 'Last-Modified' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
				$headers['Last-Modified'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1161
	foreach ( $headers as $name => $field_value )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
		@header("{$name}: {$field_value}");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
 * Set the headers for caching for 10 days with JavaScript content type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
function cache_javascript_headers() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
	$expiresOffset = 10 * DAY_IN_SECONDS;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1172
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
	header( "Content-Type: text/javascript; charset=" . get_bloginfo( 'charset' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
	header( "Vary: Accept-Encoding" ); // Handle proxies
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
	header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $expiresOffset ) . " GMT" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
 * Retrieve the number of database queries during the WordPress execution.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1183
 * @global wpdb $wpdb WordPress database abstraction object.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1184
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1185
 * @return int Number of database queries.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
function get_num_queries() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
	return $wpdb->num_queries;
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
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1193
 * Whether input is yes or no.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1194
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1195
 * Must be 'y' to be true.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
 * @since 1.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1199
 * @param string $yn Character string containing either 'y' (yes) or 'n' (no).
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1200
 * @return bool True if yes, false on anything else.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
function bool_from_yn( $yn ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
	return ( strtolower( $yn ) == 'y' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1207
 * Load the feed template from the use of an action hook.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
 * 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
  1210
 * message telling the visitor that the feed is not valid.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
 * It is better to only have one hook for each feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
 * @since 2.1.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1215
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1216
 * @global WP_Query $wp_query Used to tell if the use a comment feed.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
function do_feed() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
	global $wp_query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
	$feed = get_query_var( 'feed' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
	// Remove the pad, if present.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
	$feed = preg_replace( '/^_+/', '', $feed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
	if ( $feed == '' || $feed == 'feed' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
		$feed = get_default_feed();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1229
	if ( ! has_action( "do_feed_{$feed}" ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
		wp_die( __( 'ERROR: This is not a valid feed template.' ), '', array( 'response' => 404 ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1231
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1233
	/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1234
	 * Fires once the given feed is loaded.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1235
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1236
	 * The dynamic portion of the hook name, `$feed`, refers to the feed template name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1237
	 * Possible values include: 'rdf', 'rss', 'rss2', and 'atom'.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1238
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1239
	 * @since 2.1.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1240
	 * @since 4.4.0 The `$feed` parameter was added.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1241
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1242
	 * @param bool   $is_comment_feed Whether the feed is a comment feed.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1243
	 * @param string $feed            The feed name.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1244
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1245
	do_action( "do_feed_{$feed}", $wp_query->is_comment_feed, $feed );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
}
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
 * Load the RDF RSS 0.91 Feed template.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
 * @since 2.1.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1252
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1253
 * @see load_template()
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
function do_feed_rdf() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
	load_template( ABSPATH . WPINC . '/feed-rdf.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
 * Load the RSS 1.0 Feed Template.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
 * @since 2.1.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1263
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1264
 * @see load_template()
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
function do_feed_rss() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
	load_template( ABSPATH . WPINC . '/feed-rss.php' );
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
 * Load either the RSS2 comment feed or the RSS2 posts feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1275
 * @see load_template()
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1276
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
 * @param bool $for_comments True for the comment feed, false for normal feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
function do_feed_rss2( $for_comments ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
	if ( $for_comments )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
		load_template( ABSPATH . WPINC . '/feed-rss2-comments.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
		load_template( ABSPATH . WPINC . '/feed-rss2.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
 * Load either Atom comment feed or Atom posts feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1291
 * @see load_template()
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1292
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
 * @param bool $for_comments True for the comment feed, false for normal feed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
function do_feed_atom( $for_comments ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
	if ($for_comments)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
		load_template( ABSPATH . WPINC . '/feed-atom-comments.php');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
		load_template( ABSPATH . WPINC . '/feed-atom.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
 * Display the robots.txt file content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
 * 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
  1306
 * robots.txt file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
function do_robots() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
	header( 'Content-Type: text/plain; charset=utf-8' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1313
	/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1314
	 * Fires when displaying the robots.txt file.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1315
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1316
	 * @since 2.1.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1317
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
	do_action( 'do_robotstxt' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
	$output = "User-agent: *\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
	$public = get_option( 'blog_public' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
	if ( '0' == $public ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
		$output .= "Disallow: /\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
		$site_url = parse_url( site_url() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
		$path = ( !empty( $site_url['path'] ) ) ? $site_url['path'] : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
		$output .= "Disallow: $path/wp-admin/\n";
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1328
		$output .= "Allow: $path/wp-admin/admin-ajax.php\n";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1331
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1332
	 * Filters the robots.txt output.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1333
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1334
	 * @since 3.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1335
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1336
	 * @param string $output Robots.txt output.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1337
	 * @param bool   $public Whether the site is considered "public".
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1338
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1339
	echo apply_filters( 'robots_txt', $output, $public );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1343
 * Test whether WordPress is already installed.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1345
 * The cache will be checked first. If you have a cache plugin, which saves
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1346
 * the cache values, then this will work. If you use the default WordPress
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1347
 * cache, and the database goes away, then you might have problems.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1348
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1349
 * Checks for the 'siteurl' option for whether WordPress is installed.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
 * @since 2.1.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1352
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1353
 * @global wpdb $wpdb WordPress database abstraction object.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1354
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1355
 * @return bool Whether the site is already installed.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
function is_blog_installed() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1360
	/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1361
	 * Check cache first. If options table goes away and we have true
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1362
	 * cached, oh well.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1363
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
	if ( wp_cache_get( 'is_blog_installed' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
	$suppress = $wpdb->suppress_errors();
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1368
	if ( ! wp_installing() ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
		$alloptions = wp_load_alloptions();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
	// If siteurl is not set to autoload, check it specifically
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
	if ( !isset( $alloptions['siteurl'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
		$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
  1374
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
		$installed = $alloptions['siteurl'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
	$wpdb->suppress_errors( $suppress );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
	$installed = !empty( $installed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
	wp_cache_set( 'is_blog_installed', $installed );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
	if ( $installed )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
	// If visiting repair.php, return true and let it take over.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
	if ( defined( 'WP_REPAIRING' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
	$suppress = $wpdb->suppress_errors();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1390
	/*
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1391
	 * Loop over the WP tables. If none exist, then scratch installation is allowed.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1392
	 * If one or more exist, suggest table repair since we got here because the
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1393
	 * options table could not be accessed.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1394
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
	$wp_tables = $wpdb->tables();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
	foreach ( $wp_tables as $table ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1397
		// The existence of custom user tables shouldn't suggest an insane state or prevent a clean installation.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
		if ( defined( 'CUSTOM_USER_TABLE' ) && CUSTOM_USER_TABLE == $table )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
		if ( defined( 'CUSTOM_USER_META_TABLE' ) && CUSTOM_USER_META_TABLE == $table )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
		if ( ! $wpdb->get_results( "DESCRIBE $table;" ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
		// One or more tables exist. We are insane.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
		wp_load_translations_early();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
		// Die with a DB error.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1411
		$wpdb->error = sprintf(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1412
			/* translators: %s: database repair URL */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1413
			__( 'One or more database tables are unavailable. The database may need to be <a href="%s">repaired</a>.' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1414
			'maint/repair.php?referrer=is_blog_installed'
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1415
		);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1416
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
		dead_db();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
	$wpdb->suppress_errors( $suppress );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
	wp_cache_set( 'is_blog_installed', false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
 * Retrieve URL with nonce added to URL query.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1432
 * @param string     $actionurl URL to add nonce action.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1433
 * @param int|string $action    Optional. Nonce action name. Default -1.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1434
 * @param string     $name      Optional. Nonce name. Default '_wpnonce'.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1435
 * @return string Escaped URL with nonce action added.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
function wp_nonce_url( $actionurl, $action = -1, $name = '_wpnonce' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
	$actionurl = str_replace( '&amp;', '&', $actionurl );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
	return esc_html( add_query_arg( $name, wp_create_nonce( $action ), $actionurl ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
 * Retrieve or display nonce hidden field for forms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
 * 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
  1446
 * 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
  1447
 * offer absolute protection, but should protect against most cases. It is very
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
 * important to use nonce field in forms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
 * 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
  1451
 * 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
  1452
 * call the function without any parameters, because validation of the nonce
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
 * doesn't require any parameters, but since crackers know what the default is
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
 * 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
  1455
 * damage.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
 * 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
  1458
 * the nonce creation value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1462
 * @param int|string $action  Optional. Action name. Default -1.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1463
 * @param string     $name    Optional. Nonce name. Default '_wpnonce'.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1464
 * @param bool       $referer Optional. Whether to set the referer field for validation. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1465
 * @param bool       $echo    Optional. Whether to display or return hidden form field. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1466
 * @return string Nonce field HTML markup.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
function wp_nonce_field( $action = -1, $name = "_wpnonce", $referer = true , $echo = true ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
	$name = esc_attr( $name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
	$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
  1471
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
	if ( $referer )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
		$nonce_field .= wp_referer_field( false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
	if ( $echo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
		echo $nonce_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
	return $nonce_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
 * Retrieve or display referer hidden field for forms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
 * 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
  1485
 * input name is '_wp_http_referer', in case you wanted to check manually.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1489
 * @param bool $echo Optional. Whether to echo or return the referer field. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1490
 * @return string Referer field HTML markup.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
function wp_referer_field( $echo = true ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
	$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
  1494
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
	if ( $echo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
		echo $referer_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
	return $referer_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
 * Retrieve or display original referer hidden field for forms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
 * The input name is '_wp_original_http_referer' and will be either the same
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1504
 * value of wp_referer_field(), if that was posted already or it will be the
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1505
 * current page, if it doesn't exist.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1506
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1509
 * @param bool   $echo         Optional. Whether to echo the original http referer. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1510
 * @param string $jump_back_to Optional. Can be 'previous' or page you want to jump back to.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1511
 *                             Default 'current'.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
 * @return string Original referer field.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
function wp_original_referer_field( $echo = true, $jump_back_to = 'current' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
	if ( ! $ref = wp_get_original_referer() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
		$ref = 'previous' == $jump_back_to ? wp_get_referer() : wp_unslash( $_SERVER['REQUEST_URI'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
	$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
  1519
	if ( $echo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
		echo $orig_referer_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
	return $orig_referer_field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1525
 * Retrieve referer from '_wp_http_referer' or HTTP referer.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1526
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1527
 * If it's the same as the current request URL, will return false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1528
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1531
 * @return false|string False on failure. Referer URL on success.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
function wp_get_referer() {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1534
	if ( ! function_exists( 'wp_validate_redirect' ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
		return false;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1536
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1537
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1538
	$ref = wp_get_raw_referer();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1539
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1540
	if ( $ref && $ref !== wp_unslash( $_SERVER['REQUEST_URI'] ) && $ref !== home_url() . wp_unslash( $_SERVER['REQUEST_URI'] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
		return wp_validate_redirect( $ref, false );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1542
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1543
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1544
	return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1545
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1546
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1547
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1548
 * Retrieves unvalidated referer from '_wp_http_referer' or HTTP referer.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1549
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1550
 * Do not use for redirects, use wp_get_referer() instead.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1551
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1552
 * @since 4.5.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1553
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1554
 * @return string|false Referer URL on success, false on failure.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1555
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1556
function wp_get_raw_referer() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1557
	if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1558
		return wp_unslash( $_REQUEST['_wp_http_referer'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1559
	} else if ( ! empty( $_SERVER['HTTP_REFERER'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1560
		return wp_unslash( $_SERVER['HTTP_REFERER'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1561
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1562
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
 * Retrieve original referer that was posted, if it exists.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1571
 * @return string|false False if no original referer or original referer if set.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
function wp_get_original_referer() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
	if ( ! empty( $_REQUEST['_wp_original_http_referer'] ) && function_exists( 'wp_validate_redirect' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
		return wp_validate_redirect( wp_unslash( $_REQUEST['_wp_original_http_referer'] ), false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
 * Recursive directory creation based on full path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
 * Will attempt to set permissions on folders.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
 * @since 2.0.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
 * @param string $target Full path to attempt to create.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
 * @return bool Whether the path was created. True if path already exists.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
function wp_mkdir_p( $target ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
	$wrapper = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1592
	// Strip the protocol.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1593
	if ( wp_is_stream( $target ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
		list( $wrapper, $target ) = explode( '://', $target, 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1597
	// From php.net/mkdir user contributed notes.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
	$target = str_replace( '//', '/', $target );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1600
	// Put the wrapper back on the target.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1601
	if ( $wrapper !== null ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
		$target = $wrapper . '://' . $target;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1605
	/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1606
	 * Safe mode fails with a trailing slash under certain PHP versions.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1607
	 * Use rtrim() instead of untrailingslashit to avoid formatting.php dependency.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1608
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1609
	$target = rtrim($target, '/');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
	if ( empty($target) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
		$target = '/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
	if ( file_exists( $target ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
		return @is_dir( $target );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
	// 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
  1617
	$target_parent = dirname( $target );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1618
	while ( '.' != $target_parent && ! is_dir( $target_parent ) && dirname( $target_parent ) !== $target_parent ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
		$target_parent = dirname( $target_parent );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
	// Get the permission bits.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1623
	if ( $stat = @stat( $target_parent ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
		$dir_perms = $stat['mode'] & 0007777;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
		$dir_perms = 0777;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
	if ( @mkdir( $target, $dir_perms, true ) ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1630
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1631
		/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1632
		 * If a umask is set that modifies $dir_perms, we'll have to re-set
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1633
		 * the $dir_perms correctly with chmod()
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1634
		 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1635
		if ( $dir_perms != ( $dir_perms & ~umask() ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1636
			$folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1637
			for ( $i = 1, $c = count( $folder_parts ); $i <= $c; $i++ ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1638
				@chmod( $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) ), $dir_perms );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1639
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1640
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1641
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1649
 * Test if a given filesystem path is absolute.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1650
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1651
 * For example, '/foo/bar', or 'c:\windows'.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1655
 * @param string $path File path.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
 * @return bool True if path is absolute, false is not absolute.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
function path_is_absolute( $path ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1659
	/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1660
	 * This is definitive if true but fails if $path does not exist or contains
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1661
	 * a symbolic link.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1662
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
	if ( realpath($path) == $path )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
	if ( strlen($path) == 0 || $path[0] == '.' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1669
	// Windows allows absolute paths like this.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
	if ( preg_match('#^[a-zA-Z]:\\\\#', $path) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1673
	// A path starting with / or \ is absolute; anything else is relative.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
	return ( $path[0] == '/' || $path[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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1678
 * Join two filesystem paths together.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1679
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1680
 * For example, 'give me $path relative to $base'. If the $path is absolute,
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1681
 * then it the full path is returned.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1685
 * @param string $base Base path.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1686
 * @param string $path Path relative to $base.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
 * @return string The path with the base or absolute path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
function path_join( $base, $path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
	if ( path_is_absolute($path) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
		return $path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
	return rtrim($base, '/') . '/' . ltrim($path, '/');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1697
 * Normalize a filesystem path.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1698
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1699
 * On windows systems, replaces backslashes with forward slashes
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1700
 * and forces upper-case drive letters.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1701
 * Allows for two leading slashes for Windows network shares, but
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1702
 * ensures that all other duplicate slashes are reduced to a single.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1703
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1704
 * @since 3.9.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1705
 * @since 4.4.0 Ensures upper-case drive letters on Windows systems.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1706
 * @since 4.5.0 Allows for Windows network shares.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1707
 * @since 4.9.7 Allows for PHP file wrappers.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1708
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1709
 * @param string $path Path to normalize.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1710
 * @return string Normalized path.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1711
 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1712
function wp_normalize_path( $path ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1713
	$wrapper = '';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1714
	if ( wp_is_stream( $path ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1715
		list( $wrapper, $path ) = explode( '://', $path, 2 );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1716
		$wrapper .= '://';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1717
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1718
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1719
	// Standardise all paths to use /
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1720
	$path = str_replace( '\\', '/', $path );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1721
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1722
	// Replace multiple slashes down to a singular, allowing for network shares having two slashes.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1723
	$path = preg_replace( '|(?<=.)/+|', '/', $path );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1724
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1725
	// Windows paths should uppercase the drive letter
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1726
	if ( ':' === substr( $path, 1, 1 ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1727
		$path = ucfirst( $path );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1728
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1729
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1730
	return $wrapper . $path;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1731
}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1732
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1733
/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1734
 * Determine a writable directory for temporary files.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1735
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1736
 * Function's preference is the return value of sys_get_temp_dir(),
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
 * followed by your PHP temporary upload directory, followed by WP_CONTENT_DIR,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
 * before finally defaulting to /tmp/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
 * In the event that this function does not find a writable location,
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1741
 * It may be overridden by the WP_TEMP_DIR constant in your wp-config.php file.
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
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1745
 * @staticvar string $temp
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1746
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1747
 * @return string Writable temporary directory.
0
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 get_temp_dir() {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1750
	static $temp = '';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
	if ( defined('WP_TEMP_DIR') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
		return trailingslashit(WP_TEMP_DIR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
	if ( $temp )
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1755
		return trailingslashit( $temp );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
	if ( function_exists('sys_get_temp_dir') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
		$temp = sys_get_temp_dir();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
		if ( @is_dir( $temp ) && wp_is_writable( $temp ) )
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1760
			return trailingslashit( $temp );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
	$temp = ini_get('upload_tmp_dir');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
	if ( @is_dir( $temp ) && wp_is_writable( $temp ) )
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1765
		return trailingslashit( $temp );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
	$temp = WP_CONTENT_DIR . '/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
	if ( is_dir( $temp ) && wp_is_writable( $temp ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
		return $temp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1771
	return '/tmp/';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
 * Determine if a directory is writable.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1777
 * This function is used to work around certain ACL issues in PHP primarily
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1778
 * affecting Windows Servers.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1779
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1780
 * @since 3.6.0
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
 * @see win_is_writable()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1784
 * @param string $path Path to check for write-ability.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1785
 * @return bool Whether the path is writable.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
function wp_is_writable( $path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
	if ( 'WIN' === strtoupper( substr( PHP_OS, 0, 3 ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
		return win_is_writable( $path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
		return @is_writable( $path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
 * Workaround for Windows bug in is_writable() function
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
 * PHP has issues with Windows ACL's for determine if a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
 * directory is writable or not, this works around them by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
 * checking the ability to open files rather than relying
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
 * upon PHP to interprate the OS ACL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
 * @since 2.8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1804
 * @see https://bugs.php.net/bug.php?id=27609
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1805
 * @see https://bugs.php.net/bug.php?id=30931
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1806
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1807
 * @param string $path Windows path to check for write-ability.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1808
 * @return bool Whether the path is writable.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
function win_is_writable( $path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1812
	if ( $path[strlen( $path ) - 1] == '/' ) { // if it looks like a directory, check a random file within the directory
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
		return win_is_writable( $path . uniqid( mt_rand() ) . '.tmp');
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1814
	} elseif ( is_dir( $path ) ) { // If it's a directory (and not a file) check a random file within the directory
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
		return win_is_writable( $path . '/' . uniqid( mt_rand() ) . '.tmp' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1816
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1817
	// check tmp file for read/write capabilities
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1818
	$should_delete_tmp_file = !file_exists( $path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1819
	$f = @fopen( $path, 'a' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
	if ( $f === false )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1822
	fclose( $f );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
	if ( $should_delete_tmp_file )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
		unlink( $path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
	return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1829
 * Retrieves uploads directory information.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1830
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1831
 * Same as wp_upload_dir() but "light weight" as it doesn't attempt to create the uploads directory.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1832
 * Intended for use in themes, when only 'basedir' and 'baseurl' are needed, generally in all cases
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1833
 * when not uploading files.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1834
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1835
 * @since 4.5.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1836
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1837
 * @see wp_upload_dir()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1838
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1839
 * @return array See wp_upload_dir() for description.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1840
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1841
function wp_get_upload_dir() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1842
	return wp_upload_dir( null, false );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1843
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1844
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1845
/**
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1846
 * Get an array containing the current upload directory's path and url.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1847
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1848
 * Checks the 'upload_path' option, which should be from the web root folder,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1849
 * 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
  1850
 * 'WP_CONTENT_DIR/uploads'. If the 'UPLOADS' constant is defined, then it will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
 * override the 'upload_path' option and 'WP_CONTENT_DIR/uploads' path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1852
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1853
 * 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
  1854
 * the 'WP_CONTENT_URL' constant and appending '/uploads' to the path.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
 * 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
  1857
 * the administration settings panel), then the time will be used. The format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
 * will be year first and then month.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
 * 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
  1861
 * 'error' containing the error message. The error suggests that the parent
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
 * directory is not writable by the server.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
 * On success, the returned array will have many indices:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
 * 'path' - base directory and sub directory or full path to upload directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
 * 'url' - base url and sub directory or absolute URL to upload directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1867
 * 'subdir' - sub directory if uploads use year/month folders option is on.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
 * 'basedir' - path without subdir.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
 * 'baseurl' - URL path without subdir.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1870
 * 'error' - false or error message.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
 * @since 2.0.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1873
 * @uses _wp_upload_dir()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1874
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1875
 * @staticvar array $cache
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1876
 * @staticvar array $tested_paths
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1877
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1878
 * @param string $time Optional. Time formatted in 'yyyy/mm'. Default null.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1879
 * @param bool   $create_dir Optional. Whether to check and create the uploads directory.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1880
 *                           Default true for backward compatibility.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1881
 * @param bool   $refresh_cache Optional. Whether to refresh the cache. Default false.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1882
 * @return array See above for description.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1883
 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1884
function wp_upload_dir( $time = null, $create_dir = true, $refresh_cache = false ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1885
	static $cache = array(), $tested_paths = array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1886
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1887
	$key = sprintf( '%d-%s', get_current_blog_id(), (string) $time );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1888
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1889
	if ( $refresh_cache || empty( $cache[ $key ] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1890
		$cache[ $key ] = _wp_upload_dir( $time );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1891
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1892
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1893
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1894
	 * Filters the uploads directory data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1895
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1896
	 * @since 2.0.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1897
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1898
	 * @param array $uploads Array of upload directory data with keys of 'path',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1899
	 *                       'url', 'subdir, 'basedir', and 'error'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1900
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1901
	$uploads = apply_filters( 'upload_dir', $cache[ $key ] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1902
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1903
	if ( $create_dir ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1904
		$path = $uploads['path'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1905
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1906
		if ( array_key_exists( $path, $tested_paths ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1907
			$uploads['error'] = $tested_paths[ $path ];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1908
		} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1909
			if ( ! wp_mkdir_p( $path ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1910
				if ( 0 === strpos( $uploads['basedir'], ABSPATH ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1911
					$error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1912
				} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1913
					$error_path = basename( $uploads['basedir'] ) . $uploads['subdir'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1914
				}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1915
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1916
				$uploads['error'] = sprintf(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1917
					/* translators: %s: directory path */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1918
					__( 'Unable to create directory %s. Is its parent directory writable by the server?' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1919
					esc_html( $error_path )
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1920
				);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1921
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1922
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1923
			$tested_paths[ $path ] = $uploads['error'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1924
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1925
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1926
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1927
	return $uploads;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1928
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1929
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1930
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1931
 * A non-filtered, non-cached version of wp_upload_dir() that doesn't check the path.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1932
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1933
 * @since 4.5.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1934
 * @access private
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1935
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1936
 * @param string $time Optional. Time formatted in 'yyyy/mm'. Default null.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1937
 * @return array See wp_upload_dir()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1938
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1939
function _wp_upload_dir( $time = null ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1940
	$siteurl = get_option( 'siteurl' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1941
	$upload_path = trim( get_option( 'upload_path' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1942
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1943
	if ( empty( $upload_path ) || 'wp-content/uploads' == $upload_path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1944
		$dir = WP_CONTENT_DIR . '/uploads';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1945
	} elseif ( 0 !== strpos( $upload_path, ABSPATH ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1946
		// $dir is absolute, $upload_path is (maybe) relative to ABSPATH
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1947
		$dir = path_join( ABSPATH, $upload_path );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1948
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1949
		$dir = $upload_path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1950
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1951
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1952
	if ( !$url = get_option( 'upload_url_path' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1953
		if ( empty($upload_path) || ( 'wp-content/uploads' == $upload_path ) || ( $upload_path == $dir ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1954
			$url = WP_CONTENT_URL . '/uploads';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1955
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1956
			$url = trailingslashit( $siteurl ) . $upload_path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1957
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1958
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1959
	/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1960
	 * Honor the value of UPLOADS. This happens as long as ms-files rewriting is disabled.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1961
	 * We also sometimes obey UPLOADS when rewriting is enabled -- see the next block.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1962
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1963
	if ( defined( 'UPLOADS' ) && ! ( is_multisite() && get_site_option( 'ms_files_rewriting' ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1964
		$dir = ABSPATH . UPLOADS;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1965
		$url = trailingslashit( $siteurl ) . UPLOADS;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1966
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1967
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1968
	// If multisite (and if not the main site in a post-MU network)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1969
	if ( is_multisite() && ! ( is_main_network() && is_main_site() && defined( 'MULTISITE' ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1970
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1971
		if ( ! get_site_option( 'ms_files_rewriting' ) ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1972
			/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1973
			 * If ms-files rewriting is disabled (networks created post-3.5), it is fairly
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1974
			 * straightforward: Append sites/%d if we're not on the main site (for post-MU
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1975
			 * networks). (The extra directory prevents a four-digit ID from conflicting with
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1976
			 * a year-based directory for the main site. But if a MU-era network has disabled
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1977
			 * ms-files rewriting manually, they don't need the extra directory, as they never
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1978
			 * had wp-content/uploads for the main site.)
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1979
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1980
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1981
			if ( defined( 'MULTISITE' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1982
				$ms_dir = '/sites/' . get_current_blog_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1983
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1984
				$ms_dir = '/' . get_current_blog_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1985
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1986
			$dir .= $ms_dir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1987
			$url .= $ms_dir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1988
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1989
		} elseif ( defined( 'UPLOADS' ) && ! ms_is_switched() ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1990
			/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1991
			 * Handle the old-form ms-files.php rewriting if the network still has that enabled.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1992
			 * When ms-files rewriting is enabled, then we only listen to UPLOADS when:
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1993
			 * 1) We are not on the main site in a post-MU network, as wp-content/uploads is used
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1994
			 *    there, and
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1995
			 * 2) We are not switched, as ms_upload_constants() hardcodes these constants to reflect
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1996
			 *    the original blog ID.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1997
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1998
			 * Rather than UPLOADS, we actually use BLOGUPLOADDIR if it is set, as it is absolute.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1999
			 * (And it will be set, see ms_upload_constants().) Otherwise, UPLOADS can be used, as
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2000
			 * as it is relative to ABSPATH. For the final piece: when UPLOADS is used with ms-files
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2001
			 * rewriting in multisite, the resulting URL is /files. (#WP22702 for background.)
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2002
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2003
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2004
			if ( defined( 'BLOGUPLOADDIR' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2005
				$dir = untrailingslashit( BLOGUPLOADDIR );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2006
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2007
				$dir = ABSPATH . UPLOADS;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2008
			$url = trailingslashit( $siteurl ) . 'files';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2009
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2010
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2011
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2012
	$basedir = $dir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2013
	$baseurl = $url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2014
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2015
	$subdir = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2016
	if ( get_option( 'uploads_use_yearmonth_folders' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2017
		// Generate the yearly and monthly dirs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2018
		if ( !$time )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2019
			$time = current_time( 'mysql' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2020
		$y = substr( $time, 0, 4 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2021
		$m = substr( $time, 5, 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2022
		$subdir = "/$y/$m";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2023
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2024
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2025
	$dir .= $subdir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2026
	$url .= $subdir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2027
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2028
	return array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2029
		'path'    => $dir,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2030
		'url'     => $url,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2031
		'subdir'  => $subdir,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2032
		'basedir' => $basedir,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2033
		'baseurl' => $baseurl,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2034
		'error'   => false,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2035
	);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2036
}
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
 * Get a filename that is sanitized and unique for the given directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2040
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2041
 * 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
  2042
 * before the extension, and will continue adding numbers until the filename is
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2043
 * unique.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2044
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2045
 * The callback is passed three parameters, the first one is the directory, the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2046
 * second is the filename, and the third is the extension.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2047
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2048
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2049
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2050
 * @param string   $dir                      Directory.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2051
 * @param string   $filename                 File name.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2052
 * @param callable $unique_filename_callback Callback. Default null.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2053
 * @return string New filename, if given wasn't unique.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2054
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2055
function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2056
	// Sanitize the file name before we begin processing.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2057
	$filename = sanitize_file_name($filename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2058
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2059
	// Separate the filename into a name and extension.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2060
	$ext = pathinfo( $filename, PATHINFO_EXTENSION );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2061
	$name = pathinfo( $filename, PATHINFO_BASENAME );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2062
	if ( $ext ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2063
		$ext = '.' . $ext;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2064
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2065
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2066
	// Edge case: if file is named '.ext', treat as an empty name.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2067
	if ( $name === $ext ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2068
		$name = '';
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2069
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2070
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2071
	/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2072
	 * Increment the file number until we have a unique file to save in $dir.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2073
	 * Use callback if supplied.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2074
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2075
	if ( $unique_filename_callback && is_callable( $unique_filename_callback ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2076
		$filename = call_user_func( $unique_filename_callback, $dir, $name, $ext );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2077
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2078
		$number = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2079
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2080
		// Change '.ext' to lower case.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2081
		if ( $ext && strtolower($ext) != $ext ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2082
			$ext2 = strtolower($ext);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2083
			$filename2 = preg_replace( '|' . preg_quote($ext) . '$|', $ext2, $filename );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2084
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2085
			// Check for both lower and upper case extension or image sub-sizes may be overwritten.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2086
			while ( file_exists($dir . "/$filename") || file_exists($dir . "/$filename2") ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2087
				$new_number = (int) $number + 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2088
				$filename = str_replace( array( "-$number$ext", "$number$ext" ), "-$new_number$ext", $filename );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2089
				$filename2 = str_replace( array( "-$number$ext2", "$number$ext2" ), "-$new_number$ext2", $filename2 );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2090
				$number = $new_number;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2091
			}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2092
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2093
			/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2094
			 * Filters the result when generating a unique file name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2095
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2096
			 * @since 4.5.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2097
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2098
			 * @param string        $filename                 Unique file name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2099
			 * @param string        $ext                      File extension, eg. ".png".
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2100
			 * @param string        $dir                      Directory path.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2101
			 * @param callable|null $unique_filename_callback Callback function that generates the unique file name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2102
			 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2103
			return apply_filters( 'wp_unique_filename', $filename2, $ext, $dir, $unique_filename_callback );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2104
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2106
		while ( file_exists( $dir . "/$filename" ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2107
			$new_number = (int) $number + 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2108
			if ( '' == "$number$ext" ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2109
				$filename = "$filename-" . $new_number;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2110
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2111
				$filename = str_replace( array( "-$number$ext", "$number$ext" ), "-" . $new_number . $ext, $filename );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2112
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2113
			$number = $new_number;
0
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
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2117
	/** This filter is documented in wp-includes/functions.php */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2118
	return apply_filters( 'wp_unique_filename', $filename, $ext, $dir, $unique_filename_callback );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2119
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2121
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2122
 * Create a file in the upload folder with given content.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2123
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2124
 * 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
  2125
 * 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
  2126
 * 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
  2127
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2128
 * 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
  2129
 * 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
  2130
 * 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
  2131
 * filename and content to this function, which will add it to the upload
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2132
 * folder.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2133
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2134
 * The permissions will be set on the new file automatically by this function.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2135
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2136
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2137
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2138
 * @param string       $name       Filename.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2139
 * @param null|string  $deprecated Never used. Set to null.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2140
 * @param mixed        $bits       File content
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2141
 * @param string       $time       Optional. Time formatted in 'yyyy/mm'. Default null.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2142
 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2143
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2144
function wp_upload_bits( $name, $deprecated, $bits, $time = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2145
	if ( !empty( $deprecated ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2146
		_deprecated_argument( __FUNCTION__, '2.0.0' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2147
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2148
	if ( empty( $name ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2149
		return array( 'error' => __( 'Empty filename' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2150
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2151
	$wp_filetype = wp_check_filetype( $name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2152
	if ( ! $wp_filetype['ext'] && ! current_user_can( 'unfiltered_upload' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2153
		return array( 'error' => __( 'Sorry, this file type is not permitted for security reasons.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2154
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2155
	$upload = wp_upload_dir( $time );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2156
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2157
	if ( $upload['error'] !== false )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2158
		return $upload;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2159
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2160
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2161
	 * Filters whether to treat the upload bits as an error.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2162
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2163
	 * Passing a non-array to the filter will effectively short-circuit preparing
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2164
	 * the upload bits, returning that value instead.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2165
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2166
	 * @since 3.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2167
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2168
	 * @param mixed $upload_bits_error An array of upload bits data, or a non-array error to return.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2169
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2170
	$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
  2171
	if ( !is_array( $upload_bits_error ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2172
		$upload[ 'error' ] = $upload_bits_error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2173
		return $upload;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2174
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2175
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2176
	$filename = wp_unique_filename( $upload['path'], $name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2177
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2178
	$new_file = $upload['path'] . "/$filename";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2179
	if ( ! wp_mkdir_p( dirname( $new_file ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2180
		if ( 0 === strpos( $upload['basedir'], ABSPATH ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2181
			$error_path = str_replace( ABSPATH, '', $upload['basedir'] ) . $upload['subdir'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2182
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2183
			$error_path = basename( $upload['basedir'] ) . $upload['subdir'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2184
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2185
		$message = sprintf(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2186
			/* translators: %s: directory path */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2187
			__( 'Unable to create directory %s. Is its parent directory writable by the server?' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2188
			$error_path
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2189
		);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2190
		return array( 'error' => $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2191
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2192
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2193
	$ifp = @ fopen( $new_file, 'wb' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2194
	if ( ! $ifp )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2195
		return array( 'error' => sprintf( __( 'Could not write file %s' ), $new_file ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2196
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2197
	@fwrite( $ifp, $bits );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2198
	fclose( $ifp );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2199
	clearstatcache();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2200
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2201
	// Set correct file permissions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2202
	$stat = @ stat( dirname( $new_file ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2203
	$perms = $stat['mode'] & 0007777;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2204
	$perms = $perms & 0000666;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2205
	@ chmod( $new_file, $perms );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2206
	clearstatcache();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2208
	// Compute the URL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2209
	$url = $upload['url'] . "/$filename";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2210
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2211
	/** This filter is documented in wp-admin/includes/file.php */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2212
	return apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $wp_filetype['type'], 'error' => false ), 'sideload' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2213
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2215
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2216
 * Retrieve the file type based on the extension name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2217
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2218
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2219
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2220
 * @param string $ext The extension to search.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2221
 * @return string|void The file type, example: audio, video, document, spreadsheet, etc.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2222
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2223
function wp_ext2type( $ext ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2224
	$ext = strtolower( $ext );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2225
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2226
	$ext2type = wp_get_ext_types();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2227
	foreach ( $ext2type as $type => $exts )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2228
		if ( in_array( $ext, $exts ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2229
			return $type;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2230
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2231
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2232
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2233
 * Retrieve the file type from the file name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2234
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2235
 * You can optionally define the mime array, if needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2236
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2237
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2238
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2239
 * @param string $filename File name or path.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2240
 * @param array  $mimes    Optional. Key is the file extension with value as the mime type.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2241
 * @return array Values with extension first and mime type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2242
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2243
function wp_check_filetype( $filename, $mimes = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2244
	if ( empty($mimes) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2245
		$mimes = get_allowed_mime_types();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2246
	$type = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2247
	$ext = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2249
	foreach ( $mimes as $ext_preg => $mime_match ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2250
		$ext_preg = '!\.(' . $ext_preg . ')$!i';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2251
		if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2252
			$type = $mime_match;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2253
			$ext = $ext_matches[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2254
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2255
		}
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
	return compact( 'ext', 'type' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2259
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2260
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2261
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2262
 * Attempt to determine the real file type of a file.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2263
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2264
 * If unable to, the file name extension will be used to determine type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2265
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2266
 * 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
  2267
 * 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
  2268
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2269
 * Currently this function only supports renaming images validated via wp_get_image_mime().
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2270
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2271
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2272
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2273
 * @param string $file     Full path to the file.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2274
 * @param string $filename The name of the file (may differ from $file due to $file being
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2275
 *                         in a tmp directory).
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2276
 * @param array   $mimes   Optional. Key is the file extension with value as the mime type.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2277
 * @return array Values for the extension, MIME, and either a corrected filename or false
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2278
 *               if original $filename is valid.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2279
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2280
function wp_check_filetype_and_ext( $file, $filename, $mimes = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2281
	$proper_filename = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2282
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2283
	// Do basic extension validation and MIME mapping
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2284
	$wp_filetype = wp_check_filetype( $filename, $mimes );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2285
	$ext = $wp_filetype['ext'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2286
	$type = $wp_filetype['type'];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2288
	// We can't do any further validation without a file to work with
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2289
	if ( ! file_exists( $file ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2290
		return compact( 'ext', 'type', 'proper_filename' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2291
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2292
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2293
	$real_mime = false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2294
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2295
	// Validate image types.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2296
	if ( $type && 0 === strpos( $type, 'image/' ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2297
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2298
		// Attempt to figure out what type of image it actually is
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2299
		$real_mime = wp_get_image_mime( $file );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2300
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2301
		if ( $real_mime && $real_mime != $type ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2302
			/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2303
			 * Filters the list mapping image mime types to their respective extensions.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2304
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2305
			 * @since 3.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2306
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2307
			 * @param  array $mime_to_ext Array of image mime types and their matching extensions.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2308
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2309
			$mime_to_ext = apply_filters( 'getimagesize_mimes_to_exts', array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2310
				'image/jpeg' => 'jpg',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2311
				'image/png'  => 'png',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2312
				'image/gif'  => 'gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2313
				'image/bmp'  => 'bmp',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2314
				'image/tiff' => 'tif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2315
			) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2316
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2317
			// Replace whatever is after the last period in the filename with the correct extension
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2318
			if ( ! empty( $mime_to_ext[ $real_mime ] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2319
				$filename_parts = explode( '.', $filename );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2320
				array_pop( $filename_parts );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2321
				$filename_parts[] = $mime_to_ext[ $real_mime ];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2322
				$new_filename = implode( '.', $filename_parts );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2323
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2324
				if ( $new_filename != $filename ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2325
					$proper_filename = $new_filename; // Mark that it changed
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2326
				}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2327
				// Redefine the extension / MIME
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2328
				$wp_filetype = wp_check_filetype( $new_filename, $mimes );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2329
				$ext = $wp_filetype['ext'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2330
				$type = $wp_filetype['type'];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2331
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2332
				// Reset $real_mime and try validating again.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2333
				$real_mime = false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2334
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2335
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2336
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2337
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2338
	// Validate files that didn't get validated during previous checks.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2339
	if ( $type && ! $real_mime && extension_loaded( 'fileinfo' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2340
		$finfo = finfo_open( FILEINFO_MIME_TYPE );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2341
		$real_mime = finfo_file( $finfo, $file );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2342
		finfo_close( $finfo );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2343
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2344
		/*
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2345
		 * If $real_mime doesn't match what we're expecting, we need to do some extra
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2346
		 * vetting of application mime types to make sure this type of file is allowed.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2347
		 * Other mime types are assumed to be safe, but should be considered unverified.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2348
		 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2349
		if ( $real_mime && ( $real_mime !== $type ) && ( 0 === strpos( $real_mime, 'application' ) ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2350
			$allowed = get_allowed_mime_types();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2351
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2352
			if ( ! in_array( $real_mime, $allowed ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2353
				$type = $ext = false;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2354
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2355
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2356
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2357
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2358
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2359
	 * Filters the "real" file type of the given file.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2360
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2361
	 * @since 3.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2362
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2363
	 * @param array  $wp_check_filetype_and_ext File data array containing 'ext', 'type', and
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2364
	 *                                          'proper_filename' keys.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2365
	 * @param string $file                      Full path to the file.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2366
	 * @param string $filename                  The name of the file (may differ from $file due to
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2367
	 *                                          $file being in a tmp directory).
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2368
	 * @param array  $mimes                     Key is the file extension with value as the mime type.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2369
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2370
	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
  2371
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2372
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2373
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2374
 * Returns the real mime type of an image file.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2375
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2376
 * This depends on exif_imagetype() or getimagesize() to determine real mime types.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2377
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2378
 * @since 4.7.1
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2379
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2380
 * @param string $file Full path to the file.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2381
 * @return string|false The actual mime type or false if the type cannot be determined.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2382
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2383
function wp_get_image_mime( $file ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2384
	/*
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2385
	 * Use exif_imagetype() to check the mimetype if available or fall back to
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2386
	 * getimagesize() if exif isn't avaialbe. If either function throws an Exception
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2387
	 * we assume the file could not be validated.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2388
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2389
	try {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2390
		if ( is_callable( 'exif_imagetype' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2391
			$imagetype = exif_imagetype( $file );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2392
			$mime = ( $imagetype ) ? image_type_to_mime_type( $imagetype ) : false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2393
		} elseif ( function_exists( 'getimagesize' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2394
			$imagesize = getimagesize( $file );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2395
			$mime = ( isset( $imagesize['mime'] ) ) ? $imagesize['mime'] : false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2396
		} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2397
			$mime = false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2398
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2399
	} catch ( Exception $e ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2400
		$mime = false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2401
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2402
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2403
	return $mime;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2404
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2405
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2406
/**
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2407
 * Retrieve list of mime types and file extensions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2408
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2409
 * @since 3.5.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2410
 * @since 4.2.0 Support was added for GIMP (xcf) files.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2411
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2412
 * @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
  2413
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2414
function wp_get_mime_types() {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2415
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2416
	 * Filters the list of mime types and file extensions.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2417
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2418
	 * This filter should be used to add, not remove, mime types. To remove
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2419
	 * mime types, use the {@see 'upload_mimes'} filter.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2420
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2421
	 * @since 3.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2422
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2423
	 * @param array $wp_get_mime_types Mime types keyed by the file extension regex
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2424
	 *                                 corresponding to those types.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2425
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2426
	return apply_filters( 'mime_types', array(
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2427
	// Image formats.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2428
	'jpg|jpeg|jpe' => 'image/jpeg',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2429
	'gif' => 'image/gif',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2430
	'png' => 'image/png',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2431
	'bmp' => 'image/bmp',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2432
	'tiff|tif' => 'image/tiff',
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2433
	'ico' => 'image/x-icon',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2434
	// Video formats.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2435
	'asf|asx' => 'video/x-ms-asf',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2436
	'wmv' => 'video/x-ms-wmv',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2437
	'wmx' => 'video/x-ms-wmx',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2438
	'wm' => 'video/x-ms-wm',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2439
	'avi' => 'video/avi',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2440
	'divx' => 'video/divx',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2441
	'flv' => 'video/x-flv',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2442
	'mov|qt' => 'video/quicktime',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2443
	'mpeg|mpg|mpe' => 'video/mpeg',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2444
	'mp4|m4v' => 'video/mp4',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2445
	'ogv' => 'video/ogg',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2446
	'webm' => 'video/webm',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2447
	'mkv' => 'video/x-matroska',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2448
	'3gp|3gpp' => 'video/3gpp', // Can also be audio
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2449
	'3g2|3gp2' => 'video/3gpp2', // Can also be audio
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2450
	// Text formats.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2451
	'txt|asc|c|cc|h|srt' => 'text/plain',
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2452
	'csv' => 'text/csv',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2453
	'tsv' => 'text/tab-separated-values',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2454
	'ics' => 'text/calendar',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2455
	'rtx' => 'text/richtext',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2456
	'css' => 'text/css',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2457
	'htm|html' => 'text/html',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2458
	'vtt' => 'text/vtt',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2459
	'dfxp' => 'application/ttaf+xml',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2460
	// Audio formats.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2461
	'mp3|m4a|m4b' => 'audio/mpeg',
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2462
	'aac' => 'audio/aac',
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2463
	'ra|ram' => 'audio/x-realaudio',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2464
	'wav' => 'audio/wav',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2465
	'ogg|oga' => 'audio/ogg',
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2466
	'flac' => 'audio/flac',
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2467
	'mid|midi' => 'audio/midi',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2468
	'wma' => 'audio/x-ms-wma',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2469
	'wax' => 'audio/x-ms-wax',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2470
	'mka' => 'audio/x-matroska',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2471
	// Misc application formats.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2472
	'rtf' => 'application/rtf',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2473
	'js' => 'application/javascript',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2474
	'pdf' => 'application/pdf',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2475
	'swf' => 'application/x-shockwave-flash',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2476
	'class' => 'application/java',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2477
	'tar' => 'application/x-tar',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2478
	'zip' => 'application/zip',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2479
	'gz|gzip' => 'application/x-gzip',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2480
	'rar' => 'application/rar',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2481
	'7z' => 'application/x-7z-compressed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2482
	'exe' => 'application/x-msdownload',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2483
	'psd' => 'application/octet-stream',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2484
	'xcf' => 'application/octet-stream',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2485
	// MS Office formats.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2486
	'doc' => 'application/msword',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2487
	'pot|pps|ppt' => 'application/vnd.ms-powerpoint',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2488
	'wri' => 'application/vnd.ms-write',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2489
	'xla|xls|xlt|xlw' => 'application/vnd.ms-excel',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2490
	'mdb' => 'application/vnd.ms-access',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2491
	'mpp' => 'application/vnd.ms-project',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2492
	'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2493
	'docm' => 'application/vnd.ms-word.document.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2494
	'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2495
	'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2496
	'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2497
	'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2498
	'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2499
	'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2500
	'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2501
	'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2502
	'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2503
	'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2504
	'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2505
	'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2506
	'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2507
	'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2508
	'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2509
	'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2510
	'sldm' => 'application/vnd.ms-powerpoint.slide.macroEnabled.12',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2511
	'onetoc|onetoc2|onetmp|onepkg' => 'application/onenote',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2512
	'oxps' => 'application/oxps',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2513
	'xps' => 'application/vnd.ms-xpsdocument',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2514
	// OpenOffice formats.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2515
	'odt' => 'application/vnd.oasis.opendocument.text',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2516
	'odp' => 'application/vnd.oasis.opendocument.presentation',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2517
	'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2518
	'odg' => 'application/vnd.oasis.opendocument.graphics',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2519
	'odc' => 'application/vnd.oasis.opendocument.chart',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2520
	'odb' => 'application/vnd.oasis.opendocument.database',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2521
	'odf' => 'application/vnd.oasis.opendocument.formula',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2522
	// WordPerfect formats.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2523
	'wp|wpd' => 'application/wordperfect',
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2524
	// iWork formats.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2525
	'key' => 'application/vnd.apple.keynote',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2526
	'numbers' => 'application/vnd.apple.numbers',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2527
	'pages' => 'application/vnd.apple.pages',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2528
	) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2529
}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2530
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2531
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2532
 * Retrieves the list of common file extensions and their types.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2533
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2534
 * @since 4.6.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2535
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2536
 * @return array Array of file extensions types keyed by the type of file.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2537
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2538
function wp_get_ext_types() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2539
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2540
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2541
	 * Filters file type based on the extension name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2542
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2543
	 * @since 2.5.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2544
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2545
	 * @see wp_ext2type()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2546
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2547
	 * @param array $ext2type Multi-dimensional array with extensions for a default set
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2548
	 *                        of file types.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2549
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2550
	return apply_filters( 'ext2type', array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2551
		'image'       => array( 'jpg', 'jpeg', 'jpe',  'gif',  'png',  'bmp',   'tif',  'tiff', 'ico' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2552
		'audio'       => array( 'aac', 'ac3',  'aif',  'aiff', 'flac', 'm3a',  'm4a',   'm4b',  'mka',  'mp1',  'mp2',  'mp3', 'ogg', 'oga', 'ram', 'wav', 'wma' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2553
		'video'       => array( '3g2',  '3gp', '3gpp', 'asf', 'avi',  'divx', 'dv',   'flv',  'm4v',   'mkv',  'mov',  'mp4',  'mpeg', 'mpg', 'mpv', 'ogm', 'ogv', 'qt',  'rm', 'vob', 'wmv' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2554
		'document'    => array( 'doc', 'docx', 'docm', 'dotm', 'odt',  'pages', 'pdf',  'xps',  'oxps', 'rtf',  'wp', 'wpd', 'psd', 'xcf' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2555
		'spreadsheet' => array( 'numbers',     'ods',  'xls',  'xlsx', 'xlsm',  'xlsb' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2556
		'interactive' => array( 'swf', 'key',  'ppt',  'pptx', 'pptm', 'pps',   'ppsx', 'ppsm', 'sldx', 'sldm', 'odp' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2557
		'text'        => array( 'asc', 'csv',  'tsv',  'txt' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2558
		'archive'     => array( 'bz2', 'cab',  'dmg',  'gz',   'rar',  'sea',   'sit',  'sqx',  'tar',  'tgz',  'zip', '7z' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2559
		'code'        => array( 'css', 'htm',  'html', 'php',  'js' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2560
	) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2561
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2562
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2563
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2564
 * Retrieve list of allowed mime types and file extensions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2565
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2566
 * @since 2.8.6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2567
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2568
 * @param int|WP_User $user Optional. User to check. Defaults to current user.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2569
 * @return array Array of mime types keyed by the file extension regex corresponding
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2570
 *               to those types.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2571
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2572
function get_allowed_mime_types( $user = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2573
	$t = wp_get_mime_types();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2574
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2575
	unset( $t['swf'], $t['exe'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2576
	if ( function_exists( 'current_user_can' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2577
		$unfiltered = $user ? user_can( $user, 'unfiltered_html' ) : current_user_can( 'unfiltered_html' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2578
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2579
	if ( empty( $unfiltered ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2580
		unset( $t['htm|html'], $t['js'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2581
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2582
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2583
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2584
	 * Filters list of allowed mime types and file extensions.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2585
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2586
	 * @since 2.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2587
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2588
	 * @param array            $t    Mime types keyed by the file extension regex corresponding to
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2589
	 *                               those types. 'swf' and 'exe' removed from full list. 'htm|html' also
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2590
	 *                               removed depending on '$user' capabilities.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2591
	 * @param int|WP_User|null $user User ID, User object or null if not provided (indicates current user).
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2592
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2593
	return apply_filters( 'upload_mimes', $t, $user );
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
 * Display "Are You Sure" message to confirm the action being taken.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2598
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2599
 * If the action has the nonce explain message, then it will be displayed
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2600
 * along with the "Are you sure?" message.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2601
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2602
 * @since 2.0.4
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 $action The nonce action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2605
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2606
function wp_nonce_ays( $action ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2607
	if ( 'log-out' == $action ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2608
		$html = sprintf(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2609
			/* translators: %s: site name */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2610
			__( 'You are attempting to log out of %s' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2611
			get_bloginfo( 'name' )
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2612
		);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2613
		$html .= '</p><p>';
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2614
		$redirect_to = isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2615
		$html .= sprintf(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2616
			/* translators: %s: logout URL */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2617
			__( 'Do you really want to <a href="%s">log out</a>?' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2618
			wp_logout_url( $redirect_to )
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2619
		);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2620
	} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2621
		$html = __( 'The link you followed has expired.' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2622
		if ( wp_get_referer() ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2623
			$html .= '</p><p>';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2624
			$html .= sprintf( '<a href="%s">%s</a>',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2625
				esc_url( remove_query_arg( 'updated', wp_get_referer() ) ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2626
				__( 'Please try again.' )
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2627
			);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2628
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2629
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2630
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2631
	wp_die( $html, __( 'Something went wrong.' ), 403 );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2632
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2633
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2634
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2635
 * Kill WordPress execution and display HTML message with error message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2636
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2637
 * This function complements the `die()` PHP function. The difference is that
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2638
 * HTML will be displayed to the user. It is recommended to use this function
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2639
 * only when the execution should not continue any further. It is not recommended
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2640
 * to call this function very often, and try to handle as many errors as possible
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2641
 * silently or more gracefully.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2642
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2643
 * As a shorthand, the desired HTTP response code may be passed as an integer to
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2644
 * the `$title` parameter (the default title would apply) or the `$args` parameter.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2645
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2646
 * @since 2.0.4
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2647
 * @since 4.1.0 The `$title` and `$args` parameters were changed to optionally accept
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2648
 *              an integer to be used as the response code.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2649
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2650
 * @param string|WP_Error  $message Optional. Error message. If this is a WP_Error object,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2651
 *                                  and not an Ajax or XML-RPC request, the error's messages are used.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2652
 *                                  Default empty.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2653
 * @param string|int       $title   Optional. Error title. If `$message` is a `WP_Error` object,
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2654
 *                                  error data with the key 'title' may be used to specify the title.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2655
 *                                  If `$title` is an integer, then it is treated as the response
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2656
 *                                  code. Default empty.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2657
 * @param string|array|int $args {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2658
 *     Optional. Arguments to control behavior. If `$args` is an integer, then it is treated
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2659
 *     as the response code. Default empty array.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2660
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2661
 *     @type int    $response       The HTTP response code. Default 200 for Ajax requests, 500 otherwise.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2662
 *     @type bool   $back_link      Whether to include a link to go back. Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2663
 *     @type string $text_direction The text direction. This is only useful internally, when WordPress
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2664
 *                                  is still loading and the site's locale is not set up yet. Accepts 'rtl'.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2665
 *                                  Default is the value of is_rtl().
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2666
 * }
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2667
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2668
function wp_die( $message = '', $title = '', $args = array() ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2669
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2670
	if ( is_int( $args ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2671
		$args = array( 'response' => $args );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2672
	} elseif ( is_int( $title ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2673
		$args  = array( 'response' => $title );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2674
		$title = '';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2675
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2676
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2677
	if ( wp_doing_ajax() ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2678
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2679
		 * Filters the callback for killing WordPress execution for Ajax requests.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2680
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2681
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2682
		 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2683
		 * @param callable $function Callback function name.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2684
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2685
		$function = apply_filters( 'wp_die_ajax_handler', '_ajax_wp_die_handler' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2686
	} elseif ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2687
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2688
		 * Filters the callback for killing WordPress execution for XML-RPC requests.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2689
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2690
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2691
		 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2692
		 * @param callable $function Callback function name.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2693
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2694
		$function = apply_filters( 'wp_die_xmlrpc_handler', '_xmlrpc_wp_die_handler' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2695
	} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2696
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2697
		 * Filters the callback for killing WordPress execution for all non-Ajax, non-XML-RPC requests.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2698
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2699
		 * @since 3.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2700
		 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2701
		 * @param callable $function Callback function name.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2702
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2703
		$function = apply_filters( 'wp_die_handler', '_default_wp_die_handler' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2704
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2705
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2706
	call_user_func( $function, $message, $title, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2707
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2708
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2709
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2710
 * Kills WordPress execution and display HTML message with error message.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2711
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2712
 * This is the default handler for wp_die if you want a custom one for your
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2713
 * site then you can overload using the {@see 'wp_die_handler'} filter in wp_die().
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2714
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2715
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2716
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2717
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2718
 * @param string|WP_Error $message Error message or WP_Error object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2719
 * @param string          $title   Optional. Error title. Default empty.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2720
 * @param string|array    $args    Optional. Arguments to control behavior. Default empty array.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2721
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2722
function _default_wp_die_handler( $message, $title = '', $args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2723
	$defaults = array( 'response' => 500 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2724
	$r = wp_parse_args($args, $defaults);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2725
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2726
	$have_gettext = function_exists('__');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2727
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2728
	if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2729
		if ( empty( $title ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2730
			$error_data = $message->get_error_data();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2731
			if ( is_array( $error_data ) && isset( $error_data['title'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2732
				$title = $error_data['title'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2733
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2734
		$errors = $message->get_error_messages();
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2735
		switch ( count( $errors ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2736
		case 0 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2737
			$message = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2738
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2739
		case 1 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2740
			$message = "<p>{$errors[0]}</p>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2741
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2742
		default :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2743
			$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
  2744
			break;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2745
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2746
	} elseif ( is_string( $message ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2747
		$message = "<p>$message</p>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2748
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2749
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2750
	if ( isset( $r['back_link'] ) && $r['back_link'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2751
		$back_text = $have_gettext? __('&laquo; Back') : '&laquo; Back';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2752
		$message .= "\n<p><a href='javascript:history.back()'>$back_text</a></p>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2753
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2754
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2755
	if ( ! did_action( 'admin_head' ) ) :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2756
		if ( !headers_sent() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2757
			status_header( $r['response'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2758
			nocache_headers();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2759
			header( 'Content-Type: text/html; charset=utf-8' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2760
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2762
		if ( empty($title) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2763
			$title = $have_gettext ? __('WordPress &rsaquo; Error') : 'WordPress &rsaquo; Error';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2764
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2765
		$text_direction = 'ltr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2766
		if ( isset($r['text_direction']) && 'rtl' == $r['text_direction'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2767
			$text_direction = 'rtl';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2768
		elseif ( function_exists( 'is_rtl' ) && is_rtl() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2769
			$text_direction = 'rtl';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2770
?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2771
<!DOCTYPE html>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2772
<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
  2773
<head>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2774
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2775
	<meta name="viewport" content="width=device-width">
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2776
	<?php
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2777
	if ( function_exists( 'wp_no_robots' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2778
		wp_no_robots();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2779
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2780
	?>
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2781
	<title><?php echo $title ?></title>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2782
	<style type="text/css">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2783
		html {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2784
			background: #f1f1f1;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2785
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2786
		body {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2787
			background: #fff;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2788
			color: #444;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2789
			font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2790
			margin: 2em auto;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2791
			padding: 1em 2em;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2792
			max-width: 700px;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2793
			-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2794
			box-shadow: 0 1px 3px rgba(0,0,0,0.13);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2795
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2796
		h1 {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2797
			border-bottom: 1px solid #dadada;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2798
			clear: both;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2799
			color: #666;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2800
			font-size: 24px;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2801
			margin: 30px 0 0 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2802
			padding: 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2803
			padding-bottom: 7px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2804
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2805
		#error-page {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2806
			margin-top: 50px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2807
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2808
		#error-page p {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2809
			font-size: 14px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2810
			line-height: 1.5;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2811
			margin: 25px 0 20px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2812
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2813
		#error-page code {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2814
			font-family: Consolas, Monaco, monospace;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2815
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2816
		ul li {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2817
			margin-bottom: 10px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2818
			font-size: 14px ;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2819
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2820
		a {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2821
			color: #0073aa;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2822
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2823
		a:hover,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2824
		a:active {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2825
			color: #00a0d2;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2826
		}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2827
		a:focus {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2828
			color: #124964;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2829
		    -webkit-box-shadow:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2830
		    	0 0 0 1px #5b9dd9,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2831
				0 0 2px 1px rgba(30, 140, 190, .8);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2832
		    box-shadow:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2833
		    	0 0 0 1px #5b9dd9,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2834
				0 0 2px 1px rgba(30, 140, 190, .8);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2835
			outline: none;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2836
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2837
		.button {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2838
			background: #f7f7f7;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2839
			border: 1px solid #ccc;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2840
			color: #555;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2841
			display: inline-block;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2842
			text-decoration: none;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2843
			font-size: 13px;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2844
			line-height: 26px;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2845
			height: 28px;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2846
			margin: 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2847
			padding: 0 10px 1px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2848
			cursor: pointer;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2849
			-webkit-border-radius: 3px;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2850
			-webkit-appearance: none;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2851
			border-radius: 3px;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2852
			white-space: nowrap;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2853
			-webkit-box-sizing: border-box;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2854
			-moz-box-sizing:    border-box;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2855
			box-sizing:         border-box;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2856
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2857
			-webkit-box-shadow: 0 1px 0 #ccc;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2858
			box-shadow: 0 1px 0 #ccc;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2859
		 	vertical-align: top;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2860
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2861
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2862
		.button.button-large {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2863
			height: 30px;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2864
			line-height: 28px;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2865
			padding: 0 12px 2px;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2866
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2867
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2868
		.button:hover,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2869
		.button:focus {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2870
			background: #fafafa;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2871
			border-color: #999;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2872
			color: #23282d;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2873
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2874
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2875
		.button:focus  {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2876
			border-color: #5b9dd9;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2877
			-webkit-box-shadow: 0 0 3px rgba( 0, 115, 170, .8 );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2878
			box-shadow: 0 0 3px rgba( 0, 115, 170, .8 );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2879
			outline: none;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2880
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2881
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2882
		.button:active {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2883
			background: #eee;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2884
			border-color: #999;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2885
		 	-webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2886
		 	box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2887
		 	-webkit-transform: translateY(1px);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2888
		 	-ms-transform: translateY(1px);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2889
		 	transform: translateY(1px);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2890
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2891
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2892
		<?php
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2893
		if ( 'rtl' == $text_direction ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2894
			echo 'body { font-family: Tahoma, Arial; }';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2895
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2896
		?>
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2897
	</style>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2898
</head>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2899
<body id="error-page">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2900
<?php endif; // ! did_action( 'admin_head' ) ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2901
	<?php echo $message; ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2902
</body>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2903
</html>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2904
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2905
	die();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2906
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2907
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2908
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2909
 * Kill WordPress execution and display XML message with error message.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2910
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2911
 * This is the handler for wp_die when processing XMLRPC requests.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2912
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2913
 * @since 3.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2914
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2915
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2916
 * @global wp_xmlrpc_server $wp_xmlrpc_server
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2917
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2918
 * @param string       $message Error message.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2919
 * @param string       $title   Optional. Error title. Default empty.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2920
 * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2921
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2922
function _xmlrpc_wp_die_handler( $message, $title = '', $args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2923
	global $wp_xmlrpc_server;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2924
	$defaults = array( 'response' => 500 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2925
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2926
	$r = wp_parse_args($args, $defaults);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2927
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2928
	if ( $wp_xmlrpc_server ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2929
		$error = new IXR_Error( $r['response'] , $message);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2930
		$wp_xmlrpc_server->output( $error->getXml() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2931
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2932
	die();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2933
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2934
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2935
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2936
 * Kill WordPress ajax execution.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2937
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2938
 * This is the handler for wp_die when processing Ajax requests.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2939
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2940
 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2941
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2942
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2943
 * @param string       $message Error message.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2944
 * @param string       $title   Optional. Error title (unused). Default empty.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2945
 * @param string|array $args    Optional. Arguments to control behavior. Default empty array.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2946
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2947
function _ajax_wp_die_handler( $message, $title = '', $args = array() ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2948
	$defaults = array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2949
		'response' => 200,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2950
	);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2951
	$r = wp_parse_args( $args, $defaults );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2952
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2953
	if ( ! headers_sent() && null !== $r['response'] ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2954
		status_header( $r['response'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2955
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2956
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2957
	if ( is_scalar( $message ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2958
		die( (string) $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2959
	die( '0' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2960
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2961
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2962
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2963
 * Kill WordPress execution.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2964
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2965
 * This is the handler for wp_die when processing APP requests.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2966
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2967
 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2968
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2969
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2970
 * @param string $message Optional. Response to print. Default empty.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2971
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2972
function _scalar_wp_die_handler( $message = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2973
	if ( is_scalar( $message ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2974
		die( (string) $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2975
	die();
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
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2979
 * Encode a variable into JSON, with some sanity checks.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2980
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2981
 * @since 4.1.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2982
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2983
 * @param mixed $data    Variable (usually an array or object) to encode as JSON.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2984
 * @param int   $options Optional. Options to be passed to json_encode(). Default 0.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2985
 * @param int   $depth   Optional. Maximum depth to walk through $data. Must be
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2986
 *                       greater than 0. Default 512.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2987
 * @return string|false The JSON encoded string, or false if it cannot be encoded.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2988
 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2989
function wp_json_encode( $data, $options = 0, $depth = 512 ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2990
	/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2991
	 * json_encode() has had extra params added over the years.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2992
	 * $options was added in 5.3, and $depth in 5.5.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2993
	 * We need to make sure we call it with the correct arguments.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2994
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2995
	if ( version_compare( PHP_VERSION, '5.5', '>=' ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2996
		$args = array( $data, $options, $depth );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2997
	} elseif ( version_compare( PHP_VERSION, '5.3', '>=' ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2998
		$args = array( $data, $options );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2999
	} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3000
		$args = array( $data );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3001
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3002
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3003
	// Prepare the data for JSON serialization.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3004
	$args[0] = _wp_json_prepare_data( $data );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3005
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3006
	$json = @call_user_func_array( 'json_encode', $args );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3007
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3008
	// If json_encode() was successful, no need to do more sanity checking.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3009
	// ... unless we're in an old version of PHP, and json_encode() returned
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3010
	// a string containing 'null'. Then we need to do more sanity checking.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3011
	if ( false !== $json && ( version_compare( PHP_VERSION, '5.5', '>=' ) || false === strpos( $json, 'null' ) ) )  {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3012
		return $json;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3013
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3014
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3015
	try {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3016
		$args[0] = _wp_json_sanity_check( $data, $depth );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3017
	} catch ( Exception $e ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3018
		return false;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3019
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3020
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3021
	return call_user_func_array( 'json_encode', $args );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3022
}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3023
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3024
/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3025
 * Perform sanity checks on data that shall be encoded to JSON.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3026
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3027
 * @ignore
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3028
 * @since 4.1.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3029
 * @access private
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3030
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3031
 * @see wp_json_encode()
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3032
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3033
 * @param mixed $data  Variable (usually an array or object) to encode as JSON.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3034
 * @param int   $depth Maximum depth to walk through $data. Must be greater than 0.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3035
 * @return mixed The sanitized data that shall be encoded to JSON.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3036
 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3037
function _wp_json_sanity_check( $data, $depth ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3038
	if ( $depth < 0 ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3039
		throw new Exception( 'Reached depth limit' );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3040
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3041
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3042
	if ( is_array( $data ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3043
		$output = array();
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3044
		foreach ( $data as $id => $el ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3045
			// Don't forget to sanitize the ID!
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3046
			if ( is_string( $id ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3047
				$clean_id = _wp_json_convert_string( $id );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3048
			} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3049
				$clean_id = $id;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3050
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3051
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3052
			// Check the element type, so that we're only recursing if we really have to.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3053
			if ( is_array( $el ) || is_object( $el ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3054
				$output[ $clean_id ] = _wp_json_sanity_check( $el, $depth - 1 );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3055
			} elseif ( is_string( $el ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3056
				$output[ $clean_id ] = _wp_json_convert_string( $el );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3057
			} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3058
				$output[ $clean_id ] = $el;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3059
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3060
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3061
	} elseif ( is_object( $data ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3062
		$output = new stdClass;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3063
		foreach ( $data as $id => $el ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3064
			if ( is_string( $id ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3065
				$clean_id = _wp_json_convert_string( $id );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3066
			} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3067
				$clean_id = $id;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3068
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3069
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3070
			if ( is_array( $el ) || is_object( $el ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3071
				$output->$clean_id = _wp_json_sanity_check( $el, $depth - 1 );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3072
			} elseif ( is_string( $el ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3073
				$output->$clean_id = _wp_json_convert_string( $el );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3074
			} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3075
				$output->$clean_id = $el;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3076
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3077
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3078
	} elseif ( is_string( $data ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3079
		return _wp_json_convert_string( $data );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3080
	} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3081
		return $data;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3082
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3083
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3084
	return $output;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3085
}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3086
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3087
/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3088
 * Convert a string to UTF-8, so that it can be safely encoded to JSON.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3089
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3090
 * @ignore
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3091
 * @since 4.1.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3092
 * @access private
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3093
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3094
 * @see _wp_json_sanity_check()
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3095
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3096
 * @staticvar bool $use_mb
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3097
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3098
 * @param string $string The string which is to be converted.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3099
 * @return string The checked string.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3100
 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3101
function _wp_json_convert_string( $string ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3102
	static $use_mb = null;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3103
	if ( is_null( $use_mb ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3104
		$use_mb = function_exists( 'mb_convert_encoding' );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3105
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3106
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3107
	if ( $use_mb ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3108
		$encoding = mb_detect_encoding( $string, mb_detect_order(), true );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3109
		if ( $encoding ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3110
			return mb_convert_encoding( $string, 'UTF-8', $encoding );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3111
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3112
			return mb_convert_encoding( $string, 'UTF-8', 'UTF-8' );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3113
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3114
	} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3115
		return wp_check_invalid_utf8( $string, true );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3116
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3117
}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3118
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3119
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3120
 * Prepares response data to be serialized to JSON.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3121
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3122
 * This supports the JsonSerializable interface for PHP 5.2-5.3 as well.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3123
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3124
 * @ignore
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3125
 * @since 4.4.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3126
 * @access private
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3127
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3128
 * @param mixed $data Native representation.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3129
 * @return bool|int|float|null|string|array Data ready for `json_encode()`.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3130
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3131
function _wp_json_prepare_data( $data ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3132
	if ( ! defined( 'WP_JSON_SERIALIZE_COMPATIBLE' ) || WP_JSON_SERIALIZE_COMPATIBLE === false ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3133
		return $data;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3134
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3135
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3136
	switch ( gettype( $data ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3137
		case 'boolean':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3138
		case 'integer':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3139
		case 'double':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3140
		case 'string':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3141
		case 'NULL':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3142
			// These values can be passed through.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3143
			return $data;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3144
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3145
		case 'array':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3146
			// Arrays must be mapped in case they also return objects.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3147
			return array_map( '_wp_json_prepare_data', $data );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3148
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3149
		case 'object':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3150
			// If this is an incomplete object (__PHP_Incomplete_Class), bail.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3151
			if ( ! is_object( $data ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3152
				return null;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3153
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3154
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3155
			if ( $data instanceof JsonSerializable ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3156
				$data = $data->jsonSerialize();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3157
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3158
				$data = get_object_vars( $data );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3159
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3160
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3161
			// Now, pass the array (or whatever was returned from jsonSerialize through).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3162
			return _wp_json_prepare_data( $data );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3163
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3164
		default:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3165
			return null;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3166
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3167
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3168
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3169
/**
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3170
 * Send a JSON response back to an Ajax request.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3171
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3172
 * @since 3.5.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3173
 * @since 4.7.0 The `$status_code` parameter was added.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3174
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3175
 * @param mixed $response    Variable (usually an array or object) to encode as JSON,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3176
 *                           then print and die.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3177
 * @param int   $status_code The HTTP status code to output.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3178
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3179
function wp_send_json( $response, $status_code = null ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3180
	@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3181
	if ( null !== $status_code ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3182
		status_header( $status_code );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3183
	}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3184
	echo wp_json_encode( $response );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3185
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3186
	if ( wp_doing_ajax() ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3187
		wp_die( '', '', array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3188
			'response' => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3189
		) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3190
	} else {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3191
		die;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3192
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3193
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3194
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3195
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3196
 * Send a JSON response back to an Ajax request, indicating success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3197
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3198
 * @since 3.5.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3199
 * @since 4.7.0 The `$status_code` parameter was added.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3200
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3201
 * @param mixed $data        Data to encode as JSON, then print and die.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3202
 * @param int   $status_code The HTTP status code to output.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3203
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3204
function wp_send_json_success( $data = null, $status_code = null ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3205
	$response = array( 'success' => true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3207
	if ( isset( $data ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3208
		$response['data'] = $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3209
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3210
	wp_send_json( $response, $status_code );
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3213
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3214
 * Send a JSON response back to an Ajax request, indicating failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3215
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3216
 * If the `$data` parameter is a WP_Error object, the errors
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3217
 * within the object are processed and output as an array of error
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3218
 * codes and corresponding messages. All other types are output
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3219
 * without further processing.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3220
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3221
 * @since 3.5.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3222
 * @since 4.1.0 The `$data` parameter is now processed if a WP_Error object is passed in.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3223
 * @since 4.7.0 The `$status_code` parameter was added.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3224
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3225
 * @param mixed $data        Data to encode as JSON, then print and die.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3226
 * @param int   $status_code The HTTP status code to output.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3227
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3228
function wp_send_json_error( $data = null, $status_code = null ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3229
	$response = array( 'success' => false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3230
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3231
	if ( isset( $data ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3232
		if ( is_wp_error( $data ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3233
			$result = array();
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3234
			foreach ( $data->errors as $code => $messages ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3235
				foreach ( $messages as $message ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3236
					$result[] = array( 'code' => $code, 'message' => $message );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3237
				}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3238
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3239
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3240
			$response['data'] = $result;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3241
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3242
			$response['data'] = $data;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3243
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3244
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3245
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3246
	wp_send_json( $response, $status_code );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3247
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3248
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3249
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3250
 * Checks that a JSONP callback is a valid JavaScript callback.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3251
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3252
 * Only allows alphanumeric characters and the dot character in callback
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3253
 * function names. This helps to mitigate XSS attacks caused by directly
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3254
 * outputting user input.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3255
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3256
 * @since 4.6.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3257
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3258
 * @param string $callback Supplied JSONP callback function.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3259
 * @return bool True if valid callback, otherwise false.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3260
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3261
function wp_check_jsonp_callback( $callback ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3262
	if ( ! is_string( $callback ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3263
		return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3264
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3265
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3266
	preg_replace( '/[^\w\.]/', '', $callback, -1, $illegal_char_count );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3267
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3268
	return 0 === $illegal_char_count;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3269
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3270
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3271
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3272
 * Retrieve the WordPress home page URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3273
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3274
 * If the constant named 'WP_HOME' exists, then it will be used and returned
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3275
 * by the function. This can be used to counter the redirection on your local
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3276
 * development environment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3277
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3278
 * @since 2.2.0
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3279
 * @access private
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3280
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3281
 * @see WP_HOME
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3282
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3283
 * @param string $url URL for the home location.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3284
 * @return string Homepage location.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3285
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3286
function _config_wp_home( $url = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3287
	if ( defined( 'WP_HOME' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3288
		return untrailingslashit( WP_HOME );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3289
	return $url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3290
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3291
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3292
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3293
 * Retrieve the WordPress site URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3294
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3295
 * If the constant named 'WP_SITEURL' is defined, then the value in that
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3296
 * constant will always be returned. This can be used for debugging a site
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3297
 * on your localhost while not having to change the database to your URL.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3298
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3299
 * @since 2.2.0
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3300
 * @access private
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3301
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3302
 * @see WP_SITEURL
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3303
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3304
 * @param string $url URL to set the WordPress site location.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3305
 * @return string The WordPress Site URL.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3306
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3307
function _config_wp_siteurl( $url = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3308
	if ( defined( 'WP_SITEURL' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3309
		return untrailingslashit( WP_SITEURL );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3310
	return $url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3311
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3312
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3313
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3314
 * Delete the fresh site option.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3315
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3316
 * @since 4.7.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3317
 * @access private
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3318
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3319
function _delete_option_fresh_site() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3320
	update_option( 'fresh_site', '0' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3321
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3322
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3323
/**
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3324
 * Set the localized direction for MCE plugin.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3325
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3326
 * Will only set the direction to 'rtl', if the WordPress locale has
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3327
 * the text direction set to 'rtl'.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3328
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3329
 * Fills in the 'directionality' setting, enables the 'directionality'
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3330
 * plugin, and adds the 'ltr' button to 'toolbar1', formerly
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3331
 * 'theme_advanced_buttons1' array keys. These keys are then returned
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3332
 * in the $mce_init (TinyMCE settings) array.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3333
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3334
 * @since 2.1.0
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3335
 * @access private
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3336
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3337
 * @param array $mce_init MCE settings array.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3338
 * @return array Direction set for 'rtl', if needed by locale.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3339
 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3340
function _mce_set_direction( $mce_init ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3341
	if ( is_rtl() ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3342
		$mce_init['directionality'] = 'rtl';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3343
		$mce_init['rtl_ui'] = true;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3344
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3345
		if ( ! empty( $mce_init['plugins'] ) && strpos( $mce_init['plugins'], 'directionality' ) === false ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3346
			$mce_init['plugins'] .= ',directionality';
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3347
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3348
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3349
		if ( ! empty( $mce_init['toolbar1'] ) && ! preg_match( '/\bltr\b/', $mce_init['toolbar1'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3350
			$mce_init['toolbar1'] .= ',ltr';
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3351
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3352
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3353
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3354
	return $mce_init;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3355
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3356
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3357
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3358
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3359
 * Convert smiley code to the icon graphic file equivalent.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3360
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3361
 * 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
  3362
 * 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
  3363
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3364
 * Plugins may override the default smiley list by setting the $wpsmiliestrans
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3365
 * 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
  3366
 * image file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3367
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3368
 * The $wp_smiliessearch global is for the regular expression and is set each
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3369
 * time the function is called.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3370
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3371
 * 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
  3372
 * 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
  3373
 * available.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3374
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3375
 * @global array $wpsmiliestrans
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3376
 * @global array $wp_smiliessearch
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3377
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3378
 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3379
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3380
function smilies_init() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3381
	global $wpsmiliestrans, $wp_smiliessearch;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3382
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3383
	// don't bother setting up smilies if they are disabled
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3384
	if ( !get_option( 'use_smilies' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3385
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3386
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3387
	if ( !isset( $wpsmiliestrans ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3388
		$wpsmiliestrans = array(
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3389
		':mrgreen:' => 'mrgreen.png',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3390
		':neutral:' => "\xf0\x9f\x98\x90",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3391
		':twisted:' => "\xf0\x9f\x98\x88",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3392
		  ':arrow:' => "\xe2\x9e\xa1",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3393
		  ':shock:' => "\xf0\x9f\x98\xaf",
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3394
		  ':smile:' => "\xf0\x9f\x99\x82",
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3395
		    ':???:' => "\xf0\x9f\x98\x95",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3396
		   ':cool:' => "\xf0\x9f\x98\x8e",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3397
		   ':evil:' => "\xf0\x9f\x91\xbf",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3398
		   ':grin:' => "\xf0\x9f\x98\x80",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3399
		   ':idea:' => "\xf0\x9f\x92\xa1",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3400
		   ':oops:' => "\xf0\x9f\x98\xb3",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3401
		   ':razz:' => "\xf0\x9f\x98\x9b",
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3402
		   ':roll:' => "\xf0\x9f\x99\x84",
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3403
		   ':wink:' => "\xf0\x9f\x98\x89",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3404
		    ':cry:' => "\xf0\x9f\x98\xa5",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3405
		    ':eek:' => "\xf0\x9f\x98\xae",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3406
		    ':lol:' => "\xf0\x9f\x98\x86",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3407
		    ':mad:' => "\xf0\x9f\x98\xa1",
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3408
		    ':sad:' => "\xf0\x9f\x99\x81",
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3409
		      '8-)' => "\xf0\x9f\x98\x8e",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3410
		      '8-O' => "\xf0\x9f\x98\xaf",
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3411
		      ':-(' => "\xf0\x9f\x99\x81",
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3412
		      ':-)' => "\xf0\x9f\x99\x82",
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3413
		      ':-?' => "\xf0\x9f\x98\x95",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3414
		      ':-D' => "\xf0\x9f\x98\x80",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3415
		      ':-P' => "\xf0\x9f\x98\x9b",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3416
		      ':-o' => "\xf0\x9f\x98\xae",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3417
		      ':-x' => "\xf0\x9f\x98\xa1",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3418
		      ':-|' => "\xf0\x9f\x98\x90",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3419
		      ';-)' => "\xf0\x9f\x98\x89",
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3420
		// This one transformation breaks regular text with frequency.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3421
		//     '8)' => "\xf0\x9f\x98\x8e",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3422
		       '8O' => "\xf0\x9f\x98\xaf",
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3423
		       ':(' => "\xf0\x9f\x99\x81",
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3424
		       ':)' => "\xf0\x9f\x99\x82",
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3425
		       ':?' => "\xf0\x9f\x98\x95",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3426
		       ':D' => "\xf0\x9f\x98\x80",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3427
		       ':P' => "\xf0\x9f\x98\x9b",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3428
		       ':o' => "\xf0\x9f\x98\xae",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3429
		       ':x' => "\xf0\x9f\x98\xa1",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3430
		       ':|' => "\xf0\x9f\x98\x90",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3431
		       ';)' => "\xf0\x9f\x98\x89",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3432
		      ':!:' => "\xe2\x9d\x97",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3433
		      ':?:' => "\xe2\x9d\x93",
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3434
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3435
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3436
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3437
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3438
	 * Filters all the smilies.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3439
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3440
	 * This filter must be added before `smilies_init` is run, as
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3441
	 * it is normally only run once to setup the smilies regex.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3442
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3443
	 * @since 4.7.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3444
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3445
	 * @param array $wpsmiliestrans List of the smilies.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3446
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3447
	$wpsmiliestrans = apply_filters('smilies', $wpsmiliestrans);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3448
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3449
	if (count($wpsmiliestrans) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3450
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3451
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3453
	/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3454
	 * 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
  3455
	 * we match the longest possible smilie (:???: vs :?) as the regular
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3456
	 * expression used below is first-match
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3457
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3458
	krsort($wpsmiliestrans);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3459
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3460
	$spaces = wp_spaces_regexp();
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3461
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3462
	// Begin first "subpattern"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3463
	$wp_smiliessearch = '/(?<=' . $spaces . '|^)';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3464
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3465
	$subchar = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3466
	foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3467
		$firstchar = substr($smiley, 0, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3468
		$rest = substr($smiley, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3469
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3470
		// new subpattern?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3471
		if ($firstchar != $subchar) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3472
			if ($subchar != '') {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3473
				$wp_smiliessearch .= ')(?=' . $spaces . '|$)';  // End previous "subpattern"
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3474
				$wp_smiliessearch .= '|(?<=' . $spaces . '|^)'; // Begin another "subpattern"
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
			$subchar = $firstchar;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3477
			$wp_smiliessearch .= preg_quote($firstchar, '/') . '(?:';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3478
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3479
			$wp_smiliessearch .= '|';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3480
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3481
		$wp_smiliessearch .= preg_quote($rest, '/');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3482
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3483
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3484
	$wp_smiliessearch .= ')(?=' . $spaces . '|$)/m';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3485
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3486
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3487
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3488
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3489
 * Merge user defined arguments into defaults array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3490
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3491
 * This function is used throughout WordPress to allow for both string or array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3492
 * to be merged into another array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3493
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3494
 * @since 2.2.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3495
 * @since 2.3.0 `$args` can now also be an object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3496
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3497
 * @param string|array|object $args     Value to merge with $defaults.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3498
 * @param array               $defaults Optional. Array that serves as the defaults. Default empty.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3499
 * @return array Merged user defined values with defaults.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3500
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3501
function wp_parse_args( $args, $defaults = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3502
	if ( is_object( $args ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3503
		$r = get_object_vars( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3504
	elseif ( is_array( $args ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3505
		$r =& $args;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3506
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3507
		wp_parse_str( $args, $r );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3508
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3509
	if ( is_array( $defaults ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3510
		return array_merge( $defaults, $r );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3511
	return $r;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3512
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3513
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3514
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3515
 * Clean up an array, comma- or space-separated list of IDs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3516
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3517
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3518
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3519
 * @param array|string $list List of ids.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3520
 * @return array Sanitized array of IDs.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3521
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3522
function wp_parse_id_list( $list ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3523
	if ( !is_array($list) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3524
		$list = preg_split('/[\s,]+/', $list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3525
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3526
	return array_unique(array_map('absint', $list));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3527
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3528
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3529
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3530
 * Clean up an array, comma- or space-separated list of slugs.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3531
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3532
 * @since 4.7.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3533
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3534
 * @param  array|string $list List of slugs.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3535
 * @return array Sanitized array of slugs.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3536
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3537
function wp_parse_slug_list( $list ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3538
	if ( ! is_array( $list ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3539
		$list = preg_split( '/[\s,]+/', $list );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3540
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3541
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3542
	foreach ( $list as $key => $value ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3543
		$list[ $key ] = sanitize_title( $value );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3544
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3545
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3546
	return array_unique( $list );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3547
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3548
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3549
/**
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3550
 * Extract a slice of an array, given a list of keys.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3551
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3552
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3553
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3554
 * @param array $array The original array.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3555
 * @param array $keys  The list of keys.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3556
 * @return array The array slice.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3557
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3558
function wp_array_slice_assoc( $array, $keys ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3559
	$slice = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3560
	foreach ( $keys as $key )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3561
		if ( isset( $array[ $key ] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3562
			$slice[ $key ] = $array[ $key ];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3563
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3564
	return $slice;
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
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3568
 * Determines if the variable is a numeric-indexed array.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3569
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3570
 * @since 4.4.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3571
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3572
 * @param mixed $data Variable to check.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3573
 * @return bool Whether the variable is a list.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3574
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3575
function wp_is_numeric_array( $data ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3576
	if ( ! is_array( $data ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3577
		return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3578
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3579
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3580
	$keys = array_keys( $data );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3581
	$string_keys = array_filter( $keys, 'is_string' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3582
	return count( $string_keys ) === 0;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3583
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3584
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3585
/**
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3586
 * Filters a list of objects, based on a set of key => value arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3587
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3588
 * @since 3.0.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3589
 * @since 4.7.0 Uses WP_List_Util class.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3590
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3591
 * @param array       $list     An array of objects to filter
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3592
 * @param array       $args     Optional. An array of key => value arguments to match
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3593
 *                              against each object. Default empty array.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3594
 * @param string      $operator Optional. The logical operation to perform. 'or' means
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3595
 *                              only one element from the array needs to match; 'and'
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3596
 *                              means all elements must match; 'not' means no elements may
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3597
 *                              match. Default 'and'.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3598
 * @param bool|string $field    A field from the object to place instead of the entire object.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3599
 *                              Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3600
 * @return array A list of objects or object fields.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3601
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3602
function wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3603
	if ( ! is_array( $list ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3604
		return array();
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3605
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3606
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3607
	$util = new WP_List_Util( $list );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3608
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3609
	$util->filter( $args, $operator );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3610
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3611
	if ( $field ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3612
		$util->pluck( $field );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3613
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3614
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3615
	return $util->get_output();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3616
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3617
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3618
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3619
 * Filters a list of objects, based on a set of key => value arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3620
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3621
 * @since 3.1.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3622
 * @since 4.7.0 Uses WP_List_Util class.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3623
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3624
 * @param array  $list     An array of objects to filter.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3625
 * @param array  $args     Optional. An array of key => value arguments to match
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3626
 *                         against each object. Default empty array.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3627
 * @param string $operator Optional. The logical operation to perform. 'AND' means
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3628
 *                         all elements from the array must match. 'OR' means only
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3629
 *                         one element needs to match. 'NOT' means no elements may
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3630
 *                         match. Default 'AND'.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3631
 * @return array Array of found values.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3632
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3633
function wp_list_filter( $list, $args = array(), $operator = 'AND' ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3634
	if ( ! is_array( $list ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3635
		return array();
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3636
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3637
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3638
	$util = new WP_List_Util( $list );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3639
	return $util->filter( $args, $operator );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3640
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3641
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3642
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3643
 * Pluck a certain field out of each object in a list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3644
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3645
 * This has the same functionality and prototype of
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3646
 * array_column() (PHP 5.5) but also supports objects.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3647
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3648
 * @since 3.1.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3649
 * @since 4.0.0 $index_key parameter added.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3650
 * @since 4.7.0 Uses WP_List_Util class.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3651
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3652
 * @param array      $list      List of objects or arrays
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3653
 * @param int|string $field     Field from the object to place instead of the entire object
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3654
 * @param int|string $index_key Optional. Field from the object to use as keys for the new array.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3655
 *                              Default null.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3656
 * @return array Array of found values. If `$index_key` is set, an array of found values with keys
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3657
 *               corresponding to `$index_key`. If `$index_key` is null, array keys from the original
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3658
 *               `$list` will be preserved in the results.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3659
 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3660
function wp_list_pluck( $list, $field, $index_key = null ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3661
	$util = new WP_List_Util( $list );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3662
	return $util->pluck( $field, $index_key );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3663
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3664
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3665
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3666
 * Sorts a list of objects, based on one or more orderby arguments.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3667
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3668
 * @since 4.7.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3669
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3670
 * @param array        $list          An array of objects to filter.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3671
 * @param string|array $orderby       Optional. Either the field name to order by or an array
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3672
 *                                    of multiple orderby fields as $orderby => $order.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3673
 * @param string       $order         Optional. Either 'ASC' or 'DESC'. Only used if $orderby
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3674
 *                                    is a string.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3675
 * @param bool         $preserve_keys Optional. Whether to preserve keys. Default false.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3676
 * @return array The sorted array.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3677
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3678
function wp_list_sort( $list, $orderby = array(), $order = 'ASC', $preserve_keys = false ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3679
	if ( ! is_array( $list ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3680
		return array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3681
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3682
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3683
	$util = new WP_List_Util( $list );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3684
	return $util->sort( $orderby, $order, $preserve_keys );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3685
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3686
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3687
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3688
 * Determines if Widgets library should be loaded.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3689
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3690
 * Checks to make sure that the widgets library hasn't already been loaded.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3691
 * If it hasn't, then it will load the widgets library and run an action hook.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3692
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3693
 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3694
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3695
function wp_maybe_load_widgets() {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3696
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3697
	 * Filters whether to load the Widgets library.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3698
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3699
	 * Passing a falsey value to the filter will effectively short-circuit
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3700
	 * the Widgets library from loading.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3701
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3702
	 * @since 2.8.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3703
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3704
	 * @param bool $wp_maybe_load_widgets Whether to load the Widgets library.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3705
	 *                                    Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3706
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3707
	if ( ! apply_filters( 'load_default_widgets', true ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3708
		return;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3709
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3710
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3711
	require_once( ABSPATH . WPINC . '/default-widgets.php' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3712
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3713
	add_action( '_admin_menu', 'wp_widgets_add_menu' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3714
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3715
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3716
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3717
 * Append the Widgets menu to the themes main menu.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3718
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3719
 * @since 2.2.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3720
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3721
 * @global array $submenu
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3722
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3723
function wp_widgets_add_menu() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3724
	global $submenu;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3725
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3726
	if ( ! current_theme_supports( 'widgets' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3727
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3728
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3729
	$submenu['themes.php'][7] = array( __( 'Widgets' ), 'edit_theme_options', 'widgets.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3730
	ksort( $submenu['themes.php'], SORT_NUMERIC );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3731
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3732
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3733
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3734
 * Flush all output buffers for PHP 5.2.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3735
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3736
 * Make sure all output buffers are flushed before our singletons are destroyed.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3737
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3738
 * @since 2.2.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 wp_ob_end_flush_all() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3741
	$levels = ob_get_level();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3742
	for ($i=0; $i<$levels; $i++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3743
		ob_end_flush();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3744
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3746
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3747
 * Load custom DB error or display WordPress DB error.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3748
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3749
 * 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
  3750
 * 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
  3751
 * then the WordPress DB error will be displayed instead.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3752
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3753
 * 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
  3754
 * search engines from caching the message. Custom DB messages should do the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3755
 * same.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3756
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3757
 * This function was backported to WordPress 2.3.2, but originally was added
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3758
 * in WordPress 2.5.0.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3759
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3760
 * @since 2.3.2
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3761
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3762
 * @global wpdb $wpdb WordPress database abstraction object.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3763
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3764
function dead_db() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3765
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3766
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3767
	wp_load_translations_early();
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3768
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3769
	// Load custom DB error template, if present.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3770
	if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3771
		require_once( WP_CONTENT_DIR . '/db-error.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3772
		die();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3773
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3774
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3775
	// If installing or in the admin, provide the verbose message.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3776
	if ( wp_installing() || defined( 'WP_ADMIN' ) )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3777
		wp_die($wpdb->error);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3778
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3779
	// Otherwise, be terse.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3780
	status_header( 500 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3781
	nocache_headers();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3782
	header( 'Content-Type: text/html; charset=utf-8' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3783
?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3784
<!DOCTYPE html>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3785
<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
  3786
<head>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3787
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3788
	<title><?php _e( 'Database Error' ); ?></title>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3789
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3790
</head>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3791
<body>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3792
	<h1><?php _e( 'Error establishing a database connection' ); ?></h1>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3793
</body>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3794
</html>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3795
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3796
	die();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3797
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3798
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3799
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3800
 * Convert a value to non-negative integer.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3801
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3802
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3803
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3804
 * @param mixed $maybeint Data you wish to have converted to a non-negative integer.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3805
 * @return int A non-negative integer.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3806
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3807
function absint( $maybeint ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3808
	return abs( intval( $maybeint ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3809
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3810
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3811
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3812
 * Mark a function as deprecated and inform when it has been used.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3813
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3814
 * There is a {@see 'hook deprecated_function_run'} that will be called that can be used
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3815
 * to get the backtrace up to what file and function called the deprecated
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3816
 * function.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3817
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3818
 * The current behavior is to trigger a user error if `WP_DEBUG` is true.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3819
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3820
 * This function is to be used in every function that is deprecated.
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 2.5.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
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3825
 * @param string $function    The function that was called.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3826
 * @param string $version     The version of WordPress that deprecated the function.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3827
 * @param string $replacement Optional. The function that should have been called. Default null.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3828
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3829
function _deprecated_function( $function, $version, $replacement = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3830
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3831
	/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3832
	 * Fires when a deprecated function is called.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3833
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3834
	 * @since 2.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3835
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3836
	 * @param string $function    The function that was called.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3837
	 * @param string $replacement The function that should have been called.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3838
	 * @param string $version     The version of WordPress that deprecated the function.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3839
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3840
	do_action( 'deprecated_function_run', $function, $replacement, $version );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3841
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3842
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3843
	 * Filters whether to trigger an error for deprecated functions.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3844
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3845
	 * @since 2.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3846
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3847
	 * @param bool $trigger Whether to trigger the error for deprecated functions. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3848
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3849
	if ( WP_DEBUG && apply_filters( 'deprecated_function_trigger_error', true ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3850
		if ( function_exists( '__' ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3851
			if ( ! is_null( $replacement ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3852
				/* translators: 1: PHP function name, 2: version number, 3: alternative function name */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3853
				trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.'), $function, $version, $replacement ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3854
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3855
				/* translators: 1: PHP function name, 2: version number */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3856
				trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.'), $function, $version ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3857
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3858
		} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3859
			if ( ! is_null( $replacement ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3860
				trigger_error( sprintf( '%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.', $function, $version, $replacement ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3861
			} else {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3862
				trigger_error( sprintf( '%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.', $function, $version ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3863
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3864
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3865
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3866
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3867
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3868
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3869
 * Marks a constructor as deprecated and informs when it has been used.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3870
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3871
 * Similar to _deprecated_function(), but with different strings. Used to
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3872
 * remove PHP4 style constructors.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3873
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3874
 * The current behavior is to trigger a user error if `WP_DEBUG` is true.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3875
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3876
 * This function is to be used in every PHP4 style constructor method that is deprecated.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3877
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3878
 * @since 4.3.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3879
 * @since 4.5.0 Added the `$parent_class` parameter.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3880
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3881
 * @access private
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3882
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3883
 * @param string $class        The class containing the deprecated constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3884
 * @param string $version      The version of WordPress that deprecated the function.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3885
 * @param string $parent_class Optional. The parent class calling the deprecated constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3886
 *                             Default empty string.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3887
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3888
function _deprecated_constructor( $class, $version, $parent_class = '' ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3889
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3890
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3891
	 * Fires when a deprecated constructor is called.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3892
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3893
	 * @since 4.3.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3894
	 * @since 4.5.0 Added the `$parent_class` parameter.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3895
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3896
	 * @param string $class        The class containing the deprecated constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3897
	 * @param string $version      The version of WordPress that deprecated the function.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3898
	 * @param string $parent_class The parent class calling the deprecated constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3899
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3900
	do_action( 'deprecated_constructor_run', $class, $version, $parent_class );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3901
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3902
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3903
	 * Filters whether to trigger an error for deprecated functions.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3904
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3905
	 * `WP_DEBUG` must be true in addition to the filter evaluating to true.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3906
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3907
	 * @since 4.3.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3908
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3909
	 * @param bool $trigger Whether to trigger the error for deprecated functions. Default true.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3910
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3911
	if ( WP_DEBUG && apply_filters( 'deprecated_constructor_trigger_error', true ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3912
		if ( function_exists( '__' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3913
			if ( ! empty( $parent_class ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3914
				/* translators: 1: PHP class name, 2: PHP parent class name, 3: version number, 4: __construct() method */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3915
				trigger_error( sprintf( __( 'The called constructor method for %1$s in %2$s is <strong>deprecated</strong> since version %3$s! Use %4$s instead.' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3916
					$class, $parent_class, $version, '<pre>__construct()</pre>' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3917
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3918
				/* translators: 1: PHP class name, 2: version number, 3: __construct() method */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3919
				trigger_error( sprintf( __( 'The called constructor method for %1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3920
					$class, $version, '<pre>__construct()</pre>' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3921
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3922
		} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3923
			if ( ! empty( $parent_class ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3924
				trigger_error( sprintf( 'The called constructor method for %1$s in %2$s is <strong>deprecated</strong> since version %3$s! Use %4$s instead.',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3925
					$class, $parent_class, $version, '<pre>__construct()</pre>' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3926
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3927
				trigger_error( sprintf( 'The called constructor method for %1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3928
					$class, $version, '<pre>__construct()</pre>' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3929
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3930
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3931
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3932
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3933
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3934
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3935
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3936
 * Mark a file as deprecated and inform when it has been used.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3937
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3938
 * There is a hook {@see 'deprecated_file_included'} that will be called that can be used
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3939
 * to get the backtrace up to what file and function included the deprecated
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3940
 * file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3941
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3942
 * The current behavior is to trigger a user error if `WP_DEBUG` is true.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3943
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3944
 * This function is to be used in every file that is deprecated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3945
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3946
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3947
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3948
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3949
 * @param string $file        The file that was included.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3950
 * @param string $version     The version of WordPress that deprecated the file.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3951
 * @param string $replacement Optional. The file that should have been included based on ABSPATH.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3952
 *                            Default null.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3953
 * @param string $message     Optional. A message regarding the change. Default empty.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3954
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3955
function _deprecated_file( $file, $version, $replacement = null, $message = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3956
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3957
	/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3958
	 * Fires when a deprecated file is called.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3959
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3960
	 * @since 2.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3961
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3962
	 * @param string $file        The file that was called.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3963
	 * @param string $replacement The file that should have been included based on ABSPATH.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3964
	 * @param string $version     The version of WordPress that deprecated the file.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3965
	 * @param string $message     A message regarding the change.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3966
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3967
	do_action( 'deprecated_file_included', $file, $replacement, $version, $message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3968
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3969
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3970
	 * Filters whether to trigger an error for deprecated files.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3971
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3972
	 * @since 2.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3973
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3974
	 * @param bool $trigger Whether to trigger the error for deprecated files. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3975
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3976
	if ( WP_DEBUG && apply_filters( 'deprecated_file_trigger_error', true ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3977
		$message = empty( $message ) ? '' : ' ' . $message;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3978
		if ( function_exists( '__' ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3979
			if ( ! is_null( $replacement ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3980
				/* translators: 1: PHP file name, 2: version number, 3: alternative file name */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3981
				trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.'), $file, $version, $replacement ) . $message );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3982
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3983
				/* translators: 1: PHP file name, 2: version number */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3984
				trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.'), $file, $version ) . $message );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3985
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3986
		} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3987
			if ( ! is_null( $replacement ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3988
				trigger_error( sprintf( '%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.', $file, $version, $replacement ) . $message );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3989
			} else {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3990
				trigger_error( sprintf( '%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.', $file, $version ) . $message );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3991
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3992
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3993
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3994
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3995
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3996
 * Mark a function argument as deprecated and inform when it has been used.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3997
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3998
 * This function is to be used whenever a deprecated function argument is used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3999
 * 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
  4000
 * 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
  4001
 * For example:
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4002
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4003
 *     if ( ! empty( $deprecated ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4004
 *         _deprecated_argument( __FUNCTION__, '3.0.0' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4005
 *     }
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4006
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4007
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4008
 * 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
  4009
 * to get the backtrace up to what file and function used the deprecated
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4010
 * argument.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4011
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4012
 * 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
  4013
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4014
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4015
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4016
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4017
 * @param string $function The function that was called.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4018
 * @param string $version  The version of WordPress that deprecated the argument used.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4019
 * @param string $message  Optional. A message regarding the change. Default null.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4020
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4021
function _deprecated_argument( $function, $version, $message = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4022
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4023
	/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4024
	 * Fires when a deprecated argument is called.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4025
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4026
	 * @since 3.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4027
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4028
	 * @param string $function The function that was called.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4029
	 * @param string $message  A message regarding the change.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4030
	 * @param string $version  The version of WordPress that deprecated the argument used.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4031
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4032
	do_action( 'deprecated_argument_run', $function, $message, $version );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4033
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4034
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4035
	 * Filters whether to trigger an error for deprecated arguments.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4036
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4037
	 * @since 3.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4038
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4039
	 * @param bool $trigger Whether to trigger the error for deprecated arguments. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4040
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4041
	if ( WP_DEBUG && apply_filters( 'deprecated_argument_trigger_error', true ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4042
		if ( function_exists( '__' ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4043
			if ( ! is_null( $message ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4044
				/* translators: 1: PHP function name, 2: version number, 3: optional message regarding the change */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4045
				trigger_error( sprintf( __('%1$s was called with an argument that is <strong>deprecated</strong> since version %2$s! %3$s'), $function, $version, $message ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4046
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4047
				/* translators: 1: PHP function name, 2: version number */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4048
				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 ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4049
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4050
		} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4051
			if ( ! is_null( $message ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4052
				trigger_error( sprintf( '%1$s was called with an argument that is <strong>deprecated</strong> since version %2$s! %3$s', $function, $version, $message ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4053
			} else {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4054
				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 ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4055
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4056
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4057
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4058
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4059
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4060
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4061
 * Marks a deprecated action or filter hook as deprecated and throws a notice.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4062
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4063
 * Use the {@see 'deprecated_hook_run'} action to get the backtrace describing where
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4064
 * the deprecated hook was called.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4065
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4066
 * Default behavior is to trigger a user error if `WP_DEBUG` is true.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4067
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4068
 * This function is called by the do_action_deprecated() and apply_filters_deprecated()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4069
 * functions, and so generally does not need to be called directly.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4070
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4071
 * @since 4.6.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4072
 * @access private
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4073
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4074
 * @param string $hook        The hook that was used.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4075
 * @param string $version     The version of WordPress that deprecated the hook.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4076
 * @param string $replacement Optional. The hook that should have been used.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4077
 * @param string $message     Optional. A message regarding the change.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4078
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4079
function _deprecated_hook( $hook, $version, $replacement = null, $message = null ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4080
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4081
	 * Fires when a deprecated hook is called.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4082
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4083
	 * @since 4.6.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4084
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4085
	 * @param string $hook        The hook that was called.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4086
	 * @param string $replacement The hook that should be used as a replacement.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4087
	 * @param string $version     The version of WordPress that deprecated the argument used.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4088
	 * @param string $message     A message regarding the change.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4089
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4090
	do_action( 'deprecated_hook_run', $hook, $replacement, $version, $message );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4091
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4092
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4093
	 * Filters whether to trigger deprecated hook errors.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4094
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4095
	 * @since 4.6.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4096
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4097
	 * @param bool $trigger Whether to trigger deprecated hook errors. Requires
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4098
	 *                      `WP_DEBUG` to be defined true.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4099
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4100
	if ( WP_DEBUG && apply_filters( 'deprecated_hook_trigger_error', true ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4101
		$message = empty( $message ) ? '' : ' ' . $message;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4102
		if ( ! is_null( $replacement ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4103
			/* translators: 1: WordPress hook name, 2: version number, 3: alternative hook name */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4104
			trigger_error( sprintf( __( '%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.' ), $hook, $version, $replacement ) . $message );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4105
		} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4106
			/* translators: 1: WordPress hook name, 2: version number */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4107
			trigger_error( sprintf( __( '%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.' ), $hook, $version ) . $message );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4108
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4109
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4110
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4111
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4112
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4113
 * Mark something as being incorrectly called.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4114
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4115
 * There is a hook {@see 'doing_it_wrong_run'} that will be called that can be used
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4116
 * to get the backtrace up to what file and function called the deprecated
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4117
 * function.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4118
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4119
 * The current behavior is to trigger a user error if `WP_DEBUG` is true.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4120
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4121
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4122
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4123
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4124
 * @param string $function The function that was called.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4125
 * @param string $message  A message explaining what has been done incorrectly.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4126
 * @param string $version  The version of WordPress where the message was added.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4127
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4128
function _doing_it_wrong( $function, $message, $version ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4129
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4130
	/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4131
	 * Fires when the given function is being used incorrectly.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4132
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4133
	 * @since 3.1.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4134
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4135
	 * @param string $function The function that was called.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4136
	 * @param string $message  A message explaining what has been done incorrectly.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4137
	 * @param string $version  The version of WordPress where the message was added.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4138
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4139
	do_action( 'doing_it_wrong_run', $function, $message, $version );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4140
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4141
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4142
	 * Filters whether to trigger an error for _doing_it_wrong() calls.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4143
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4144
	 * @since 3.1.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4145
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4146
	 * @param bool $trigger Whether to trigger the error for _doing_it_wrong() calls. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4147
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4148
	if ( WP_DEBUG && apply_filters( 'doing_it_wrong_trigger_error', true ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4149
		if ( function_exists( '__' ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4150
			if ( is_null( $version ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4151
				$version = '';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4152
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4153
				/* translators: %s: version number */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4154
				$version = sprintf( __( '(This message was added in version %s.)' ), $version );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4155
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4156
			/* translators: %s: Codex URL */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4157
			$message .= ' ' . sprintf( __( 'Please see <a href="%s">Debugging in WordPress</a> for more information.' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4158
				__( 'https://codex.wordpress.org/Debugging_in_WordPress' )
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4159
			);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4160
			/* translators: Developer debugging message. 1: PHP function name, 2: Explanatory message, 3: Version information message */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4161
			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
  4162
		} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4163
			if ( is_null( $version ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4164
				$version = '';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4165
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4166
				$version = sprintf( '(This message was added in version %s.)', $version );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4167
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4168
			$message .= sprintf( ' Please see <a href="%s">Debugging in WordPress</a> for more information.',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4169
				'https://codex.wordpress.org/Debugging_in_WordPress'
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4170
			);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4171
			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
  4172
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4173
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4174
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4175
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4176
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4177
 * Is the server running earlier than 1.5.0 version of lighttpd?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4178
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4179
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4180
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4181
 * @return bool Whether the server is running lighttpd < 1.5.0.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4182
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4183
function is_lighttpd_before_150() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4184
	$server_parts = explode( '/', isset( $_SERVER['SERVER_SOFTWARE'] )? $_SERVER['SERVER_SOFTWARE'] : '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4185
	$server_parts[1] = isset( $server_parts[1] )? $server_parts[1] : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4186
	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
  4187
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4188
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4189
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4190
 * Does the specified module exist in the Apache config?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4191
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4192
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4193
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4194
 * @global bool $is_apache
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4195
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4196
 * @param string $mod     The module, e.g. mod_rewrite.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4197
 * @param bool   $default Optional. The default return value if the module is not found. Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4198
 * @return bool Whether the specified module is loaded.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4199
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4200
function apache_mod_loaded($mod, $default = false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4201
	global $is_apache;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4202
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4203
	if ( !$is_apache )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4204
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4205
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4206
	if ( function_exists( 'apache_get_modules' ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4207
		$mods = apache_get_modules();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4208
		if ( in_array($mod, $mods) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4209
			return true;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4210
	} elseif ( function_exists( 'phpinfo' ) && false === strpos( ini_get( 'disable_functions' ), 'phpinfo' ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4211
			ob_start();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4212
			phpinfo(8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4213
			$phpinfo = ob_get_clean();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4214
			if ( false !== strpos($phpinfo, $mod) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4215
				return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4216
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4217
	return $default;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4218
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4219
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4220
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4221
 * Check if IIS 7+ supports pretty permalinks.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4222
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4223
 * @since 2.8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4224
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4225
 * @global bool $is_iis7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4226
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4227
 * @return bool Whether IIS7 supports permalinks.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4228
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4229
function iis7_supports_permalinks() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4230
	global $is_iis7;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4231
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4232
	$supports_permalinks = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4233
	if ( $is_iis7 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4234
		/* 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
  4235
		 * 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
  4236
		 * pretty permalinks cannot be used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4237
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4238
		 * 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
  4239
		 * 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
  4240
		 * 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
  4241
		 * via ISAPI then pretty permalinks will not work.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4242
		 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4243
		$supports_permalinks = class_exists( 'DOMDocument', false ) && isset($_SERVER['IIS_UrlRewriteModule']) && ( PHP_SAPI == 'cgi-fcgi' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4244
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4245
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4246
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4247
	 * Filters whether IIS 7+ supports pretty permalinks.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4248
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4249
	 * @since 2.8.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4250
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4251
	 * @param bool $supports_permalinks Whether IIS7 supports permalinks. Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4252
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4253
	return apply_filters( 'iis7_supports_permalinks', $supports_permalinks );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4254
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4255
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4256
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4257
 * Validates a file name and path against an allowed set of rules.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4258
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4259
 * A return value of `1` means the file path contains directory traversal.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4260
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4261
 * A return value of `2` means the file path contains a Windows drive path.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4262
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4263
 * A return value of `3` means the file is not in the allowed files list.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4264
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4265
 * @since 1.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4266
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4267
 * @param string $file          File path.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4268
 * @param array  $allowed_files Optional. List of allowed files.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4269
 * @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
  4270
 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4271
function validate_file( $file, $allowed_files = array() ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4272
	// `../` on its own is not allowed:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4273
	if ( '../' === $file ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4274
		return 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4275
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4276
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4277
	// More than one occurence of `../` is not allowed:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4278
	if ( preg_match_all( '#\.\./#', $file, $matches, PREG_SET_ORDER ) && ( count( $matches ) > 1 ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4279
		return 1;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4280
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4281
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4282
	// `../` which does not occur at the end of the path is not allowed:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4283
	if ( false !== strpos( $file, '../' ) && '../' !== mb_substr( $file, -3, 3 ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4284
		return 1;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4285
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4286
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4287
	// Files not in the allowed file list are not allowed:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4288
	if ( ! empty( $allowed_files ) && ! in_array( $file, $allowed_files ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4289
		return 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4290
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4291
	// Absolute Windows drive paths are not allowed:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4292
	if (':' == substr( $file, 1, 1 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4293
		return 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4294
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4295
	return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4296
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4297
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4298
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4299
 * Whether to force SSL used for the Administration Screens.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4300
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4301
 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4302
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4303
 * @staticvar bool $forced
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4304
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4305
 * @param string|bool $force Optional. Whether to force SSL in admin screens. Default null.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4306
 * @return bool True if forced, false if not forced.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4307
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4308
function force_ssl_admin( $force = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4309
	static $forced = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4310
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4311
	if ( !is_null( $force ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4312
		$old_forced = $forced;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4313
		$forced = $force;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4314
		return $old_forced;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4315
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4316
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4317
	return $forced;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4318
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4320
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4321
 * Guess the URL for the site.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4322
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4323
 * 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
  4324
 * directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4325
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4326
 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4327
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4328
 * @return string The guessed URL.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4329
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4330
function wp_guess_url() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4331
	if ( defined('WP_SITEURL') && '' != WP_SITEURL ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4332
		$url = WP_SITEURL;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4333
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4334
		$abspath_fix = str_replace( '\\', '/', ABSPATH );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4335
		$script_filename_dir = dirname( $_SERVER['SCRIPT_FILENAME'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4336
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4337
		// The request is for the admin
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4338
		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
  4339
			$path = preg_replace( '#/(wp-admin/.*|wp-login.php)#i', '', $_SERVER['REQUEST_URI'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4340
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4341
		// The request is for a file in ABSPATH
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4342
		} elseif ( $script_filename_dir . '/' == $abspath_fix ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4343
			// Strip off any file/query params in the path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4344
			$path = preg_replace( '#/[^/]*$#i', '', $_SERVER['PHP_SELF'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4345
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4346
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4347
			if ( false !== strpos( $_SERVER['SCRIPT_FILENAME'], $abspath_fix ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4348
				// Request is hitting a file inside ABSPATH
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4349
				$directory = str_replace( ABSPATH, '', $script_filename_dir );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4350
				// Strip off the sub directory, and any file/query params
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4351
				$path = preg_replace( '#/' . preg_quote( $directory, '#' ) . '/[^/]*$#i', '' , $_SERVER['REQUEST_URI'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4352
			} elseif ( false !== strpos( $abspath_fix, $script_filename_dir ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4353
				// Request is hitting a file above ABSPATH
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4354
				$subdirectory = substr( $abspath_fix, strpos( $abspath_fix, $script_filename_dir ) + strlen( $script_filename_dir ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4355
				// Strip off any file/query params from the path, appending the sub directory to the installation
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4356
				$path = preg_replace( '#/[^/]*$#i', '' , $_SERVER['REQUEST_URI'] ) . $subdirectory;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4357
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4358
				$path = $_SERVER['REQUEST_URI'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4359
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4360
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4361
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4362
		$schema = is_ssl() ? 'https://' : 'http://'; // set_url_scheme() is not defined yet
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4363
		$url = $schema . $_SERVER['HTTP_HOST'] . $path;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4364
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4365
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4366
	return rtrim($url, '/');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4367
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4368
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4369
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4370
 * Temporarily suspend cache additions.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4371
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4372
 * Stops more data being added to the cache, but still allows cache retrieval.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4373
 * 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
  4374
 * be almost uselessly added to the cache.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4375
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4376
 * Suspension lasts for a single page load at most. Remember to call this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4377
 * function again if you wish to re-enable cache adds earlier.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4378
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4379
 * @since 3.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4380
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4381
 * @staticvar bool $_suspend
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4382
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4383
 * @param bool $suspend Optional. Suspends additions if true, re-enables them if false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4384
 * @return bool The current suspend setting
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4385
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4386
function wp_suspend_cache_addition( $suspend = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4387
	static $_suspend = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4389
	if ( is_bool( $suspend ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4390
		$_suspend = $suspend;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4391
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4392
	return $_suspend;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4393
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4394
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4395
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4396
 * Suspend cache invalidation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4397
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4398
 * Turns cache invalidation on and off. Useful during imports where you don't want to do
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4399
 * invalidations every time a post is inserted. Callers must be sure that what they are
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4400
 * doing won't lead to an inconsistent cache when invalidation is suspended.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4401
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4402
 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4403
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4404
 * @global bool $_wp_suspend_cache_invalidation
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4405
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4406
 * @param bool $suspend Optional. Whether to suspend or enable cache invalidation. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4407
 * @return bool The current suspend setting.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4408
 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4409
function wp_suspend_cache_invalidation( $suspend = true ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4410
	global $_wp_suspend_cache_invalidation;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4411
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4412
	$current_suspend = $_wp_suspend_cache_invalidation;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4413
	$_wp_suspend_cache_invalidation = $suspend;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4414
	return $current_suspend;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4415
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4416
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4417
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4418
 * Determine whether a site is the main site of the current network.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4419
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4420
 * @since 3.0.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4421
 * @since 4.9.0 The $network_id parameter has been added.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4422
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4423
 * @param int $site_id    Optional. Site ID to test. Defaults to current site.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4424
 * @param int $network_id Optional. Network ID of the network to check for.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4425
 *                        Defaults to current network.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4426
 * @return bool True if $site_id is the main site of the network, or if not
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4427
 *              running Multisite.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4428
 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4429
function is_main_site( $site_id = null, $network_id = null ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4430
	if ( ! is_multisite() ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4431
		return true;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4432
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4433
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4434
	if ( ! $site_id ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4435
		$site_id = get_current_blog_id();
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4436
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4437
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4438
	$site_id = (int) $site_id;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4439
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4440
	return $site_id === get_main_site_id( $network_id );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4441
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4442
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4443
/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4444
 * Gets the main site ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4445
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4446
 * @since 4.9.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4447
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4448
 * @param int $network_id Optional. The ID of the network for which to get the main site.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4449
 *                        Defaults to the current network.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4450
 * @return int The ID of the main site.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4451
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4452
function get_main_site_id( $network_id = null ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4453
	if ( ! is_multisite() ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4454
		return get_current_blog_id();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4455
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4456
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4457
	$network = get_network( $network_id );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4458
	if ( ! $network ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4459
		return 0;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4460
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4461
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4462
	return $network->site_id;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4463
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4464
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4465
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4466
 * Determine whether a network is the main network of the Multisite installation.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4467
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4468
 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4469
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4470
 * @param int $network_id Optional. Network ID to test. Defaults to current network.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4471
 * @return bool True if $network_id is the main network, or if not running Multisite.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4472
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4473
function is_main_network( $network_id = null ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4474
	if ( ! is_multisite() ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4475
		return true;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4476
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4477
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4478
	if ( null === $network_id ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4479
		$network_id = get_current_network_id();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4480
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4481
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4482
	$network_id = (int) $network_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4483
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4484
	return ( $network_id === get_main_network_id() );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4485
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4486
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4487
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4488
 * Get the main network ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4489
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4490
 * @since 4.3.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4491
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4492
 * @return int The ID of the main network.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4493
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4494
function get_main_network_id() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4495
	if ( ! is_multisite() ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4496
		return 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4497
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4498
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4499
	$current_network = get_network();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4500
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4501
	if ( defined( 'PRIMARY_NETWORK_ID' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4502
		$main_network_id = PRIMARY_NETWORK_ID;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4503
	} elseif ( isset( $current_network->id ) && 1 === (int) $current_network->id ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4504
		// If the current network has an ID of 1, assume it is the main network.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4505
		$main_network_id = 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4506
	} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4507
		$_networks = get_networks( array( 'fields' => 'ids', 'number' => 1 ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4508
		$main_network_id = array_shift( $_networks );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4509
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4510
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4511
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4512
	 * Filters the main network ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4513
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4514
	 * @since 4.3.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4515
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4516
	 * @param int $main_network_id The ID of the main network.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4517
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4518
	return (int) apply_filters( 'get_main_network_id', $main_network_id );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4519
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4520
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4521
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4522
 * Determine whether global terms are enabled.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4523
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4524
 * @since 3.0.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4525
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4526
 * @staticvar bool $global_terms
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4527
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4528
 * @return bool True if multisite and global terms enabled.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4529
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4530
function global_terms_enabled() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4531
	if ( ! is_multisite() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4532
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4533
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4534
	static $global_terms = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4535
	if ( is_null( $global_terms ) ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4536
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4537
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4538
		 * Filters whether global terms are enabled.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4539
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4540
		 * Passing a non-null value to the filter will effectively short-circuit the function,
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4541
		 * returning the value of the 'global_terms_enabled' site option instead.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4542
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4543
		 * @since 3.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4544
		 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4545
		 * @param null $enabled Whether global terms are enabled.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4546
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4547
		$filter = apply_filters( 'global_terms_enabled', null );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4548
		if ( ! is_null( $filter ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4549
			$global_terms = (bool) $filter;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4550
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4551
			$global_terms = (bool) get_site_option( 'global_terms_enabled', false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4552
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4553
	return $global_terms;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4554
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4555
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4556
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4557
 * gmt_offset modification for smart timezone handling.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4558
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4559
 * Overrides the gmt_offset option if we have a timezone_string available.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4560
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4561
 * @since 2.8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4562
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4563
 * @return float|false Timezone GMT offset, false otherwise.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4564
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4565
function wp_timezone_override_offset() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4566
	if ( !$timezone_string = get_option( 'timezone_string' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4567
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4568
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4569
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4570
	$timezone_object = timezone_open( $timezone_string );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4571
	$datetime_object = date_create();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4572
	if ( false === $timezone_object || false === $datetime_object ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4573
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4574
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4575
	return round( timezone_offset_get( $timezone_object, $datetime_object ) / HOUR_IN_SECONDS, 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4576
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4577
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4578
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4579
 * Sort-helper for timezones.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4580
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4581
 * @since 2.9.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4582
 * @access private
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4583
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4584
 * @param array $a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4585
 * @param array $b
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4586
 * @return int
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4587
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4588
function _wp_timezone_choice_usort_callback( $a, $b ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4589
	// Don't use translated versions of Etc
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4590
	if ( 'Etc' === $a['continent'] && 'Etc' === $b['continent'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4591
		// Make the order of these more like the old dropdown
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4592
		if ( 'GMT+' === substr( $a['city'], 0, 4 ) && 'GMT+' === substr( $b['city'], 0, 4 ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4593
			return -1 * ( strnatcasecmp( $a['city'], $b['city'] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4594
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4595
		if ( 'UTC' === $a['city'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4596
			if ( 'GMT+' === substr( $b['city'], 0, 4 ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4597
				return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4598
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4599
			return -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4600
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4601
		if ( 'UTC' === $b['city'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4602
			if ( 'GMT+' === substr( $a['city'], 0, 4 ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4603
				return -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4604
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4605
			return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4606
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4607
		return strnatcasecmp( $a['city'], $b['city'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4608
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4609
	if ( $a['t_continent'] == $b['t_continent'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4610
		if ( $a['t_city'] == $b['t_city'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4611
			return strnatcasecmp( $a['t_subcity'], $b['t_subcity'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4612
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4613
		return strnatcasecmp( $a['t_city'], $b['t_city'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4614
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4615
		// Force Etc to the bottom of the list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4616
		if ( 'Etc' === $a['continent'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4617
			return 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4618
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4619
		if ( 'Etc' === $b['continent'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4620
			return -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4621
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4622
		return strnatcasecmp( $a['t_continent'], $b['t_continent'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4623
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4624
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4626
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4627
 * Gives a nicely-formatted list of timezone strings.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4628
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4629
 * @since 2.9.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4630
 * @since 4.7.0 Added the `$locale` parameter.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4631
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4632
 * @staticvar bool $mo_loaded
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4633
 * @staticvar string $locale_loaded
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4634
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4635
 * @param string $selected_zone Selected timezone.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4636
 * @param string $locale        Optional. Locale to load the timezones in. Default current site locale.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4637
 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4638
 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4639
function wp_timezone_choice( $selected_zone, $locale = null ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4640
	static $mo_loaded = false, $locale_loaded = null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4641
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4642
	$continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4643
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4644
	// Load translations for continents and cities.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4645
	if ( ! $mo_loaded || $locale !== $locale_loaded ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4646
		$locale_loaded = $locale ? $locale : get_locale();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4647
		$mofile = WP_LANG_DIR . '/continents-cities-' . $locale_loaded . '.mo';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4648
		unload_textdomain( 'continents-cities' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4649
		load_textdomain( 'continents-cities', $mofile );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4650
		$mo_loaded = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4651
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4652
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4653
	$zonen = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4654
	foreach ( timezone_identifiers_list() as $zone ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4655
		$zone = explode( '/', $zone );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4656
		if ( !in_array( $zone[0], $continents ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4657
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4658
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4659
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4660
		// 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
  4661
		$exists = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4662
			0 => ( isset( $zone[0] ) && $zone[0] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4663
			1 => ( isset( $zone[1] ) && $zone[1] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4664
			2 => ( isset( $zone[2] ) && $zone[2] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4665
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4666
		$exists[3] = ( $exists[0] && 'Etc' !== $zone[0] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4667
		$exists[4] = ( $exists[1] && $exists[3] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4668
		$exists[5] = ( $exists[2] && $exists[3] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4669
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4670
		$zonen[] = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4671
			'continent'   => ( $exists[0] ? $zone[0] : '' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4672
			'city'        => ( $exists[1] ? $zone[1] : '' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4673
			'subcity'     => ( $exists[2] ? $zone[2] : '' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4674
			't_continent' => ( $exists[3] ? translate( str_replace( '_', ' ', $zone[0] ), 'continents-cities' ) : '' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4675
			't_city'      => ( $exists[4] ? translate( str_replace( '_', ' ', $zone[1] ), 'continents-cities' ) : '' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4676
			't_subcity'   => ( $exists[5] ? translate( str_replace( '_', ' ', $zone[2] ), 'continents-cities' ) : '' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4677
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4678
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4679
	usort( $zonen, '_wp_timezone_choice_usort_callback' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4680
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4681
	$structure = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4682
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4683
	if ( empty( $selected_zone ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4684
		$structure[] = '<option selected="selected" value="">' . __( 'Select a city' ) . '</option>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4685
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4686
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4687
	foreach ( $zonen as $key => $zone ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4688
		// Build value in an array to join later
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4689
		$value = array( $zone['continent'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4690
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4691
		if ( empty( $zone['city'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4692
			// It's at the continent level (generally won't happen)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4693
			$display = $zone['t_continent'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4694
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4695
			// It's inside a continent group
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4696
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4697
			// Continent optgroup
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4698
			if ( !isset( $zonen[$key - 1] ) || $zonen[$key - 1]['continent'] !== $zone['continent'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4699
				$label = $zone['t_continent'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4700
				$structure[] = '<optgroup label="'. esc_attr( $label ) .'">';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4701
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4702
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4703
			// Add the city to the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4704
			$value[] = $zone['city'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4705
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4706
			$display = $zone['t_city'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4707
			if ( !empty( $zone['subcity'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4708
				// Add the subcity to the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4709
				$value[] = $zone['subcity'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4710
				$display .= ' - ' . $zone['t_subcity'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4711
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4712
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4713
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4714
		// Build the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4715
		$value = join( '/', $value );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4716
		$selected = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4717
		if ( $value === $selected_zone ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4718
			$selected = 'selected="selected" ';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4719
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4720
		$structure[] = '<option ' . $selected . 'value="' . esc_attr( $value ) . '">' . esc_html( $display ) . "</option>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4721
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4722
		// Close continent optgroup
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4723
		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
  4724
			$structure[] = '</optgroup>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4725
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4726
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4727
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4728
	// Do UTC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4729
	$structure[] = '<optgroup label="'. esc_attr__( 'UTC' ) .'">';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4730
	$selected = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4731
	if ( 'UTC' === $selected_zone )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4732
		$selected = 'selected="selected" ';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4733
	$structure[] = '<option ' . $selected . 'value="' . esc_attr( 'UTC' ) . '">' . __('UTC') . '</option>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4734
	$structure[] = '</optgroup>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4735
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4736
	// Do manual UTC offsets
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4737
	$structure[] = '<optgroup label="'. esc_attr__( 'Manual Offsets' ) .'">';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4738
	$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
  4739
		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
  4740
	foreach ( $offset_range as $offset ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4741
		if ( 0 <= $offset )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4742
			$offset_name = '+' . $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4743
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4744
			$offset_name = (string) $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4746
		$offset_value = $offset_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4747
		$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
  4748
		$offset_name = 'UTC' . $offset_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4749
		$offset_value = 'UTC' . $offset_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4750
		$selected = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4751
		if ( $offset_value === $selected_zone )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4752
			$selected = 'selected="selected" ';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4753
		$structure[] = '<option ' . $selected . 'value="' . esc_attr( $offset_value ) . '">' . esc_html( $offset_name ) . "</option>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4754
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4755
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4756
	$structure[] = '</optgroup>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4757
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4758
	return join( "\n", $structure );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4759
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4760
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4761
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4762
 * Strip close comment and close php tags from file headers used by WP.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4763
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4764
 * @since 2.8.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4765
 * @access private
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4766
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4767
 * @see https://core.trac.wordpress.org/ticket/8497
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4768
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4769
 * @param string $str Header comment to clean up.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4770
 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4771
 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4772
function _cleanup_header_comment( $str ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4773
	return trim(preg_replace("/\s*(?:\*\/|\?>).*/", '', $str));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4774
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4775
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4776
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4777
 * Permanently delete comments or posts of any type that have held a status
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4778
 * of 'trash' for the number of days defined in EMPTY_TRASH_DAYS.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4779
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4780
 * The default value of `EMPTY_TRASH_DAYS` is 30 (days).
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4781
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4782
 * @since 2.9.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4783
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4784
 * @global wpdb $wpdb WordPress database abstraction object.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4785
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4786
function wp_scheduled_delete() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4787
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4788
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4789
	$delete_timestamp = time() - ( DAY_IN_SECONDS * EMPTY_TRASH_DAYS );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4790
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4791
	$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);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4792
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4793
	foreach ( (array) $posts_to_delete as $post ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4794
		$post_id = (int) $post['post_id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4795
		if ( !$post_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4796
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4797
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4798
		$del_post = get_post($post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4799
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4800
		if ( !$del_post || 'trash' != $del_post->post_status ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4801
			delete_post_meta($post_id, '_wp_trash_meta_status');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4802
			delete_post_meta($post_id, '_wp_trash_meta_time');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4803
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4804
			wp_delete_post($post_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4805
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4806
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4807
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4808
	$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);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4809
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4810
	foreach ( (array) $comments_to_delete as $comment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4811
		$comment_id = (int) $comment['comment_id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4812
		if ( !$comment_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4813
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4814
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4815
		$del_comment = get_comment($comment_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4816
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4817
		if ( !$del_comment || 'trash' != $del_comment->comment_approved ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4818
			delete_comment_meta($comment_id, '_wp_trash_meta_time');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4819
			delete_comment_meta($comment_id, '_wp_trash_meta_status');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4820
		} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4821
			wp_delete_comment( $del_comment );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4822
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4823
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4824
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4825
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4826
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4827
 * Retrieve metadata from a file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4828
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4829
 * 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
  4830
 * 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
  4831
 * lines, the value will get cut at the end of the first line.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4832
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4833
 * 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
  4834
 * their plugin file and move the data headers to the top.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4835
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4836
 * @link https://codex.wordpress.org/File_Header
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4837
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4838
 * @since 2.9.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4839
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4840
 * @param string $file            Path to the file.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4841
 * @param array  $default_headers List of headers, in the format array('HeaderKey' => 'Header Name').
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4842
 * @param string $context         Optional. If specified adds filter hook {@see 'extra_$context_headers'}.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4843
 *                                Default empty.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4844
 * @return array Array of file headers in `HeaderKey => Header Value` format.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4845
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4846
function get_file_data( $file, $default_headers, $context = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4847
	// 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
  4848
	$fp = fopen( $file, 'r' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4849
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4850
	// Pull only the first 8kiB of the file in.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4851
	$file_data = fread( $fp, 8192 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4852
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4853
	// PHP will close file handle, but we are good citizens.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4854
	fclose( $fp );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4855
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4856
	// Make sure we catch CR-only line endings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4857
	$file_data = str_replace( "\r", "\n", $file_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4858
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4859
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4860
	 * Filters extra file headers by context.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4861
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4862
	 * The dynamic portion of the hook name, `$context`, refers to
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4863
	 * the context where extra headers might be loaded.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4864
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4865
	 * @since 2.9.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4866
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4867
	 * @param array $extra_context_headers Empty array by default.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4868
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4869
	if ( $context && $extra_headers = apply_filters( "extra_{$context}_headers", array() ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4870
		$extra_headers = array_combine( $extra_headers, $extra_headers ); // keys equal values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4871
		$all_headers = array_merge( $extra_headers, (array) $default_headers );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4872
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4873
		$all_headers = $default_headers;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4874
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4875
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4876
	foreach ( $all_headers as $field => $regex ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4877
		if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $match[1] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4878
			$all_headers[ $field ] = _cleanup_header_comment( $match[1] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4879
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4880
			$all_headers[ $field ] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4881
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4883
	return $all_headers;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4884
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4885
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4886
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4887
 * Returns true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4888
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4889
 * Useful for returning true to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4890
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4891
 * @since 3.0.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4892
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4893
 * @see __return_false()
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4894
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4895
 * @return true True.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4896
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4897
function __return_true() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4898
	return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4899
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4900
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4901
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4902
 * Returns false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4903
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4904
 * Useful for returning false to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4905
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4906
 * @since 3.0.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4907
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4908
 * @see __return_true()
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4909
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4910
 * @return false False.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4911
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4912
function __return_false() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4913
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4914
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4915
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4916
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4917
 * Returns 0.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4918
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4919
 * Useful for returning 0 to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4920
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4921
 * @since 3.0.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4922
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4923
 * @return int 0.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4924
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4925
function __return_zero() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4926
	return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4927
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4928
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4929
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4930
 * Returns an empty array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4931
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4932
 * Useful for returning an empty array to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4933
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4934
 * @since 3.0.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4935
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4936
 * @return array Empty array.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4937
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4938
function __return_empty_array() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4939
	return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4940
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4941
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4942
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4943
 * Returns null.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4944
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4945
 * Useful for returning null to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4946
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4947
 * @since 3.4.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4948
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4949
 * @return null Null value.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4950
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4951
function __return_null() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4952
	return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4953
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4954
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4955
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4956
 * Returns an empty string.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4957
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4958
 * Useful for returning an empty string to filters easily.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4959
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4960
 * @since 3.7.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4961
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4962
 * @see __return_null()
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4963
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4964
 * @return string Empty string.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4965
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4966
function __return_empty_string() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4967
	return '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4968
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4969
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4970
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4971
 * 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
  4972
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4973
 * @since 3.0.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4974
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4975
 * @see https://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4976
 * @see https://src.chromium.org/viewvc/chrome?view=rev&revision=6985
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4977
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4978
function send_nosniff_header() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4979
	@header( 'X-Content-Type-Options: nosniff' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4980
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4981
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4982
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4983
 * Return a MySQL expression for selecting the week number based on the start_of_week option.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4984
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4985
 * @ignore
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4986
 * @since 3.0.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4987
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4988
 * @param string $column Database column.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4989
 * @return string SQL clause.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4990
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4991
function _wp_mysql_week( $column ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4992
	switch ( $start_of_week = (int) get_option( 'start_of_week' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4993
	case 1 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4994
		return "WEEK( $column, 1 )";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4995
	case 2 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4996
	case 3 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4997
	case 4 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4998
	case 5 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4999
	case 6 :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5000
		return "WEEK( DATE_SUB( $column, INTERVAL $start_of_week DAY ), 0 )";
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5001
	case 0 :
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5002
	default :
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5003
		return "WEEK( $column, 0 )";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5004
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5005
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5006
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5007
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5008
 * Find hierarchy loops using a callback function that maps object IDs to parent IDs.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5009
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5010
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5011
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5012
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5013
 * @param callable $callback      Function that accepts ( ID, $callback_args ) and outputs parent_ID.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5014
 * @param int      $start         The ID to start the loop check at.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5015
 * @param int      $start_parent  The parent_ID of $start to use instead of calling $callback( $start ).
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5016
 *                                Use null to always use $callback
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5017
 * @param array    $callback_args Optional. Additional arguments to send to $callback.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5018
 * @return array IDs of all members of loop.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5019
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5020
function wp_find_hierarchy_loop( $callback, $start, $start_parent, $callback_args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5021
	$override = is_null( $start_parent ) ? array() : array( $start => $start_parent );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5022
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5023
	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
  5024
		return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5025
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5026
	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
  5027
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5028
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5029
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5030
 * Use the "The Tortoise and the Hare" algorithm to detect loops.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5031
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5032
 * 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
  5033
 * If the hare ever laps the tortoise, there must be a loop.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5034
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5035
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5036
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5037
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5038
 * @param callable $callback      Function that accepts ( ID, callback_arg, ... ) and outputs parent_ID.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5039
 * @param int      $start         The ID to start the loop check at.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5040
 * @param array    $override      Optional. An array of ( ID => parent_ID, ... ) to use instead of $callback.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5041
 *                                Default empty array.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5042
 * @param array    $callback_args Optional. Additional arguments to send to $callback. Default empty array.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5043
 * @param bool     $_return_loop  Optional. Return loop members or just detect presence of loop? Only set
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5044
 *                                to true if you already know the given $start is part of a loop (otherwise
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5045
 *                                the returned array might include branches). Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5046
 * @return mixed Scalar ID of some arbitrary member of the loop, or array of IDs of all members of loop if
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5047
 *               $_return_loop
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5048
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5049
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
  5050
	$tortoise = $hare = $evanescent_hare = $start;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5051
	$return = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5052
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5053
	// Set evanescent_hare to one past hare
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5054
	// Increment hare two steps
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5055
	while (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5056
		$tortoise
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5057
	&&
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5058
		( $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
  5059
	&&
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5060
		( $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
  5061
	) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5062
		if ( $_return_loop )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5063
			$return[$tortoise] = $return[$evanescent_hare] = $return[$hare] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5064
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5065
		// tortoise got lapped - must be a loop
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5066
		if ( $tortoise == $evanescent_hare || $tortoise == $hare )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5067
			return $_return_loop ? $return : $tortoise;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5068
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5069
		// Increment tortoise by one step
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5070
		$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
  5071
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5072
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5073
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5074
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5075
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5076
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5077
 * Send a HTTP header to limit rendering of pages to same origin iframes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5078
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5079
 * @since 3.1.3
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5080
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5081
 * @see https://developer.mozilla.org/en/the_x-frame-options_response_header
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5082
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5083
function send_frame_options_header() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5084
	@header( 'X-Frame-Options: SAMEORIGIN' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5085
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5086
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5087
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5088
 * Retrieve a list of protocols to allow in HTML attributes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5089
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5090
 * @since 3.3.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5091
 * @since 4.3.0 Added 'webcal' to the protocols array.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5092
 * @since 4.7.0 Added 'urn' to the protocols array.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5093
 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5094
 * @see wp_kses()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5095
 * @see esc_url()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5096
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5097
 * @staticvar array $protocols
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5098
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5099
 * @return array Array of allowed protocols. Defaults to an array containing 'http', 'https',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5100
 *               'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5101
 *               'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp', 'webcal', and 'urn'.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5102
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5103
function wp_allowed_protocols() {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5104
	static $protocols = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5106
	if ( empty( $protocols ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5107
		$protocols = array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp', 'webcal', 'urn' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5108
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5109
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5110
	if ( ! did_action( 'wp_loaded' ) ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5111
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5112
		 * Filters the list of protocols allowed in HTML attributes.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5113
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5114
		 * @since 3.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5115
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5116
		 * @param array $protocols Array of allowed protocols e.g. 'http', 'ftp', 'tel', and more.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5117
		 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5118
		$protocols = array_unique( (array) apply_filters( 'kses_allowed_protocols', $protocols ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5119
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5121
	return $protocols;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5122
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5124
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5125
 * Return a comma-separated string of functions that have been called to get
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5126
 * to the current point in code.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5127
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5128
 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5129
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5130
 * @see https://core.trac.wordpress.org/ticket/19589
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5131
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5132
 * @param string $ignore_class Optional. A class to ignore all function calls within - useful
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5133
 *                             when you want to just give info about the callee. Default null.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5134
 * @param int    $skip_frames  Optional. A number of stack frames to skip - useful for unwinding
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5135
 *                             back to the source of the issue. Default 0.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5136
 * @param bool   $pretty       Optional. Whether or not you want a comma separated string or raw
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5137
 *                             array returned. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5138
 * @return string|array Either a string containing a reversed comma separated trace or an array
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5139
 *                      of individual calls.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5140
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5141
function wp_debug_backtrace_summary( $ignore_class = null, $skip_frames = 0, $pretty = true ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5142
	if ( version_compare( PHP_VERSION, '5.2.5', '>=' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5143
		$trace = debug_backtrace( false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5144
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5145
		$trace = debug_backtrace();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5147
	$caller = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5148
	$check_class = ! is_null( $ignore_class );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5149
	$skip_frames++; // skip this function
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5150
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5151
	foreach ( $trace as $call ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5152
		if ( $skip_frames > 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5153
			$skip_frames--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5154
		} elseif ( isset( $call['class'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5155
			if ( $check_class && $ignore_class == $call['class'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5156
				continue; // Filter out calls
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5157
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5158
			$caller[] = "{$call['class']}{$call['type']}{$call['function']}";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5159
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5160
			if ( in_array( $call['function'], array( 'do_action', 'apply_filters' ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5161
				$caller[] = "{$call['function']}('{$call['args'][0]}')";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5162
			} elseif ( in_array( $call['function'], array( 'include', 'include_once', 'require', 'require_once' ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5163
				$caller[] = $call['function'] . "('" . str_replace( array( WP_CONTENT_DIR, ABSPATH ) , '', $call['args'][0] ) . "')";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5164
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5165
				$caller[] = $call['function'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5166
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5167
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5168
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5169
	if ( $pretty )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5170
		return join( ', ', array_reverse( $caller ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5171
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5172
		return $caller;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5173
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5174
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5175
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5176
 * Retrieve ids that are not already present in the cache.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5177
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5178
 * @since 3.4.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5179
 * @access private
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5180
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5181
 * @param array  $object_ids ID list.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5182
 * @param string $cache_key  The cache bucket to check against.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5183
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5184
 * @return array List of ids not present in the cache.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5185
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5186
function _get_non_cached_ids( $object_ids, $cache_key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5187
	$clean = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5188
	foreach ( $object_ids as $id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5189
		$id = (int) $id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5190
		if ( !wp_cache_get( $id, $cache_key ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5191
			$clean[] = $id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5192
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5193
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5194
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5195
	return $clean;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5196
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5198
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5199
 * Test if the current device has the capability to upload files.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5200
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5201
 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5202
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5203
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5204
 * @return bool Whether the device is able to upload files.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5205
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5206
function _device_can_upload() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5207
	if ( ! wp_is_mobile() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5208
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5209
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5210
	$ua = $_SERVER['HTTP_USER_AGENT'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5211
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5212
	if ( strpos($ua, 'iPhone') !== false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5213
		|| strpos($ua, 'iPad') !== false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5214
		|| strpos($ua, 'iPod') !== false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5215
			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
  5216
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5217
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5218
	return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5219
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5220
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5221
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5222
 * Test if a given path is a stream URL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5223
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5224
 * @since 3.5.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5225
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5226
 * @param string $path The resource path or URL.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5227
 * @return bool True if the path is a stream URL.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5228
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5229
function wp_is_stream( $path ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5230
	if ( false === strpos( $path, '://' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5231
		// $path isn't a stream
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5232
		return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5233
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5234
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5235
	$wrappers    = stream_get_wrappers();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5236
	$wrappers    = array_map( 'preg_quote', $wrappers );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5237
	$wrappers_re = '(' . join( '|', $wrappers ) . ')';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5238
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5239
	return preg_match( "!^$wrappers_re://!", $path ) === 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5240
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5241
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5242
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5243
 * Test if the supplied date is valid for the Gregorian calendar.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5244
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5245
 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5246
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5247
 * @see checkdate()
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5248
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5249
 * @param  int    $month       Month number.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5250
 * @param  int    $day         Day number.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5251
 * @param  int    $year        Year number.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5252
 * @param  string $source_date The date to filter.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5253
 * @return bool True if valid date, false if not valid date.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5254
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5255
function wp_checkdate( $month, $day, $year, $source_date ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5256
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5257
	 * Filters whether the given date is valid for the Gregorian calendar.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5258
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5259
	 * @since 3.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5260
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5261
	 * @param bool   $checkdate   Whether the given date is valid.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5262
	 * @param string $source_date Date to check.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5263
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5264
	return apply_filters( 'wp_checkdate', checkdate( $month, $day, $year ), $source_date );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5265
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5266
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5267
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5268
 * Load the auth check for monitoring whether the user is still logged in.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5269
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5270
 * Can be disabled with remove_action( 'admin_enqueue_scripts', 'wp_auth_check_load' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5271
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5272
 * This is disabled for certain screens where a login screen could cause an
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5273
 * inconvenient interruption. A filter called {@see 'wp_auth_check_load'} can be used
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5274
 * for fine-grained control.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5275
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5276
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5277
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5278
function wp_auth_check_load() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5279
	if ( ! is_admin() && ! is_user_logged_in() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5280
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5281
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5282
	if ( defined( 'IFRAME_REQUEST' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5283
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5284
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5285
	$screen = get_current_screen();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5286
	$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
  5287
	$show = ! in_array( $screen->id, $hidden );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5288
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5289
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5290
	 * Filters whether to load the authentication check.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5291
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5292
	 * Passing a falsey value to the filter will effectively short-circuit
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5293
	 * loading the authentication check.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5294
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5295
	 * @since 3.6.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5296
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5297
	 * @param bool      $show   Whether to load the authentication check.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5298
	 * @param WP_Screen $screen The current screen object.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5299
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5300
	if ( apply_filters( 'wp_auth_check_load', $show, $screen ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5301
		wp_enqueue_style( 'wp-auth-check' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5302
		wp_enqueue_script( 'wp-auth-check' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5303
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5304
		add_action( 'admin_print_footer_scripts', 'wp_auth_check_html', 5 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5305
		add_action( 'wp_print_footer_scripts', 'wp_auth_check_html', 5 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5306
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5307
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5308
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5309
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5310
 * 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
  5311
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5312
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5313
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5314
function wp_auth_check_html() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5315
	$login_url = wp_login_url();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5316
	$current_domain = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5317
	$same_domain = ( strpos( $login_url, $current_domain ) === 0 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5318
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5319
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5320
	 * Filters whether the authentication check originated at the same domain.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5321
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5322
	 * @since 3.6.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5323
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5324
	 * @param bool $same_domain Whether the authentication check originated at the same domain.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5325
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5326
	$same_domain = apply_filters( 'wp_auth_check_same_domain', $same_domain );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5327
	$wrap_class = $same_domain ? 'hidden' : 'hidden fallback';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5328
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5329
	?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5330
	<div id="wp-auth-check-wrap" class="<?php echo $wrap_class; ?>">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5331
	<div id="wp-auth-check-bg"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5332
	<div id="wp-auth-check">
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5333
	<button type="button" class="wp-auth-check-close button-link"><span class="screen-reader-text"><?php _e( 'Close dialog' ); ?></span></button>
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5334
	<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5335
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5336
	if ( $same_domain ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5337
		$login_src = add_query_arg( array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5338
			'interim-login' => '1',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5339
			'wp_lang'       => get_user_locale(),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5340
		), $login_url );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5341
		?>
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5342
		<div id="wp-auth-check-form" class="loading" data-src="<?php echo esc_url( $login_src ); ?>"></div>
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5343
		<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5344
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5345
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5346
	?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5347
	<div class="wp-auth-fallback">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5348
		<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
  5349
		<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
  5350
		<?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
  5351
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5352
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5353
	</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5354
	<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5355
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5357
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5358
 * Check whether a user is still logged in, for the heartbeat.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5359
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5360
 * 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
  5361
 * or if their cookie is within the grace period.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5362
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5363
 * @since 3.6.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5364
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5365
 * @global int $login_grace_period
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5366
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5367
 * @param array $response  The Heartbeat response.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5368
 * @return array $response The Heartbeat response with 'wp-auth-check' value set.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5369
 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5370
function wp_auth_check( $response ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5371
	$response['wp-auth-check'] = is_user_logged_in() && empty( $GLOBALS['login_grace_period'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5372
	return $response;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5373
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5375
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5376
 * Return RegEx body to liberally match an opening HTML tag.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5377
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5378
 * Matches an opening HTML tag that:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5379
 * 1. Is self-closing or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5380
 * 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
  5381
 * 3. Contains a body and a closing tag of the same name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5382
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5383
 * Note: this RegEx does not balance inner tags and does not attempt
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5384
 * to produce valid HTML
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5385
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5386
 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5387
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5388
 * @param string $tag An HTML tag name. Example: 'video'.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5389
 * @return string Tag RegEx.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5390
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5391
function get_tag_regex( $tag ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5392
	if ( empty( $tag ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5393
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5394
	return sprintf( '<%1$s[^<]*(?:>[\s\S]*<\/%1$s>|\s*\/>)', tag_escape( $tag ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5395
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5396
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5397
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5398
 * Retrieve a canonical form of the provided charset appropriate for passing to PHP
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5399
 * functions such as htmlspecialchars() and charset html attributes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5400
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5401
 * @since 3.6.0
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5402
 * @access private
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5403
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5404
 * @see https://core.trac.wordpress.org/ticket/23688
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5405
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5406
 * @param string $charset A charset name.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5407
 * @return string The canonical form of the charset.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5408
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5409
function _canonical_charset( $charset ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5410
	if ( 'utf-8' === strtolower( $charset ) || 'utf8' === strtolower( $charset) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5411
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5412
		return 'UTF-8';
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5413
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5414
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5415
	if ( 'iso-8859-1' === strtolower( $charset ) || 'iso8859-1' === strtolower( $charset ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5416
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5417
		return 'ISO-8859-1';
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5418
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5419
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5420
	return $charset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5421
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5422
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5423
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5424
 * Set the mbstring internal encoding to a binary safe encoding when func_overload
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5425
 * is enabled.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5426
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5427
 * When mbstring.func_overload is in use for multi-byte encodings, the results from
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5428
 * strlen() and similar functions respect the utf8 characters, causing binary data
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5429
 * to return incorrect lengths.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5430
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5431
 * This function overrides the mbstring encoding to a binary-safe encoding, and
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5432
 * resets it to the users expected encoding afterwards through the
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5433
 * `reset_mbstring_encoding` function.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5434
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5435
 * It is safe to recursively call this function, however each
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5436
 * `mbstring_binary_safe_encoding()` call must be followed up with an equal number
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5437
 * of `reset_mbstring_encoding()` calls.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5438
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5439
 * @since 3.7.0
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5440
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5441
 * @see reset_mbstring_encoding()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5442
 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5443
 * @staticvar array $encodings
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5444
 * @staticvar bool  $overloaded
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5445
 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5446
 * @param bool $reset Optional. Whether to reset the encoding back to a previously-set encoding.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5447
 *                    Default false.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5448
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5449
function mbstring_binary_safe_encoding( $reset = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5450
	static $encodings = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5451
	static $overloaded = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5453
	if ( is_null( $overloaded ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5454
		$overloaded = function_exists( 'mb_internal_encoding' ) && ( ini_get( 'mbstring.func_overload' ) & 2 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5455
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5456
	if ( false === $overloaded )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5457
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5458
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5459
	if ( ! $reset ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5460
		$encoding = mb_internal_encoding();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5461
		array_push( $encodings, $encoding );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5462
		mb_internal_encoding( 'ISO-8859-1' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5463
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5464
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5465
	if ( $reset && $encodings ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5466
		$encoding = array_pop( $encodings );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5467
		mb_internal_encoding( $encoding );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5468
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5469
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5470
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5471
/**
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5472
 * Reset the mbstring internal encoding to a users previously set encoding.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5473
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5474
 * @see mbstring_binary_safe_encoding()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5475
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5476
 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5477
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5478
function reset_mbstring_encoding() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5479
	mbstring_binary_safe_encoding( true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5480
}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5481
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5482
/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5483
 * Filter/validate a variable as a boolean.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5484
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5485
 * Alternative to `filter_var( $var, FILTER_VALIDATE_BOOLEAN )`.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5486
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5487
 * @since 4.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5488
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5489
 * @param mixed $var Boolean value to validate.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5490
 * @return bool Whether the value is validated.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5491
 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5492
function wp_validate_boolean( $var ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5493
	if ( is_bool( $var ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5494
		return $var;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5495
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5496
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5497
	if ( is_string( $var ) && 'false' === strtolower( $var ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5498
		return false;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5499
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5500
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5501
	return (bool) $var;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5502
}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5503
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5504
/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5505
 * Delete a file
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5506
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5507
 * @since 4.2.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5508
 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5509
 * @param string $file The path to the file to delete.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5510
 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5511
function wp_delete_file( $file ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5512
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5513
	 * Filters the path of the file to delete.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5514
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5515
	 * @since 2.1.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5516
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5517
	 * @param string $file Path to the file to delete.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5518
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5519
	$delete = apply_filters( 'wp_delete_file', $file );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5520
	if ( ! empty( $delete ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5521
		@unlink( $delete );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5522
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5523
}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5524
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5525
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5526
 * Deletes a file if its path is within the given directory.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5527
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5528
 * @since 4.9.7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5529
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5530
 * @param string $file      Absolute path to the file to delete.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5531
 * @param string $directory Absolute path to a directory.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5532
 * @return bool True on success, false on failure.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5533
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5534
function wp_delete_file_from_directory( $file, $directory ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5535
	$real_file = realpath( wp_normalize_path( $file ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5536
	$real_directory = realpath( wp_normalize_path( $directory ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5537
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5538
	if ( false === $real_file || false === $real_directory || strpos( wp_normalize_path( $real_file ), trailingslashit( wp_normalize_path( $real_directory ) ) ) !== 0 ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5539
		return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5540
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5541
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5542
	wp_delete_file( $file );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5543
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5544
	return true;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5545
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5546
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5547
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5548
 * Outputs a small JS snippet on preview tabs/windows to remove `window.name` on unload.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5549
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5550
 * This prevents reusing the same tab for a preview when the user has navigated away.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5551
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5552
 * @since 4.3.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5553
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5554
 * @global WP_Post $post
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5555
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5556
function wp_post_preview_js() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5557
	global $post;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5558
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5559
	if ( ! is_preview() || empty( $post ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5560
		return;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5561
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5562
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5563
	// Has to match the window name used in post_submit_meta_box()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5564
	$name = 'wp-preview-' . (int) $post->ID;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5565
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5566
	?>
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5567
	<script>
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5568
	( function() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5569
		var query = document.location.search;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5570
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5571
		if ( query && query.indexOf( 'preview=true' ) !== -1 ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5572
			window.name = '<?php echo $name; ?>';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5573
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5574
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5575
		if ( window.addEventListener ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5576
			window.addEventListener( 'unload', function() { window.name = ''; }, false );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5577
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5578
	}());
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5579
	</script>
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5580
	<?php
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5581
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5582
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5583
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5584
 * Parses and formats a MySQL datetime (Y-m-d H:i:s) for ISO8601/RFC3339.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5585
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5586
 * Explicitly strips timezones, as datetimes are not saved with any timezone
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5587
 * information. Including any information on the offset could be misleading.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5588
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5589
 * @since 4.4.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5590
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5591
 * @param string $date_string Date string to parse and format.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5592
 * @return string Date formatted for ISO8601/RFC3339.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5593
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5594
function mysql_to_rfc3339( $date_string ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5595
	$formatted = mysql2date( 'c', $date_string, false );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5596
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5597
	// Strip timezone information
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5598
	return preg_replace( '/(?:Z|[+-]\d{2}(?::\d{2})?)$/', '', $formatted );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5599
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5600
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5601
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5602
 * Attempts to raise the PHP memory limit for memory intensive processes.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5603
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5604
 * Only allows raising the existing limit and prevents lowering it.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5605
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5606
 * @since 4.6.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5607
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5608
 * @param string $context Optional. Context in which the function is called. Accepts either 'admin',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5609
 *                        'image', or an arbitrary other context. If an arbitrary context is passed,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5610
 *                        the similarly arbitrary {@see '{$context}_memory_limit'} filter will be
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5611
 *                        invoked. Default 'admin'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5612
 * @return bool|int|string The limit that was set or false on failure.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5613
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5614
function wp_raise_memory_limit( $context = 'admin' ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5615
	// Exit early if the limit cannot be changed.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5616
	if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5617
		return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5618
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5619
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5620
	$current_limit     = @ini_get( 'memory_limit' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5621
	$current_limit_int = wp_convert_hr_to_bytes( $current_limit );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5622
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5623
	if ( -1 === $current_limit_int ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5624
		return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5625
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5626
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5627
	$wp_max_limit     = WP_MAX_MEMORY_LIMIT;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5628
	$wp_max_limit_int = wp_convert_hr_to_bytes( $wp_max_limit );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5629
	$filtered_limit   = $wp_max_limit;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5630
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5631
	switch ( $context ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5632
		case 'admin':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5633
			/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5634
			 * Filters the maximum memory limit available for administration screens.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5635
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5636
			 * This only applies to administrators, who may require more memory for tasks
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5637
			 * like updates. Memory limits when processing images (uploaded or edited by
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5638
			 * users of any role) are handled separately.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5639
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5640
			 * The `WP_MAX_MEMORY_LIMIT` constant specifically defines the maximum memory
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5641
			 * limit available when in the administration back end. The default is 256M
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5642
			 * (256 megabytes of memory) or the original `memory_limit` php.ini value if
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5643
			 * this is higher.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5644
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5645
			 * @since 3.0.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5646
			 * @since 4.6.0 The default now takes the original `memory_limit` into account.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5647
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5648
			 * @param int|string $filtered_limit The maximum WordPress memory limit. Accepts an integer
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5649
			 *                                   (bytes), or a shorthand string notation, such as '256M'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5650
			 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5651
			$filtered_limit = apply_filters( 'admin_memory_limit', $filtered_limit );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5652
			break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5653
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5654
		case 'image':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5655
			/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5656
			 * Filters the memory limit allocated for image manipulation.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5657
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5658
			 * @since 3.5.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5659
			 * @since 4.6.0 The default now takes the original `memory_limit` into account.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5660
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5661
			 * @param int|string $filtered_limit Maximum memory limit to allocate for images.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5662
			 *                                   Default `WP_MAX_MEMORY_LIMIT` or the original
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5663
			 *                                   php.ini `memory_limit`, whichever is higher.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5664
			 *                                   Accepts an integer (bytes), or a shorthand string
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5665
			 *                                   notation, such as '256M'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5666
			 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5667
			$filtered_limit = apply_filters( 'image_memory_limit', $filtered_limit );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5668
			break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5669
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5670
		default:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5671
			/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5672
			 * Filters the memory limit allocated for arbitrary contexts.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5673
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5674
			 * The dynamic portion of the hook name, `$context`, refers to an arbitrary
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5675
			 * context passed on calling the function. This allows for plugins to define
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5676
			 * their own contexts for raising the memory limit.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5677
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5678
			 * @since 4.6.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5679
			 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5680
			 * @param int|string $filtered_limit Maximum memory limit to allocate for images.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5681
			 *                                   Default '256M' or the original php.ini `memory_limit`,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5682
			 *                                   whichever is higher. Accepts an integer (bytes), or a
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5683
			 *                                   shorthand string notation, such as '256M'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5684
			 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5685
			$filtered_limit = apply_filters( "{$context}_memory_limit", $filtered_limit );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5686
			break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5687
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5688
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5689
	$filtered_limit_int = wp_convert_hr_to_bytes( $filtered_limit );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5690
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5691
	if ( -1 === $filtered_limit_int || ( $filtered_limit_int > $wp_max_limit_int && $filtered_limit_int > $current_limit_int ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5692
		if ( false !== @ini_set( 'memory_limit', $filtered_limit ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5693
			return $filtered_limit;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5694
		} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5695
			return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5696
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5697
	} elseif ( -1 === $wp_max_limit_int || $wp_max_limit_int > $current_limit_int ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5698
		if ( false !== @ini_set( 'memory_limit', $wp_max_limit ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5699
			return $wp_max_limit;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5700
		} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5701
			return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5702
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5703
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5704
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5705
	return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5706
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5707
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5708
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5709
 * Generate a random UUID (version 4).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5710
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5711
 * @since 4.7.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5712
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5713
 * @return string UUID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5714
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5715
function wp_generate_uuid4() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5716
	return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5717
		mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5718
		mt_rand( 0, 0xffff ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5719
		mt_rand( 0, 0x0fff ) | 0x4000,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5720
		mt_rand( 0, 0x3fff ) | 0x8000,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5721
		mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5722
	);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5723
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5724
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5725
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5726
 * Validates that a UUID is valid.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5727
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5728
 * @since 4.9.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5729
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5730
 * @param mixed $uuid    UUID to check.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5731
 * @param int   $version Specify which version of UUID to check against. Default is none, to accept any UUID version. Otherwise, only version allowed is `4`.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5732
 * @return bool The string is a valid UUID or false on failure.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5733
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5734
function wp_is_uuid( $uuid, $version = null ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5735
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5736
	if ( ! is_string( $uuid ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5737
		return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5738
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5739
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5740
	if ( is_numeric( $version ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5741
		if ( 4 !== (int) $version ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5742
			_doing_it_wrong( __FUNCTION__, __( 'Only UUID V4 is supported at this time.' ), '4.9.0' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5743
			return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5744
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5745
		$regex = '/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5746
	} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5747
		$regex = '/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5748
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5749
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5750
	return (bool) preg_match( $regex, $uuid );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5751
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5752
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5753
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5754
 * Get last changed date for the specified cache group.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5755
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5756
 * @since 4.7.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5757
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5758
 * @param string $group Where the cache contents are grouped.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5759
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5760
 * @return string $last_changed UNIX timestamp with microseconds representing when the group was last changed.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5761
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5762
function wp_cache_get_last_changed( $group ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5763
	$last_changed = wp_cache_get( 'last_changed', $group );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5764
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5765
	if ( ! $last_changed ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5766
		$last_changed = microtime();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5767
		wp_cache_set( 'last_changed', $last_changed, $group );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5768
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5769
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5770
	return $last_changed;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5771
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5772
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5773
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5774
 * Send an email to the old site admin email address when the site admin email address changes.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5775
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5776
 * @since 4.9.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5777
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5778
 * @param string $old_email   The old site admin email address.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5779
 * @param string $new_email   The new site admin email address.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5780
 * @param string $option_name The relevant database option name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5781
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5782
function wp_site_admin_email_change_notification( $old_email, $new_email, $option_name ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5783
	$send = true;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5784
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5785
	// Don't send the notification to the default 'admin_email' value.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5786
	if ( 'you@example.com' === $old_email ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5787
		$send = false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5788
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5789
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5790
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5791
	 * Filters whether to send the site admin email change notification email.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5792
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5793
	 * @since 4.9.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5794
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5795
	 * @param bool   $send      Whether to send the email notification.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5796
	 * @param string $old_email The old site admin email address.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5797
	 * @param string $new_email The new site admin email address.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5798
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5799
	$send = apply_filters( 'send_site_admin_email_change_email', $send, $old_email, $new_email );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5800
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5801
	if ( ! $send ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5802
		return;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5803
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5804
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5805
	/* translators: Do not translate OLD_EMAIL, NEW_EMAIL, SITENAME, SITEURL: those are placeholders. */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5806
	$email_change_text = __( 'Hi,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5807
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5808
This notice confirms that the admin email address was changed on ###SITENAME###.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5809
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5810
The new admin email address is ###NEW_EMAIL###.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5811
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5812
This email has been sent to ###OLD_EMAIL###
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5813
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5814
Regards,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5815
All at ###SITENAME###
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5816
###SITEURL###' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5817
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5818
	$email_change_email = array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5819
		'to'      => $old_email,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5820
		/* translators: Site admin email change notification email subject. %s: Site title */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5821
		'subject' => __( '[%s] Notice of Admin Email Change' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5822
		'message' => $email_change_text,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5823
		'headers' => '',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5824
	);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5825
	// get site name
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5826
	$site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5827
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5828
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5829
	 * Filters the contents of the email notification sent when the site admin email address is changed.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5830
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5831
	 * @since 4.9.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5832
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5833
	 * @param array $email_change_email {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5834
	 *            Used to build wp_mail().
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5835
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5836
	 *            @type string $to      The intended recipient.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5837
	 *            @type string $subject The subject of the email.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5838
	 *            @type string $message The content of the email.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5839
	 *                The following strings have a special meaning and will get replaced dynamically:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5840
	 *                - ###OLD_EMAIL### The old site admin email address.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5841
	 *                - ###NEW_EMAIL### The new site admin email address.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5842
	 *                - ###SITENAME###  The name of the site.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5843
	 *                - ###SITEURL###   The URL to the site.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5844
	 *            @type string $headers Headers.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5845
	 *        }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5846
	 * @param string $old_email The old site admin email address.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5847
	 * @param string $new_email The new site admin email address.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5848
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5849
	$email_change_email = apply_filters( 'site_admin_email_change_email', $email_change_email, $old_email, $new_email );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5850
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5851
	$email_change_email['message'] = str_replace( '###OLD_EMAIL###', $old_email, $email_change_email['message'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5852
	$email_change_email['message'] = str_replace( '###NEW_EMAIL###', $new_email, $email_change_email['message'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5853
	$email_change_email['message'] = str_replace( '###SITENAME###',  $site_name, $email_change_email['message'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5854
	$email_change_email['message'] = str_replace( '###SITEURL###',   home_url(), $email_change_email['message'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5855
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5856
	wp_mail( $email_change_email['to'], sprintf(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5857
		$email_change_email['subject'],
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5858
		$site_name
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5859
	), $email_change_email['message'], $email_change_email['headers'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5860
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5861
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5862
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5863
 * Return an anonymized IPv4 or IPv6 address.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5864
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5865
 * @since 4.9.6 Abstracted from `WP_Community_Events::get_unsafe_client_ip()`.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5866
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5867
 * @param  string $ip_addr        The IPv4 or IPv6 address to be anonymized.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5868
 * @param  bool   $ipv6_fallback  Optional. Whether to return the original IPv6 address if the needed functions
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5869
 *                                to anonymize it are not present. Default false, return `::` (unspecified address).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5870
 * @return string  The anonymized IP address.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5871
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5872
function wp_privacy_anonymize_ip( $ip_addr, $ipv6_fallback = false ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5873
	// Detect what kind of IP address this is.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5874
	$ip_prefix = '';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5875
	$is_ipv6   = substr_count( $ip_addr, ':' ) > 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5876
	$is_ipv4   = ( 3 === substr_count( $ip_addr, '.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5877
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5878
	if ( $is_ipv6 && $is_ipv4 ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5879
		// IPv6 compatibility mode, temporarily strip the IPv6 part, and treat it like IPv4.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5880
		$ip_prefix = '::ffff:';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5881
		$ip_addr   = preg_replace( '/^\[?[0-9a-f:]*:/i', '', $ip_addr );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5882
		$ip_addr   = str_replace( ']', '', $ip_addr );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5883
		$is_ipv6   = false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5884
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5885
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5886
	if ( $is_ipv6 ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5887
		// IPv6 addresses will always be enclosed in [] if there's a port.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5888
		$left_bracket  = strpos( $ip_addr, '[' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5889
		$right_bracket = strpos( $ip_addr, ']' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5890
		$percent       = strpos( $ip_addr, '%' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5891
		$netmask       = 'ffff:ffff:ffff:ffff:0000:0000:0000:0000';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5892
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5893
		// Strip the port (and [] from IPv6 addresses), if they exist.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5894
		if ( false !== $left_bracket && false !== $right_bracket ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5895
			$ip_addr = substr( $ip_addr, $left_bracket + 1, $right_bracket - $left_bracket - 1 );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5896
		} elseif ( false !== $left_bracket || false !== $right_bracket ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5897
			// The IP has one bracket, but not both, so it's malformed.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5898
			return '::';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5899
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5900
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5901
		// Strip the reachability scope.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5902
		if ( false !== $percent ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5903
			$ip_addr = substr( $ip_addr, 0, $percent );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5904
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5905
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5906
		// No invalid characters should be left.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5907
		if ( preg_match( '/[^0-9a-f:]/i', $ip_addr ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5908
			return '::';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5909
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5910
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5911
		// Partially anonymize the IP by reducing it to the corresponding network ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5912
		if ( function_exists( 'inet_pton' ) && function_exists( 'inet_ntop' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5913
			$ip_addr = inet_ntop( inet_pton( $ip_addr ) & inet_pton( $netmask ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5914
			if ( false === $ip_addr) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5915
				return '::';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5916
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5917
		} elseif ( ! $ipv6_fallback ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5918
			return '::';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5919
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5920
	} elseif ( $is_ipv4 ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5921
		// Strip any port and partially anonymize the IP.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5922
		$last_octet_position = strrpos( $ip_addr, '.' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5923
		$ip_addr             = substr( $ip_addr, 0, $last_octet_position ) . '.0';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5924
	} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5925
		return '0.0.0.0';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5926
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5927
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5928
	// Restore the IPv6 prefix to compatibility mode addresses.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5929
	return $ip_prefix . $ip_addr;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5930
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5931
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5932
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5933
 * Return uniform "anonymous" data by type.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5934
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5935
 * @since 4.9.6
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5936
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5937
 * @param  string $type The type of data to be anonymized.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5938
 * @param  string $data Optional The data to be anonymized.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5939
 * @return string The anonymous data for the requested type.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5940
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5941
function wp_privacy_anonymize_data( $type, $data = '' ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5942
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5943
	switch ( $type ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5944
		case 'email':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5945
			$anonymous = 'deleted@site.invalid';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5946
			break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5947
		case 'url':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5948
			$anonymous = 'https://site.invalid';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5949
			break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5950
		case 'ip':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5951
			$anonymous = wp_privacy_anonymize_ip( $data );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5952
			break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5953
		case 'date':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5954
			$anonymous = '0000-00-00 00:00:00';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5955
			break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5956
		case 'text':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5957
			/* translators: deleted text */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5958
			$anonymous = __( '[deleted]' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5959
			break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5960
		case 'longtext':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5961
			/* translators: deleted long text */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5962
			$anonymous = __( 'This content was deleted by the author.' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5963
			break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5964
		default:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5965
			$anonymous = '';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5966
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5967
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5968
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5969
	 * Filters the anonymous data for each type.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5970
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5971
	 * @since 4.9.6
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5972
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5973
	 * @param string $anonymous Anonymized data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5974
	 * @param string $type      Type of the data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5975
	 * @param string $data      Original data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5976
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5977
	return apply_filters( 'wp_privacy_anonymize_data', $anonymous, $type, $data );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5978
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5979
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5980
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5981
 * Returns the directory used to store personal data export files.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5982
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5983
 * @since 4.9.6
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5984
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5985
 * @see wp_privacy_exports_url
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5986
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5987
 * @return string Exports directory.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5988
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5989
function wp_privacy_exports_dir() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5990
	$upload_dir  = wp_upload_dir();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5991
	$exports_dir = trailingslashit( $upload_dir['basedir'] ) . 'wp-personal-data-exports/';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5992
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5993
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5994
	 * Filters the directory used to store personal data export files.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5995
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5996
	 * @since 4.9.6
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5997
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5998
	 * @param string $exports_dir Exports directory.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5999
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6000
	return apply_filters( 'wp_privacy_exports_dir', $exports_dir );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6001
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6002
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6003
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6004
 * Returns the URL of the directory used to store personal data export files.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6005
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6006
 * @since 4.9.6
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6007
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6008
 * @see wp_privacy_exports_dir
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6009
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6010
 * @return string Exports directory URL.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6011
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6012
function wp_privacy_exports_url() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6013
	$upload_dir  = wp_upload_dir();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6014
	$exports_url = trailingslashit( $upload_dir['baseurl'] ) . 'wp-personal-data-exports/';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6015
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6016
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6017
	 * Filters the URL of the directory used to store personal data export files.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6018
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6019
	 * @since 4.9.6
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6020
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6021
	 * @param string $exports_url Exports directory URL.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6022
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6023
	return apply_filters( 'wp_privacy_exports_url', $exports_url );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6024
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6025
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6026
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6027
 * Schedule a `WP_Cron` job to delete expired export files.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6028
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6029
 * @since 4.9.6
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6030
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6031
function wp_schedule_delete_old_privacy_export_files() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6032
	if ( wp_installing() ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6033
		return;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6034
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6035
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6036
	if ( ! wp_next_scheduled( 'wp_privacy_delete_old_export_files' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6037
		wp_schedule_event( time(), 'hourly', 'wp_privacy_delete_old_export_files' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6038
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6039
}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6040
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6041
/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6042
 * Cleans up export files older than three days old.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6043
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6044
 * The export files are stored in `wp-content/uploads`, and are therefore publicly
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6045
 * accessible. A CSPRN is appended to the filename to mitigate the risk of an
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6046
 * unauthorized person downloading the file, but it is still possible. Deleting
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6047
 * the file after the data subject has had a chance to delete it adds an additional
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6048
 * layer of protection.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6049
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6050
 * @since 4.9.6
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6051
 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6052
function wp_privacy_delete_old_export_files() {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6053
	require_once( ABSPATH . 'wp-admin/includes/file.php' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6054
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6055
	$exports_dir  = wp_privacy_exports_dir();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6056
	$export_files = list_files( $exports_dir, 100, array( 'index.html' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6057
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6058
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6059
	 * Filters the lifetime, in seconds, of a personal data export file.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6060
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6061
	 * By default, the lifetime is 3 days. Once the file reaches that age, it will automatically
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6062
	 * be deleted by a cron job.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6063
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6064
	 * @since 4.9.6
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6065
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6066
	 * @param int $expiration The expiration age of the export, in seconds.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6067
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6068
	$expiration = apply_filters( 'wp_privacy_export_expiration', 3 * DAY_IN_SECONDS );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6069
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6070
	foreach ( (array) $export_files as $export_file ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6071
		$file_age_in_seconds = time() - filemtime( $export_file );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6072
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6073
		if ( $expiration < $file_age_in_seconds ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6074
			unlink( $export_file );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6075
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6076
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6077
}