WordPress.org

Make WordPress Core

Ticket #43987: 43987-1.diff

File 43987-1.diff, 4.6 KB (added by afragen, 16 months ago)

Update notice to use 'newer' not 'higher'

  • src/wp-admin/includes/class-wp-plugins-list-table.php

    diff --git src/wp-admin/includes/class-wp-plugins-list-table.php src/wp-admin/includes/class-wp-plugins-list-table.php
    index 6e130f94b4..e1d3f688f3 100644
    class WP_Plugins_List_Table extends WP_List_Table { 
    900900        protected function get_primary_column_name() {
    901901                return 'name';
    902902        }
     903
     904        /**
     905         * Load hooks to prevent plugin updates if PHP version requirement not met.
     906         */
     907        public function load_requires_php() {
     908                add_filter( 'plugin_row_meta', array( $this, 'plugin_update_nag' ), 10, 2 );
     909        }
     910
     911        /**
     912         * Adds small PHP upgrade nag to plugin row.
     913         *
     914         * @param array  $links
     915         * @param string $file
     916         *
     917         * @return array $links
     918         */
     919        public function plugin_update_nag( $links, $file ) {
     920                $slug = dirname( $file );
     921                if ( $this->is_required_php( $slug ) ) {
     922                        $links[] = '<span style="color:#f00;">' . __( 'Upgrade PHP for available plugin update.' ) . '</span>';
     923                        add_action( "after_plugin_row_{$file}", array( $this, 'hide_plugin_update_row' ), 10, 2 );
     924                }
     925
     926                return $links;
     927        }
     928
     929        /**
     930         * Write out inline style to hide the update row notice.
     931         *
     932         * @param  string $plugin_file Unused.
     933         * @param array   $plugin_data Plugin data.
     934         */
     935        public function hide_plugin_update_row( $plugin_file, $plugin_data ) {
     936                ?>
     937                <style type="text/css">
     938                        tr#<?php echo $plugin_data['slug']; ?>-update {
     939                                display: none;
     940                        }
     941                </style>
     942                <?php
     943        }
     944
     945        /**
     946         * Unset update_plugins from update-core.php as appropriate.
     947         *
     948         * @param array $plugins  Plugins for updating.
     949         *
     950         * @return array $plugins Plugins for updating.
     951         */
     952        public function unset_plugin_updates( $plugins ) {
     953                if ( ! empty( $plugins ) ) {
     954                        foreach (  $plugins  as $file => $class ) {
     955                                if ( $this->is_required_php( $class->update->slug ) ) {
     956                                        unset( $plugins[ $file ] );
     957                                        $this->requires_php_update_notice();
     958                                }
     959                        }
     960                }
     961
     962                return $plugins;
     963        }
     964
     965        /**
     966         * Create admin notice.
     967         */
     968        public function requires_php_update_notice() {
     969                $message = '<span style="color:#f00;" class="dashicons dashicons-warning"></span>&nbsp;';
     970                $message .= __( 'Some updates are not shown in this list because they require a newer version of PHP.' );
     971
     972                ?>
     973                <div class="notice-error notice is-dismissible">
     974                        <p>
     975                                <?php echo $message; ?>
     976                        </p>
     977                </div>
     978                <?php
     979        }
     980
     981        /**
     982         * Test for required PHP version.
     983         *
     984         * @param string $slug Slug of the repository being tested.
     985         *
     986         * @return bool True for below required PHP version.
     987         *              False for above required PHP version or none set.
     988         */
     989        protected function is_required_php( $slug ) {
     990                $response = $this->get_plugin_dot_org_api_data( $slug );
     991
     992                if ( ! $response->requires_php ) {
     993                        return false;
     994                }
     995
     996                return version_compare( PHP_VERSION, $response->requires_php, '<=' );
     997        }
     998
     999        /**
     1000         * Get the dot org API data for the plugin or theme slug.
     1001         *
     1002         * @param string $slug Plugin or theme slug.
     1003         *
     1004         * @return object|bool $response
     1005         */
     1006        protected function get_plugin_dot_org_api_data( $slug ) {
     1007                $response = get_site_transient( 'php_check-' . $slug );
     1008                if ( ! $response ) {
     1009                        $url      = 'https://api.wordpress.org/plugins/info/1.2/';
     1010                        $url      = add_query_arg( array(
     1011                                'action'        => 'plugin_information',
     1012                                'request[slug]' => $slug,
     1013                        ), $url );
     1014                        $response = wp_remote_get( $url );
     1015                        $response = null !== $response['body'] ? json_decode( $response['body'] ) : false;
     1016
     1017                        // Plugins not in dot org.
     1018                        if ( ! isset( $response->requires_php ) ) {
     1019                                $response->requires_php = false;
     1020                        }
     1021                        set_site_transient( 'php_check-' . $slug, $response );
     1022                }
     1023
     1024                return $response;
     1025        }
     1026
    9031027}
  • src/wp-admin/plugins.php

    diff --git src/wp-admin/plugins.php src/wp-admin/plugins.php
    index b482f474c0..f690254b22 100644
    if ( $action ) { 
    405405}
    406406
    407407$wp_list_table->prepare_items();
     408$wp_list_table->load_requires_php();
    408409
    409410wp_enqueue_script( 'plugin-install' );
    410411add_thickbox();
  • src/wp-admin/update-core.php

    diff --git src/wp-admin/update-core.php src/wp-admin/update-core.php
    index 61527bfc82..634faa1653 100644
    function list_plugin_updates() { 
    232232
    233233        require_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
    234234        $plugins = get_plugin_updates();
     235
     236        $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
     237        $plugins = $wp_list_table->unset_plugin_updates( $plugins );
     238
    235239        if ( empty( $plugins ) ) {
    236240                echo '<h2>' . __( 'Plugins' ) . '</h2>';
    237241                echo '<p>' . __( 'Your plugins are all up to date.' ) . '</p>';