Make WordPress Core

Ticket #43986: 43986v2-1.diff

File 43986v2-1.diff, 2.8 KB (added by afragen, 6 years ago)

This patch removes the extra stuff from the plugin action links and adds it to the bottom of the plugin card via a new action hook.

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

    diff --git src/wp-admin/includes/class-wp-plugin-install-list-table.php src/wp-admin/includes/class-wp-plugin-install-list-table.php
    index a19729b1d4..47be0dde3c 100644
    class WP_Plugin_Install_List_Table extends WP_List_Table { 
    456456
    457457                $group = null;
    458458
     459                $this->load_requires_php();
     460
    459461                foreach ( (array) $this->items as $plugin ) {
    460462                        if ( is_object( $plugin ) ) {
    461463                                $plugin = (array) $plugin;
    class WP_Plugin_Install_List_Table extends WP_List_Table { 
    674676                                        } else {
    675677                                                echo '<span class="compatibility-compatible">' . __( '<strong>Compatible</strong> with your version of WordPress' ) . '</span>';
    676678                                        }
     679
     680                                        /**
     681                                         * Add additional compatibility information to bottom of plugin card.
     682                                         *
     683                                         * @since 4.9.x
     684                                         *
     685                                         * @param array $plugin Readme.txt data from current plugin.
     686                                         */
     687                                        do_action( 'plugin_install_compatibilty_information', $plugin );
    677688                                        ?>
    678689                                </div>
    679690                        </div>
    class WP_Plugin_Install_List_Table extends WP_List_Table { 
    686697                        echo '</div></div>';
    687698                }
    688699        }
     700
     701        /**
     702         * Loads the filter hook to disable the plugin install button if PHP version not sufficient.
     703         */
     704        public function load_requires_php(){
     705                add_filter( 'plugin_install_action_links', array( $this, 'disable_install_button' ), 10, 2 );
     706                add_filter( 'wp_ajax_search-install-plugins', array( $this, 'disable_install_button' ), 10, 2 );
     707                add_action( 'plugin_install_compatibilty_information', array( $this, 'add_compatibility_text' ), 10, 1 );
     708        }
     709
     710        /**
     711         * Filter plugin action links in Install Plugin page.
     712         *
     713         * @param array $action_links
     714         * @param array $plugin
     715         *
     716         * @return array $action_links
     717         */
     718        public function disable_install_button( $action_links, $plugin ) {
     719                $disable_button = '<button type="button" class="button button-disabled" disabled="disabled">';
     720                $disable_button .= __( 'Cannot install' );
     721                $disable_button .= '</button>';
     722
     723                if ( $plugin['requires_php'] &&
     724                     version_compare( PHP_VERSION, $plugin['requires_php'], '<=' )
     725                ) {
     726                        $action_links[0] = $disable_button;
     727                }
     728
     729                return $action_links;
     730        }
     731
     732        /**
     733         * Add PHP version compatibility text to plugin card bottom.
     734         *
     735         * @uses `plugin_install_compatibilty_information` action hook.
     736         *
     737         * @param mixed $plugin Current plugin data.
     738         *
     739         * @return string
     740         */
     741        public function add_compatibility_text( $plugin ) {
     742                if ( $plugin['requires_php'] &&
     743                     version_compare( PHP_VERSION, $plugin['requires_php'], '<=' )
     744                ) {
     745                        printf( '<br><span class="compatibility-incompatible">' . __( '<strong>Incompatible</strong> with your version of PHP, PHP v%s required.' ) . '</span>', $plugin['requires_php'] );
     746                }
     747        }
     748
    689749}