Make WordPress Core


Ignore:
Timestamp:
11/30/2017 11:09:33 PM (7 years ago)
Author:
pento
Message:

Code is Poetry.
WordPress' code just... wasn't.
This is now dealt with.

Props jrf, pento, netweb, GaryJ, jdgrimes, westonruter, Greg Sherwood from PHPCS, and everyone who's ever contributed to WPCS and PHPCS.
Fixes #41057.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp.php

    r42228 r42343  
    1515     * @var array
    1616     */
    17     public $public_query_vars = array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type', 'embed' );
     17    public $public_query_vars = array( 'm', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type', 'embed' );
    1818
    1919    /**
     
    9090     * @param string $qv Query variable name.
    9191     */
    92     public function add_query_var($qv) {
    93         if ( !in_array($qv, $this->public_query_vars) )
     92    public function add_query_var( $qv ) {
     93        if ( ! in_array( $qv, $this->public_query_vars ) ) {
    9494            $this->public_query_vars[] = $qv;
     95        }
    9596    }
    9697
     
    114115     * @param mixed $value Query variable value.
    115116     */
    116     public function set_query_var($key, $value) {
    117         $this->query_vars[$key] = $value;
     117    public function set_query_var( $key, $value ) {
     118        $this->query_vars[ $key ] = $value;
    118119    }
    119120
     
    130131     * @param array|string $extra_query_vars Set the extra query variables.
    131132     */
    132     public function parse_request($extra_query_vars = '') {
     133    public function parse_request( $extra_query_vars = '' ) {
    133134        global $wp_rewrite;
    134135
     
    142143         * @param array|string $extra_query_vars Extra passed query variables.
    143144         */
    144         if ( ! apply_filters( 'do_parse_request', true, $this, $extra_query_vars ) )
     145        if ( ! apply_filters( 'do_parse_request', true, $this, $extra_query_vars ) ) {
    145146            return;
    146 
    147         $this->query_vars = array();
     147        }
     148
     149        $this->query_vars     = array();
    148150        $post_type_query_vars = array();
    149151
     
    158160        $rewrite = $wp_rewrite->wp_rewrite_rules();
    159161
    160         if ( ! empty($rewrite) ) {
     162        if ( ! empty( $rewrite ) ) {
    161163            // If we match a rewrite rule, this will be cleared.
    162             $error = '404';
     164            $error               = '404';
    163165            $this->did_permalink = true;
    164166
    165             $pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : '';
     167            $pathinfo         = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : '';
    166168            list( $pathinfo ) = explode( '?', $pathinfo );
    167             $pathinfo = str_replace( "%", "%25", $pathinfo );
     169            $pathinfo         = str_replace( '%', '%25', $pathinfo );
    168170
    169171            list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
    170             $self = $_SERVER['PHP_SELF'];
    171             $home_path = trim( parse_url( home_url(), PHP_URL_PATH ), '/' );
     172            $self            = $_SERVER['PHP_SELF'];
     173            $home_path       = trim( parse_url( home_url(), PHP_URL_PATH ), '/' );
    172174            $home_path_regex = sprintf( '|^%s|i', preg_quote( $home_path, '|' ) );
    173175
     
    176178            // filename, if any. For 404 requests, this leaves us with the
    177179            // requested permalink.
    178             $req_uri = str_replace($pathinfo, '', $req_uri);
    179             $req_uri = trim($req_uri, '/');
    180             $req_uri = preg_replace( $home_path_regex, '', $req_uri );
    181             $req_uri = trim($req_uri, '/');
    182             $pathinfo = trim($pathinfo, '/');
     180            $req_uri  = str_replace( $pathinfo, '', $req_uri );
     181            $req_uri  = trim( $req_uri, '/' );
     182            $req_uri  = preg_replace( $home_path_regex, '', $req_uri );
     183            $req_uri  = trim( $req_uri, '/' );
     184            $pathinfo = trim( $pathinfo, '/' );
    183185            $pathinfo = preg_replace( $home_path_regex, '', $pathinfo );
    184             $pathinfo = trim($pathinfo, '/');
    185             $self = trim($self, '/');
    186             $self = preg_replace( $home_path_regex, '', $self );
    187             $self = trim($self, '/');
     186            $pathinfo = trim( $pathinfo, '/' );
     187            $self     = trim( $self, '/' );
     188            $self     = preg_replace( $home_path_regex, '', $self );
     189            $self     = trim( $self, '/' );
    188190
    189191            // The requested permalink is in $pathinfo for path info requests and
    190192            //  $req_uri for other requests.
    191             if ( ! empty($pathinfo) && !preg_match('|^.*' . $wp_rewrite->index . '$|', $pathinfo) ) {
     193            if ( ! empty( $pathinfo ) && ! preg_match( '|^.*' . $wp_rewrite->index . '$|', $pathinfo ) ) {
    192194                $requested_path = $pathinfo;
    193195            } else {
    194196                // If the request uri is the index, blank it out so that we don't try to match it against a rule.
    195                 if ( $req_uri == $wp_rewrite->index )
     197                if ( $req_uri == $wp_rewrite->index ) {
    196198                    $req_uri = '';
     199                }
    197200                $requested_path = $req_uri;
    198201            }
     
    207210                if ( isset( $rewrite['$'] ) ) {
    208211                    $this->matched_rule = '$';
    209                     $query = $rewrite['$'];
    210                     $matches = array('');
     212                    $query              = $rewrite['$'];
     213                    $matches            = array( '' );
    211214                }
    212215            } else {
    213216                foreach ( (array) $rewrite as $match => $query ) {
    214217                    // If the requested file is the anchor of the match, prepend it to the path info.
    215                     if ( ! empty($requested_file) && strpos($match, $requested_file) === 0 && $requested_file != $requested_path )
     218                    if ( ! empty( $requested_file ) && strpos( $match, $requested_file ) === 0 && $requested_file != $requested_path ) {
    216219                        $request_match = $requested_file . '/' . $requested_path;
    217 
    218                     if ( preg_match("#^$match#", $request_match, $matches) ||
    219                         preg_match("#^$match#", urldecode($request_match), $matches) ) {
     220                    }
     221
     222                    if ( preg_match( "#^$match#", $request_match, $matches ) ||
     223                        preg_match( "#^$match#", urldecode( $request_match ), $matches ) ) {
    220224
    221225                        if ( $wp_rewrite->use_verbose_page_rules && preg_match( '/pagename=\$matches\[([0-9]+)\]/', $query, $varmatch ) ) {
     
    223227                            $page = get_page_by_path( $matches[ $varmatch[1] ] );
    224228                            if ( ! $page ) {
    225                                 continue;
     229                                continue;
    226230                            }
    227231
     
    242246            if ( isset( $this->matched_rule ) ) {
    243247                // Trim the query of everything up to the '?'.
    244                 $query = preg_replace("!^.+\?!", '', $query);
     248                $query = preg_replace( '!^.+\?!', '', $query );
    245249
    246250                // Substitute the substring matches into the query.
    247                 $query = addslashes(WP_MatchesMapRegex::apply($query, $matches));
     251                $query = addslashes( WP_MatchesMapRegex::apply( $query, $matches ) );
    248252
    249253                $this->matched_query = $query;
    250254
    251255                // Parse the query.
    252                 parse_str($query, $perma_query_vars);
     256                parse_str( $query, $perma_query_vars );
    253257
    254258                // If we're processing a 404 request, clear the error var since we found something.
    255                 if ( '404' == $error )
     259                if ( '404' == $error ) {
    256260                    unset( $error, $_GET['error'] );
     261                }
    257262            }
    258263
    259264            // If req_uri is empty or if it is a request for ourself, unset error.
    260             if ( empty($requested_path) || $requested_file == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) {
     265            if ( empty( $requested_path ) || $requested_file == $self || strpos( $_SERVER['PHP_SELF'], 'wp-admin/' ) !== false ) {
    261266                unset( $error, $_GET['error'] );
    262267
    263                 if ( isset($perma_query_vars) && strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false )
     268                if ( isset( $perma_query_vars ) && strpos( $_SERVER['PHP_SELF'], 'wp-admin/' ) !== false ) {
    264269                    unset( $perma_query_vars );
     270                }
    265271
    266272                $this->did_permalink = false;
     
    283289        foreach ( get_post_types( array(), 'objects' ) as $post_type => $t ) {
    284290            if ( is_post_type_viewable( $t ) && $t->query_var ) {
    285                 $post_type_query_vars[$t->query_var] = $post_type;
     291                $post_type_query_vars[ $t->query_var ] = $post_type;
    286292            }
    287293        }
    288294
    289295        foreach ( $this->public_query_vars as $wpvar ) {
    290             if ( isset( $this->extra_query_vars[$wpvar] ) )
    291                 $this->query_vars[$wpvar] = $this->extra_query_vars[$wpvar];
    292             elseif ( isset( $_POST[$wpvar] ) )
    293                 $this->query_vars[$wpvar] = $_POST[$wpvar];
    294             elseif ( isset( $_GET[$wpvar] ) )
    295                 $this->query_vars[$wpvar] = $_GET[$wpvar];
    296             elseif ( isset( $perma_query_vars[$wpvar] ) )
    297                 $this->query_vars[$wpvar] = $perma_query_vars[$wpvar];
    298 
    299             if ( !empty( $this->query_vars[$wpvar] ) ) {
    300                 if ( ! is_array( $this->query_vars[$wpvar] ) ) {
    301                     $this->query_vars[$wpvar] = (string) $this->query_vars[$wpvar];
     296            if ( isset( $this->extra_query_vars[ $wpvar ] ) ) {
     297                $this->query_vars[ $wpvar ] = $this->extra_query_vars[ $wpvar ];
     298            } elseif ( isset( $_POST[ $wpvar ] ) ) {
     299                $this->query_vars[ $wpvar ] = $_POST[ $wpvar ];
     300            } elseif ( isset( $_GET[ $wpvar ] ) ) {
     301                $this->query_vars[ $wpvar ] = $_GET[ $wpvar ];
     302            } elseif ( isset( $perma_query_vars[ $wpvar ] ) ) {
     303                $this->query_vars[ $wpvar ] = $perma_query_vars[ $wpvar ];
     304            }
     305
     306            if ( ! empty( $this->query_vars[ $wpvar ] ) ) {
     307                if ( ! is_array( $this->query_vars[ $wpvar ] ) ) {
     308                    $this->query_vars[ $wpvar ] = (string) $this->query_vars[ $wpvar ];
    302309                } else {
    303                     foreach ( $this->query_vars[$wpvar] as $vkey => $v ) {
    304                         if ( !is_object( $v ) ) {
    305                             $this->query_vars[$wpvar][$vkey] = (string) $v;
     310                    foreach ( $this->query_vars[ $wpvar ] as $vkey => $v ) {
     311                        if ( ! is_object( $v ) ) {
     312                            $this->query_vars[ $wpvar ][ $vkey ] = (string) $v;
    306313                        }
    307314                    }
    308315                }
    309316
    310                 if ( isset($post_type_query_vars[$wpvar] ) ) {
    311                     $this->query_vars['post_type'] = $post_type_query_vars[$wpvar];
    312                     $this->query_vars['name'] = $this->query_vars[$wpvar];
     317                if ( isset( $post_type_query_vars[ $wpvar ] ) ) {
     318                    $this->query_vars['post_type'] = $post_type_query_vars[ $wpvar ];
     319                    $this->query_vars['name']      = $this->query_vars[ $wpvar ];
    313320                }
    314321            }
     
    316323
    317324        // Convert urldecoded spaces back into +
    318         foreach ( get_taxonomies( array() , 'objects' ) as $taxonomy => $t )
    319             if ( $t->query_var && isset( $this->query_vars[$t->query_var] ) )
    320                 $this->query_vars[$t->query_var] = str_replace( ' ', '+', $this->query_vars[$t->query_var] );
     325        foreach ( get_taxonomies( array(), 'objects' ) as $taxonomy => $t ) {
     326            if ( $t->query_var && isset( $this->query_vars[ $t->query_var ] ) ) {
     327                $this->query_vars[ $t->query_var ] = str_replace( ' ', '+', $this->query_vars[ $t->query_var ] );
     328            }
     329        }
    321330
    322331        // Don't allow non-publicly queryable taxonomies to be queried from the front end.
     
    334343
    335344        // Limit publicly queried post_types to those that are publicly_queryable
    336         if ( isset( $this->query_vars['post_type']) ) {
    337             $queryable_post_types = get_post_types( array('publicly_queryable' => true) );
     345        if ( isset( $this->query_vars['post_type'] ) ) {
     346            $queryable_post_types = get_post_types( array( 'publicly_queryable' => true ) );
    338347            if ( ! is_array( $this->query_vars['post_type'] ) ) {
    339                 if ( ! in_array( $this->query_vars['post_type'], $queryable_post_types ) )
     348                if ( ! in_array( $this->query_vars['post_type'], $queryable_post_types ) ) {
    340349                    unset( $this->query_vars['post_type'] );
     350                }
    341351            } else {
    342352                $this->query_vars['post_type'] = array_intersect( $this->query_vars['post_type'], $queryable_post_types );
     
    347357        $this->query_vars = wp_resolve_numeric_slug_conflicts( $this->query_vars );
    348358
    349         foreach ( (array) $this->private_query_vars as $var) {
    350             if ( isset($this->extra_query_vars[$var]) )
    351                 $this->query_vars[$var] = $this->extra_query_vars[$var];
    352         }
    353 
    354         if ( isset($error) )
     359        foreach ( (array) $this->private_query_vars as $var ) {
     360            if ( isset( $this->extra_query_vars[ $var ] ) ) {
     361                $this->query_vars[ $var ] = $this->extra_query_vars[ $var ];
     362            }
     363        }
     364
     365        if ( isset( $error ) ) {
    355366            $this->query_vars['error'] = $error;
     367        }
    356368
    357369        /**
     
    384396     */
    385397    public function send_headers() {
    386         $headers = array();
    387         $status = null;
     398        $headers       = array();
     399        $status        = null;
    388400        $exit_required = false;
    389401
    390         if ( is_user_logged_in() )
    391             $headers = array_merge($headers, wp_get_nocache_headers());
     402        if ( is_user_logged_in() ) {
     403            $headers = array_merge( $headers, wp_get_nocache_headers() );
     404        }
    392405        if ( ! empty( $this->query_vars['error'] ) ) {
    393406            $status = (int) $this->query_vars['error'];
    394407            if ( 404 === $status ) {
    395                 if ( ! is_user_logged_in() )
    396                     $headers = array_merge($headers, wp_get_nocache_headers());
    397                 $headers['Content-Type'] = get_option('html_type') . '; charset=' . get_option('blog_charset');
     408                if ( ! is_user_logged_in() ) {
     409                    $headers = array_merge( $headers, wp_get_nocache_headers() );
     410                }
     411                $headers['Content-Type'] = get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' );
    398412            } elseif ( in_array( $status, array( 403, 500, 502, 503 ) ) ) {
    399413                $exit_required = true;
    400414            }
    401415        } elseif ( empty( $this->query_vars['feed'] ) ) {
    402             $headers['Content-Type'] = get_option('html_type') . '; charset=' . get_option('blog_charset');
     416            $headers['Content-Type'] = get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' );
    403417        } else {
    404418            // Set the correct content type for feeds
     
    433447            $wp_last_modified .= ' GMT';
    434448
    435             $wp_etag = '"' . md5($wp_last_modified) . '"';
     449            $wp_etag                  = '"' . md5( $wp_last_modified ) . '"';
    436450            $headers['Last-Modified'] = $wp_last_modified;
    437             $headers['ETag'] = $wp_etag;
     451            $headers['ETag']          = $wp_etag;
    438452
    439453            // Support for Conditional GET
    440             if (isset($_SERVER['HTTP_IF_NONE_MATCH']))
     454            if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) ) {
    441455                $client_etag = wp_unslash( $_SERVER['HTTP_IF_NONE_MATCH'] );
    442             else $client_etag = false;
    443 
    444             $client_last_modified = empty($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? '' : trim($_SERVER['HTTP_IF_MODIFIED_SINCE']);
     456            } else {
     457                $client_etag = false;
     458            }
     459
     460            $client_last_modified = empty( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ? '' : trim( $_SERVER['HTTP_IF_MODIFIED_SINCE'] );
    445461            // If string is empty, return 0. If not, attempt to parse into a timestamp
    446             $client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0;
     462            $client_modified_timestamp = $client_last_modified ? strtotime( $client_last_modified ) : 0;
    447463
    448464            // Make a timestamp for our most recent modification...
    449             $wp_modified_timestamp = strtotime($wp_last_modified);
    450 
    451             if ( ($client_last_modified && $client_etag) ?
    452                     (($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) :
    453                     (($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) {
    454                 $status = 304;
     465            $wp_modified_timestamp = strtotime( $wp_last_modified );
     466
     467            if ( ( $client_last_modified && $client_etag ) ?
     468                    ( ( $client_modified_timestamp >= $wp_modified_timestamp ) && ( $client_etag == $wp_etag ) ) :
     469                    ( ( $client_modified_timestamp >= $wp_modified_timestamp ) || ( $client_etag == $wp_etag ) ) ) {
     470                $status        = 304;
    455471                $exit_required = true;
    456472            }
     
    467483        $headers = apply_filters( 'wp_headers', $headers, $this );
    468484
    469         if ( ! empty( $status ) )
     485        if ( ! empty( $status ) ) {
    470486            status_header( $status );
     487        }
    471488
    472489        // If Last-Modified is set to false, it should not be sent (no-cache situation).
     
    489506        }
    490507
    491         foreach ( (array) $headers as $name => $field_value )
    492             @header("{$name}: {$field_value}");
    493 
    494         if ( $exit_required )
     508        foreach ( (array) $headers as $name => $field_value ) {
     509            @header( "{$name}: {$field_value}" );
     510        }
     511
     512        if ( $exit_required ) {
    495513            exit();
     514        }
    496515
    497516        /**
     
    515534    public function build_query_string() {
    516535        $this->query_string = '';
    517         foreach ( (array) array_keys($this->query_vars) as $wpvar) {
    518             if ( '' != $this->query_vars[$wpvar] ) {
    519                 $this->query_string .= (strlen($this->query_string) < 1) ? '' : '&';
    520                 if ( !is_scalar($this->query_vars[$wpvar]) ) // Discard non-scalars.
     536        foreach ( (array) array_keys( $this->query_vars ) as $wpvar ) {
     537            if ( '' != $this->query_vars[ $wpvar ] ) {
     538                $this->query_string .= ( strlen( $this->query_string ) < 1 ) ? '' : '&';
     539                if ( ! is_scalar( $this->query_vars[ $wpvar ] ) ) { // Discard non-scalars.
    521540                    continue;
    522                 $this->query_string .= $wpvar . '=' . rawurlencode($this->query_vars[$wpvar]);
     541                }
     542                $this->query_string .= $wpvar . '=' . rawurlencode( $this->query_vars[ $wpvar ] );
    523543            }
    524544        }
     
    534554             */
    535555            $this->query_string = apply_filters( 'query_string', $this->query_string );
    536             parse_str($this->query_string, $this->query_vars);
     556            parse_str( $this->query_string, $this->query_vars );
    537557        }
    538558    }
     
    565585
    566586        $GLOBALS['query_string'] = $this->query_string;
    567         $GLOBALS['posts'] = & $wp_query->posts;
    568         $GLOBALS['post'] = isset( $wp_query->post ) ? $wp_query->post : null;
    569         $GLOBALS['request'] = $wp_query->request;
     587        $GLOBALS['posts']        = & $wp_query->posts;
     588        $GLOBALS['post']         = isset( $wp_query->post ) ? $wp_query->post : null;
     589        $GLOBALS['request']      = $wp_query->request;
    570590
    571591        if ( $wp_query->is_single() || $wp_query->is_page() ) {
     
    574594        }
    575595
    576         if ( $wp_query->is_author() && isset( $wp_query->post ) )
     596        if ( $wp_query->is_author() && isset( $wp_query->post ) ) {
    577597            $GLOBALS['authordata'] = get_userdata( $wp_query->post->post_author );
     598        }
    578599    }
    579600
     
    597618        global $wp_the_query;
    598619        $this->build_query_string();
    599         $wp_the_query->query($this->query_vars);
    600     }
    601 
    602     /**
     620        $wp_the_query->query( $this->query_vars );
     621    }
     622
     623    /**
    603624     * Set the Headers for 404, if nothing is found for requested URL.
    604625     *
     
    614635     *
    615636     * @since 2.0.0
    616     *
     637    *
    617638     * @global WP_Query $wp_query
    618      */
     639     */
    619640    public function handle_404() {
    620641        global $wp_query;
     
    636657
    637658        // If we've already issued a 404, bail.
    638         if ( is_404() )
     659        if ( is_404() ) {
    639660            return;
     661        }
    640662
    641663        // Never 404 for the admin, robots, or if we found posts.
     
    658680                $next = '<!--nextpage-->';
    659681                if ( $p && false !== strpos( $p->post_content, $next ) && ! empty( $this->query_vars['page'] ) ) {
    660                     $page = trim( $this->query_vars['page'], '/' );
     682                    $page    = trim( $this->query_vars['page'], '/' );
    661683                    $success = (int) $page <= ( substr_count( $p->post_content, $next ) + 1 );
    662684                }
     
    709731     * @param string|array $query_args Passed to parse_request().
    710732     */
    711     public function main($query_args = '') {
     733    public function main( $query_args = '' ) {
    712734        $this->init();
    713         $this->parse_request($query_args);
     735        $this->parse_request( $query_args );
    714736        $this->send_headers();
    715737        $this->query_posts();
Note: See TracChangeset for help on using the changeset viewer.