Make WordPress Core

Ticket #43992: 43992.24.diff

File 43992.24.diff, 4.0 KB (added by SergeyBiryukov, 4 years ago)
  • src/wp-admin/includes/plugin.php

     
    597597 * ensure that the success redirection will update the error redirection.
    598598 *
    599599 * @since 2.5.0
     600 * @since 5.2.0 Test for WordPress version and PHP version compatibility.
    600601 *
    601602 * @param string $plugin       Path to the plugin file relative to the plugins directory.
    602603 * @param string $redirect     Optional. URL to redirect to.
     
    621622                return $valid;
    622623        }
    623624
     625        $requirements = validate_plugin_requirements( $plugin );
     626        if ( is_wp_error( $requirements ) ) {
     627                return $requirements;
     628        }
     629
    624630        if ( ( $network_wide && ! isset( $current[ $plugin ] ) ) || ( ! $network_wide && ! in_array( $plugin, $current ) ) ) {
    625631                if ( ! empty( $redirect ) ) {
    626632                        wp_redirect( add_query_arg( '_error_nonce', wp_create_nonce( 'plugin-activation-error_' . $plugin ), $redirect ) ); // we'll override this later if the plugin can be included without fatal error
     
    10611067}
    10621068
    10631069/**
     1070 * Validate the plugin requirements for WP version and PHP version.
     1071 *
     1072 * @since 5.2.0
     1073 *
     1074 * @param string $plugin Path to the plugin file relative to the plugins directory.
     1075 * @return true|WP_Error True if requirements are met, WP_Error on failure.
     1076 */
     1077function validate_plugin_requirements( $plugin ) {
     1078        $readme_file = WP_PLUGIN_DIR . '/' . dirname( $plugin ) . '/readme.txt';
     1079
     1080        if ( file_exists( $readme_file ) ) {
     1081                $plugin_data = get_file_data(
     1082                        $readme_file,
     1083                        array(
     1084                                'requires'     => 'Requires at least',
     1085                                'requires_php' => 'Requires PHP',
     1086                        ),
     1087                        'plugin'
     1088                );
     1089        } else {
     1090                return true;
     1091        }
     1092
     1093        $plugin_data['wp_compatible']  = wp_is_wp_compatible( $plugin_data['requires'] );
     1094        $plugin_data['php_compatible'] = wp_is_php_compatible( $plugin_data['requires_php'] );
     1095
     1096        $plugin_data = array_merge( $plugin_data, get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ) );
     1097
     1098        if ( ! $plugin_data['wp_compatible'] && ! $plugin_data['php_compatible'] ) {
     1099                return new WP_Error( 'plugin_wp_php_incompatible', sprintf(
     1100                        /* translators: %s: plugin name */
     1101                        __( '<strong>Error:</strong> Current WordPress and PHP versions do not meet minimum requirements for %s.' ), $plugin_data['Name'] )
     1102                );
     1103        } elseif ( ! $plugin_data['php_compatible'] ) {
     1104                return new WP_Error( 'plugin_php_incompatible', sprintf(
     1105                        /* translators: %s: plugin name */
     1106                        __( '<strong>Error:</strong> Current PHP version does not meet minimum requirements for %s.' ), $plugin_data['Name'] )
     1107                );
     1108        } elseif ( ! $plugin_data['wp_compatible'] ) {
     1109                return new WP_Error( 'plugin_wp_incompatible', sprintf(
     1110                        /* translators: %s: plugin name */
     1111                        __( '<strong>Error:</strong> Current WordPress version does not meet minimum requirements for %s.' ), $plugin_data['Name'] )
     1112                );
     1113        }
     1114
     1115        return true;
     1116}
     1117
     1118/**
    10641119 * Whether the plugin can be uninstalled.
    10651120 *
    10661121 * @since 2.7.0
  • src/wp-includes/functions.php

     
    68976897        );
    68986898        echo '</p>';
    68996899}
     6900
     6901/**
     6902 * Checks compatibility with the current WordPress version.
     6903 *
     6904 * @since 5.2.0
     6905 *
     6906 * @param string $required Minimum required WordPress version.
     6907 * @return bool True if required version is compatible or empty, false if not.
     6908 */
     6909function wp_is_wp_compatible( $required ) {
     6910        $wp_version = get_bloginfo( 'version' );
     6911
     6912        return empty( $required ) || version_compare( $wp_version, $required, '>=' );
     6913}
     6914
     6915/**
     6916 * Checks compatibility with the current PHP version.
     6917 *
     6918 * @since 5.2.0
     6919 *
     6920 * @param string $required Minimum required PHP version.
     6921 * @return bool True if required version is compatible or empty, false if not.
     6922 */
     6923function wp_is_php_compatible( $required ) {
     6924        return empty( $required ) || version_compare( phpversion(), $required, '>=' );
     6925}