WordPress.org

Make WordPress Core

Ticket #19796: 19796-hack-day.9.diff

File 19796-hack-day.9.diff, 17.7 KB (added by markjaquith, 6 years ago)
  • wp-signup.php

     
    394394                $proto = 'https://';
    395395        else
    396396                $proto = 'http://';
    397         $login_url = site_url( 'wp-login.php?redirect_to=' . urlencode($proto . $_SERVER['HTTP_HOST'] . '/wp-signup.php' ));
     397        $login_url = site_url( 'wp-login.php?redirect_to=' . urlencode( network_site_url( 'wp-signup.php' ) ) );
    398398        echo sprintf( __( 'You must first <a href="%s">log in</a>, and then you can create a new site.' ), $login_url );
    399399} else {
    400400        $stage = isset( $_POST['stage'] ) ?  $_POST['stage'] : 'default';
  • wp-login.php

     
    509509case 'register' :
    510510        if ( is_multisite() ) {
    511511                // Multisite uses wp-signup.php
    512                 wp_redirect( apply_filters( 'wp_signup_location', site_url('wp-signup.php') ) );
     512                wp_redirect( apply_filters( 'wp_signup_location', network_site_url('wp-signup.php') ) );
    513513                exit;
    514514        }
    515515
  • wp-includes/link-template.php

     
    21292129        if ( 'relative' == $scheme )
    21302130                $url = $current_site->path;
    21312131        else
    2132                 $url = $scheme . '://' . $current_site->domain . $current_site->path;
     2132                $url = $scheme . '://' . $current_site->domain . $current_site->wp_siteurl_subdir;
    21332133
    21342134        if ( !empty($path) && is_string($path) && strpos($path, '..') === false )
    21352135                $url .= ltrim($path, '/');
  • wp-includes/canonical.php

     
    1818 * one or the other.
    1919 *
    2020 * Prevents redirection for feeds, trackbacks, searches, comment popup, and
    21  * admin URLs. Does not redirect on non-pretty-permalink-supporting IIS 7, 
     21 * admin URLs. Does not redirect on non-pretty-permalink-supporting IIS 7,
    2222 * page/post previews, WP admin, Trackbacks, robots.txt, searches, or on POST
    2323 * requests.
    2424 *
     
    282282
    283283                if ( 'wp-register.php' == basename( $redirect['path'] ) ) {
    284284                        if ( is_multisite() )
    285                                 $redirect_url = apply_filters( 'wp_signup_location', site_url( 'wp-signup.php' ) );
     285                                $redirect_url = apply_filters( 'wp_signup_location', network_site_url( 'wp-signup.php' ) );
    286286                        else
    287287                                $redirect_url = site_url( 'wp-login.php?action=register' );
    288288                        wp_redirect( $redirect_url, 301 );
  • wp-includes/ms-load.php

     
    142142                $current_site->id = defined( 'SITE_ID_CURRENT_SITE' ) ? SITE_ID_CURRENT_SITE : 1;
    143143                $current_site->domain = DOMAIN_CURRENT_SITE;
    144144                $current_site->path   = $path = PATH_CURRENT_SITE;
     145
     146                if( defined( 'WP_SITEURL_SUBDIR' ) )
     147                        $current_site->wp_siteurl_subdir = WP_SITEURL_SUBDIR;
     148                else
     149                        $current_site->wp_siteurl_subdir = $current_site->path;
     150
    145151                if ( defined( 'BLOG_ID_CURRENT_SITE' ) )
    146152                        $current_site->blog_id = BLOG_ID_CURRENT_SITE;
    147153                elseif ( defined( 'BLOGID_CURRENT_SITE' ) ) // deprecated.
  • wp-includes/ms-settings.php

     
    8686                        if ( '%siteurl%' == $destination )
    8787                                $destination = "http://" . $current_site->domain . $current_site->path;
    8888                } else {
    89                         $destination = 'http://' . $current_site->domain . $current_site->path . 'wp-signup.php?new=' . str_replace( '.' . $current_site->domain, '', $domain );
     89                        $destination = 'http://' . $current_site->domain . $current_site->wp_siteurl_subdir . 'wp-signup.php?new=' . str_replace( '.' . $current_site->domain, '', $domain );
    9090                }
    9191                header( 'Location: ' . $destination );
    9292                die();
  • wp-includes/ms-functions.php

     
    595595                $mydomain = $blogname . '.' . preg_replace( '|^www\.|', '', $domain );
    596596                $path = $base;
    597597        } else {
    598                 $mydomain = "$domain";
    599                 $path = $base.$blogname.'/';
     598                $mydomain = $domain;
     599                $path = '/' . join_wish_slashes( $base, $blogname ) . '/';
    600600        }
    601601        if ( domain_exists($mydomain, $path) )
    602602                $errors->add('blogname', __('Sorry, that site already exists!'));
     
    11421142
    11431143        $wpdb->suppress_errors(false);
    11441144
    1145         $url = get_blogaddress_by_id($blog_id);
     1145        $homeurl = $siteurl = untrailingslashit( get_blogaddress_by_id( $blog_id ) );
    11461146
    11471147        // Set everything up
    11481148        make_db_current_silent( 'blog' );
     
    11501150        populate_roles();
    11511151        $wp_roles->_init();
    11521152
    1153         $url = untrailingslashit( $url );
    1154         // fix url.
    1155         update_option('siteurl', $url);
    1156         update_option('home', $url);
    1157         update_option('fileupload_url', $url . "/files" );
    1158         update_option('upload_path', UPLOADBLOGSDIR . "/$blog_id/files");
     1153        // Maybe fix url
     1154        if ( defined( 'WP_SITEURL_SUBDIR' ) && WP_SITEURL_SUBDIR )
     1155                $siteurl = join_with_slashes( $siteurl, WP_SITEURL_SUBDIR );
     1156
     1157        update_option('siteurl', $siteurl);
     1158        update_option('home', $homeurl);
     1159        update_option('fileupload_url', join_with_slashes( $homeurl, 'files' ) );
     1160        update_option('upload_path', join_with_slashes( UPLOADBLOGSDIR, $blog_id, 'files' ) );
    11591161        update_option('blogname', stripslashes( $blog_title ) );
    11601162        update_option('admin_email', '');
    11611163        $wpdb->update( $wpdb->options, array('option_value' => ''), array('option_name' => 'admin_email') );
    11621164
    11631165        // remove all perms
    1164         $wpdb->delete( $wpdb->usermeta, array( 'meta_key' => $table_prefix.'user_level' ) );
     1166        $wpdb->delete( $wpdb->usermeta, array( 'meta_key' => $table_prefix . 'user_level'   ) );
     1167        $wpdb->delete( $wpdb->usermeta, array( 'meta_key' => $table_prefix . 'capabilities' ) );
    11651168
    1166         $wpdb->delete( $wpdb->usermeta, array( 'meta_key' => $table_prefix.'capabilities' ) );
    1167 
    11681169        $wpdb->suppress_errors( false );
    11691170}
    11701171
  • wp-includes/functions.php

     
    14341434function wp_upload_dir( $time = null ) {
    14351435        global $switched;
    14361436        $siteurl = get_option( 'siteurl' );
     1437        $homeurl = get_option( 'home' );
     1438        $base_url = is_multisite() && defined( 'MULTISITE' ) ? $homeurl : $siteurl;
    14371439        $upload_path = get_option( 'upload_path' );
    14381440        $upload_path = trim($upload_path);
    14391441        $main_override = is_multisite() && defined( 'MULTISITE' ) && is_main_site();
     
    14531455                if ( empty($upload_path) || ( 'wp-content/uploads' == $upload_path ) || ( $upload_path == $dir ) )
    14541456                        $url = WP_CONTENT_URL . '/uploads';
    14551457                else
    1456                         $url = trailingslashit( $siteurl ) . $upload_path;
     1458                        $url = trailingslashit( $baseurl ) . $upload_path;
    14571459        }
    14581460
    14591461        if ( defined('UPLOADS') && !$main_override && ( !isset( $switched ) || $switched === false ) ) {
    14601462                $dir = ABSPATH . UPLOADS;
    1461                 $url = trailingslashit( $siteurl ) . UPLOADS;
     1463                $url = trailingslashit( $baseurl ) . UPLOADS;
    14621464        }
    14631465
    14641466        if ( is_multisite() && !$main_override && ( !isset( $switched ) || $switched === false ) ) {
  • wp-includes/formatting.php

     
    13551355}
    13561356
    13571357/**
     1358 * Removes trailing and leading slashes from elements (array or string args), then combines elements
     1359 * with a slash in between each element. Leading and trailing slashes should be
     1360 * manually concatenated.
     1361 *
     1362 * @since  3.5.0
     1363 * @return  string Concatenated string with slashes in between each element.
     1364 */
     1365function join_with_slashes() {
     1366        $args = func_get_args();
     1367        $members = array();
     1368        foreach ( (array) $args as $arg ) {
     1369                if ( is_array( $arg ) ) {
     1370                        foreach ( $arg as $member ) {
     1371                                $members[] = trim( $member, '/' );
     1372                        }
     1373                } else {
     1374                        $members[] = trim( $arg, '/' );
     1375                }
     1376        }
     1377        return implode( '/', $members );
     1378}
     1379
     1380
     1381/**
    13581382 * Adds slashes to escape strings.
    13591383 *
    13601384 * Slashes will first be removed if magic_quotes_gpc is set, see {@link
  • wp-includes/ms-default-constants.php

     
    4747         * @since 1.5.0
    4848         */
    4949        if ( !defined( 'SITECOOKIEPATH' ) )
    50                 define( 'SITECOOKIEPATH', $current_site->path );
     50                define( 'SITECOOKIEPATH', $current_site->wp_siteurl_subdir );
    5151
    5252        /**
    5353         * @since 2.6.0
  • wp-admin/network.php

     
    5151 * @return bool Whether subdomain install is allowed
    5252 */
    5353function allow_subdomain_install() {
    54         $domain = preg_replace( '|https?://([^/]+)|', '$1', get_option( 'siteurl' ) );
    55         if( false !== strpos( $domain, '/' ) || 'localhost' == $domain || preg_match( '|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|', $domain ) )
     54        $domain = preg_replace( '|https?://([^/]+)|', '$1', get_option( 'home' ) );
     55        if( parse_url( get_option( 'home' ), PHP_URL_PATH ) || 'localhost' == $domain || preg_match( '|^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$|', $domain ) )
    5656                return false;
    5757
    5858        return true;
     
    144144function network_step1( $errors = false ) {
    145145        global $is_apache;
    146146
    147         if ( get_option( 'siteurl' ) != get_option( 'home' ) ) {
    148                 echo '<div class="error"><p><strong>' . __('ERROR:') . '</strong> ' . sprintf( __( 'Your <strong>WordPress address</strong> must match your <strong>Site address</strong> before creating a Network. See <a href="%s">General Settings</a>.' ), esc_url( admin_url( 'options-general.php' ) ) ) . '</p></div>';
    149                 echo '</div>';
    150                 include ( ABSPATH . 'wp-admin/admin-footer.php' );
    151                 die();
    152         }
    153 
    154147        if ( defined('DO_NOT_UPGRADE_GLOBAL_TABLES') ) {
    155148                echo '<div class="error"><p><strong>' . __('ERROR:') . '</strong> ' . __( 'The constant DO_NOT_UPGRADE_GLOBAL_TABLES cannot be defined when creating a network.' ) . '</p></div>';
    156149                echo '</div>';
     
    314307 * @since 3.0.0
    315308 */
    316309function network_step2( $errors = false ) {
    317         global $base, $wpdb;
    318         $hostname = get_clean_basedomain();
     310        global $wpdb;
    319311
    320         if ( ! isset( $base ) )
    321                 $base = trailingslashit( stripslashes( dirname( dirname( $_SERVER['SCRIPT_NAME'] ) ) ) );
     312        $hostname          = get_clean_basedomain();
     313        $slashed_home      = trailingslashit( get_option( 'home'    ) );
     314        $slashed_siteurl   = trailingslashit( get_option( 'siteurl' ) );
     315        $wp_siteurl_subdir = '/' . str_replace( $slashed_home, '', $slashed_siteurl );
     316        $rewrite_base      = ! empty( $wp_siteurl_subdir ) ? ltrim( trailingslashit( $wp_siteurl_subdir ), '/' ) : '';
     317        $base              = parse_url( $slashed_home, PHP_URL_PATH );
    322318
    323319        // Wildcard DNS message.
    324320        if ( is_wp_error( $errors ) )
    325321                echo '<div class="error">' . $errors->get_error_message() . '</div>';
    326322
    327         if ( $_POST ) {
    328                 if ( allow_subdomain_install() )
     323        if ( ! empty( $_POST ) ) {
     324                if ( allow_subdomain_install() ) {
    329325                        $subdomain_install = allow_subdirectory_install() ? ! empty( $_POST['subdomain_install'] ) : true;
    330                 else
     326                } else {
    331327                        $subdomain_install = false;
     328                }
    332329        } else {
    333330                if ( is_multisite() ) {
    334331                        $subdomain_install = is_subdomain_install();
     
    344341                }
    345342        }
    346343
    347         if ( $_POST || ! is_multisite() ) {
     344        if ( ! empty( $_POST ) || ! is_multisite() ) {
    348345?>
    349346                <h3><?php esc_html_e( 'Enabling the Network' ); ?></h3>
    350347                <p><?php _e( 'Complete the following steps to enable the features for creating a network of sites.' ); ?></p>
     
    369366                                <textarea class="code" readonly="readonly" cols="100" rows="7">
    370367define('MULTISITE', true);
    371368define('SUBDOMAIN_INSTALL', <?php echo $subdomain_install ? 'true' : 'false'; ?>);
    372 $base = '<?php echo $base; ?>';
    373369define('DOMAIN_CURRENT_SITE', '<?php echo $hostname; ?>');
    374370define('PATH_CURRENT_SITE', '<?php echo $base; ?>');
    375371define('SITE_ID_CURRENT_SITE', 1);
    376 define('BLOG_ID_CURRENT_SITE', 1);</textarea>
     372define('BLOG_ID_CURRENT_SITE', 1);
     373define('WP_SITEURL_SUBDIR', '<?php echo $wp_siteurl_subdir; ?>');</textarea>
    377374<?php
    378375        $keys_salts = array( 'AUTH_KEY' => '', 'SECURE_AUTH_KEY' => '', 'LOGGED_IN_KEY' => '', 'NONCE_KEY' => '', 'AUTH_SALT' => '', 'SECURE_AUTH_SALT' => '', 'LOGGED_IN_SALT' => '', 'NONCE_SALT' => '' );
    379376        foreach ( $keys_salts as $c => $v ) {
    380                 if ( defined( $c ) )
     377                if ( defined( $c ) ) {
    381378                        unset( $keys_salts[ $c ] );
     379                }
    382380        }
     381
    383382        if ( ! empty( $keys_salts ) ) {
    384383                $keys_salts_str = '';
    385                 $from_api = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' );
     384                $from_api       = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' );
    386385                if ( is_wp_error( $from_api ) ) {
    387386                        foreach ( $keys_salts as $c => $v ) {
    388387                                $keys_salts_str .= "\ndefine( '$c', '" . wp_generate_password( 64, true, true ) . "' );";
     
    465464                </rule>
    466465                <rule name="WordPress Rule 5" stopProcessing="true">
    467466                    <match url="^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*)" ignoreCase="false" />
    468                     <action type="Rewrite" url="{R:1}" />
     467                    <action type="Rewrite" url="' . $rewrite_base . '{R:1}" />
    469468                </rule>
    470469                <rule name="WordPress Rule 6" stopProcessing="true">
    471470                    <match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
    472                     <action type="Rewrite" url="{R:2}" />
     471                    <action type="Rewrite" url="' . $rewrite_base . '{R:2}" />
    473472                </rule>
    474473                <rule name="WordPress Rule 7" stopProcessing="true">
    475474                    <match url="." ignoreCase="false" />
     
    494493RewriteRule ^index\.php$ - [L]
    495494
    496495# uploaded files
    497 RewriteRule ^' . ( $subdomain_install ? '' : '([_0-9a-zA-Z-]+/)?' ) . 'files/(.+) wp-includes/ms-files.php?file=$' . ( $subdomain_install ? 1 : 2 ) . ' [L]' . "\n";
     496RewriteRule ^' . ( $subdomain_install ? '' : '([_0-9a-zA-Z-]+/)?' ) . 'files/(.+) ' . $rewrite_base . 'wp-includes/ms-files.php?file=$' . ( $subdomain_install ? 1 : 2 ) . ' [L]' . "\n";
    498497
    499498                if ( ! $subdomain_install )
    500499                        $htaccess_file .= "\n# add a trailing slash to /wp-admin\n" . 'RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]' . "\n";
     
    504503RewriteRule ^ - [L]';
    505504
    506505                // @todo custom content dir.
    507                 if ( ! $subdomain_install )
    508                         $htaccess_file .= "\nRewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]\nRewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]";
     506                if ( ! $subdomain_install ) {
     507                        $htaccess_file .= "\nRewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $rewrite_base$1 [L]\nRewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $rewrite_base$1 [L]";
     508                }
    509509
    510510                $htaccess_file .= "\nRewriteRule . index.php [L]";
    511511
    512512                ?>
    513                 <li><p><?php printf( __( 'Add the following to your <code>.htaccess</code> file in <code>%s</code>, replacing other WordPress rules:' ), ABSPATH ); ?></p>
     513                <li><p><?php printf( __( 'Add the following to your <code>.htaccess</code> file in <code>%s</code>, replacing other WordPress rules:' ), trailingslashit( str_replace( trailingslashit( $wp_siteurl_subdir ), '', ABSPATH ) ) ); ?></p>
    514514                <textarea class="code" readonly="readonly" cols="100" rows="<?php echo $subdomain_install ? 11 : 16; ?>">
    515515<?php echo esc_textarea( $htaccess_file ); ?></textarea></li>
    516516                </ol>
     
    523523        }
    524524}
    525525
    526 if ( $_POST ) {
     526if ( ! empty( $_POST ) ) {
    527527
    528         $base = trailingslashit( stripslashes( dirname( dirname( $_SERVER['SCRIPT_NAME'] ) ) ) );
    529 
    530528        check_admin_referer( 'install-network-1' );
    531529
    532530        require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
     531
    533532        // create network tables
    534533        install_network();
    535         $hostname = get_clean_basedomain();
     534
     535        $base              = parse_url( trailingslashit( get_option( 'home' ) ), PHP_URL_PATH );
    536536        $subdomain_install = allow_subdomain_install() ? !empty( $_POST['subdomain_install'] ) : false;
     537
    537538        if ( ! network_domain_check() ) {
    538539                $result = populate_network( 1, get_clean_basedomain(), sanitize_email( $_POST['email'] ), stripslashes( $_POST['sitename'] ), $base, $subdomain_install );
    539540                if ( is_wp_error( $result ) ) {
    540                         if ( 1 == count( $result->get_error_codes() ) && 'no_wildcard_dns' == $result->get_error_code() )
     541                        if ( 1 == count( $result->get_error_codes() ) && 'no_wildcard_dns' == $result->get_error_code() ) {
    541542                                network_step2( $result );
    542                         else
     543                        } else {
    543544                                network_step1( $result );
     545                        }
    544546                } else {
    545547                        network_step2();
    546548                }
  • wp-admin/includes/ms.php

     
    657657        <?php if ( in_array( get_site_option( 'registration' ), array( 'all', 'blog' ) ) ) : ?>
    658658                <tr>
    659659                        <th scope="row" colspan="2" class="th-full">
    660                                 <a href="<?php echo apply_filters( 'wp_signup_location', network_home_url( 'wp-signup.php' ) ); ?>"><?php _e( 'Create a New Site' ); ?></a>
     660                                <a href="<?php echo apply_filters( 'wp_signup_location', network_site_url( 'wp-signup.php' ) ); ?>"><?php _e( 'Create a New Site' ); ?></a>
    661661                        </th>
    662662                </tr>
    663663        <?php endif; ?>
  • wp-admin/network/site-new.php

     
    6262
    6363        if ( is_subdomain_install() ) {
    6464                $newdomain = $domain . '.' . preg_replace( '|^www\.|', '', $current_site->domain );
    65                 $path = $base;
     65                $path      = $current_site->path;
    6666        } else {
    6767                $newdomain = $current_site->domain;
    68                 $path = $base . $domain . '/';
     68                $path      = $current_site->path . $domain . '/';
    6969        }
    7070
    7171        $password = 'N/A';