2010-10-24 22:57:43 -04:00
< ? php
/**
2015-10-17 11:13:25 -04:00
* List Table API : WP_Plugins_List_Table class
2010-10-24 22:57:43 -04:00
*
* @ package WordPress
2015-10-17 11:13:25 -04:00
* @ subpackage Administration
* @ since 3.1 . 0
*/
/**
* Core class used to implement displaying installed plugins in a list table .
*
2010-10-25 00:04:18 -04:00
* @ since 3.1 . 0
2011-01-16 16:47:24 -05:00
* @ access private
2015-10-17 11:13:25 -04:00
*
* @ see WP_List_Table
2010-10-24 22:57:43 -04:00
*/
2010-11-04 04:07:03 -04:00
class WP_Plugins_List_Table extends WP_List_Table {
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
/**
* Whether to show the auto - updates UI .
*
* @ since 5.5 . 0
*
* @ var bool True if auto - updates UI is to be shown , false otherwise .
*/
protected $show_autoupdates = true ;
2010-10-24 22:57:43 -04:00
2014-08-09 22:18:17 -04:00
/**
* Constructor .
2014-09-04 11:23:16 -04:00
*
2014-08-09 22:18:17 -04:00
* @ since 3.1 . 0
*
* @ see WP_List_Table :: __construct () for more information on default arguments .
*
2015-05-28 17:41:30 -04:00
* @ global string $status
* @ global int $page
*
2014-08-09 22:18:17 -04:00
* @ param array $args An associative array of arguments .
2014-09-04 11:23:16 -04:00
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
public function __construct ( $args = array () ) {
2010-10-24 22:57:43 -04:00
global $status , $page ;
2017-11-30 18:11:00 -05:00
parent :: __construct (
array (
'plural' => 'plugins' ,
'screen' => isset ( $args [ 'screen' ] ) ? $args [ 'screen' ] : null ,
)
);
2012-09-19 08:43:31 -04:00
General: Remove “whitelist” and “blacklist” in favor of more clear and inclusive language.
“The WordPress open source community cares about diversity. We strive to maintain a welcoming environment where everyone can feel included.”
With this commit, all occurrences of “whitelist” and “blacklist” (with the single exception of the `$new_whitelist_options` global variable) are removed. A new ticket has been opened to explore renaming the `$new_whitelist_options` variable (#50434).
Changing to more specific names or rewording sentences containing these terms not only makes the code more inclusive, but also helps provide clarity. These terms are often ambiguous. What is being blocked or allowed is not always immediately clear. This can make it more difficult for non-native English speakers to read through the codebase.
Words matter. If one contributor feels more welcome because these terms are removed, this was worth the effort.
Props strangerstudios, jorbin, desrosj, joemcgill, timothyblynjacobs, ocean90, ayeshrajans, davidbaumwald, earnjam.
See #48900, #50434.
Fixes #50413.
Built from https://develop.svn.wordpress.org/trunk@48121
git-svn-id: http://core.svn.wordpress.org/trunk@47890 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-06-22 13:26:13 -04:00
$allowed_statuses = array ( 'active' , 'inactive' , 'recently_activated' , 'upgrade' , 'mustuse' , 'dropins' , 'search' , 'paused' , 'auto-update-enabled' , 'auto-update-disabled' );
2020-04-04 23:02:11 -04:00
2011-09-29 01:54:05 -04:00
$status = 'all' ;
General: Remove “whitelist” and “blacklist” in favor of more clear and inclusive language.
“The WordPress open source community cares about diversity. We strive to maintain a welcoming environment where everyone can feel included.”
With this commit, all occurrences of “whitelist” and “blacklist” (with the single exception of the `$new_whitelist_options` global variable) are removed. A new ticket has been opened to explore renaming the `$new_whitelist_options` variable (#50434).
Changing to more specific names or rewording sentences containing these terms not only makes the code more inclusive, but also helps provide clarity. These terms are often ambiguous. What is being blocked or allowed is not always immediately clear. This can make it more difficult for non-native English speakers to read through the codebase.
Words matter. If one contributor feels more welcome because these terms are removed, this was worth the effort.
Props strangerstudios, jorbin, desrosj, joemcgill, timothyblynjacobs, ocean90, ayeshrajans, davidbaumwald, earnjam.
See #48900, #50434.
Fixes #50413.
Built from https://develop.svn.wordpress.org/trunk@48121
git-svn-id: http://core.svn.wordpress.org/trunk@47890 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-06-22 13:26:13 -04:00
if ( isset ( $_REQUEST [ 'plugin_status' ] ) && in_array ( $_REQUEST [ 'plugin_status' ], $allowed_statuses , true ) ) {
2011-09-29 01:54:05 -04:00
$status = $_REQUEST [ 'plugin_status' ];
2017-11-30 18:11:00 -05:00
}
2011-06-01 12:03:41 -04:00
2017-11-30 18:11:00 -05:00
if ( isset ( $_REQUEST [ 's' ] ) ) {
$_SERVER [ 'REQUEST_URI' ] = add_query_arg ( 's' , wp_unslash ( $_REQUEST [ 's' ] ) );
}
2011-06-01 12:03:41 -04:00
2010-11-04 16:49:30 -04:00
$page = $this -> get_pagenum ();
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
2020-06-23 18:58:09 -04:00
$this -> show_autoupdates = wp_is_auto_update_enabled_for_type ( 'plugin' )
&& current_user_can ( 'update_plugins' )
&& ( ! is_multisite () || $this -> screen -> in_admin ( 'network' ) )
&& ! in_array ( $status , array ( 'mustuse' , 'dropins' ), true );
2010-10-24 22:57:43 -04:00
}
2011-06-10 19:01:45 -04:00
2015-05-29 16:17:26 -04:00
/**
* @ return array
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
protected function get_table_classes () {
2011-02-14 22:43:47 -05:00
return array ( 'widefat' , $this -> _args [ 'plural' ] );
}
2010-10-24 22:57:43 -04:00
2015-05-29 16:17:26 -04:00
/**
* @ return bool
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
public function ajax_user_can () {
2017-11-30 18:11:00 -05:00
return current_user_can ( 'activate_plugins' );
2010-10-24 22:57:43 -04:00
}
2015-05-28 17:41:30 -04:00
/**
* @ global string $status
2016-03-03 05:01:25 -05:00
* @ global array $plugins
2015-05-28 17:41:30 -04:00
* @ global array $totals
* @ global int $page
* @ global string $orderby
* @ global string $order
* @ global string $s
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
public function prepare_items () {
2010-10-24 22:57:43 -04:00
global $status , $plugins , $totals , $page , $orderby , $order , $s ;
2016-01-14 15:06:25 -05:00
wp_reset_vars ( array ( 'orderby' , 'order' ) );
2010-10-24 22:57:43 -04:00
2014-03-02 15:48:14 -05:00
/**
2016-07-04 18:45:29 -04:00
* Filters the full array of plugins to list in the Plugins list table .
2014-03-02 15:48:14 -05:00
*
* @ since 3.0 . 0
*
* @ see get_plugins ()
*
2016-03-03 04:51:25 -05:00
* @ param array $all_plugins An array of plugins to display in the list table .
2014-03-02 15:48:14 -05:00
*/
2016-03-03 04:51:25 -05:00
$all_plugins = apply_filters ( 'all_plugins' , get_plugins () );
2010-10-24 22:57:43 -04:00
$plugins = array (
2016-03-03 04:51:25 -05:00
'all' => $all_plugins ,
'search' => array (),
'active' => array (),
'inactive' => array (),
2010-10-24 22:57:43 -04:00
'recently_activated' => array (),
2016-03-03 04:51:25 -05:00
'upgrade' => array (),
'mustuse' => array (),
'dropins' => array (),
Bootstrap/Load: Introduce a recovery mode for fixing fatal errors.
Using the new fatal handler introduced in [44962], an email is sent to the admin when a fatal error occurs. This email includes a secret link to enter recovery mode. When clicked, the link will be validated and on success a cookie will be placed on the client, enabling recovery mode for that user. This functionality is executed early before plugins and themes are loaded, in order to be unaffected by potential fatal errors these might be causing.
When in recovery mode, broken plugins and themes will be paused for that client, so that they are able to access the admin backend despite of these errors. They are notified about the broken extensions and the errors caused, and can then decide whether they would like to temporarily deactivate the extension or fix the problem and resume the extension.
A link in the admin bar allows the client to exit recovery mode.
Props timothyblynjacobs, afragen, flixos90, nerrad, miss_jwo, schlessera, spacedmonkey, swissspidy.
Fixes #46130, #44458.
Built from https://develop.svn.wordpress.org/trunk@44973
git-svn-id: http://core.svn.wordpress.org/trunk@44804 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-21 17:53:51 -04:00
'paused' => array (),
2010-10-24 22:57:43 -04:00
);
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
if ( $this -> show_autoupdates ) {
$auto_updates = ( array ) get_site_option ( 'auto_update_plugins' , array () );
$plugins [ 'auto-update-enabled' ] = array ();
$plugins [ 'auto-update-disabled' ] = array ();
}
2010-10-24 22:57:43 -04:00
2012-09-19 08:43:31 -04:00
$screen = $this -> screen ;
2010-11-08 10:43:44 -05:00
2013-03-08 22:52:27 -05:00
if ( ! is_multisite () || ( $screen -> in_admin ( 'network' ) && current_user_can ( 'manage_network_plugins' ) ) ) {
2014-03-02 15:48:14 -05:00
/**
2016-05-22 14:01:30 -04:00
* Filters whether to display the advanced plugins list table .
2014-03-02 15:48:14 -05:00
*
* There are two types of advanced plugins - must - use and drop - ins -
* which can be used in a single site or Multisite network .
*
* The $type parameter allows you to differentiate between the type of advanced
* plugins to filter the display of . Contexts include 'mustuse' and 'dropins' .
*
* @ since 3.0 . 0
*
* @ param bool $show Whether to show the advanced plugins for the specified
* plugin type . Default true .
* @ param string $type The plugin type . Accepts 'mustuse' , 'dropins' .
*/
if ( apply_filters ( 'show_advanced_plugins' , true , 'mustuse' ) ) {
2010-10-24 22:57:43 -04:00
$plugins [ 'mustuse' ] = get_mu_plugins ();
2014-03-02 15:48:14 -05:00
}
/** This action is documented in wp-admin/includes/class-wp-plugins-list-table.php */
2017-11-30 18:11:00 -05:00
if ( apply_filters ( 'show_advanced_plugins' , true , 'dropins' ) ) {
2010-10-24 22:57:43 -04:00
$plugins [ 'dropins' ] = get_dropins ();
2017-11-30 18:11:00 -05:00
}
2010-11-14 13:34:59 -05:00
2012-03-21 12:19:27 -04:00
if ( current_user_can ( 'update_plugins' ) ) {
$current = get_site_transient ( 'update_plugins' );
foreach ( ( array ) $plugins [ 'all' ] as $plugin_file => $plugin_data ) {
if ( isset ( $current -> response [ $plugin_file ] ) ) {
$plugins [ 'all' ][ $plugin_file ][ 'update' ] = true ;
2017-11-30 18:11:00 -05:00
$plugins [ 'upgrade' ][ $plugin_file ] = $plugins [ 'all' ][ $plugin_file ];
2012-03-21 12:19:27 -04:00
}
}
2010-11-14 13:34:59 -05:00
}
2010-10-24 22:57:43 -04:00
}
2015-10-13 18:12:25 -04:00
if ( ! $screen -> in_admin ( 'network' ) ) {
$show = current_user_can ( 'manage_network_plugins' );
/**
2016-05-22 14:01:30 -04:00
* Filters whether to display network - active plugins alongside plugins active for the current site .
2015-10-13 18:12:25 -04:00
*
* This also controls the display of inactive network - only plugins ( plugins with
* " Network: true " in the plugin header ) .
*
* Plugins cannot be network - activated or network - deactivated from this screen .
*
* @ since 4.4 . 0
*
* @ param bool $show Whether to show network - active plugins . Default is whether the current
* user can manage network plugins ( ie . a Super Admin ) .
*/
$show_network_active = apply_filters ( 'show_network_active_plugins' , $show );
}
2015-09-25 15:16:27 -04:00
if ( $screen -> in_admin ( 'network' ) ) {
2015-10-07 13:11:25 -04:00
$recently_activated = get_site_option ( 'recently_activated' , array () );
2015-09-25 15:16:27 -04:00
} else {
2012-04-18 23:41:29 -04:00
$recently_activated = get_option ( 'recently_activated' , array () );
2015-09-25 15:16:27 -04:00
}
foreach ( $recently_activated as $key => $time ) {
if ( $time + WEEK_IN_SECONDS < time () ) {
2017-11-30 18:11:00 -05:00
unset ( $recently_activated [ $key ] );
2015-09-25 15:16:27 -04:00
}
}
2010-10-24 22:57:43 -04:00
2015-09-25 15:16:27 -04:00
if ( $screen -> in_admin ( 'network' ) ) {
2015-10-07 13:11:25 -04:00
update_site_option ( 'recently_activated' , $recently_activated );
2015-09-25 15:16:27 -04:00
} else {
2012-04-18 23:41:29 -04:00
update_option ( 'recently_activated' , $recently_activated );
}
2014-08-09 10:46:17 -04:00
2014-07-18 16:49:17 -04:00
$plugin_info = get_site_transient ( 'update_plugins' );
2010-10-24 22:57:43 -04:00
foreach ( ( array ) $plugins [ 'all' ] as $plugin_file => $plugin_data ) {
2014-07-18 16:49:17 -04:00
// Extra info if known. array_merge() ensures $plugin_data has precedence if keys collide.
if ( isset ( $plugin_info -> response [ $plugin_file ] ) ) {
2020-07-28 14:28:06 -04:00
$plugin_data = array_merge ( ( array ) $plugin_info -> response [ $plugin_file ], array ( 'update-supported' => true ), $plugin_data );
2014-07-18 16:49:17 -04:00
} elseif ( isset ( $plugin_info -> no_update [ $plugin_file ] ) ) {
2020-07-28 14:28:06 -04:00
$plugin_data = array_merge ( ( array ) $plugin_info -> no_update [ $plugin_file ], array ( 'update-supported' => true ), $plugin_data );
} elseif ( empty ( $plugin_data [ 'update-supported' ] ) ) {
$plugin_data [ 'update-supported' ] = false ;
Upgrade/Install: Enhance auto-updates to be disabled for plugins that don't suport updates.
This removes the toggle UI when updates aren't available. When plugins use the filter, the UI is updated to show that they are being controlled via code. And then removed entirely when not available.
See #50798.
Fixes #50280.
Props elrae, pbiron, SergeyBiryukov, audrasjb, azaozz, StephenCronin, whyisjake, dd32, TimothyBlynJacobs, desrosj.
Built from https://develop.svn.wordpress.org/trunk@48669
git-svn-id: http://core.svn.wordpress.org/trunk@48431 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-28 12:32:01 -04:00
}
/*
* Create the payload that ' s used for the auto_update_plugin filter .
* This is the same data contained within $plugin_info -> ( response | no_update ) however
* not all plugins will be contained in those keys , this avoids unexpected warnings .
*/
$filter_payload = array (
'id' => $plugin_file ,
'slug' => '' ,
'plugin' => $plugin_file ,
'new_version' => '' ,
'url' => '' ,
'package' => '' ,
'icons' => array (),
'banners' => array (),
'banners_rtl' => array (),
'tested' => '' ,
'requires_php' => '' ,
'compatibility' => new stdClass (),
);
$filter_payload = ( object ) array_merge ( $filter_payload , array_intersect_key ( $plugin_data , $filter_payload ) );
/** This action is documented in wp-admin/includes/class-wp-automatic-updater.php */
$auto_update_forced = apply_filters ( 'auto_update_plugin' , null , $filter_payload );
if ( ! is_null ( $auto_update_forced ) ) {
$plugin_data [ 'auto-update-forced' ] = $auto_update_forced ;
}
$plugins [ 'all' ][ $plugin_file ] = $plugin_data ;
// Make sure that $plugins['upgrade'] also receives the extra info since it is used on ?plugin_status=upgrade.
if ( isset ( $plugins [ 'upgrade' ][ $plugin_file ] ) ) {
$plugins [ 'upgrade' ][ $plugin_file ] = $plugin_data ;
2014-07-18 16:49:17 -04:00
}
2020-01-28 19:45:18 -05:00
// Filter into individual sections.
2014-02-28 15:22:14 -05:00
if ( is_multisite () && ! $screen -> in_admin ( 'network' ) && is_network_only_plugin ( $plugin_file ) && ! is_plugin_active ( $plugin_file ) ) {
2015-10-13 18:12:25 -04:00
if ( $show_network_active ) {
2020-01-28 19:45:18 -05:00
// On the non-network screen, show inactive network-only plugins if allowed.
2015-10-13 18:12:25 -04:00
$plugins [ 'inactive' ][ $plugin_file ] = $plugin_data ;
} else {
2020-01-28 19:45:18 -05:00
// On the non-network screen, filter out network-only plugins as long as they're not individually active.
2015-10-13 18:12:25 -04:00
unset ( $plugins [ 'all' ][ $plugin_file ] );
}
2013-03-08 22:52:27 -05:00
} elseif ( ! $screen -> in_admin ( 'network' ) && is_plugin_active_for_network ( $plugin_file ) ) {
2015-10-13 18:12:25 -04:00
if ( $show_network_active ) {
2020-01-28 19:45:18 -05:00
// On the non-network screen, show network-active plugins if allowed.
2015-10-13 18:12:25 -04:00
$plugins [ 'active' ][ $plugin_file ] = $plugin_data ;
} else {
2020-01-28 19:45:18 -05:00
// On the non-network screen, filter out network-active plugins.
2015-10-13 18:12:25 -04:00
unset ( $plugins [ 'all' ][ $plugin_file ] );
}
2013-03-08 22:52:27 -05:00
} elseif ( ( ! $screen -> in_admin ( 'network' ) && is_plugin_active ( $plugin_file ) )
|| ( $screen -> in_admin ( 'network' ) && is_plugin_active_for_network ( $plugin_file ) ) ) {
2020-01-28 19:45:18 -05:00
// On the non-network screen, populate the active list with plugins that are individually activated.
// On the network admin screen, populate the active list with plugins that are network-activated.
2010-10-24 22:57:43 -04:00
$plugins [ 'active' ][ $plugin_file ] = $plugin_data ;
Bootstrap/Load: Introduce a recovery mode for fixing fatal errors.
Using the new fatal handler introduced in [44962], an email is sent to the admin when a fatal error occurs. This email includes a secret link to enter recovery mode. When clicked, the link will be validated and on success a cookie will be placed on the client, enabling recovery mode for that user. This functionality is executed early before plugins and themes are loaded, in order to be unaffected by potential fatal errors these might be causing.
When in recovery mode, broken plugins and themes will be paused for that client, so that they are able to access the admin backend despite of these errors. They are notified about the broken extensions and the errors caused, and can then decide whether they would like to temporarily deactivate the extension or fix the problem and resume the extension.
A link in the admin bar allows the client to exit recovery mode.
Props timothyblynjacobs, afragen, flixos90, nerrad, miss_jwo, schlessera, spacedmonkey, swissspidy.
Fixes #46130, #44458.
Built from https://develop.svn.wordpress.org/trunk@44973
git-svn-id: http://core.svn.wordpress.org/trunk@44804 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-21 17:53:51 -04:00
if ( ! $screen -> in_admin ( 'network' ) && is_plugin_paused ( $plugin_file ) ) {
$plugins [ 'paused' ][ $plugin_file ] = $plugin_data ;
}
2010-10-24 22:57:43 -04:00
} else {
2015-09-25 15:16:27 -04:00
if ( isset ( $recently_activated [ $plugin_file ] ) ) {
2020-01-28 19:45:18 -05:00
// Populate the recently activated list with plugins that have been recently activated.
2010-10-24 22:57:43 -04:00
$plugins [ 'recently_activated' ][ $plugin_file ] = $plugin_data ;
2014-02-28 15:22:14 -05:00
}
2020-01-28 19:45:18 -05:00
// Populate the inactive list with plugins that aren't activated.
2010-10-24 22:57:43 -04:00
$plugins [ 'inactive' ][ $plugin_file ] = $plugin_data ;
}
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
if ( $this -> show_autoupdates ) {
Upgrade/Install: Ensure the proper count of plugins that have auto-update enabled.
As certain plugins may not support updates, this count needs to accurately reflect that in the navbar.
Fixes 50808.
Props knutsp, audrasjb, pbiron, dd32, apedog, afragen, chriscct7, garyc40, whyisjake, SergeyBiryukov.
Built from https://develop.svn.wordpress.org/trunk@48703
git-svn-id: http://core.svn.wordpress.org/trunk@48465 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-31 13:21:04 -04:00
$enabled = in_array ( $plugin_file , $auto_updates , true ) && $plugin_data [ 'update-supported' ];
if ( isset ( $plugin_data [ 'auto-update-forced' ] ) ) {
$enabled = ( bool ) $plugin_data [ 'auto-update-forced' ];
}
if ( $enabled ) {
$plugins [ 'auto-update-enabled' ][ $plugin_file ] = $plugin_data ;
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
} else {
Upgrade/Install: Ensure the proper count of plugins that have auto-update enabled.
As certain plugins may not support updates, this count needs to accurately reflect that in the navbar.
Fixes 50808.
Props knutsp, audrasjb, pbiron, dd32, apedog, afragen, chriscct7, garyc40, whyisjake, SergeyBiryukov.
Built from https://develop.svn.wordpress.org/trunk@48703
git-svn-id: http://core.svn.wordpress.org/trunk@48465 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-31 13:21:04 -04:00
$plugins [ 'auto-update-disabled' ][ $plugin_file ] = $plugin_data ;
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
}
}
2010-10-24 22:57:43 -04:00
}
2016-01-14 15:06:25 -05:00
if ( strlen ( $s ) ) {
2017-11-30 18:11:00 -05:00
$status = 'search' ;
2013-09-05 12:34:09 -04:00
$plugins [ 'search' ] = array_filter ( $plugins [ 'all' ], array ( $this , '_search_callback' ) );
2010-10-24 22:57:43 -04:00
}
$totals = array ();
2017-11-30 18:11:00 -05:00
foreach ( $plugins as $type => $list ) {
2010-10-24 22:57:43 -04:00
$totals [ $type ] = count ( $list );
2017-11-30 18:11:00 -05:00
}
2010-10-24 22:57:43 -04:00
2020-04-04 23:02:11 -04:00
if ( empty ( $plugins [ $status ] ) && ! in_array ( $status , array ( 'all' , 'search' ), true ) ) {
2010-10-24 22:57:43 -04:00
$status = 'all' ;
2017-11-30 18:11:00 -05:00
}
2010-10-24 22:57:43 -04:00
2010-11-14 13:34:59 -05:00
$this -> items = array ();
foreach ( $plugins [ $status ] as $plugin_file => $plugin_data ) {
2020-01-28 19:45:18 -05:00
// Translate, don't apply markup, sanitize HTML.
2017-11-30 18:11:00 -05:00
$this -> items [ $plugin_file ] = _get_plugin_data_markup_translate ( $plugin_file , $plugin_data , false , true );
2010-11-14 13:34:59 -05:00
}
2010-10-24 22:57:43 -04:00
$total_this_page = $totals [ $status ];
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
$js_plugins = array ();
foreach ( $plugins as $key => $list ) {
$js_plugins [ $key ] = array_keys ( ( array ) $list );
}
2017-11-30 18:11:00 -05:00
wp_localize_script (
2018-08-16 21:51:36 -04:00
'updates' ,
'_wpUpdatesItemCounts' ,
array (
2017-11-30 18:11:00 -05:00
'plugins' => $js_plugins ,
'totals' => wp_get_update_data (),
)
);
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
2015-06-30 18:31:25 -04:00
if ( ! $orderby ) {
$orderby = 'Name' ;
} else {
2010-10-24 22:57:43 -04:00
$orderby = ucfirst ( $orderby );
}
2015-06-30 18:31:25 -04:00
$order = strtoupper ( $order );
uasort ( $this -> items , array ( $this , '_order_callback' ) );
2011-06-18 11:02:58 -04:00
$plugins_per_page = $this -> get_items_per_page ( str_replace ( '-' , '_' , $screen -> id . '_per_page' ), 999 );
2010-10-24 22:57:43 -04:00
$start = ( $page - 1 ) * $plugins_per_page ;
2017-11-30 18:11:00 -05:00
if ( $total_this_page > $plugins_per_page ) {
2010-10-24 22:57:43 -04:00
$this -> items = array_slice ( $this -> items , $start , $plugins_per_page );
2017-11-30 18:11:00 -05:00
}
2010-10-24 22:57:43 -04:00
2017-11-30 18:11:00 -05:00
$this -> set_pagination_args (
array (
'total_items' => $total_this_page ,
'per_page' => $plugins_per_page ,
)
);
2010-10-24 22:57:43 -04:00
}
2014-11-30 19:33:23 -05:00
/**
2016-02-17 15:15:26 -05:00
* @ global string $s URL encoded search term .
2016-01-14 15:06:25 -05:00
*
2014-11-30 19:33:23 -05:00
* @ param array $plugin
2015-05-29 16:17:26 -04:00
* @ return bool
2014-11-30 19:33:23 -05:00
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
public function _search_callback ( $plugin ) {
2016-01-14 15:06:25 -05:00
global $s ;
2010-10-24 22:57:43 -04:00
2014-03-11 18:24:15 -04:00
foreach ( $plugin as $value ) {
2016-02-17 15:15:26 -05:00
if ( is_string ( $value ) && false !== stripos ( strip_tags ( $value ), urldecode ( $s ) ) ) {
2010-10-24 22:57:43 -04:00
return true ;
2014-03-11 18:24:15 -04:00
}
}
2010-10-24 22:57:43 -04:00
return false ;
}
2014-11-30 19:33:23 -05:00
/**
* @ global string $orderby
* @ global string $order
* @ param array $plugin_a
* @ param array $plugin_b
* @ return int
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
public function _order_callback ( $plugin_a , $plugin_b ) {
2010-10-24 22:57:43 -04:00
global $orderby , $order ;
2017-11-30 18:11:00 -05:00
$a = $plugin_a [ $orderby ];
$b = $plugin_b [ $orderby ];
2010-10-24 22:57:43 -04:00
2017-11-30 18:11:00 -05:00
if ( $a == $b ) {
2010-10-24 22:57:43 -04:00
return 0 ;
2017-11-30 18:11:00 -05:00
}
2010-10-24 22:57:43 -04:00
2015-09-22 02:06:25 -04:00
if ( 'DESC' === $order ) {
2015-07-03 17:53:25 -04:00
return strcasecmp ( $b , $a );
} else {
return strcasecmp ( $a , $b );
}
2010-10-24 22:57:43 -04:00
}
2015-05-28 17:41:30 -04:00
/**
* @ global array $plugins
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
public function no_items () {
2010-10-24 22:57:43 -04:00
global $plugins ;
2015-12-06 17:23:25 -05:00
if ( ! empty ( $_REQUEST [ 's' ] ) ) {
2016-02-17 15:15:26 -05:00
$s = esc_html ( wp_unslash ( $_REQUEST [ 's' ] ) );
2015-12-06 17:23:25 -05:00
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin search term. */
2015-12-06 17:23:25 -05:00
printf ( __ ( 'No plugins found for “%s”.' ), $s );
// We assume that somebody who can install plugins in multisite is experienced enough to not need this helper link.
if ( ! is_multisite () && current_user_can ( 'install_plugins' ) ) {
echo ' <a href="' . esc_url ( admin_url ( 'plugin-install.php?tab=search&s=' . urlencode ( $s ) ) ) . '">' . __ ( 'Search for plugins in the WordPress Plugin Directory.' ) . '</a>' ;
}
2017-11-30 18:11:00 -05:00
} elseif ( ! empty ( $plugins [ 'all' ] ) ) {
2010-10-24 22:57:43 -04:00
_e ( 'No plugins found.' );
2017-11-30 18:11:00 -05:00
} else {
2020-06-03 06:51:13 -04:00
_e ( 'No plugins are currently available.' );
2017-11-30 18:11:00 -05:00
}
2010-10-24 22:57:43 -04:00
}
2016-07-11 17:50:31 -04:00
/**
2016-07-23 07:00:36 -04:00
* Displays the search box .
2016-07-11 17:50:31 -04:00
*
* @ since 4.6 . 0
*
2016-07-23 07:00:36 -04:00
* @ param string $text The 'submit' button label .
* @ param string $input_id ID attribute value for the search input field .
2016-07-11 17:50:31 -04:00
*/
public function search_box ( $text , $input_id ) {
if ( empty ( $_REQUEST [ 's' ] ) && ! $this -> has_items () ) {
return ;
}
$input_id = $input_id . '-search-input' ;
if ( ! empty ( $_REQUEST [ 'orderby' ] ) ) {
echo '<input type="hidden" name="orderby" value="' . esc_attr ( $_REQUEST [ 'orderby' ] ) . '" />' ;
}
if ( ! empty ( $_REQUEST [ 'order' ] ) ) {
echo '<input type="hidden" name="order" value="' . esc_attr ( $_REQUEST [ 'order' ] ) . '" />' ;
}
?>
< p class = " search-box " >
2016-07-23 07:00:36 -04:00
< label class = " screen-reader-text " for = " <?php echo esc_attr( $input_id ); ?> " >< ? php echo $text ; ?> :</label>
< input type = " search " id = " <?php echo esc_attr( $input_id ); ?> " class = " wp-filter-search " name = " s " value = " <?php _admin_search_query(); ?> " placeholder = " <?php esc_attr_e( 'Search installed plugins...' ); ?> " />
2016-09-28 15:54:28 -04:00
< ? php submit_button ( $text , 'hide-if-js' , '' , false , array ( 'id' => 'search-submit' ) ); ?>
2016-07-11 17:50:31 -04:00
</ p >
< ? php
}
2015-05-28 17:41:30 -04:00
/**
* @ global string $status
* @ return array
*/
2014-07-11 23:27:14 -04:00
public function get_columns () {
2010-10-24 22:57:43 -04:00
global $status ;
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
$columns = array (
2020-04-04 23:02:11 -04:00
'cb' => ! in_array ( $status , array ( 'mustuse' , 'dropins' ), true ) ? '<input type="checkbox" />' : '' ,
2010-10-24 22:57:43 -04:00
'name' => __ ( 'Plugin' ),
'description' => __ ( 'Description' ),
);
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
if ( $this -> show_autoupdates ) {
$columns [ 'auto-updates' ] = __ ( 'Automatic Updates' );
}
return $columns ;
2010-10-24 22:57:43 -04:00
}
2015-05-29 16:17:26 -04:00
/**
* @ return array
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
protected function get_sortable_columns () {
2011-01-20 17:09:46 -05:00
return array ();
2010-10-24 22:57:43 -04:00
}
2015-05-28 17:41:30 -04:00
/**
* @ global array $totals
* @ global string $status
* @ return array
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
protected function get_views () {
2010-10-24 22:57:43 -04:00
global $totals , $status ;
$status_links = array ();
foreach ( $totals as $type => $count ) {
2017-11-30 18:11:00 -05:00
if ( ! $count ) {
2010-10-24 22:57:43 -04:00
continue ;
2017-11-30 18:11:00 -05:00
}
2010-10-24 22:57:43 -04:00
switch ( $type ) {
case 'all' :
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of plugins. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
$text = _nx (
'All <span class="count">(%s)</span>' ,
'All <span class="count">(%s)</span>' ,
$count ,
'plugins'
);
2010-10-24 22:57:43 -04:00
break ;
case 'active' :
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of plugins. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
$text = _n (
'Active <span class="count">(%s)</span>' ,
'Active <span class="count">(%s)</span>' ,
$count
);
2010-10-24 22:57:43 -04:00
break ;
case 'recently_activated' :
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of plugins. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
$text = _n (
'Recently Active <span class="count">(%s)</span>' ,
'Recently Active <span class="count">(%s)</span>' ,
$count
);
2010-10-24 22:57:43 -04:00
break ;
case 'inactive' :
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of plugins. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
$text = _n (
'Inactive <span class="count">(%s)</span>' ,
'Inactive <span class="count">(%s)</span>' ,
$count
);
2010-10-24 22:57:43 -04:00
break ;
case 'mustuse' :
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of plugins. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
$text = _n (
'Must-Use <span class="count">(%s)</span>' ,
'Must-Use <span class="count">(%s)</span>' ,
$count
);
2010-10-24 22:57:43 -04:00
break ;
case 'dropins' :
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of plugins. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
$text = _n (
'Drop-in <span class="count">(%s)</span>' ,
'Drop-ins <span class="count">(%s)</span>' ,
$count
);
2010-10-24 22:57:43 -04:00
break ;
Bootstrap/Load: Introduce a recovery mode for fixing fatal errors.
Using the new fatal handler introduced in [44962], an email is sent to the admin when a fatal error occurs. This email includes a secret link to enter recovery mode. When clicked, the link will be validated and on success a cookie will be placed on the client, enabling recovery mode for that user. This functionality is executed early before plugins and themes are loaded, in order to be unaffected by potential fatal errors these might be causing.
When in recovery mode, broken plugins and themes will be paused for that client, so that they are able to access the admin backend despite of these errors. They are notified about the broken extensions and the errors caused, and can then decide whether they would like to temporarily deactivate the extension or fix the problem and resume the extension.
A link in the admin bar allows the client to exit recovery mode.
Props timothyblynjacobs, afragen, flixos90, nerrad, miss_jwo, schlessera, spacedmonkey, swissspidy.
Fixes #46130, #44458.
Built from https://develop.svn.wordpress.org/trunk@44973
git-svn-id: http://core.svn.wordpress.org/trunk@44804 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-21 17:53:51 -04:00
case 'paused' :
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of plugins. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
$text = _n (
'Paused <span class="count">(%s)</span>' ,
'Paused <span class="count">(%s)</span>' ,
$count
);
Bootstrap/Load: Introduce a recovery mode for fixing fatal errors.
Using the new fatal handler introduced in [44962], an email is sent to the admin when a fatal error occurs. This email includes a secret link to enter recovery mode. When clicked, the link will be validated and on success a cookie will be placed on the client, enabling recovery mode for that user. This functionality is executed early before plugins and themes are loaded, in order to be unaffected by potential fatal errors these might be causing.
When in recovery mode, broken plugins and themes will be paused for that client, so that they are able to access the admin backend despite of these errors. They are notified about the broken extensions and the errors caused, and can then decide whether they would like to temporarily deactivate the extension or fix the problem and resume the extension.
A link in the admin bar allows the client to exit recovery mode.
Props timothyblynjacobs, afragen, flixos90, nerrad, miss_jwo, schlessera, spacedmonkey, swissspidy.
Fixes #46130, #44458.
Built from https://develop.svn.wordpress.org/trunk@44973
git-svn-id: http://core.svn.wordpress.org/trunk@44804 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-21 17:53:51 -04:00
break ;
2010-10-24 22:57:43 -04:00
case 'upgrade' :
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of plugins. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
$text = _n (
'Update Available <span class="count">(%s)</span>' ,
'Update Available <span class="count">(%s)</span>' ,
$count
);
2010-10-24 22:57:43 -04:00
break ;
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
case 'auto-update-enabled' :
/* translators: %s: Number of plugins. */
$text = _n (
'Auto-updates Enabled <span class="count">(%s)</span>' ,
'Auto-updates Enabled <span class="count">(%s)</span>' ,
$count
);
break ;
case 'auto-update-disabled' :
/* translators: %s: Number of plugins. */
$text = _n (
'Auto-updates Disabled <span class="count">(%s)</span>' ,
'Auto-updates Disabled <span class="count">(%s)</span>' ,
$count
);
break ;
2010-10-24 22:57:43 -04:00
}
2011-01-05 23:11:14 -05:00
2015-09-22 02:06:25 -04:00
if ( 'search' !== $type ) {
2017-11-30 18:11:00 -05:00
$status_links [ $type ] = sprintf (
" <a href='%s'%s>%s</a> " ,
add_query_arg ( 'plugin_status' , $type , 'plugins.php' ),
2017-10-02 15:44:47 -04:00
( $type === $status ) ? ' class="current" aria-current="page"' : '' ,
2010-12-17 18:47:40 -05:00
sprintf ( $text , number_format_i18n ( $count ) )
2017-11-30 18:11:00 -05:00
);
2010-12-17 18:47:40 -05:00
}
2010-10-24 22:57:43 -04:00
}
return $status_links ;
}
2015-05-28 17:41:30 -04:00
/**
* @ global string $status
* @ return array
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
protected function get_bulk_actions () {
2010-10-24 22:57:43 -04:00
global $status ;
$actions = array ();
2010-10-29 15:09:04 -04:00
2020-05-16 14:42:12 -04:00
if ( 'active' !== $status ) {
2013-03-08 22:52:27 -05:00
$actions [ 'activate-selected' ] = $this -> screen -> in_admin ( 'network' ) ? __ ( 'Network Activate' ) : __ ( 'Activate' );
2017-11-30 18:11:00 -05:00
}
2010-10-29 15:09:04 -04:00
2020-05-16 14:42:12 -04:00
if ( 'inactive' !== $status && 'recent' !== $status ) {
2013-03-08 22:52:27 -05:00
$actions [ 'deactivate-selected' ] = $this -> screen -> in_admin ( 'network' ) ? __ ( 'Network Deactivate' ) : __ ( 'Deactivate' );
2017-11-30 18:11:00 -05:00
}
2010-10-29 15:09:04 -04:00
2017-11-30 18:11:00 -05:00
if ( ! is_multisite () || $this -> screen -> in_admin ( 'network' ) ) {
if ( current_user_can ( 'update_plugins' ) ) {
2010-10-29 15:09:04 -04:00
$actions [ 'update-selected' ] = __ ( 'Update' );
2017-11-30 18:11:00 -05:00
}
2020-04-16 13:02:08 -04:00
2020-05-16 14:42:12 -04:00
if ( current_user_can ( 'delete_plugins' ) && ( 'active' !== $status ) ) {
2010-10-29 15:09:04 -04:00
$actions [ 'delete-selected' ] = __ ( 'Delete' );
2017-11-30 18:11:00 -05:00
}
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
if ( $this -> show_autoupdates ) {
if ( 'auto-update-enabled' !== $status ) {
$actions [ 'enable-auto-update-selected' ] = __ ( 'Enable Auto-updates' );
}
if ( 'auto-update-disabled' !== $status ) {
$actions [ 'disable-auto-update-selected' ] = __ ( 'Disable Auto-updates' );
}
}
2010-10-28 04:30:37 -04:00
}
2010-10-24 22:57:43 -04:00
return $actions ;
}
2014-11-30 19:33:23 -05:00
/**
* @ global string $status
* @ param string $which
*/
2014-08-09 10:46:17 -04:00
public function bulk_actions ( $which = '' ) {
2010-10-24 22:57:43 -04:00
global $status ;
2020-04-04 23:02:11 -04:00
if ( in_array ( $status , array ( 'mustuse' , 'dropins' ), true ) ) {
2010-10-24 22:57:43 -04:00
return ;
2017-11-30 18:11:00 -05:00
}
2010-10-24 22:57:43 -04:00
2014-07-24 20:20:16 -04:00
parent :: bulk_actions ( $which );
2010-10-24 22:57:43 -04:00
}
2014-11-30 19:33:23 -05:00
/**
* @ global string $status
* @ param string $which
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
protected function extra_tablenav ( $which ) {
2010-10-24 22:57:43 -04:00
global $status ;
2020-04-04 23:02:11 -04:00
if ( ! in_array ( $status , array ( 'recently_activated' , 'mustuse' , 'dropins' ), true ) ) {
2011-05-05 01:24:15 -04:00
return ;
2017-11-30 18:11:00 -05:00
}
2011-05-05 01:24:15 -04:00
echo '<div class="alignleft actions">' ;
2020-05-16 14:42:12 -04:00
if ( 'recently_activated' === $status ) {
2016-09-28 15:54:28 -04:00
submit_button ( __ ( 'Clear List' ), '' , 'clear-recent-list' , false );
2015-09-22 02:06:25 -04:00
} elseif ( 'top' === $which && 'mustuse' === $status ) {
2017-11-30 18:11:00 -05:00
echo '<p>' . sprintf (
2019-09-02 20:41:05 -04:00
/* translators: %s: mu-plugins directory name. */
2017-11-30 18:11:00 -05:00
__ ( 'Files in the %s directory are executed automatically.' ),
2015-10-29 21:08:25 -04:00
'<code>' . str_replace ( ABSPATH , '/' , WPMU_PLUGIN_DIR ) . '</code>'
) . '</p>' ;
2015-09-22 02:06:25 -04:00
} elseif ( 'top' === $which && 'dropins' === $status ) {
2017-11-30 18:11:00 -05:00
echo '<p>' . sprintf (
2019-09-02 20:41:05 -04:00
/* translators: %s: wp-content directory name. */
2019-08-27 23:13:55 -04:00
__ ( 'Drop-ins are single files, found in the %s directory, that replace or enhance WordPress features in ways that are not possible for traditional plugins.' ),
2015-10-29 21:08:25 -04:00
'<code>' . str_replace ( ABSPATH , '' , WP_CONTENT_DIR ) . '</code>'
) . '</p>' ;
2015-09-22 02:06:25 -04:00
}
2011-05-05 01:24:15 -04:00
echo '</div>' ;
2010-10-24 22:57:43 -04:00
}
2015-05-29 16:17:26 -04:00
/**
* @ return string
*/
Add access modifiers to methods and members of list table classes:
* `WP_List_Table` is the base class that implements `__get()` and `__call()` for BC
* Adds unit tests to confirm that subclasses properly inherit magic methods
* Add modifiers to subclasses: `WP_Links_List_Table`, `WP_Media_List_Table`, `WP_MS_Sites_List_Table`, `WP_MS_Themes_List_Table`, `WP_MS_Users_List_Table`, `WP_Plugin_Install_List_Table`, `WP_Plugins_List_Table`, `WP_Posts_List_Table`, `WP_Terms_List_Table`, `WP_Theme_Install_List_Table`, `WP_Themes_List_Table`
See #27881, #22234.
Built from https://develop.svn.wordpress.org/trunk@28493
git-svn-id: http://core.svn.wordpress.org/trunk@28319 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-18 21:17:15 -04:00
public function current_action () {
2017-11-30 18:11:00 -05:00
if ( isset ( $_POST [ 'clear-recent-list' ] ) ) {
2010-10-24 22:57:43 -04:00
return 'clear-recent-list' ;
2017-11-30 18:11:00 -05:00
}
2010-10-24 22:57:43 -04:00
return parent :: current_action ();
}
2015-05-28 17:41:30 -04:00
/**
* @ global string $status
*/
2014-07-13 18:09:16 -04:00
public function display_rows () {
2010-11-13 11:30:20 -05:00
global $status ;
2020-04-04 23:02:11 -04:00
if ( is_multisite () && ! $this -> screen -> in_admin ( 'network' ) && in_array ( $status , array ( 'mustuse' , 'dropins' ), true ) ) {
2010-11-13 11:30:20 -05:00
return ;
2017-11-30 18:11:00 -05:00
}
2010-11-13 11:30:20 -05:00
2017-11-30 18:11:00 -05:00
foreach ( $this -> items as $plugin_file => $plugin_data ) {
2012-11-05 13:29:20 -05:00
$this -> single_row ( array ( $plugin_file , $plugin_data ) );
2017-11-30 18:11:00 -05:00
}
2010-11-13 11:30:20 -05:00
}
2014-11-30 19:33:23 -05:00
/**
* @ global string $status
* @ global int $page
* @ global string $s
* @ global array $totals
2015-07-05 11:03:25 -04:00
*
2014-11-30 19:33:23 -05:00
* @ param array $item
*/
2014-07-13 18:09:16 -04:00
public function single_row ( $item ) {
2012-03-21 12:19:27 -04:00
global $status , $page , $s , $totals ;
2020-07-07 09:43:02 -04:00
static $plugin_id_attrs = array ();
2010-10-24 22:57:43 -04:00
2012-11-05 13:29:20 -05:00
list ( $plugin_file , $plugin_data ) = $item ;
2020-04-16 13:02:08 -04:00
2020-07-07 09:43:02 -04:00
$plugin_slug = isset ( $plugin_data [ 'slug' ] ) ? $plugin_data [ 'slug' ] : sanitize_title ( $plugin_data [ 'Name' ] );
$plugin_id_attr = $plugin_slug ;
// Ensure the ID attribute is unique.
$suffix = 2 ;
while ( in_array ( $plugin_id_attr , $plugin_id_attrs , true ) ) {
$plugin_id_attr = " $plugin_slug - $suffix " ;
$suffix ++ ;
}
$plugin_id_attrs [] = $plugin_id_attr ;
2020-04-16 13:02:08 -04:00
$context = $status ;
$screen = $this -> screen ;
2010-11-08 10:43:44 -05:00
2014-07-17 05:14:16 -04:00
// Pre-order.
2010-11-13 11:30:20 -05:00
$actions = array (
2012-04-18 23:41:29 -04:00
'deactivate' => '' ,
2017-11-30 18:11:00 -05:00
'activate' => '' ,
'details' => '' ,
'delete' => '' ,
2010-11-13 11:30:20 -05:00
);
2010-10-24 22:57:43 -04:00
2020-01-28 19:45:18 -05:00
// Do not restrict by default.
2015-10-22 15:56:23 -04:00
$restrict_network_active = false ;
2017-11-30 18:11:00 -05:00
$restrict_network_only = false ;
2015-10-22 15:56:23 -04:00
2015-09-22 02:06:25 -04:00
if ( 'mustuse' === $context ) {
2010-11-13 11:30:20 -05:00
$is_active = true ;
2015-09-22 02:06:25 -04:00
} elseif ( 'dropins' === $context ) {
2017-11-30 18:11:00 -05:00
$dropins = _get_dropins ();
2010-11-13 11:30:20 -05:00
$plugin_name = $plugin_file ;
2017-11-30 18:11:00 -05:00
if ( $plugin_file != $plugin_data [ 'Name' ] ) {
2010-11-13 11:30:20 -05:00
$plugin_name .= '<br/>' . $plugin_data [ 'Name' ];
2017-11-30 18:11:00 -05:00
}
2020-01-28 19:45:18 -05:00
if ( true === ( $dropins [ $plugin_file ][ 1 ] ) ) { // Doesn't require a constant.
2017-11-30 18:11:00 -05:00
$is_active = true ;
2010-11-13 11:30:20 -05:00
$description = '<p><strong>' . $dropins [ $plugin_file ][ 0 ] . '</strong></p>' ;
2020-01-28 19:45:18 -05:00
} elseif ( defined ( $dropins [ $plugin_file ][ 1 ] ) && constant ( $dropins [ $plugin_file ][ 1 ] ) ) { // Constant is true.
2017-11-30 18:11:00 -05:00
$is_active = true ;
2010-11-13 11:30:20 -05:00
$description = '<p><strong>' . $dropins [ $plugin_file ][ 0 ] . '</strong></p>' ;
} else {
2017-11-30 18:11:00 -05:00
$is_active = false ;
2015-10-29 21:08:25 -04:00
$description = '<p><strong>' . $dropins [ $plugin_file ][ 0 ] . ' <span class="error-message">' . __ ( 'Inactive:' ) . '</span></strong> ' .
2017-11-30 18:11:00 -05:00
sprintf (
2019-09-02 20:41:05 -04:00
/* translators: 1: Drop-in constant name, 2: wp-config.php */
2017-11-30 18:11:00 -05:00
__ ( 'Requires %1$s in %2$s file.' ),
2015-10-29 21:56:25 -04:00
" <code>define(' " . $dropins [ $plugin_file ][ 1 ] . " ', true);</code> " ,
'<code>wp-config.php</code>'
2015-10-29 21:08:25 -04:00
) . '</p>' ;
2010-11-13 11:30:20 -05:00
}
2017-11-30 18:11:00 -05:00
if ( $plugin_data [ 'Description' ] ) {
2010-11-13 11:30:20 -05:00
$description .= '<p>' . $plugin_data [ 'Description' ] . '</p>' ;
2017-11-30 18:11:00 -05:00
}
2010-11-13 11:30:20 -05:00
} else {
2015-10-13 18:12:25 -04:00
if ( $screen -> in_admin ( 'network' ) ) {
2012-04-18 23:41:29 -04:00
$is_active = is_plugin_active_for_network ( $plugin_file );
2015-10-13 18:12:25 -04:00
} else {
2017-11-30 18:11:00 -05:00
$is_active = is_plugin_active ( $plugin_file );
2015-10-13 18:12:25 -04:00
$restrict_network_active = ( is_multisite () && is_plugin_active_for_network ( $plugin_file ) );
2017-11-30 18:11:00 -05:00
$restrict_network_only = ( is_multisite () && is_network_only_plugin ( $plugin_file ) && ! $is_active );
2015-10-13 18:12:25 -04:00
}
2010-11-13 11:30:20 -05:00
2013-03-08 22:52:27 -05:00
if ( $screen -> in_admin ( 'network' ) ) {
2012-04-18 23:41:29 -04:00
if ( $is_active ) {
2015-07-05 11:03:25 -04:00
if ( current_user_can ( 'manage_network_plugins' ) ) {
2019-09-02 20:41:05 -04:00
$actions [ 'deactivate' ] = sprintf (
2020-04-16 13:02:08 -04:00
'<a href="%s" id="deactivate-%s" aria-label="%s">%s</a>' ,
2019-09-02 20:41:05 -04:00
wp_nonce_url ( 'plugins.php?action=deactivate&plugin=' . urlencode ( $plugin_file ) . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s , 'deactivate-plugin_' . $plugin_file ),
2020-07-07 09:43:02 -04:00
esc_attr ( $plugin_id_attr ),
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin name. */
esc_attr ( sprintf ( _x ( 'Network Deactivate %s' , 'plugin' ), $plugin_data [ 'Name' ] ) ),
__ ( 'Network Deactivate' )
);
2017-11-30 18:11:00 -05:00
}
2010-10-24 22:57:43 -04:00
} else {
2015-07-05 11:03:25 -04:00
if ( current_user_can ( 'manage_network_plugins' ) ) {
2019-09-02 20:41:05 -04:00
$actions [ 'activate' ] = sprintf (
2020-04-16 13:02:08 -04:00
'<a href="%s" id="activate-%s" class="edit" aria-label="%s">%s</a>' ,
2019-09-02 20:41:05 -04:00
wp_nonce_url ( 'plugins.php?action=activate&plugin=' . urlencode ( $plugin_file ) . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s , 'activate-plugin_' . $plugin_file ),
2020-07-07 09:43:02 -04:00
esc_attr ( $plugin_id_attr ),
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin name. */
esc_attr ( sprintf ( _x ( 'Network Activate %s' , 'plugin' ), $plugin_data [ 'Name' ] ) ),
__ ( 'Network Activate' )
);
2015-07-05 11:03:25 -04:00
}
2020-04-16 13:02:08 -04:00
2015-07-05 11:03:25 -04:00
if ( current_user_can ( 'delete_plugins' ) && ! is_plugin_active ( $plugin_file ) ) {
2019-09-02 20:41:05 -04:00
$actions [ 'delete' ] = sprintf (
2020-04-16 13:02:08 -04:00
'<a href="%s" id="delete-%s" class="delete" aria-label="%s">%s</a>' ,
2019-09-02 20:41:05 -04:00
wp_nonce_url ( 'plugins.php?action=delete-selected&checked[]=' . urlencode ( $plugin_file ) . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s , 'bulk-plugins' ),
2020-07-07 09:43:02 -04:00
esc_attr ( $plugin_id_attr ),
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin name. */
esc_attr ( sprintf ( _x ( 'Delete %s' , 'plugin' ), $plugin_data [ 'Name' ] ) ),
__ ( 'Delete' )
);
2015-07-05 11:03:25 -04:00
}
2010-10-24 22:57:43 -04:00
}
} else {
2015-10-13 18:12:25 -04:00
if ( $restrict_network_active ) {
$actions = array (
'network_active' => __ ( 'Network Active' ),
);
} elseif ( $restrict_network_only ) {
$actions = array (
'network_only' => __ ( 'Network Only' ),
);
} elseif ( $is_active ) {
2017-08-22 10:02:44 -04:00
if ( current_user_can ( 'deactivate_plugin' , $plugin_file ) ) {
2019-09-02 20:41:05 -04:00
$actions [ 'deactivate' ] = sprintf (
2020-04-16 13:02:08 -04:00
'<a href="%s" id="deactivate-%s" aria-label="%s">%s</a>' ,
2019-09-02 20:41:05 -04:00
wp_nonce_url ( 'plugins.php?action=deactivate&plugin=' . urlencode ( $plugin_file ) . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s , 'deactivate-plugin_' . $plugin_file ),
2020-07-07 09:43:02 -04:00
esc_attr ( $plugin_id_attr ),
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin name. */
esc_attr ( sprintf ( _x ( 'Deactivate %s' , 'plugin' ), $plugin_data [ 'Name' ] ) ),
__ ( 'Deactivate' )
);
2017-08-22 10:02:44 -04:00
}
2020-04-16 13:02:08 -04:00
Bootstrap/Load: Introduce a recovery mode for fixing fatal errors.
Using the new fatal handler introduced in [44962], an email is sent to the admin when a fatal error occurs. This email includes a secret link to enter recovery mode. When clicked, the link will be validated and on success a cookie will be placed on the client, enabling recovery mode for that user. This functionality is executed early before plugins and themes are loaded, in order to be unaffected by potential fatal errors these might be causing.
When in recovery mode, broken plugins and themes will be paused for that client, so that they are able to access the admin backend despite of these errors. They are notified about the broken extensions and the errors caused, and can then decide whether they would like to temporarily deactivate the extension or fix the problem and resume the extension.
A link in the admin bar allows the client to exit recovery mode.
Props timothyblynjacobs, afragen, flixos90, nerrad, miss_jwo, schlessera, spacedmonkey, swissspidy.
Fixes #46130, #44458.
Built from https://develop.svn.wordpress.org/trunk@44973
git-svn-id: http://core.svn.wordpress.org/trunk@44804 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-21 17:53:51 -04:00
if ( current_user_can ( 'resume_plugin' , $plugin_file ) && is_plugin_paused ( $plugin_file ) ) {
2019-09-02 20:41:05 -04:00
$actions [ 'resume' ] = sprintf (
2020-04-16 13:02:08 -04:00
'<a href="%s" id="resume-%s" class="resume-link" aria-label="%s">%s</a>' ,
2019-09-02 20:41:05 -04:00
wp_nonce_url ( 'plugins.php?action=resume&plugin=' . urlencode ( $plugin_file ) . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s , 'resume-plugin_' . $plugin_file ),
2020-07-07 09:43:02 -04:00
esc_attr ( $plugin_id_attr ),
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin name. */
esc_attr ( sprintf ( _x ( 'Resume %s' , 'plugin' ), $plugin_data [ 'Name' ] ) ),
__ ( 'Resume' )
);
Bootstrap/Load: Introduce a recovery mode for fixing fatal errors.
Using the new fatal handler introduced in [44962], an email is sent to the admin when a fatal error occurs. This email includes a secret link to enter recovery mode. When clicked, the link will be validated and on success a cookie will be placed on the client, enabling recovery mode for that user. This functionality is executed early before plugins and themes are loaded, in order to be unaffected by potential fatal errors these might be causing.
When in recovery mode, broken plugins and themes will be paused for that client, so that they are able to access the admin backend despite of these errors. They are notified about the broken extensions and the errors caused, and can then decide whether they would like to temporarily deactivate the extension or fix the problem and resume the extension.
A link in the admin bar allows the client to exit recovery mode.
Props timothyblynjacobs, afragen, flixos90, nerrad, miss_jwo, schlessera, spacedmonkey, swissspidy.
Fixes #46130, #44458.
Built from https://develop.svn.wordpress.org/trunk@44973
git-svn-id: http://core.svn.wordpress.org/trunk@44804 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-21 17:53:51 -04:00
}
2010-10-24 22:57:43 -04:00
} else {
2017-08-22 10:02:44 -04:00
if ( current_user_can ( 'activate_plugin' , $plugin_file ) ) {
2019-09-02 20:41:05 -04:00
$actions [ 'activate' ] = sprintf (
2020-04-16 13:02:08 -04:00
'<a href="%s" id="activate-%s" class="edit" aria-label="%s">%s</a>' ,
2019-09-02 20:41:05 -04:00
wp_nonce_url ( 'plugins.php?action=activate&plugin=' . urlencode ( $plugin_file ) . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s , 'activate-plugin_' . $plugin_file ),
2020-07-07 09:43:02 -04:00
esc_attr ( $plugin_id_attr ),
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin name. */
esc_attr ( sprintf ( _x ( 'Activate %s' , 'plugin' ), $plugin_data [ 'Name' ] ) ),
__ ( 'Activate' )
);
2017-08-22 10:02:44 -04:00
}
2010-11-13 11:30:20 -05:00
2015-07-05 11:03:25 -04:00
if ( ! is_multisite () && current_user_can ( 'delete_plugins' ) ) {
2019-09-02 20:41:05 -04:00
$actions [ 'delete' ] = sprintf (
2020-04-16 13:02:08 -04:00
'<a href="%s" id="delete-%s" class="delete" aria-label="%s">%s</a>' ,
2019-09-02 20:41:05 -04:00
wp_nonce_url ( 'plugins.php?action=delete-selected&checked[]=' . urlencode ( $plugin_file ) . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s , 'bulk-plugins' ),
2020-07-07 09:43:02 -04:00
esc_attr ( $plugin_id_attr ),
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin name. */
esc_attr ( sprintf ( _x ( 'Delete %s' , 'plugin' ), $plugin_data [ 'Name' ] ) ),
__ ( 'Delete' )
);
2015-07-05 11:03:25 -04:00
}
2020-01-28 19:45:18 -05:00
} // End if $is_active.
} // End if $screen->in_admin( 'network' ).
} // End if $context.
2010-11-13 11:30:20 -05:00
2015-10-02 19:44:26 -04:00
$actions = array_filter ( $actions );
2014-03-02 15:48:14 -05:00
2015-10-02 19:44:26 -04:00
if ( $screen -> in_admin ( 'network' ) ) {
2014-03-02 15:48:14 -05:00
2015-10-02 19:44:26 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the action links displayed for each plugin in the Network Admin Plugins list table .
2015-10-02 19:44:26 -04:00
*
2016-10-31 15:38:47 -04:00
* @ since 3.1 . 0
2015-10-02 19:44:26 -04:00
*
2018-03-22 16:27:32 -04:00
* @ param string [] $actions An array of plugin action links . By default this can include 'activate' ,
* 'deactivate' , and 'delete' .
* @ param string $plugin_file Path to the plugin file relative to the plugins directory .
* @ param array $plugin_data An array of plugin data . See `get_plugin_data()` .
* @ param string $context The plugin context . By default this can include 'all' , 'active' , 'inactive' ,
* 'recently_activated' , 'upgrade' , 'mustuse' , 'dropins' , and 'search' .
2015-10-02 19:44:26 -04:00
*/
$actions = apply_filters ( 'network_admin_plugin_action_links' , $actions , $plugin_file , $plugin_data , $context );
/**
2016-05-22 14:01:30 -04:00
* Filters the list of action links displayed for a specific plugin in the Network Admin Plugins list table .
2015-10-02 19:44:26 -04:00
*
2017-08-04 18:15:45 -04:00
* The dynamic portion of the hook name , `$plugin_file` , refers to the path
2015-10-02 19:44:26 -04:00
* to the plugin file , relative to the plugins directory .
*
2016-10-31 15:38:47 -04:00
* @ since 3.1 . 0
2015-10-02 19:44:26 -04:00
*
2018-03-22 16:27:32 -04:00
* @ param string [] $actions An array of plugin action links . By default this can include 'activate' ,
* 'deactivate' , and 'delete' .
* @ param string $plugin_file Path to the plugin file relative to the plugins directory .
* @ param array $plugin_data An array of plugin data . See `get_plugin_data()` .
* @ param string $context The plugin context . By default this can include 'all' , 'active' , 'inactive' ,
* 'recently_activated' , 'upgrade' , 'mustuse' , 'dropins' , and 'search' .
2015-10-02 19:44:26 -04:00
*/
$actions = apply_filters ( " network_admin_plugin_action_links_ { $plugin_file } " , $actions , $plugin_file , $plugin_data , $context );
} else {
/**
2016-05-22 14:01:30 -04:00
* Filters the action links displayed for each plugin in the Plugins list table .
2015-10-02 19:44:26 -04:00
*
2016-10-31 15:38:47 -04:00
* @ since 2.5 . 0
* @ since 2.6 . 0 The `$context` parameter was added .
2017-08-04 18:15:45 -04:00
* @ since 4.9 . 0 The 'Edit' link was removed from the list of action links .
2015-10-02 19:44:26 -04:00
*
2018-03-22 16:27:32 -04:00
* @ param string [] $actions An array of plugin action links . By default this can include 'activate' ,
* 'deactivate' , and 'delete' . With Multisite active this can also include
* 'network_active' and 'network_only' items .
* @ param string $plugin_file Path to the plugin file relative to the plugins directory .
* @ param array $plugin_data An array of plugin data . See `get_plugin_data()` .
* @ param string $context The plugin context . By default this can include 'all' , 'active' , 'inactive' ,
* 'recently_activated' , 'upgrade' , 'mustuse' , 'dropins' , and 'search' .
2015-10-02 19:44:26 -04:00
*/
$actions = apply_filters ( 'plugin_action_links' , $actions , $plugin_file , $plugin_data , $context );
/**
2016-05-22 14:01:30 -04:00
* Filters the list of action links displayed for a specific plugin in the Plugins list table .
2015-10-02 19:44:26 -04:00
*
2017-08-04 18:15:45 -04:00
* The dynamic portion of the hook name , `$plugin_file` , refers to the path
2015-10-02 19:44:26 -04:00
* to the plugin file , relative to the plugins directory .
*
2016-10-31 15:38:47 -04:00
* @ since 2.7 . 0
2017-08-04 18:15:45 -04:00
* @ since 4.9 . 0 The 'Edit' link was removed from the list of action links .
2015-10-02 19:44:26 -04:00
*
2018-03-22 16:27:32 -04:00
* @ param string [] $actions An array of plugin action links . By default this can include 'activate' ,
* 'deactivate' , and 'delete' . With Multisite active this can also include
* 'network_active' and 'network_only' items .
* @ param string $plugin_file Path to the plugin file relative to the plugins directory .
* @ param array $plugin_data An array of plugin data . See `get_plugin_data()` .
* @ param string $context The plugin context . By default this can include 'all' , 'active' , 'inactive' ,
* 'recently_activated' , 'upgrade' , 'mustuse' , 'dropins' , and 'search' .
2015-10-02 19:44:26 -04:00
*/
$actions = apply_filters ( " plugin_action_links_ { $plugin_file } " , $actions , $plugin_file , $plugin_data , $context );
}
2010-11-13 11:30:20 -05:00
2019-08-05 06:58:56 -04:00
$requires_php = isset ( $plugin_data [ 'requires_php' ] ) ? $plugin_data [ 'requires_php' ] : null ;
2019-04-12 19:56:52 -04:00
$compatible_php = is_php_version_compatible ( $requires_php );
2019-03-19 21:44:51 -04:00
$class = $is_active ? 'active' : 'inactive' ;
$checkbox_id = 'checkbox_' . md5 ( $plugin_data [ 'Name' ] );
2020-04-04 23:02:11 -04:00
if ( $restrict_network_active || $restrict_network_only || in_array ( $status , array ( 'mustuse' , 'dropins' ), true ) || ! $compatible_php ) {
2012-07-25 12:18:14 -04:00
$checkbox = '' ;
} else {
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
$checkbox = sprintf (
'<label class="screen-reader-text" for="%1$s">%2$s</label>' .
'<input type="checkbox" name="checked[]" value="%3$s" id="%1$s" />' ,
$checkbox_id ,
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin name. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
sprintf ( __ ( 'Select %s' ), $plugin_data [ 'Name' ] ),
esc_attr ( $plugin_file )
);
2012-07-25 12:18:14 -04:00
}
2020-05-16 14:42:12 -04:00
if ( 'dropins' !== $context ) {
2010-12-06 10:15:09 -05:00
$description = '<p>' . ( $plugin_data [ 'Description' ] ? $plugin_data [ 'Description' ] : ' ' ) . '</p>' ;
2010-11-13 11:30:20 -05:00
$plugin_name = $plugin_data [ 'Name' ];
}
2017-11-30 18:11:00 -05:00
if ( ! empty ( $totals [ 'upgrade' ] ) && ! empty ( $plugin_data [ 'update' ] ) ) {
2012-03-21 12:19:27 -04:00
$class .= ' update' ;
2017-11-30 18:11:00 -05:00
}
2010-11-13 11:30:20 -05:00
Bootstrap/Load: Introduce a recovery mode for fixing fatal errors.
Using the new fatal handler introduced in [44962], an email is sent to the admin when a fatal error occurs. This email includes a secret link to enter recovery mode. When clicked, the link will be validated and on success a cookie will be placed on the client, enabling recovery mode for that user. This functionality is executed early before plugins and themes are loaded, in order to be unaffected by potential fatal errors these might be causing.
When in recovery mode, broken plugins and themes will be paused for that client, so that they are able to access the admin backend despite of these errors. They are notified about the broken extensions and the errors caused, and can then decide whether they would like to temporarily deactivate the extension or fix the problem and resume the extension.
A link in the admin bar allows the client to exit recovery mode.
Props timothyblynjacobs, afragen, flixos90, nerrad, miss_jwo, schlessera, spacedmonkey, swissspidy.
Fixes #46130, #44458.
Built from https://develop.svn.wordpress.org/trunk@44973
git-svn-id: http://core.svn.wordpress.org/trunk@44804 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-21 17:53:51 -04:00
$paused = ! $screen -> in_admin ( 'network' ) && is_plugin_paused ( $plugin_file );
if ( $paused ) {
$class .= ' paused' ;
}
2020-07-12 09:22:04 -04:00
if ( is_uninstallable_plugin ( $plugin_file ) ) {
$class .= ' is-uninstallable' ;
}
2017-11-30 18:11:00 -05:00
printf (
'<tr class="%s" data-slug="%s" data-plugin="%s">' ,
2016-01-06 17:40:26 -05:00
esc_attr ( $class ),
esc_attr ( $plugin_slug ),
esc_attr ( $plugin_file )
2015-03-19 01:26:28 -04:00
);
2010-11-13 11:30:20 -05:00
2015-05-28 22:41:25 -04:00
list ( $columns , $hidden , $sortable , $primary ) = $this -> get_column_info ();
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
$auto_updates = ( array ) get_site_option ( 'auto_update_plugins' , array () );
$available_updates = get_site_transient ( 'update_plugins' );
2010-11-13 11:57:25 -05:00
foreach ( $columns as $column_name => $column_display_name ) {
2015-06-10 15:47:27 -04:00
$extra_classes = '' ;
2020-04-04 23:02:11 -04:00
if ( in_array ( $column_name , $hidden , true ) ) {
2015-06-10 15:47:27 -04:00
$extra_classes = ' hidden' ;
2015-05-28 22:41:25 -04:00
}
2010-11-13 11:57:25 -05:00
switch ( $column_name ) {
case 'cb' :
echo " <th scope='row' class='check-column'> $checkbox </th> " ;
break ;
case 'name' :
Plugins: Tweak the plugin icons added in [41695].
- Remove plugins icons from the plugin list table, as there were performance issues loading the icons when the site had lots of plugins.
- Depending on which icons the plugin has uploaded, prefer them in this order: `svg`, `128x128`, `256x256`.
- Improve the style of the fallback icon for plugins that don't have an icon defined.
Props Travel_girl, danieltj, afercia, karmatosed,hugobaeta, empireoflight, brentjett, melchoyce, pento.
Fixes #30186.
Built from https://develop.svn.wordpress.org/trunk@41755
git-svn-id: http://core.svn.wordpress.org/trunk@41589 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-10-04 19:43:46 -04:00
echo " <td class='plugin-title column-primary'><strong> $plugin_name </strong> " ;
echo $this -> row_actions ( $actions , true );
2017-11-30 18:11:00 -05:00
echo '</td>' ;
2010-11-13 11:57:25 -05:00
break ;
case 'description' :
2015-05-28 22:41:25 -04:00
$classes = 'column-description desc' ;
2015-06-10 15:47:27 -04:00
echo " <td class=' $classes { $extra_classes } '>
2010-11-13 11:57:25 -05:00
< div class = 'plugin-description' > $description </ div >
< div class = '$class second plugin-version-author-uri' > " ;
$plugin_meta = array ();
2017-11-30 18:11:00 -05:00
if ( ! empty ( $plugin_data [ 'Version' ] ) ) {
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin version number. */
2010-11-13 11:57:25 -05:00
$plugin_meta [] = sprintf ( __ ( 'Version %s' ), $plugin_data [ 'Version' ] );
2017-11-30 18:11:00 -05:00
}
if ( ! empty ( $plugin_data [ 'Author' ] ) ) {
2010-11-13 11:57:25 -05:00
$author = $plugin_data [ 'Author' ];
2017-11-30 18:11:00 -05:00
if ( ! empty ( $plugin_data [ 'AuthorURI' ] ) ) {
2014-06-05 00:52:16 -04:00
$author = '<a href="' . $plugin_data [ 'AuthorURI' ] . '">' . $plugin_data [ 'Author' ] . '</a>' ;
2017-11-30 18:11:00 -05:00
}
2019-11-20 19:08:02 -05:00
/* translators: %s: Plugin author name. */
2010-11-13 11:57:25 -05:00
$plugin_meta [] = sprintf ( __ ( 'By %s' ), $author );
}
2014-08-04 14:49:17 -04:00
2020-01-28 19:45:18 -05:00
// Details link using API info, if available.
2014-08-25 11:28:17 -04:00
if ( isset ( $plugin_data [ 'slug' ] ) && current_user_can ( 'install_plugins' ) ) {
2017-11-30 18:11:00 -05:00
$plugin_meta [] = sprintf (
'<a href="%s" class="thickbox open-plugin-details-modal" aria-label="%s" data-title="%s">%s</a>' ,
esc_url (
network_admin_url (
'plugin-install.php?tab=plugin-information&plugin=' . $plugin_data [ 'slug' ] .
'&TB_iframe=true&width=600&height=550'
)
),
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin name. */
2014-08-25 11:28:17 -04:00
esc_attr ( sprintf ( __ ( 'More information about %s' ), $plugin_name ) ),
esc_attr ( $plugin_name ),
__ ( 'View details' )
);
} elseif ( ! empty ( $plugin_data [ 'PluginURI' ] ) ) {
2017-11-30 18:11:00 -05:00
$plugin_meta [] = sprintf (
'<a href="%s">%s</a>' ,
2014-08-25 11:28:17 -04:00
esc_url ( $plugin_data [ 'PluginURI' ] ),
__ ( 'Visit plugin site' )
);
2014-08-04 14:49:17 -04:00
}
2010-11-17 13:47:34 -05:00
2014-03-02 15:48:14 -05:00
/**
2016-05-22 14:01:30 -04:00
* Filters the array of row meta for each plugin in the Plugins list table .
2014-03-02 15:48:14 -05:00
*
* @ since 2.8 . 0
*
2020-06-20 08:14:09 -04:00
* @ param string [] $plugin_meta An array of the plugin ' s metadata , including
* the version , author , author URI , and plugin URI .
2018-03-22 16:27:32 -04:00
* @ param string $plugin_file Path to the plugin file relative to the plugins directory .
* @ param array $plugin_data An array of plugin data .
2020-06-26 14:40:04 -04:00
* @ param string $status Status filter currently applied to the plugin list . Possible
* values are : 'all' , 'active' , 'inactive' , 'recently_activated' ,
* 'upgrade' , 'mustuse' , 'dropins' , 'search' , 'paused' ,
* 'auto-update-enabled' , 'auto-update-disabled' .
2014-03-02 15:48:14 -05:00
*/
2010-11-13 11:57:25 -05:00
$plugin_meta = apply_filters ( 'plugin_row_meta' , $plugin_meta , $plugin_file , $plugin_data , $status );
2020-06-20 08:14:09 -04:00
2010-11-13 11:57:25 -05:00
echo implode ( ' | ' , $plugin_meta );
2010-11-13 11:30:20 -05:00
Bootstrap/Load: Introduce fatal error recovery mechanism allowing users to still log in to their admin dashboard.
This changeset introduces a `WP_Shutdown_Handler` class that detects fatal errors and which extension (plugin or theme) causes them. Such an error is then recorded, and an error message is displayed. Subsequently, in certain protected areas, for example the admin, the broken extension will be paused, ensuring that the website is still usable in the respective area. The major benefit is that this mechanism allows site owners to still log in to their website, to fix the problem by either disabling the extension or solving the bug and then resuming the extension.
Extensions are only paused in certain designated areas. The frontend for example stays unaffected, as it is impossible to know what pausing the extension would cause to be missing, so it might be preferrable to clearly see that the website is temporarily not accessible instead.
The fatal error recovery is especially important in scope of encouraging the switch to a maintained PHP version, as not necessarily every WordPress extension is compatible with all PHP versions. If problems occur now, non-technical site owners that do not have immediate access to the codebase are not locked out of their site and can at least temporarily solve the problem quickly.
Websites that have custom requirements in that regard can implement their own shutdown handler by adding a `shutdown-handler.php` drop-in that returns the handler instance to use, which must be based on a class that inherits `WP_Shutdown_Handler`. That handler will then be used in place of the default one.
Websites that would like to modify specifically the error template displayed in the frontend can add a `php-error.php` drop-in that works similarly to the existing `db-error.php` drop-in.
Props afragen, bradleyt, flixos90, ocean90, schlessera, SergeyBiryukov, spacedmonkey.
Fixes #44458.
Built from https://develop.svn.wordpress.org/trunk@44524
git-svn-id: http://core.svn.wordpress.org/trunk@44355 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-01-09 15:05:49 -05:00
echo '</div>' ;
Bootstrap/Load: Introduce a recovery mode for fixing fatal errors.
Using the new fatal handler introduced in [44962], an email is sent to the admin when a fatal error occurs. This email includes a secret link to enter recovery mode. When clicked, the link will be validated and on success a cookie will be placed on the client, enabling recovery mode for that user. This functionality is executed early before plugins and themes are loaded, in order to be unaffected by potential fatal errors these might be causing.
When in recovery mode, broken plugins and themes will be paused for that client, so that they are able to access the admin backend despite of these errors. They are notified about the broken extensions and the errors caused, and can then decide whether they would like to temporarily deactivate the extension or fix the problem and resume the extension.
A link in the admin bar allows the client to exit recovery mode.
Props timothyblynjacobs, afragen, flixos90, nerrad, miss_jwo, schlessera, spacedmonkey, swissspidy.
Fixes #46130, #44458.
Built from https://develop.svn.wordpress.org/trunk@44973
git-svn-id: http://core.svn.wordpress.org/trunk@44804 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-21 17:53:51 -04:00
if ( $paused ) {
$notice_text = __ ( 'This plugin failed to load properly and is paused during recovery mode.' );
printf ( '<p><span class="dashicons dashicons-warning"></span> <strong>%s</strong></p>' , $notice_text );
$error = wp_get_plugin_error ( $plugin_file );
if ( false !== $error ) {
printf ( '<div class="error-display"><p>%s</p></div>' , wp_get_extension_error_description ( $error ) );
}
}
Bootstrap/Load: Introduce fatal error recovery mechanism allowing users to still log in to their admin dashboard.
This changeset introduces a `WP_Shutdown_Handler` class that detects fatal errors and which extension (plugin or theme) causes them. Such an error is then recorded, and an error message is displayed. Subsequently, in certain protected areas, for example the admin, the broken extension will be paused, ensuring that the website is still usable in the respective area. The major benefit is that this mechanism allows site owners to still log in to their website, to fix the problem by either disabling the extension or solving the bug and then resuming the extension.
Extensions are only paused in certain designated areas. The frontend for example stays unaffected, as it is impossible to know what pausing the extension would cause to be missing, so it might be preferrable to clearly see that the website is temporarily not accessible instead.
The fatal error recovery is especially important in scope of encouraging the switch to a maintained PHP version, as not necessarily every WordPress extension is compatible with all PHP versions. If problems occur now, non-technical site owners that do not have immediate access to the codebase are not locked out of their site and can at least temporarily solve the problem quickly.
Websites that have custom requirements in that regard can implement their own shutdown handler by adding a `shutdown-handler.php` drop-in that returns the handler instance to use, which must be based on a class that inherits `WP_Shutdown_Handler`. That handler will then be used in place of the default one.
Websites that would like to modify specifically the error template displayed in the frontend can add a `php-error.php` drop-in that works similarly to the existing `db-error.php` drop-in.
Props afragen, bradleyt, flixos90, ocean90, schlessera, SergeyBiryukov, spacedmonkey.
Fixes #44458.
Built from https://develop.svn.wordpress.org/trunk@44524
git-svn-id: http://core.svn.wordpress.org/trunk@44355 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-01-09 15:05:49 -05:00
echo '</td>' ;
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
break ;
case 'auto-updates' :
if ( ! $this -> show_autoupdates ) {
break ;
}
echo " <td class='column-auto-updates { $extra_classes } '> " ;
2020-06-17 20:00:13 -04:00
$html = array ();
Upgrade/Install: Enhance auto-updates to be disabled for plugins that don't suport updates.
This removes the toggle UI when updates aren't available. When plugins use the filter, the UI is updated to show that they are being controlled via code. And then removed entirely when not available.
See #50798.
Fixes #50280.
Props elrae, pbiron, SergeyBiryukov, audrasjb, azaozz, StephenCronin, whyisjake, dd32, TimothyBlynJacobs, desrosj.
Built from https://develop.svn.wordpress.org/trunk@48669
git-svn-id: http://core.svn.wordpress.org/trunk@48431 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-28 12:32:01 -04:00
if ( isset ( $plugin_data [ 'auto-update-forced' ] ) ) {
if ( $plugin_data [ 'auto-update-forced' ] ) {
// Forced on
$text = __ ( 'Auto-updates enabled' );
} else {
$text = __ ( 'Auto-updates disabled' );
}
$action = 'unavailable' ;
$time_class = ' hidden' ;
2020-07-28 14:28:06 -04:00
} elseif ( ! $plugin_data [ 'update-supported' ] ) {
Upgrade/Install: Enhance auto-updates to be disabled for plugins that don't suport updates.
This removes the toggle UI when updates aren't available. When plugins use the filter, the UI is updated to show that they are being controlled via code. And then removed entirely when not available.
See #50798.
Fixes #50280.
Props elrae, pbiron, SergeyBiryukov, audrasjb, azaozz, StephenCronin, whyisjake, dd32, TimothyBlynJacobs, desrosj.
Built from https://develop.svn.wordpress.org/trunk@48669
git-svn-id: http://core.svn.wordpress.org/trunk@48431 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-28 12:32:01 -04:00
$text = '' ;
$action = 'unavailable' ;
$time_class = ' hidden' ;
} elseif ( in_array ( $plugin_file , $auto_updates , true ) ) {
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
$text = __ ( 'Disable auto-updates' );
$action = 'disable' ;
$time_class = '' ;
} else {
$text = __ ( 'Enable auto-updates' );
$action = 'enable' ;
$time_class = ' hidden' ;
}
$query_args = array (
'action' => " { $action } -auto-update " ,
'plugin' => $plugin_file ,
'paged' => $page ,
'plugin_status' => $status ,
);
$url = add_query_arg ( $query_args , 'plugins.php' );
Upgrade/Install: Enhance auto-updates to be disabled for plugins that don't suport updates.
This removes the toggle UI when updates aren't available. When plugins use the filter, the UI is updated to show that they are being controlled via code. And then removed entirely when not available.
See #50798.
Fixes #50280.
Props elrae, pbiron, SergeyBiryukov, audrasjb, azaozz, StephenCronin, whyisjake, dd32, TimothyBlynJacobs, desrosj.
Built from https://develop.svn.wordpress.org/trunk@48669
git-svn-id: http://core.svn.wordpress.org/trunk@48431 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-28 12:32:01 -04:00
if ( 'unavailable' == $action ) {
$html [] = '<span class="label">' . $text . '</span>' ;
} else {
$html [] = sprintf (
'<a href="%s" class="toggle-auto-update aria-button-if-js" data-wp-action="%s">' ,
wp_nonce_url ( $url , 'updates' ),
$action
);
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
Upgrade/Install: Enhance auto-updates to be disabled for plugins that don't suport updates.
This removes the toggle UI when updates aren't available. When plugins use the filter, the UI is updated to show that they are being controlled via code. And then removed entirely when not available.
See #50798.
Fixes #50280.
Props elrae, pbiron, SergeyBiryukov, audrasjb, azaozz, StephenCronin, whyisjake, dd32, TimothyBlynJacobs, desrosj.
Built from https://develop.svn.wordpress.org/trunk@48669
git-svn-id: http://core.svn.wordpress.org/trunk@48431 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-28 12:32:01 -04:00
$html [] = '<span class="dashicons dashicons-update spin hidden" aria-hidden="true"></span>' ;
$html [] = '<span class="label">' . $text . '</span>' ;
$html [] = '</a>' ;
}
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
Upgrade/Install: Enhance auto-updates to be disabled for plugins that don't suport updates.
This removes the toggle UI when updates aren't available. When plugins use the filter, the UI is updated to show that they are being controlled via code. And then removed entirely when not available.
See #50798.
Fixes #50280.
Props elrae, pbiron, SergeyBiryukov, audrasjb, azaozz, StephenCronin, whyisjake, dd32, TimothyBlynJacobs, desrosj.
Built from https://develop.svn.wordpress.org/trunk@48669
git-svn-id: http://core.svn.wordpress.org/trunk@48431 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-28 12:32:01 -04:00
if ( ! empty ( $plugin_data [ 'update' ] ) ) {
2020-06-17 20:00:13 -04:00
$html [] = sprintf (
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
'<div class="auto-update-time%s">%s</div>' ,
$time_class ,
wp_get_auto_update_message ()
);
}
2020-06-17 20:00:13 -04:00
$html = implode ( '' , $html );
/**
* Filters the HTML of the auto - updates setting for each plugin in the Plugins list table .
*
* @ since 5.5 . 0
*
2020-06-20 08:14:09 -04:00
* @ param string $html The HTML of the plugin ' s auto - update column content , including
* toggle auto - update action links and time to next update .
2020-06-17 20:00:13 -04:00
* @ param string $plugin_file Path to the plugin file relative to the plugins directory .
* @ param array $plugin_data An array of plugin data .
*/
echo apply_filters ( 'plugin_auto_update_setting_html' , $html , $plugin_file , $plugin_data );
2020-06-19 12:51:14 -04:00
echo '<div class="notice notice-error notice-alt inline hidden"><p></p></div>' ;
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
echo '</td>' ;
2010-11-13 11:57:25 -05:00
break ;
default :
2016-07-25 09:28:28 -04:00
$classes = " $column_name column- $column_name $class " ;
2015-05-28 22:41:25 -04:00
2015-06-10 15:47:27 -04:00
echo " <td class=' $classes { $extra_classes } '> " ;
2014-03-02 15:48:14 -05:00
/**
* Fires inside each custom column of the Plugins list table .
*
* @ since 3.1 . 0
*
* @ param string $column_name Name of the column .
2018-03-05 16:50:31 -05:00
* @ param string $plugin_file Path to the plugin file relative to the plugins directory .
2014-03-02 15:48:14 -05:00
* @ param array $plugin_data An array of plugin data .
*/
2010-11-13 12:01:57 -05:00
do_action ( 'manage_plugins_custom_column' , $column_name , $plugin_file , $plugin_data );
2015-05-28 22:41:25 -04:00
2017-11-30 18:11:00 -05:00
echo '</td>' ;
2010-11-13 11:57:25 -05:00
}
}
2017-11-30 18:11:00 -05:00
echo '</tr>' ;
2010-10-24 22:57:43 -04:00
2014-03-02 15:48:14 -05:00
/**
* Fires after each row in the Plugins list table .
*
* @ since 2.3 . 0
2020-07-07 10:14:04 -04:00
* @ since 5.5 . 0 Added 'auto-update-enabled' and 'auto-update-disabled' to possible values for `$status` .
2014-03-02 15:48:14 -05:00
*
2018-03-05 16:50:31 -05:00
* @ param string $plugin_file Path to the plugin file relative to the plugins directory .
2014-03-02 15:48:14 -05:00
* @ param array $plugin_data An array of plugin data .
2020-06-26 14:40:04 -04:00
* @ param string $status Status filter currently applied to the plugin list . Possible
* values are : 'all' , 'active' , 'inactive' , 'recently_activated' ,
* 'upgrade' , 'mustuse' , 'dropins' , 'search' , 'paused' ,
* 'auto-update-enabled' , 'auto-update-disabled' .
2014-03-02 15:48:14 -05:00
*/
2010-11-13 11:30:20 -05:00
do_action ( 'after_plugin_row' , $plugin_file , $plugin_data , $status );
2014-03-02 15:48:14 -05:00
/**
* Fires after each specific row in the Plugins list table .
*
2014-11-30 06:28:24 -05:00
* The dynamic portion of the hook name , `$plugin_file` , refers to the path
2014-03-02 15:48:14 -05:00
* to the plugin file , relative to the plugins directory .
*
* @ since 2.7 . 0
2020-07-07 10:14:04 -04:00
* @ since 5.5 . 0 Added 'auto-update-enabled' and 'auto-update-disabled' to possible values for `$status` .
2014-03-02 15:48:14 -05:00
*
2018-03-05 16:50:31 -05:00
* @ param string $plugin_file Path to the plugin file relative to the plugins directory .
2014-03-02 15:48:14 -05:00
* @ param array $plugin_data An array of plugin data .
2020-06-26 14:40:04 -04:00
* @ param string $status Status filter currently applied to the plugin list . Possible
* values are : 'all' , 'active' , 'inactive' , 'recently_activated' ,
* 'upgrade' , 'mustuse' , 'dropins' , 'search' , 'paused' ,
* 'auto-update-enabled' , 'auto-update-disabled' .
2014-03-02 15:48:14 -05:00
*/
2016-08-22 14:25:31 -04:00
do_action ( " after_plugin_row_ { $plugin_file } " , $plugin_file , $plugin_data , $status );
2010-10-24 22:57:43 -04:00
}
2015-05-28 22:41:25 -04:00
/**
2015-07-13 13:46:26 -04:00
* Gets the name of the primary column for this specific list table .
2015-05-28 22:41:25 -04:00
*
* @ since 4.3 . 0
*
2015-06-10 15:31:25 -04:00
* @ return string Unalterable name for the primary column , in this case , 'name' .
2015-05-28 22:41:25 -04:00
*/
2015-09-14 16:29:26 -04:00
protected function get_primary_column_name () {
2015-06-10 15:31:25 -04:00
return 'name' ;
2015-05-28 22:41:25 -04:00
}
2010-10-24 22:57:43 -04:00
}