diff --git a/includes/Admin/Admin_Page.php b/includes/Admin/Admin_Page.php index 8af87b65b..c2b40c008 100644 --- a/includes/Admin/Admin_Page.php +++ b/includes/Admin/Admin_Page.php @@ -21,6 +21,7 @@ class Admin_Page { */ public function add_hooks() { add_action( 'admin_menu', array( $this, 'add_page' ) ); + add_filter( 'plugin_action_links', array( $this, 'filter_plugin_action_links' ), 10, 2 ); } /** @@ -69,6 +70,31 @@ private function get_available_plugins() { public function render_page() { $available_plugins = $this->get_available_plugins(); + $selected_plugin_basename = filter_input( INPUT_GET, 'plugin', FILTER_SANITIZE_STRING ); + require WP_PLUGIN_CHECK_PLUGIN_DIR_PATH . '/templates/admin-page.php'; } + + /** + * Adds "check this plugin" link in the plugins list table. + * + * @since n.e.x.t + * + * @param array $actions List of actions. + * @param string $plugin_file Plugin main file. + * @return array The modified list of actions. + */ + public function filter_plugin_action_links( $actions, $plugin_file ) { + + if ( current_user_can( 'activate_plugins' ) ) { + + $actions[] = sprintf( + '%2$s', + esc_url( admin_url() . 'tools.php?page=plugin-check&plugin=' . $plugin_file ), + esc_html__( 'Check this plugin', 'plugin-check' ) + ); + } + + return $actions; + } } diff --git a/templates/admin-page.php b/templates/admin-page.php index 009312801..268c0eeaf 100644 --- a/templates/admin-page.php +++ b/templates/admin-page.php @@ -25,7 +25,7 @@ admin_page->filter_plugin_action_links( array(), $base_file ); + $this->assertEmpty( $action_links ); + + /** Administrator check */ + $admin_user = self::factory()->user->create( array( 'role' => 'administrator' ) ); + + if ( is_multisite() ) { + grant_super_admin( $admin_user ); + } + wp_set_current_user( $admin_user ); + $action_links = $this->admin_page->filter_plugin_action_links( array(), $base_file ); + + $this->assertEquals( + sprintf( + '%2$s', + esc_url( admin_url() . 'tools.php?page=plugin-check&plugin=' . $base_file ), + esc_html__( 'Check this plugin', 'plugin-check' ) + ), + $action_links[0] + ); + } }