WordPress.org

Make WordPress Core

Changeset 51678


Ignore:
Timestamp:
08/27/2021 03:42:36 PM (2 months ago)
Author:
SergeyBiryukov
Message:

Plugins: Display a message on Plugins list table if a plugin requires a higher version of PHP or WordPress.

Installation and activation of incompatible plugins was previously disallowed in [43436] and [44978], but if such a plugin was installed manually, there was nothing on the Plugins screen that would show its compatibility status.

Showing an appropriate notice with a documentation link makes the UI more consistent and improves user experience.

Follow-up to [43436], [44937], [44939], [44978], [45043], [45165], [45546], [47573], [47816], [47819], [48172], [48636], [48637], [48638], [48640], [48652], [48653], [48654], [48660].

Props TacoVerdo, SergeyBiryukov.
Fixes #53990.

Location:
trunk/src/wp-admin
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/css/list-tables.css

    r51073 r51678  
    798798
    799799.row-actions {
    800     color: #dcdcde;
     800    color: #a7aaad;
    801801    font-size: 13px;
    802802    padding: 2px 0 0;
  • trunk/src/wp-admin/includes/class-wp-plugin-install-list-table.php

    r50921 r51678  
    587587                            );
    588588                        } elseif ( current_user_can( 'activate_plugin', $status['file'] ) ) {
    589                             $button_text = __( 'Activate' );
    590                             /* translators: %s: Plugin name. */
    591                             $button_label = _x( 'Activate %s', 'plugin' );
    592                             $activate_url = add_query_arg(
    593                                 array(
    594                                     '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $status['file'] ),
    595                                     'action'   => 'activate',
    596                                     'plugin'   => $status['file'],
    597                                 ),
    598                                 network_admin_url( 'plugins.php' )
    599                             );
    600 
    601                             if ( is_network_admin() ) {
    602                                 $button_text = __( 'Network Activate' );
     589                            if ( $compatible_php && $compatible_wp ) {
     590                                $button_text = __( 'Activate' );
    603591                                /* translators: %s: Plugin name. */
    604                                 $button_label = _x( 'Network Activate %s', 'plugin' );
    605                                 $activate_url = add_query_arg( array( 'networkwide' => 1 ), $activate_url );
     592                                $button_label = _x( 'Activate %s', 'plugin' );
     593                                $activate_url = add_query_arg(
     594                                    array(
     595                                        '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $status['file'] ),
     596                                        'action'   => 'activate',
     597                                        'plugin'   => $status['file'],
     598                                    ),
     599                                    network_admin_url( 'plugins.php' )
     600                                );
     601
     602                                if ( is_network_admin() ) {
     603                                    $button_text = __( 'Network Activate' );
     604                                    /* translators: %s: Plugin name. */
     605                                    $button_label = _x( 'Network Activate %s', 'plugin' );
     606                                    $activate_url = add_query_arg( array( 'networkwide' => 1 ), $activate_url );
     607                                }
     608
     609                                $action_links[] = sprintf(
     610                                    '<a href="%1$s" class="button activate-now" aria-label="%2$s">%3$s</a>',
     611                                    esc_url( $activate_url ),
     612                                    esc_attr( sprintf( $button_label, $plugin['name'] ) ),
     613                                    $button_text
     614                                );
     615                            } else {
     616                                $action_links[] = sprintf(
     617                                    '<button type="button" class="button button-disabled" disabled="disabled">%s</button>',
     618                                    _x( 'Cannot Activate', 'plugin' )
     619                                );
    606620                            }
    607 
    608                             $action_links[] = sprintf(
    609                                 '<a href="%1$s" class="button activate-now" aria-label="%2$s">%3$s</a>',
    610                                 esc_url( $activate_url ),
    611                                 esc_attr( sprintf( $button_label, $plugin['name'] ) ),
    612                                 $button_text
    613                             );
    614621                        } else {
    615622                            $action_links[] = sprintf(
  • trunk/src/wp-admin/includes/class-wp-plugins-list-table.php

    r50556 r51678  
    740740        $restrict_network_only   = false;
    741741
     742        $requires_php = isset( $plugin_data['RequiresPHP'] ) ? $plugin_data['RequiresPHP'] : null;
     743        $requires_wp  = isset( $plugin_data['RequiresWP'] ) ? $plugin_data['RequiresWP'] : null;
     744
     745        $compatible_php = is_php_version_compatible( $requires_php );
     746        $compatible_wp  = is_wp_version_compatible( $requires_wp );
     747
    742748        if ( 'mustuse' === $context ) {
    743749            $is_active = true;
     
    793799                } else {
    794800                    if ( current_user_can( 'manage_network_plugins' ) ) {
    795                         $actions['activate'] = sprintf(
    796                             '<a href="%s" id="activate-%s" class="edit" aria-label="%s">%s</a>',
    797                             wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . urlencode( $plugin_file ) . '&amp;plugin_status=' . $context . '&amp;paged=' . $page . '&amp;s=' . $s, 'activate-plugin_' . $plugin_file ),
    798                             esc_attr( $plugin_id_attr ),
    799                             /* translators: %s: Plugin name. */
    800                             esc_attr( sprintf( _x( 'Network Activate %s', 'plugin' ), $plugin_data['Name'] ) ),
    801                             __( 'Network Activate' )
    802                         );
     801                        if ( $compatible_php && $compatible_wp ) {
     802                            $actions['activate'] = sprintf(
     803                                '<a href="%s" id="activate-%s" class="edit" aria-label="%s">%s</a>',
     804                                wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . urlencode( $plugin_file ) . '&amp;plugin_status=' . $context . '&amp;paged=' . $page . '&amp;s=' . $s, 'activate-plugin_' . $plugin_file ),
     805                                esc_attr( $plugin_id_attr ),
     806                                /* translators: %s: Plugin name. */
     807                                esc_attr( sprintf( _x( 'Network Activate %s', 'plugin' ), $plugin_data['Name'] ) ),
     808                                __( 'Network Activate' )
     809                            );
     810                        } else {
     811                            $actions['activate'] = sprintf(
     812                                '<span>%s</span>',
     813                                _x( 'Cannot Activate', 'plugin' )
     814                            );
     815                        }
    803816                    }
    804817
     
    847860                } else {
    848861                    if ( current_user_can( 'activate_plugin', $plugin_file ) ) {
    849                         $actions['activate'] = sprintf(
    850                             '<a href="%s" id="activate-%s" class="edit" aria-label="%s">%s</a>',
    851                             wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . urlencode( $plugin_file ) . '&amp;plugin_status=' . $context . '&amp;paged=' . $page . '&amp;s=' . $s, 'activate-plugin_' . $plugin_file ),
    852                             esc_attr( $plugin_id_attr ),
    853                             /* translators: %s: Plugin name. */
    854                             esc_attr( sprintf( _x( 'Activate %s', 'plugin' ), $plugin_data['Name'] ) ),
    855                             __( 'Activate' )
    856                         );
     862                        if ( $compatible_php && $compatible_wp ) {
     863                            $actions['activate'] = sprintf(
     864                                '<a href="%s" id="activate-%s" class="edit" aria-label="%s">%s</a>',
     865                                wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . urlencode( $plugin_file ) . '&amp;plugin_status=' . $context . '&amp;paged=' . $page . '&amp;s=' . $s, 'activate-plugin_' . $plugin_file ),
     866                                esc_attr( $plugin_id_attr ),
     867                                /* translators: %s: Plugin name. */
     868                                esc_attr( sprintf( _x( 'Activate %s', 'plugin' ), $plugin_data['Name'] ) ),
     869                                __( 'Activate' )
     870                            );
     871                        } else {
     872                            $actions['activate'] = sprintf(
     873                                '<span>%s</span>',
     874                                _x( 'Cannot Activate', 'plugin' )
     875                            );
     876                        }
    857877                    }
    858878
     
    946966        }
    947967
    948         $requires_php   = isset( $plugin_data['requires_php'] ) ? $plugin_data['requires_php'] : null;
    949         $compatible_php = is_php_version_compatible( $requires_php );
    950         $class          = $is_active ? 'active' : 'inactive';
    951         $checkbox_id    = 'checkbox_' . md5( $plugin_file );
     968        $class       = $is_active ? 'active' : 'inactive';
     969        $checkbox_id = 'checkbox_' . md5( $plugin_file );
    952970
    953971        if ( $restrict_network_active || $restrict_network_only || in_array( $status, array( 'mustuse', 'dropins' ), true ) || ! $compatible_php ) {
     
    969987        }
    970988
    971         if ( ! empty( $totals['upgrade'] ) && ! empty( $plugin_data['update'] ) ) {
     989        if ( ! empty( $totals['upgrade'] ) && ! empty( $plugin_data['update'] )
     990            || ! $compatible_php || ! $compatible_wp
     991        ) {
    972992            $class .= ' update';
    973993        }
     
    11911211        echo '</tr>';
    11921212
     1213        if ( ! $compatible_php || ! $compatible_wp ) {
     1214            printf(
     1215                '<tr class="plugin-update-tr">' .
     1216                '<td colspan="%s" class="plugin-update colspanchange">' .
     1217                '<div class="update-message notice inline notice-error notice-alt"><p>',
     1218                esc_attr( $this->get_column_count() )
     1219            );
     1220
     1221            if ( ! $compatible_php && ! $compatible_wp ) {
     1222                _e( 'This plugin doesn&#8217;t work with your versions of WordPress and PHP.' );
     1223                if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) {
     1224                    printf(
     1225                        /* translators: 1: URL to WordPress Updates screen, 2: URL to Update PHP page. */
     1226                        ' ' . __( '<a href="%1$s">Please update WordPress</a>, and then <a href="%2$s">learn more about updating PHP</a>.' ),
     1227                        self_admin_url( 'update-core.php' ),
     1228                        esc_url( wp_get_update_php_url() )
     1229                    );
     1230                    wp_update_php_annotation( '</p><p><em>', '</em>' );
     1231                } elseif ( current_user_can( 'update_core' ) ) {
     1232                    printf(
     1233                        /* translators: %s: URL to WordPress Updates screen. */
     1234                        ' ' . __( '<a href="%s">Please update WordPress</a>.' ),
     1235                        self_admin_url( 'update-core.php' )
     1236                    );
     1237                } elseif ( current_user_can( 'update_php' ) ) {
     1238                    printf(
     1239                        /* translators: %s: URL to Update PHP page. */
     1240                        ' ' . __( '<a href="%s">Learn more about updating PHP</a>.' ),
     1241                        esc_url( wp_get_update_php_url() )
     1242                    );
     1243                    wp_update_php_annotation( '</p><p><em>', '</em>' );
     1244                }
     1245            } elseif ( ! $compatible_wp ) {
     1246                _e( 'This plugin doesn&#8217;t work with your version of WordPress.' );
     1247                if ( current_user_can( 'update_core' ) ) {
     1248                    printf(
     1249                        /* translators: %s: URL to WordPress Updates screen. */
     1250                        ' ' . __( '<a href="%s">Please update WordPress</a>.' ),
     1251                        self_admin_url( 'update-core.php' )
     1252                    );
     1253                }
     1254            } elseif ( ! $compatible_php ) {
     1255                _e( 'This plugin doesn&#8217;t work with your version of PHP.' );
     1256                if ( current_user_can( 'update_php' ) ) {
     1257                    printf(
     1258                        /* translators: %s: URL to Update PHP page. */
     1259                        ' ' . __( '<a href="%s">Learn more about updating PHP</a>.' ),
     1260                        esc_url( wp_get_update_php_url() )
     1261                    );
     1262                    wp_update_php_annotation( '</p><p><em>', '</em>' );
     1263                }
     1264            }
     1265
     1266            echo '</p></div></td></tr>';
     1267        }
     1268
    11931269        /**
    11941270         * Fires after each row in the Plugins list table.
Note: See TracChangeset for help on using the changeset viewer.