WordPress.org

Make WordPress Core

Ticket #15083: 15083.refactoring-first.3.patch

File 15083.refactoring-first.3.patch, 15.9 KB (added by hakre, 8 years ago)

Moved some more code into functions.

  • wp-admin/network.php

     
    2626        $wpdb->$table = $prefixed_table;
    2727
    2828/**
     29 * @param string $base configuration
     30 * @param bool $subdomain_install configuration
     31 * @return string htaccess file content (mod_rewrite directives);
     32 */
     33function network_admin_generate_htaccess_file_content($base, $subdomain_install ) {
     34
     35        $uploaded_files = sprintf(
     36                '^%sfiles/(.+) wp-includes/ms-files.php?file=$1',
     37                $subdomain_install ? '' : '[_0-9a-zA-Z-]+/'
     38        );
     39       
     40        // $htaccess_comment_if_a_subdomain_install
     41        $comment_if = $subdomain_install ? '# ' : '';
     42       
     43        $content =
     44'RewriteEngine On
     45RewriteBase ' . $base . '
     46RewriteRule ^index\.php$ - [L]
     47
     48# uploaded files
     49RewriteRule ' . $uploaded_files . ' [L]
     50
     51# add a trailing slash to /wp-admin (commented if a subdomain install)
     52' . $comment_if . 'RewriteRule ^([_0-9a-zA-Z-]+/)wp-admin$ $1wp-admin/ [R=301,L]
     53
     54RewriteCond %{REQUEST_FILENAME} -f [OR]
     55RewriteCond %{REQUEST_FILENAME} -d
     56RewriteRule ^ - [L]
     57
     58# serach for non-existent files (commented if a subdomain install)
     59' . $comment_if . 'RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
     60' . $comment_if . 'RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
     61
     62RewriteRule . index.php [L]
     63';
     64       
     65        return $content;
     66}
     67
     68/**
     69 * @return array array-keys as the key constant names and array-values as the according value.
     70 */
     71function network_admin_generate_key_salts() {
     72        $key_names = array('AUTH_KEY', 'SECURE_AUTH_KEY', 'LOGGED_IN_KEY', 'NONCE_KEY', 'AUTH_SALT', 'SECURE_AUTH_SALT', 'LOGGED_IN_SALT', 'NONCE_SALT');
     73        $key_existing_names = array_filter( $key_names, 'defined' );
     74        $key_inexist = array_diff( $key_names, $key_existing_names );
     75        $keys_count = count($key_inexist);
     76        if ( 0 === $keys_count )
     77                return array();
     78         
     79        $keys_salts = array_combine( $key_inexist, array_fill( 0, $keys_count, '' ) );
     80       
     81        $from_api = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' );
     82        if ( is_wp_error( $from_api ) ) {
     83                foreach ( $keys_salts as $c => $v ) {
     84                        $keys_salts[ $c ] = wp_generate_password( 64, true, true );
     85                }
     86        } else {
     87                $from_api = explode( "\n", wp_remote_retrieve_body( $from_api ) );
     88                foreach ( $keys_salts as $c => $v ) {
     89                        $keys_salts[ $c ] = substr( array_shift( $from_api ), 28, 64 );
     90                }
     91        }
     92
     93        return $key_salts;
     94}
     95
     96/**
     97 * @return string web config content
     98 */
     99function network_admin_web_config_content_subdirecotry_install() {
     100        return                         
     101'<?xml version="1.0" encoding="UTF-8"?>
     102<configuration>
     103    <system.webServer>
     104        <rewrite>
     105            <rules>
     106                <rule name="WordPress Rule 1" stopProcessing="true">
     107                    <match url="^index\.php$" ignoreCase="false" />
     108                    <action type="None" />
     109                </rule>
     110                <rule name="WordPress Rule 2" stopProcessing="true">
     111                    <match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
     112                    <action type="Rewrite" url="wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
     113                </rule>
     114                <rule name="WordPress Rule 3" stopProcessing="true">
     115                    <match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
     116                    <action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
     117                </rule>
     118                <rule name="WordPress Rule 4" stopProcessing="true">
     119                    <match url="^" ignoreCase="false" />
     120                    <conditions logicalGrouping="MatchAny">
     121                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
     122                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
     123                    </conditions>
     124                    <action type="None" />
     125                </rule>
     126                <rule name="WordPress Rule 5" stopProcessing="true">
     127                    <match url="^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
     128                    <action type="Rewrite" url="{R:2}" />
     129                </rule>
     130                <rule name="WordPress Rule 6" stopProcessing="true">
     131                    <match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
     132                    <action type="Rewrite" url="{R:2}" />
     133                </rule>
     134                <rule name="WordPress Rule 7" stopProcessing="true">
     135                    <match url="." ignoreCase="false" />
     136                    <action type="Rewrite" url="index.php" />
     137                </rule>
     138            </rules>
     139        </rewrite>
     140    </system.webServer>
     141</configuration>';
     142}
     143
     144/**
     145 * @return string web config content
     146 */
     147function network_admin_web_config_content_subdomain_install() {
     148        return
     149'<?xml version="1.0" encoding="UTF-8"?>
     150<configuration>
     151    <system.webServer>
     152        <rewrite>
     153            <rules>
     154                <rule name="WordPress Rule 1" stopProcessing="true">
     155                    <match url="^index\.php$" ignoreCase="false" />
     156                    <action type="None" />
     157                </rule>
     158                <rule name="WordPress Rule 2" stopProcessing="true">
     159                    <match url="^files/(.+)" ignoreCase="false" />
     160                    <action type="Rewrite" url="wp-includes/ms-files.php?file={R:1}" appendQueryString="false" />
     161                </rule>
     162                <rule name="WordPress Rule 3" stopProcessing="true">
     163                    <match url="^" ignoreCase="false" />
     164                    <conditions logicalGrouping="MatchAny">
     165                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
     166                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
     167                    </conditions>
     168                    <action type="None" />
     169                </rule>
     170                <rule name="WordPress Rule 4" stopProcessing="true">
     171                    <match url="." ignoreCase="false" />
     172                    <action type="Rewrite" url="index.php" />
     173                </rule>
     174            </rules>
     175        </rewrite>
     176    </system.webServer>
     177</configuration>';
     178}
     179
     180/**
     181 * @param string $base path of current site configuration
     182 * @param string $hostname domain current site configuration
     183 * @param bool $subdomain_install configuration
     184 * @return string file content
     185 */
     186function network_admin_generate_wpconfig_file_content( $base, $hostname, $subdomain_install ) {
     187        $subdomain = $subdomain_install ? 'true' : 'false';
     188        return
     189"define( 'MULTISITE', true );
     190define( 'SUBDOMAIN_INSTALL', {$subdomain} );
     191\$base = '{$base}';
     192define( 'DOMAIN_CURRENT_SITE', '{$hostname}' );
     193define( 'PATH_CURRENT_SITE', '{$base}' );
     194define( 'SITE_ID_CURRENT_SITE', 1 );
     195define( 'BLOG_ID_CURRENT_SITE', 1 );
     196";
     197}
     198
     199/**
    29200 * Check for an existing network.
    30201 *
    31202 * @since 3.0.0
     
    328499                                if ( WP_CONTENT_DIR != ABSPATH . 'wp-content' )
    329500                                        echo ' <strong>' . __('Warning:') . ' ' . __( 'Networks may not be fully compatible with custom wp-content directories.' ) . '</strong';
    330501                        ?></p></li>
    331                         <li><p><?php printf( __( 'Add the following to your <code>wp-config.php</code> file in <code>%s</code> <strong>above</strong> the line reading <code>/* That&#8217;s all, stop editing! Happy blogging. */</code>:' ), ABSPATH ); ?></p>
     502                        <?php
     503                                $file_content = network_admin_generate_wpconfig_file_content( $base, $hostname, $subdomain_install );
     504                        ?>
     505                        <li>
     506                                <p><?php printf( __( 'Add the following to your <code>wp-config.php</code> file in <code>%s</code> <strong>above</strong> the line reading <code>/* That&#8217;s all, stop editing! Happy blogging. */</code>:' ), ABSPATH ); ?></p>
    332507                                <textarea class="code" readonly="readonly" cols="100" rows="7">
    333 define( 'MULTISITE', true );
    334 define( 'SUBDOMAIN_INSTALL', <?php echo $subdomain_install ? 'true' : 'false'; ?> );
    335 $base = '<?php echo $base; ?>';
    336 define( 'DOMAIN_CURRENT_SITE', '<?php echo $hostname; ?>' );
    337 define( 'PATH_CURRENT_SITE', '<?php echo $base; ?>' );
    338 define( 'SITE_ID_CURRENT_SITE', 1 );
    339 define( 'BLOG_ID_CURRENT_SITE', 1 );</textarea>
     508                                <?php echo wp_htmledit_pre( $file_content ); ?>
     509                                </textarea>
     510                                <?php
     511                                $keys_salts = network_admin_generate_key_salts();
     512                                $num_keys_salts = count( $keys_salts );
     513                                ?>
     514                                <p>
     515                                <?php echo _n( 'This unique authentication key is also missing from your <code>wp-config.php</code> file.', 'These unique authentication keys are also missing from your <code>wp-config.php</code> file.', $num_keys_salts ); ?>
     516                                <?php _e( 'To make your installation more secure, you should also add:' ) ?></p>
     517                                <textarea class="code" readonly="readonly" cols="100" rows="<?php echo $num_keys_salts; ?>"><?php
     518                                        foreach ( $keys_salts as $c => $v ) {
     519                                                echo "\ndefine( '$c', '" . htmlspecialchars( $v ) . "' );";
     520                                        }
     521                                ?></textarea>
    340522<?php
    341         $keys_salts = array( 'AUTH_KEY' => '', 'SECURE_AUTH_KEY' => '', 'LOGGED_IN_KEY' => '', 'NONCE_KEY' => '', 'AUTH_SALT' => '', 'SECURE_AUTH_SALT' => '', 'LOGGED_IN_SALT' => '', 'NONCE_SALT' => '' );
    342         foreach ( $keys_salts as $c => $v ) {
    343                 if ( defined( $c ) )
    344                         unset( $keys_salts[ $c ] );
    345523        }
    346         if ( ! empty( $keys_salts ) ) {
    347                 $from_api = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' );
    348                 if ( is_wp_error( $from_api ) ) {
    349                         foreach ( $keys_salts as $c => $v ) {
    350                                 $keys_salts[ $c ] = wp_generate_password( 64, true, true );
    351                         }
    352                 } else {
    353                         $from_api = explode( "\n", wp_remote_retrieve_body( $from_api ) );
    354                         foreach ( $keys_salts as $c => $v ) {
    355                                 $keys_salts[ $c ] = substr( array_shift( $from_api ), 28, 64 );
    356                         }
    357                 }
    358                 $num_keys_salts = count( $keys_salts );
    359524?>
    360         <p><?php
    361                 echo _n( 'This unique authentication key is also missing from your <code>wp-config.php</code> file.', 'These unique authentication keys are also missing from your <code>wp-config.php</code> file.', $num_keys_salts ); ?> <?php _e( 'To make your installation more secure, you should also add:' ) ?></p>
    362         <textarea class="code" readonly="readonly" cols="100" rows="<?php echo $num_keys_salts; ?>"><?php
    363         foreach ( $keys_salts as $c => $v ) {
    364                 echo "\ndefine( '$c', '$v' );";
    365         }
    366 ?></textarea>
    367 <?php
    368         }
    369 ?>
    370525</li>
    371526<?php
    372527        if ( iis7_supports_permalinks() ) :
    373 
    374                         if ( $subdomain_install ) {
    375                                 $web_config_file =
    376 '<?xml version="1.0" encoding="UTF-8"?>
    377 <configuration>
    378     <system.webServer>
    379         <rewrite>
    380             <rules>
    381                 <rule name="WordPress Rule 1" stopProcessing="true">
    382                     <match url="^index\.php$" ignoreCase="false" />
    383                     <action type="None" />
    384                 </rule>
    385                 <rule name="WordPress Rule 2" stopProcessing="true">
    386                     <match url="^files/(.+)" ignoreCase="false" />
    387                     <action type="Rewrite" url="wp-includes/ms-files.php?file={R:1}" appendQueryString="false" />
    388                 </rule>
    389                 <rule name="WordPress Rule 3" stopProcessing="true">
    390                     <match url="^" ignoreCase="false" />
    391                     <conditions logicalGrouping="MatchAny">
    392                         <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
    393                         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
    394                     </conditions>
    395                     <action type="None" />
    396                 </rule>
    397                 <rule name="WordPress Rule 4" stopProcessing="true">
    398                     <match url="." ignoreCase="false" />
    399                     <action type="Rewrite" url="index.php" />
    400                 </rule>
    401             </rules>
    402         </rewrite>
    403     </system.webServer>
    404 </configuration>';
    405                         } else {
    406                                 $web_config_file =
    407 '<?xml version="1.0" encoding="UTF-8"?>
    408 <configuration>
    409     <system.webServer>
    410         <rewrite>
    411             <rules>
    412                 <rule name="WordPress Rule 1" stopProcessing="true">
    413                     <match url="^index\.php$" ignoreCase="false" />
    414                     <action type="None" />
    415                 </rule>
    416                 <rule name="WordPress Rule 2" stopProcessing="true">
    417                     <match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
    418                     <action type="Rewrite" url="wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
    419                 </rule>
    420                 <rule name="WordPress Rule 3" stopProcessing="true">
    421                     <match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
    422                     <action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
    423                 </rule>
    424                 <rule name="WordPress Rule 4" stopProcessing="true">
    425                     <match url="^" ignoreCase="false" />
    426                     <conditions logicalGrouping="MatchAny">
    427                         <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
    428                         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
    429                     </conditions>
    430                     <action type="None" />
    431                 </rule>
    432                 <rule name="WordPress Rule 5" stopProcessing="true">
    433                     <match url="^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
    434                     <action type="Rewrite" url="{R:2}" />
    435                 </rule>
    436                 <rule name="WordPress Rule 6" stopProcessing="true">
    437                     <match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
    438                     <action type="Rewrite" url="{R:2}" />
    439                 </rule>
    440                 <rule name="WordPress Rule 7" stopProcessing="true">
    441                     <match url="." ignoreCase="false" />
    442                     <action type="Rewrite" url="index.php" />
    443                 </rule>
    444             </rules>
    445         </rewrite>
    446     </system.webServer>
    447 </configuration>';
    448                         }
     528                if ( $subdomain_install ) {
     529                        $file_content = network_admin_web_config_content_subdomain_install();
     530                } else {
     531                        $file_content = network_admin_web_config_content_subdirecotry_install();
     532                }
    449533        ?>
    450534                <li><p><?php printf( __( 'Add the following to your <code>web.config</code> file in <code>%s</code>, replacing other WordPress rules:' ), ABSPATH ); ?></p>
    451535                <textarea class="code" readonly="readonly" cols="100" rows="20">
    452                 <?php echo wp_htmledit_pre( $web_config_file ); ?>
     536                <?php echo wp_htmledit_pre( $file_content ); ?>
    453537                </textarea></li>
    454538                </ol>
    455539
    456540        <?php else : // end iis7_supports_permalinks(). construct an htaccess file instead:
    457541
    458                 $htaccess_file = 'RewriteEngine On
    459 RewriteBase ' . $base . '
    460 RewriteRule ^index\.php$ - [L]
    461 
    462 # uploaded files
    463 RewriteRule ^' . ( $subdomain_install ? '' : '([_0-9a-zA-Z-]+/)?' ) . 'files/(.+) wp-includes/ms-files.php?file=$' . ( $subdomain_install ? 1 : 2 ) . ' [L]' . "\n";
    464 
    465                 if ( ! $subdomain_install )
    466                         $htaccess_file .= "\n# add a trailing slash to /wp-admin\n" . 'RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]' . "\n";
    467 
    468                 $htaccess_file .= "\n" . 'RewriteCond %{REQUEST_FILENAME} -f [OR]
    469 RewriteCond %{REQUEST_FILENAME} -d
    470 RewriteRule ^ - [L]';
    471 
    472                 // @todo custom content dir.
    473                 if ( ! $subdomain_install )
    474                         $htaccess_file .= "\nRewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]\nRewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]";
    475 
    476                 $htaccess_file .= "\nRewriteRule . index.php [L]";
    477 
     542                $file_content = network_admin_generate_htaccess_file_content( $base, $subdomain_install );
    478543                ?>
    479544                <li><p><?php printf( __( 'Add the following to your <code>.htaccess</code> file in <code>%s</code>, replacing other WordPress rules:' ), ABSPATH ); ?></p>
    480545                <textarea class="code" readonly="readonly" cols="100" rows="<?php echo $subdomain_install ? 11 : 16; ?>">
    481 <?php echo wp_htmledit_pre( $htaccess_file ); ?></textarea></li>
     546<?php echo wp_htmledit_pre( $file_content ); ?></textarea></li>
    482547                </ol>
    483548
    484549        <?php endif; // end IIS/Apache code branches.