2004-03-25 08:05:52 +01:00
< ? php
2008-08-16 09:27:34 +02:00
/**
* Plugins administration panel .
*
* @ package WordPress
* @ subpackage Administration
*/
/** WordPress Administration Bootstrap */
2004-10-19 05:03:06 +02:00
require_once ( 'admin.php' );
2004-03-25 08:05:52 +01:00
2009-08-01 23:12:17 +02:00
if ( ! current_user_can ( 'activate_plugins' ) )
wp_die ( __ ( 'You do not have sufficient permissions to manage plugins for this blog.' ));
2009-04-04 13:15:39 +02:00
if ( isset ( $_POST [ 'clear-recent-list' ]) )
$action = 'clear-recent-list' ;
2009-05-28 13:02:16 +02:00
elseif ( ! empty ( $_REQUEST [ 'action' ]) )
2009-05-17 11:39:32 +02:00
$action = $_REQUEST [ 'action' ];
2009-05-28 13:02:16 +02:00
elseif ( ! empty ( $_REQUEST [ 'action2' ]) )
$action = $_REQUEST [ 'action2' ];
2009-04-04 13:15:39 +02:00
else
$action = false ;
2008-06-04 20:09:31 +02:00
2008-08-14 19:00:37 +02:00
$plugin = isset ( $_REQUEST [ 'plugin' ]) ? $_REQUEST [ 'plugin' ] : '' ;
2008-06-04 20:09:31 +02:00
2009-04-21 22:38:17 +02:00
$default_status = get_user_option ( 'plugins_last_view' );
if ( empty ( $default_status ) )
$default_status = 'all' ;
$status = isset ( $_REQUEST [ 'plugin_status' ]) ? $_REQUEST [ 'plugin_status' ] : $default_status ;
2010-01-29 22:45:32 +01:00
if ( ! in_array ( $status , array ( 'all' , 'active' , 'inactive' , 'recent' , 'upgrade' , 'network' , 'search' )) )
2009-04-21 21:17:44 +02:00
$status = 'all' ;
2009-04-22 19:56:38 +02:00
if ( $status != $default_status && 'search' != $status )
2009-04-21 22:38:17 +02:00
update_usermeta ( $current_user -> ID , 'plugins_last_view' , $status );
2009-04-21 21:17:44 +02:00
$page = isset ( $_REQUEST [ 'paged' ]) ? $_REQUEST [ 'paged' ] : 1 ;
2009-05-17 11:39:32 +02:00
//Clean up request URI from temporary args for screen options/paging uri's to work as expected.
$_SERVER [ 'REQUEST_URI' ] = remove_query_arg ( array ( 'error' , 'deleted' , 'activate' , 'activate-multi' , 'deactivate' , 'deactivate-multi' , '_error_nonce' ), $_SERVER [ 'REQUEST_URI' ]);
2009-04-21 21:17:44 +02:00
if ( ! empty ( $action ) ) {
2010-01-29 22:45:32 +01:00
$network_wide = false ;
if ( isset ( $_GET [ 'networkwide' ]) && is_multisite () && is_super_admin () )
$network_wide = true ;
2009-04-21 21:17:44 +02:00
switch ( $action ) {
2008-06-04 20:09:31 +02:00
case 'activate' :
2009-08-01 23:12:17 +02:00
if ( ! current_user_can ( 'activate_plugins' ) )
wp_die ( __ ( 'You do not have sufficient permissions to activate plugins for this blog.' ));
2008-06-04 20:09:31 +02:00
check_admin_referer ( 'activate-plugin_' . $plugin );
2009-05-28 13:02:16 +02:00
2010-01-29 22:45:32 +01:00
$result = activate_plugin ( $plugin , 'plugins.php?error=true&plugin=' . $plugin , $network_wide );
2008-06-04 20:09:31 +02:00
if ( is_wp_error ( $result ) )
2008-10-24 07:47:55 +02:00
wp_die ( $result );
2009-05-28 13:02:16 +02:00
2008-06-04 20:09:31 +02:00
$recent = ( array ) get_option ( 'recently_activated' );
2008-10-24 07:47:55 +02:00
if ( isset ( $recent [ $plugin ]) ) {
2008-06-04 20:09:31 +02:00
unset ( $recent [ $plugin ]);
update_option ( 'recently_activated' , $recent );
}
2009-05-28 13:02:16 +02:00
2009-04-21 21:17:44 +02:00
wp_redirect ( " plugins.php?activate=true&plugin_status= $status &paged= $page " ); // overrides the ?error=true one above
2008-06-04 20:09:31 +02:00
exit ;
break ;
case 'activate-selected' :
2009-08-01 23:12:17 +02:00
if ( ! current_user_can ( 'activate_plugins' ) )
wp_die ( __ ( 'You do not have sufficient permissions to activate plugins for this blog.' ));
2009-09-14 16:03:32 +02:00
2008-06-16 20:35:48 +02:00
check_admin_referer ( 'bulk-manage-plugins' );
2009-05-28 13:02:16 +02:00
2009-12-03 02:43:49 +01:00
$plugins = isset ( $_POST [ 'checked' ] ) ? ( array ) $_POST [ 'checked' ] : array ();
2009-05-28 13:02:16 +02:00
$plugins = array_filter ( $plugins , create_function ( '$plugin' , 'return !is_plugin_active($plugin);' ) ); //Only activate plugins which are not already active.
if ( empty ( $plugins ) ) {
wp_redirect ( " plugins.php?plugin_status= $status &paged= $page " );
exit ;
}
2010-01-29 22:45:32 +01:00
activate_plugins ( $plugins , 'plugins.php?error=true' , $network_wide );
2008-06-04 20:09:31 +02:00
$recent = ( array ) get_option ( 'recently_activated' );
2009-05-28 13:02:16 +02:00
foreach ( $plugins as $plugin => $time )
2008-10-24 07:47:55 +02:00
if ( isset ( $recent [ $plugin ]) )
2008-06-04 20:09:31 +02:00
unset ( $recent [ $plugin ]);
2009-05-28 13:02:16 +02:00
update_option ( 'recently_activated' , $recent );
2008-01-09 10:37:27 +01:00
2009-04-21 21:17:44 +02:00
wp_redirect ( " plugins.php?activate-multi=true&plugin_status= $status &paged= $page " );
2008-06-04 20:09:31 +02:00
exit ;
break ;
2010-01-26 07:53:47 +01:00
case 'update-selected' :
if ( ! current_user_can ( 'update_plugins' ) )
wp_die ( __ ( 'You do not have sufficient permissions to update plugins for this blog.' ) );
check_admin_referer ( 'bulk-manage-plugins' );
if ( isset ( $_GET [ 'plugins' ] ) )
$plugins = explode ( ',' , $_GET [ 'plugins' ] );
elseif ( isset ( $_POST [ 'checked' ] ) )
$plugins = ( array ) $_POST [ 'checked' ];
else
break ;
if ( empty ( $plugins ) )
break ;
// We'll be passing all checked plugins as long as at least one is out of date.
$_plugins = $plugins ;
$current = get_site_transient ( 'update_plugins' );
foreach ( $_plugins as $k => $v ) {
if ( ! isset ( $current -> response [ $v ] ) )
unset ( $_plugins [ $k ] );
}
unset ( $current );
// If all checked plugins are up to date
if ( empty ( $_plugins ) )
break ;
require_once ( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
require_once ( 'admin-header.php' );
2010-01-26 19:39:12 +01:00
2010-01-26 07:53:47 +01:00
$url = 'plugins.php?action=upgrade-selected&plugins=' . urlencode ( join ( ',' , $plugins ) );
$title = __ ( 'Upgrade Plugins' );
$nonce = 'bulk-manage-plugins' ;
$parent_file = 'plugins.php' ;
$upgrader = new Plugin_Upgrader ( new Plugin_Upgrader_Skin ( compact ( 'title' , 'nonce' , 'url' ) ) );
$upgrader -> bulk_upgrade ( $plugins );
require_once ( 'admin-footer.php' );
exit ;
break ;
2008-06-04 20:09:31 +02:00
case 'error_scrape' :
2009-08-01 23:12:17 +02:00
if ( ! current_user_can ( 'activate_plugins' ) )
wp_die ( __ ( 'You do not have sufficient permissions to activate plugins for this blog.' ));
2008-06-04 20:09:31 +02:00
check_admin_referer ( 'plugin-activation-error_' . $plugin );
2009-05-28 13:02:16 +02:00
2008-06-04 20:09:31 +02:00
$valid = validate_plugin ( $plugin );
if ( is_wp_error ( $valid ) )
wp_die ( $valid );
2009-05-28 13:02:16 +02:00
2009-12-12 10:20:07 +01:00
if ( defined ( 'E_RECOVERABLE_ERROR' ) )
error_reporting ( E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
else
error_reporting ( E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING );
2008-06-04 20:09:31 +02:00
@ ini_set ( 'display_errors' , true ); //Ensure that Fatal errors are displayed.
2008-10-26 07:33:33 +01:00
include ( WP_PLUGIN_DIR . '/' . $plugin );
do_action ( 'activate_' . $plugin );
2008-06-04 20:09:31 +02:00
exit ;
break ;
case 'deactivate' :
2009-08-01 23:12:17 +02:00
if ( ! current_user_can ( 'activate_plugins' ) )
wp_die ( __ ( 'You do not have sufficient permissions to deactivate plugins for this blog.' ));
2008-06-04 20:09:31 +02:00
check_admin_referer ( 'deactivate-plugin_' . $plugin );
deactivate_plugins ( $plugin );
update_option ( 'recently_activated' , array ( $plugin => time ()) + ( array ) get_option ( 'recently_activated' ));
2009-04-21 21:17:44 +02:00
wp_redirect ( " plugins.php?deactivate=true&plugin_status= $status &paged= $page " );
2008-06-04 20:09:31 +02:00
exit ;
break ;
case 'deactivate-selected' :
2009-08-01 23:12:17 +02:00
if ( ! current_user_can ( 'activate_plugins' ) )
wp_die ( __ ( 'You do not have sufficient permissions to deactivate plugins for this blog.' ));
2008-06-16 20:35:48 +02:00
check_admin_referer ( 'bulk-manage-plugins' );
2009-05-28 13:02:16 +02:00
2009-12-03 02:43:49 +01:00
$plugins = isset ( $_POST [ 'checked' ] ) ? ( array ) $_POST [ 'checked' ] : array ();
2009-05-28 13:02:16 +02:00
$plugins = array_filter ( $plugins , 'is_plugin_active' ); //Do not deactivate plugins which are already deactivated.
if ( empty ( $plugins ) ) {
wp_redirect ( " plugins.php?plugin_status= $status &paged= $page " );
exit ;
}
deactivate_plugins ( $plugins );
2008-06-04 20:09:31 +02:00
$deactivated = array ();
2009-05-28 13:02:16 +02:00
foreach ( $plugins as $plugin )
2008-06-04 20:09:31 +02:00
$deactivated [ $plugin ] = time ();
2009-05-28 13:02:16 +02:00
2008-06-04 20:09:31 +02:00
update_option ( 'recently_activated' , $deactivated + ( array ) get_option ( 'recently_activated' ));
2009-04-21 21:17:44 +02:00
wp_redirect ( " plugins.php?deactivate-multi=true&plugin_status= $status &paged= $page " );
2008-06-04 20:09:31 +02:00
exit ;
break ;
case 'delete-selected' :
2008-10-24 07:47:55 +02:00
if ( ! current_user_can ( 'delete_plugins' ) )
2008-06-06 21:21:35 +02:00
wp_die ( __ ( 'You do not have sufficient permissions to delete plugins for this blog.' ));
2008-08-09 07:36:14 +02:00
2008-06-16 20:35:48 +02:00
check_admin_referer ( 'bulk-manage-plugins' );
2008-08-09 07:36:14 +02:00
2009-12-03 02:43:49 +01:00
//$_POST = from the plugin form; $_GET = from the FTP details screen.
$plugins = isset ( $_REQUEST [ 'checked' ] ) ? ( array ) $_REQUEST [ 'checked' ] : array ();
2009-05-28 13:02:16 +02:00
$plugins = array_filter ( $plugins , create_function ( '$plugin' , 'return !is_plugin_active($plugin);' ) ); //Do not allow to delete Activated plugins.
if ( empty ( $plugins ) ) {
wp_redirect ( " plugins.php?plugin_status= $status &paged= $page " );
exit ;
}
2008-06-04 20:09:31 +02:00
include ( ABSPATH . 'wp-admin/update.php' );
$parent_file = 'plugins.php' ;
2008-08-09 07:36:14 +02:00
2008-10-24 07:47:55 +02:00
if ( ! isset ( $_REQUEST [ 'verify-delete' ]) ) {
2008-06-16 20:35:48 +02:00
wp_enqueue_script ( 'jquery' );
require_once ( 'admin-header.php' );
?>
< div class = " wrap " >
2008-08-09 07:36:14 +02:00
< h2 >< ? php _e ( 'Delete Plugin(s)' ); ?> </h2>
2008-06-16 20:35:48 +02:00
< ? php
$files_to_delete = $plugin_info = array ();
2008-10-24 07:47:55 +02:00
foreach ( ( array ) $plugins as $plugin ) {
if ( '.' == dirname ( $plugin ) ) {
2008-06-16 20:35:48 +02:00
$files_to_delete [] = WP_PLUGIN_DIR . '/' . $plugin ;
2010-01-18 21:34:48 +01:00
if ( $data = get_plugin_data ( WP_PLUGIN_DIR . '/' . $plugin ) )
2008-06-16 20:35:48 +02:00
$plugin_info [ $plugin ] = $data ;
} else {
//Locate all the files in that folder:
$files = list_files ( WP_PLUGIN_DIR . '/' . dirname ( $plugin ) );
2010-01-18 21:34:48 +01:00
if ( $files ) {
2008-06-16 20:35:48 +02:00
$files_to_delete = array_merge ( $files_to_delete , $files );
}
//Get plugins list from that folder
if ( $folder_plugins = get_plugins ( '/' . dirname ( $plugin )) )
$plugin_info = array_merge ( $plugin_info , $folder_plugins );
}
}
?>
< p >< ? php _e ( 'Deleting the selected plugins will remove the following plugin(s) and their files:' ); ?> </p>
2009-05-16 09:09:03 +02:00
< ul class = " ul-disc " >
2008-08-09 07:36:14 +02:00
< ? php
2008-10-24 07:47:55 +02:00
foreach ( $plugin_info as $plugin )
2010-01-21 22:37:43 +01:00
/* translators: 1: plugin name, 2: plugin author */
echo '<li>' , sprintf ( __ ( '<strong>%1$s</strong> by <em>%2$s</em>' ), $plugin [ 'Name' ], $plugin [ 'Author' ]), '</li>' ;
2008-06-16 20:35:48 +02:00
?>
</ ul >
< p >< ? php _e ( 'Are you sure you wish to delete these files?' ) ?> </p>
2009-05-18 18:00:33 +02:00
< form method = " post " action = " <?php echo esc_url( $_SERVER['REQUEST_URI'] ); ?> " style = " display:inline; " >
2008-06-16 20:35:48 +02:00
< input type = " hidden " name = " verify-delete " value = " 1 " />
2009-04-04 13:15:39 +02:00
< input type = " hidden " name = " action " value = " delete-selected " />
2008-06-16 20:35:48 +02:00
< ? php
2008-10-24 07:47:55 +02:00
foreach ( ( array ) $plugins as $plugin )
2009-05-05 21:43:53 +02:00
echo '<input type="hidden" name="checked[]" value="' . esc_attr ( $plugin ) . '" />' ;
2008-06-16 20:35:48 +02:00
?>
< ? php wp_nonce_field ( 'bulk-manage-plugins' ) ?>
2009-05-05 21:43:53 +02:00
< input type = " submit " name = " submit " value = " <?php esc_attr_e('Yes, Delete these files') ?> " class = " button " />
2008-06-16 20:35:48 +02:00
</ form >
2009-05-18 18:00:33 +02:00
< form method = " post " action = " <?php echo esc_url(wp_get_referer()); ?> " style = " display:inline; " >
2009-05-05 21:43:53 +02:00
< input type = " submit " name = " submit " value = " <?php esc_attr_e('No, Return me to the plugin list') ?> " class = " button " />
2008-06-16 20:35:48 +02:00
</ form >
< p >< a href = " # " onclick = " jQuery('#files-list').toggle(); return false; " >< ? php _e ( 'Click to view entire list of files which will be deleted' ); ?> </a></p>
< div id = " files-list " style = " display:none; " >
2009-05-16 09:09:03 +02:00
< ul class = " code " >
2008-06-16 20:35:48 +02:00
< ? php
2008-10-24 07:47:55 +02:00
foreach ( ( array ) $files_to_delete as $file )
2008-08-04 23:01:09 +02:00
echo '<li>' . str_replace ( WP_PLUGIN_DIR , '' , $file ) . '</li>' ;
2008-06-16 20:35:48 +02:00
?>
</ ul >
2008-08-09 07:36:14 +02:00
</ div >
2008-06-16 20:35:48 +02:00
</ div >
< ? php
require_once ( 'admin-footer.php' );
exit ;
2008-07-01 01:12:18 +02:00
} //Endif verify-delete
2008-06-04 20:09:31 +02:00
$delete_result = delete_plugins ( $plugins );
2008-06-10 18:57:33 +02:00
2009-05-17 11:39:32 +02:00
set_transient ( 'plugins_delete_result_' . $user_ID , $delete_result ); //Store the result in a cache rather than a URL param due to object type & length
wp_redirect ( " plugins.php?deleted=true&plugin_status= $status &paged= $page " );
exit ;
2008-07-01 01:12:18 +02:00
break ;
case 'clear-recent-list' :
update_option ( 'recently_activated' , array ());
2008-06-04 20:09:31 +02:00
break ;
}
2004-03-25 22:04:36 +01:00
}
2008-08-04 23:01:09 +02:00
wp_enqueue_script ( 'plugin-install' );
2008-11-07 23:11:14 +01:00
add_thickbox ();
2008-06-04 20:09:31 +02:00
2009-04-19 03:27:18 +02:00
$help = '<p>' . __ ( 'Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here.' ) . '</p>' ;
2010-01-18 23:21:36 +01:00
if ( current_user_can ( 'edit_plugins' ) ) {
2009-04-19 03:27:18 +02:00
$help .= '<p>' . sprintf ( __ ( 'If something goes wrong with a plugin and you can’t use WordPress, delete or rename that file in the <code>%s</code> directory and it will be automatically deactivated.' ), WP_PLUGIN_DIR ) . '</p>' ;
2009-04-19 03:11:13 +02:00
$help .= '<p>' . sprintf ( __ ( 'You can find additional plugins for your site by using the new <a href="%1$s">Plugin Browser/Installer</a> functionality or by browsing the <a href="http://wordpress.org/extend/plugins/">WordPress Plugin Directory</a> directly and installing manually. To <em>manually</em> install a plugin you generally just need to upload the plugin file into your <code>%2$s</code> directory. Once a plugin has been installed, you may activate it here.' ), 'plugin-install.php' , WP_PLUGIN_DIR ) . '</p>' ;
2010-01-14 03:02:19 +01:00
}
2009-04-19 03:11:13 +02:00
2010-01-15 17:58:36 +01:00
add_contextual_help ( $current_screen , $help );
2009-04-19 03:11:13 +02:00
2010-01-07 01:17:13 +01:00
if ( is_multisite () && is_super_admin () ) {
$menu_perms = get_site_option ( 'menu_items' , array ());
2010-01-26 19:39:12 +01:00
if ( empty ( $menu_perms [ 'plugins' ]) )
2010-01-07 08:41:13 +01:00
add_action ( 'admin_notices' , '_admin_notice_multisite_activate_plugins_page' );
2010-01-26 19:39:12 +01:00
unset ( $menu_perms );
2010-01-07 01:17:13 +01:00
}
2006-11-18 08:31:29 +01:00
$title = __ ( 'Manage Plugins' );
2004-03-25 08:05:52 +01:00
require_once ( 'admin-header.php' );
2008-07-30 01:10:12 +02:00
$invalid = validate_active_plugins ();
2008-10-24 07:47:55 +02:00
if ( ! empty ( $invalid ) )
foreach ( $invalid as $plugin_file => $error )
2009-05-18 17:11:07 +02:00
echo '<div id="message" class="error"><p>' . sprintf ( __ ( 'The plugin <code>%s</code> has been <strong>deactivated</strong> due to an error: %s' ), esc_html ( $plugin_file ), $error -> get_error_message ()) . '</p></div>' ;
2004-03-25 08:05:52 +01:00
?>
2004-04-14 21:04:14 +02:00
2007-01-25 21:45:20 +01:00
< ? php if ( isset ( $_GET [ 'error' ]) ) : ?>
2009-12-26 10:00:58 +01:00
< div id = " message " class = " updated " >< p >< ? php _e ( 'Plugin could not be activated because it triggered a <strong>fatal error</strong>.' ) ?> </p>
2007-06-25 20:57:54 +02:00
< ? php
2008-01-16 17:46:49 +01:00
if ( wp_verify_nonce ( $_GET [ '_error_nonce' ], 'plugin-activation-error_' . $plugin ) ) { ?>
2009-05-05 21:43:53 +02:00
< iframe style = " border:0 " width = " 100% " height = " 70px " src = " <?php echo admin_url('plugins.php?action=error_scrape&plugin=' . esc_attr( $plugin ) . '&_wpnonce=' . esc_attr( $_GET['_error_nonce'] )); ?> " ></ iframe >
2007-06-25 20:57:54 +02:00
< ? php
}
?>
</ div >
2009-05-17 11:39:32 +02:00
< ? php elseif ( isset ( $_GET [ 'deleted' ]) ) :
$delete_result = get_transient ( 'plugins_delete_result_' . $user_ID );
delete_transient ( 'plugins_delete_result' ); //Delete it once we're done.
2008-06-04 20:09:31 +02:00
if ( is_wp_error ( $delete_result ) ) : ?>
2009-12-26 10:00:58 +01:00
< div id = " message " class = " updated " >< p >< ? php printf ( __ ( 'Plugin could not be deleted due to an error: %s' ), $delete_result -> get_error_message () ); ?> </p></div>
2008-06-04 20:09:31 +02:00
< ? php else : ?>
2009-12-26 10:00:58 +01:00
< div id = " message " class = " updated " >< p >< ? php _e ( 'The selected plugins have been <strong>deleted</strong>.' ); ?> </p></div>
2008-06-04 20:09:31 +02:00
< ? php endif ; ?>
2007-01-25 21:45:20 +01:00
< ? php elseif ( isset ( $_GET [ 'activate' ]) ) : ?>
2009-12-26 10:00:58 +01:00
< div id = " message " class = " updated " >< p >< ? php _e ( 'Plugin <strong>activated</strong>.' ) ?> </p></div>
2008-06-04 20:09:31 +02:00
< ? php elseif ( isset ( $_GET [ 'activate-multi' ])) : ?>
2009-12-26 10:00:58 +01:00
< div id = " message " class = " updated " >< p >< ? php _e ( 'Selected plugins <strong>activated</strong>.' ); ?> </p></div>
2007-01-25 21:45:20 +01:00
< ? php elseif ( isset ( $_GET [ 'deactivate' ]) ) : ?>
2009-12-26 10:00:58 +01:00
< div id = " message " class = " updated " >< p >< ? php _e ( 'Plugin <strong>deactivated</strong>.' ) ?> </p></div>
2008-06-04 20:09:31 +02:00
< ? php elseif ( isset ( $_GET [ 'deactivate-multi' ])) : ?>
2009-12-26 10:00:58 +01:00
< div id = " message " class = " updated " >< p >< ? php _e ( 'Selected plugins <strong>deactivated</strong>.' ); ?> </p></div>
2010-01-26 07:53:47 +01:00
< ? php elseif ( 'update-selected' == $action ) : ?>
< div id = " message " class = " updated " >< p >< ? php _e ( 'No out of date plugins were selected.' ); ?> </p></div>
2004-04-14 21:04:14 +02:00
< ? php endif ; ?>
2004-03-25 08:05:52 +01:00
< div class = " wrap " >
2008-11-26 14:51:25 +01:00
< ? php screen_icon (); ?>
2010-01-18 23:21:36 +01:00
< h2 >< ? php echo esc_html ( $title ); if ( current_user_can ( 'install_plugins' ) ) { ?> <a href="plugin-install.php" class="button add-new-h2"><?php echo esc_html_x('Add New', 'plugin'); ?></a><?php } ?></h2>
2009-04-21 08:49:53 +02:00
2004-03-25 08:05:52 +01:00
< ? php
2010-01-14 03:02:19 +01:00
$all_plugins = apply_filters ( 'all_plugins' , get_plugins () );
2009-04-19 20:50:22 +02:00
$search_plugins = array ();
2008-06-04 20:09:31 +02:00
$active_plugins = array ();
2008-07-01 01:12:18 +02:00
$inactive_plugins = array ();
2008-06-04 20:09:31 +02:00
$recent_plugins = array ();
2009-04-19 20:50:22 +02:00
$recently_activated = get_option ( 'recently_activated' , array ());
2009-04-19 03:22:02 +02:00
$upgrade_plugins = array ();
2010-01-29 22:45:32 +01:00
$network_plugins = array ();
2009-04-19 03:22:02 +02:00
2009-03-07 03:07:24 +01:00
set_transient ( 'plugin_slugs' , array_keys ( $all_plugins ), 86400 );
2004-11-26 03:29:45 +01:00
2009-03-07 03:07:24 +01:00
// Clean out any plugins which were deactivated over a week ago.
2008-10-24 07:47:55 +02:00
foreach ( $recently_activated as $key => $time )
if ( $time + ( 7 * 24 * 60 * 60 ) < time () ) //1 week
2008-06-04 20:09:31 +02:00
unset ( $recently_activated [ $key ]);
2008-10-24 07:47:55 +02:00
if ( $recently_activated != get_option ( 'recently_activated' ) ) //If array changed, update it.
2008-06-04 20:09:31 +02:00
update_option ( 'recently_activated' , $recently_activated );
2010-01-08 21:49:55 +01:00
$current = get_site_transient ( 'update_plugins' );
2008-02-27 20:18:21 +01:00
2008-10-24 07:47:55 +02:00
foreach ( ( array ) $all_plugins as $plugin_file => $plugin_data ) {
2008-06-04 20:09:31 +02:00
2010-01-29 22:45:32 +01:00
// Translate, Apply Markup, Sanitize HTML
2009-05-16 21:30:08 +02:00
$plugin_data = _get_plugin_data_markup_translate ( $plugin_file , $plugin_data , false , true );
2009-04-19 20:50:22 +02:00
$all_plugins [ $plugin_file ] = $plugin_data ;
2008-06-04 20:09:31 +02:00
2010-01-29 22:45:32 +01:00
// Filter into individual sections
if ( is_plugin_active_for_network ( $plugin_file ) && is_super_admin () ) {
$network_plugins [ $plugin_file ] = $plugin_data ;
} elseif ( is_plugin_active ( $plugin_file ) ) {
2008-06-04 20:09:31 +02:00
$active_plugins [ $plugin_file ] = $plugin_data ;
} else {
2009-04-19 03:11:13 +02:00
if ( isset ( $recently_activated [ $plugin_file ] ) ) // Was the plugin recently activated?
2008-06-04 20:09:31 +02:00
$recent_plugins [ $plugin_file ] = $plugin_data ;
2009-04-19 03:11:13 +02:00
$inactive_plugins [ $plugin_file ] = $plugin_data ;
2008-06-04 20:09:31 +02:00
}
2009-04-19 03:22:02 +02:00
if ( isset ( $current -> response [ $plugin_file ] ) )
$upgrade_plugins [ $plugin_file ] = $plugin_data ;
2008-06-04 20:09:31 +02:00
}
2010-01-18 23:21:36 +01:00
if ( ! current_user_can ( 'update_plugins' ) )
$upgrade_plugins = array ();
2010-01-14 03:02:19 +01:00
2009-04-19 20:50:22 +02:00
$total_all_plugins = count ( $all_plugins );
2009-04-19 03:11:13 +02:00
$total_inactive_plugins = count ( $inactive_plugins );
$total_active_plugins = count ( $active_plugins );
$total_recent_plugins = count ( $recent_plugins );
2009-04-19 03:22:02 +02:00
$total_upgrade_plugins = count ( $upgrade_plugins );
2010-01-29 22:45:32 +01:00
$total_network_plugins = count ( $network_plugins );
2009-04-19 03:11:13 +02:00
2009-04-19 20:50:22 +02:00
//Searching.
if ( isset ( $_GET [ 's' ]) ) {
function _search_plugins_filter_callback ( $plugin ) {
static $term ;
if ( is_null ( $term ) )
$term = stripslashes ( $_GET [ 's' ]);
if ( stripos ( $plugin [ 'Name' ], $term ) !== false ||
stripos ( $plugin [ 'Description' ], $term ) !== false ||
stripos ( $plugin [ 'Author' ], $term ) !== false ||
stripos ( $plugin [ 'PluginURI' ], $term ) !== false ||
stripos ( $plugin [ 'AuthorURI' ], $term ) !== false ||
stripos ( $plugin [ 'Version' ], $term ) !== false )
return true ;
else
return false ;
}
2009-04-21 21:17:44 +02:00
$status = 'search' ;
2009-04-19 20:50:22 +02:00
$search_plugins = array_filter ( $all_plugins , '_search_plugins_filter_callback' );
$total_search_plugins = count ( $search_plugins );
}
2009-04-19 03:11:13 +02:00
$plugin_array_name = " ${ status } _plugins " ;
2009-05-17 11:39:32 +02:00
if ( empty ( $$plugin_array_name ) && $status != 'all' ) {
$status = 'all' ;
$plugin_array_name = " ${ status } _plugins " ;
}
2009-04-19 03:11:13 +02:00
$plugins = & $$plugin_array_name ;
2008-02-27 20:18:21 +01:00
2010-01-29 22:45:32 +01:00
// Paging.
2009-04-19 20:50:22 +02:00
$total_this_page = " total_ { $status } _plugins " ;
$total_this_page = $$total_this_page ;
2010-01-07 01:01:52 +01:00
$plugins_per_page = ( int ) get_user_option ( 'plugins_per_page' );
2009-12-12 00:14:43 +01:00
if ( empty ( $plugins_per_page ) || $plugins_per_page < 1 )
2009-05-13 06:26:40 +02:00
$plugins_per_page = 999 ;
2009-12-12 00:14:43 +01:00
$plugins_per_page = apply_filters ( 'plugins_per_page' , $plugins_per_page );
2009-04-19 20:50:22 +02:00
$start = ( $page - 1 ) * $plugins_per_page ;
$page_links = paginate_links ( array (
'base' => add_query_arg ( 'paged' , '%#%' ),
'format' => '' ,
'prev_text' => __ ( '«' ),
'next_text' => __ ( '»' ),
'total' => ceil ( $total_this_page / $plugins_per_page ),
'current' => $page
));
$page_links_text = sprintf ( '<span class="displaying-num">' . __ ( 'Displaying %s–%s of %s' ) . '</span>%s' ,
number_format_i18n ( $start + 1 ),
number_format_i18n ( min ( $page * $plugins_per_page , $total_this_page ) ),
'<span class="total-type-count">' . number_format_i18n ( $total_this_page ) . '</span>' ,
$page_links
);
2008-10-10 20:21:16 +02:00
/**
* @ ignore
*
* @ param array $plugins
* @ param string $context
*/
2008-06-04 20:09:31 +02:00
function print_plugins_table ( $plugins , $context = '' ) {
2009-04-21 21:17:44 +02:00
global $page ;
2008-06-04 20:09:31 +02:00
?>
2008-11-17 19:01:00 +01:00
< table class = " widefat " cellspacing = " 0 " id = " <?php echo $context ?>-plugins-table " >
2006-05-10 22:35:10 +02:00
< thead >
2004-03-25 08:05:52 +01:00
< tr >
2009-04-17 07:30:09 +02:00
< th scope = " col " class = " manage-column check-column " >< input type = " checkbox " /></ th >
< th scope = " col " class = " manage-column " >< ? php _e ( 'Plugin' ); ?> </th>
< th scope = " col " class = " manage-column " >< ? php _e ( 'Description' ); ?> </th>
2004-03-25 08:05:52 +01:00
</ tr >
2006-05-10 22:35:10 +02:00
</ thead >
2008-12-09 19:03:31 +01:00
2008-09-29 11:26:21 +02:00
< tfoot >
< tr >
2009-04-17 07:30:09 +02:00
< th scope = " col " class = " manage-column check-column " >< input type = " checkbox " /></ th >
< th scope = " col " class = " manage-column " >< ? php _e ( 'Plugin' ); ?> </th>
< th scope = " col " class = " manage-column " >< ? php _e ( 'Description' ); ?> </th>
2008-09-29 11:26:21 +02:00
</ tr >
</ tfoot >
2008-12-09 19:03:31 +01:00
2008-06-04 20:09:31 +02:00
< tbody class = " plugins " >
2004-03-25 08:05:52 +01:00
< ? php
2006-11-29 10:22:49 +01:00
2008-10-24 07:47:55 +02:00
if ( empty ( $plugins ) ) {
2008-06-04 20:09:31 +02:00
echo ' < tr >
2009-05-19 03:27:34 +02:00
< td colspan = " 3 " > ' . __(' No plugins to show ') . ' </ td >
2008-06-04 20:09:31 +02:00
</ tr > ' ;
}
2008-10-24 07:47:55 +02:00
foreach ( ( array ) $plugins as $plugin_file => $plugin_data ) {
2009-04-17 07:30:09 +02:00
$actions = array ();
2010-01-29 22:45:32 +01:00
$is_active_for_network = is_plugin_active_for_network ( $plugin_file );
2010-02-05 19:10:30 +01:00
$is_active = $is_active_for_network || is_plugin_active ( $plugin_file );
2006-11-29 10:22:49 +01:00
2010-01-29 22:45:32 +01:00
if ( $is_active_for_network && ! is_super_admin () )
continue ;
if ( $is_active ) {
if ( $is_active_for_network ) {
if ( is_super_admin () )
$actions [] = '<a href="' . wp_nonce_url ( 'plugins.php?action=deactivate&networkwide=1&plugin=' . $plugin_file . '&plugin_status=' . $context . '&paged=' . $page , 'deactivate-plugin_' . $plugin_file ) . '" title="' . __ ( 'Deactivate this plugin' ) . '">' . __ ( 'Network Deactivate' ) . '</a>' ;
} else {
$actions [] = '<a href="' . wp_nonce_url ( 'plugins.php?action=deactivate&plugin=' . $plugin_file . '&plugin_status=' . $context . '&paged=' . $page , 'deactivate-plugin_' . $plugin_file ) . '" title="' . __ ( 'Deactivate this plugin' ) . '">' . __ ( 'Deactivate' ) . '</a>' ;
}
} else {
2010-02-07 01:03:10 +01:00
if ( is_multisite () && is_network_only_plugin ( $plugin_file ) )
2010-02-05 22:33:53 +01:00
$actions [] = '<span title="' . __ ( 'This plugin can only be activated for all sites in a network' ) . '">' . __ ( 'Network Only' ) . '</span>' ;
else
$actions [] = '<a href="' . wp_nonce_url ( 'plugins.php?action=activate&plugin=' . $plugin_file . '&plugin_status=' . $context . '&paged=' . $page , 'activate-plugin_' . $plugin_file ) . '" title="' . __ ( 'Activate this plugin' ) . '" class="edit">' . __ ( 'Activate' ) . '</a>' ;
2010-01-29 22:45:32 +01:00
if ( is_multisite () && is_super_admin () )
$actions [] = '<a href="' . wp_nonce_url ( 'plugins.php?action=activate&networkwide=1&plugin=' . $plugin_file . '&plugin_status=' . $context . '&paged=' . $page , 'activate-plugin_' . $plugin_file ) . '" title="' . __ ( 'Activate this plugin for all sites in this network' ) . '" class="edit">' . __ ( 'Network Activate' ) . '</a>' ;
}
2006-11-29 10:22:49 +01:00
2010-01-29 22:45:32 +01:00
if ( ! is_multisite () && current_user_can ( 'edit_plugins' ) && is_writable ( WP_PLUGIN_DIR . '/' . $plugin_file ) )
2009-04-17 07:30:09 +02:00
$actions [] = '<a href="plugin-editor.php?file=' . $plugin_file . '" title="' . __ ( 'Open this file in the Plugin Editor' ) . '" class="edit">' . __ ( 'Edit' ) . '</a>' ;
2006-10-04 08:48:52 +02:00
2009-05-17 11:39:32 +02:00
if ( ! $is_active && current_user_can ( 'delete_plugins' ) )
$actions [] = '<a href="' . wp_nonce_url ( 'plugins.php?action=delete-selected&checked[]=' . $plugin_file . '&plugin_status=' . $context . '&paged=' . $page , 'bulk-manage-plugins' ) . '" title="' . __ ( 'Delete this plugin' ) . '" class="delete">' . __ ( 'Delete' ) . '</a>' ;
2009-04-17 07:30:09 +02:00
$actions = apply_filters ( 'plugin_action_links' , $actions , $plugin_file , $plugin_data , $context );
$actions = apply_filters ( " plugin_action_links_ $plugin_file " , $actions , $plugin_file , $plugin_data , $context );
$action_count = count ( $actions );
2009-04-19 20:53:05 +02:00
$class = $is_active ? 'active' : 'inactive' ;
2004-03-25 08:05:52 +01:00
echo "
2009-04-19 03:11:13 +02:00
< tr class = '$class' >
2009-05-05 21:43:53 +02:00
< th scope = 'row' class = 'check-column' >< input type = 'checkbox' name = 'checked[]' value = '" . esc_attr($plugin_file) . "' /></ th >
2009-05-19 03:27:34 +02:00
< td class = 'plugin-title' >< strong > { $plugin_data [ 'Name' ]} </ strong ></ td >
< td class = 'desc' >< p > { $plugin_data [ 'Description' ]} </ p ></ td >
2009-05-21 11:40:11 +02:00
</ tr >
2009-05-19 03:27:34 +02:00
< tr class = '$class second' >
< td ></ td >
< td class = 'plugin-title' > " ;
2009-05-16 21:30:08 +02:00
echo '<div class="row-actions-visible">' ;
2009-04-17 07:30:09 +02:00
foreach ( $actions as $action => $link ) {
2009-05-28 13:02:16 +02:00
$sep = end ( $actions ) == $link ? '' : ' | ' ;
2009-04-17 07:30:09 +02:00
echo " <span class=' $action '> $link $sep </span> " ;
}
2009-05-19 03:27:34 +02:00
echo " </div></td>
< td class = 'desc' > " ;
2009-05-18 18:56:42 +02:00
$plugin_meta = array ();
if ( ! empty ( $plugin_data [ 'Version' ]) )
2009-05-19 00:17:58 +02:00
$plugin_meta [] = sprintf ( __ ( 'Version %s' ), $plugin_data [ 'Version' ]);
2009-05-16 21:30:08 +02:00
if ( ! empty ( $plugin_data [ 'Author' ]) ) {
$author = $plugin_data [ 'Author' ];
if ( ! empty ( $plugin_data [ 'AuthorURI' ]) )
$author = '<a href="' . $plugin_data [ 'AuthorURI' ] . '" title="' . __ ( 'Visit author homepage' ) . '">' . $plugin_data [ 'Author' ] . '</a>' ;
2009-05-19 00:17:58 +02:00
$plugin_meta [] = sprintf ( __ ( 'By %s' ), $author );
}
2009-05-28 13:02:16 +02:00
if ( ! empty ( $plugin_data [ 'PluginURI' ]) )
2009-05-19 00:17:58 +02:00
$plugin_meta [] = '<a href="' . $plugin_data [ 'PluginURI' ] . '" title="' . __ ( 'Visit plugin site' ) . '">' . __ ( 'Visit plugin site' ) . '</a>' ;
2009-05-28 13:02:16 +02:00
2009-05-18 18:56:42 +02:00
$plugin_meta = apply_filters ( 'plugin_row_meta' , $plugin_meta , $plugin_file , $plugin_data , $context );
2009-05-19 00:17:58 +02:00
echo implode ( ' | ' , $plugin_meta );
2009-06-06 16:39:34 +02:00
echo " </td>
2009-05-19 03:27:34 +02:00
</ tr > \n " ;
2009-05-25 01:47:49 +02:00
2009-05-21 11:40:11 +02:00
do_action ( 'after_plugin_row' , $plugin_file , $plugin_data , $context );
do_action ( " after_plugin_row_ $plugin_file " , $plugin_file , $plugin_data , $context );
2004-03-25 08:05:52 +01:00
}
?>
2008-02-27 20:18:21 +01:00
</ tbody >
2004-03-25 08:05:52 +01:00
</ table >
2008-08-09 07:36:14 +02:00
< ? php
2008-06-04 20:09:31 +02:00
} //End print_plugins_table()
2008-10-25 21:14:47 +02:00
/**
* @ ignore
*
* @ param string $context
*/
2009-05-28 13:02:16 +02:00
function print_plugin_actions ( $context , $field_name = 'action' ) {
2008-10-25 21:14:47 +02:00
?>
< div class = " alignleft actions " >
2009-05-28 13:02:16 +02:00
< select name = " <?php echo $field_name ; ?> " >
2008-12-04 22:57:56 +01:00
< option value = " " selected = " selected " >< ? php _e ( 'Bulk Actions' ); ?> </option>
2009-04-20 21:23:33 +02:00
< ? php if ( 'active' != $context ) : ?>
2008-10-25 21:14:47 +02:00
< option value = " activate-selected " >< ? php _e ( 'Activate' ); ?> </option>
< ? php endif ; ?>
2009-04-20 21:23:33 +02:00
< ? php if ( 'inactive' != $context && 'recent' != $context ) : ?>
2008-10-25 21:14:47 +02:00
< option value = " deactivate-selected " >< ? php _e ( 'Deactivate' ); ?> </option>
2008-10-26 23:06:58 +01:00
< ? php endif ; ?>
2010-01-26 07:53:47 +01:00
< ? php if ( current_user_can ( 'update_plugins' ) ) : ?>
< option value = " update-selected " >< ? php _e ( 'Upgrade' ); ?> </option>
< ? php endif ; ?>
2009-04-20 21:23:33 +02:00
< ? php if ( current_user_can ( 'delete_plugins' ) && ( 'active' != $context ) ) : ?>
2008-10-25 21:14:47 +02:00
< option value = " delete-selected " >< ? php _e ( 'Delete' ); ?> </option>
< ? php endif ; ?>
</ select >
2009-05-05 21:43:53 +02:00
< input type = " submit " name = " doaction_active " value = " <?php esc_attr_e('Apply'); ?> " class = " button-secondary action " />
2010-01-18 21:34:48 +01:00
< ? php if ( 'recent' == $context ) : ?>
2009-05-05 21:43:53 +02:00
< input type = " submit " name = " clear-recent-list " value = " <?php esc_attr_e('Clear List') ?> " class = " button-secondary " />
2008-10-25 21:14:47 +02:00
< ? php endif ; ?>
2008-12-09 19:03:31 +01:00
</ div >
2008-10-25 21:14:47 +02:00
< ? php
}
2004-03-25 08:05:52 +01:00
?>
2005-05-09 13:37:36 +02:00
2009-04-19 20:50:22 +02:00
< form method = " get " action = " " >
< p class = " search-box " >
2009-05-13 00:40:56 +02:00
< label class = " screen-reader-text " for = " plugin-search-input " >< ? php _e ( 'Search Plugins' ); ?> :</label>
2009-04-19 20:50:22 +02:00
< input type = " text " id = " plugin-search-input " name = " s " value = " <?php _admin_search_query(); ?> " />
2009-05-05 21:43:53 +02:00
< input type = " submit " value = " <?php esc_attr_e( 'Search Plugins' ); ?> " class = " button " />
2009-04-19 20:50:22 +02:00
</ p >
</ form >
2010-01-14 03:02:19 +01:00
< ? php do_action ( 'pre_current_active_plugins' , $all_plugins ) ?>
2008-06-04 20:09:31 +02:00
< form method = " post " action = " <?php echo admin_url('plugins.php') ?> " >
2008-06-16 20:35:48 +02:00
< ? php wp_nonce_field ( 'bulk-manage-plugins' ) ?>
2009-05-05 21:43:53 +02:00
< input type = " hidden " name = " plugin_status " value = " <?php echo esc_attr( $status ) ?> " />
< input type = " hidden " name = " paged " value = " <?php echo esc_attr( $page ) ?> " />
2008-06-04 20:09:31 +02:00
2009-04-19 03:11:13 +02:00
< ul class = " subsubsub " >
< ? php
$status_links = array ();
$class = ( 'all' == $status ) ? ' class="current"' : '' ;
2009-04-30 18:22:14 +02:00
$status_links [] = " <li><a href='plugins.php?plugin_status=all' $class > " . sprintf ( _nx ( 'All <span class="count">(%s)</span>' , 'All <span class="count">(%s)</span>' , $total_all_plugins , 'plugins' ), number_format_i18n ( $total_all_plugins ) ) . '</a>' ;
2009-04-19 03:11:13 +02:00
if ( ! empty ( $active_plugins ) ) {
$class = ( 'active' == $status ) ? ' class="current"' : '' ;
$status_links [] = " <li><a href='plugins.php?plugin_status=active' $class > " . sprintf ( _n ( 'Active <span class="count">(%s)</span>' , 'Active <span class="count">(%s)</span>' , $total_active_plugins ), number_format_i18n ( $total_active_plugins ) ) . '</a>' ;
}
if ( ! empty ( $recent_plugins ) ) {
$class = ( 'recent' == $status ) ? ' class="current"' : '' ;
$status_links [] = " <li><a href='plugins.php?plugin_status=recent' $class > " . sprintf ( _n ( 'Recently Active <span class="count">(%s)</span>' , 'Recently Active <span class="count">(%s)</span>' , $total_recent_plugins ), number_format_i18n ( $total_recent_plugins ) ) . '</a>' ;
}
if ( ! empty ( $inactive_plugins ) ) {
$class = ( 'inactive' == $status ) ? ' class="current"' : '' ;
$status_links [] = " <li><a href='plugins.php?plugin_status=inactive' $class > " . sprintf ( _n ( 'Inactive <span class="count">(%s)</span>' , 'Inactive <span class="count">(%s)</span>' , $total_inactive_plugins ), number_format_i18n ( $total_inactive_plugins ) ) . '</a>' ;
}
2010-01-29 22:45:32 +01:00
if ( ! empty ( $network_plugins ) ) {
$class = ( 'network' == $status ) ? ' class="current"' : '' ;
$status_links [] = " <li><a href='plugins.php?plugin_status=network' $class > " . sprintf ( _n ( 'Network <span class="count">(%s)</span>' , 'Network <span class="count">(%s)</span>' , $total_network_plugins ), number_format_i18n ( $total_network_plugins ) ) . '</a>' ;
}
2009-04-19 03:22:02 +02:00
if ( ! empty ( $upgrade_plugins ) ) {
$class = ( 'upgrade' == $status ) ? ' class="current"' : '' ;
$status_links [] = " <li><a href='plugins.php?plugin_status=upgrade' $class > " . sprintf ( _n ( 'Upgrade Available <span class="count">(%s)</span>' , 'Upgrade Available <span class="count">(%s)</span>' , $total_upgrade_plugins ), number_format_i18n ( $total_upgrade_plugins ) ) . '</a>' ;
}
2009-04-19 20:50:22 +02:00
if ( ! empty ( $search_plugins ) ) {
$class = ( 'search' == $status ) ? ' class="current"' : '' ;
$term = isset ( $_REQUEST [ 's' ]) ? urlencode ( stripslashes ( $_REQUEST [ 's' ])) : '' ;
$status_links [] = " <li><a href='plugins.php?s= $term ' $class > " . sprintf ( _n ( 'Search Results <span class="count">(%s)</span>' , 'Search Results <span class="count">(%s)</span>' , $total_search_plugins ), number_format_i18n ( $total_search_plugins ) ) . '</a>' ;
}
2009-04-19 03:11:13 +02:00
echo implode ( " |</li> \n " , $status_links ) . '</li>' ;
unset ( $status_links );
?>
</ ul >
2008-06-04 20:09:31 +02:00
< div class = " tablenav " >
2009-04-19 20:50:22 +02:00
< ? php
if ( $page_links )
echo '<div class="tablenav-pages">' , $page_links_text , '</div>' ;
print_plugin_actions ( $status );
?>
2008-06-04 20:09:31 +02:00
</ div >
2008-10-03 02:13:12 +02:00
< div class = " clear " ></ div >
2009-04-19 20:50:22 +02:00
< ? php
if ( $total_this_page > $plugins_per_page )
$plugins = array_slice ( $plugins , $start , $plugins_per_page );
2009-04-20 20:18:39 +02:00
2009-04-19 20:50:22 +02:00
print_plugins_table ( $plugins , $status );
?>
< div class = " tablenav " >
< ? php
if ( $page_links )
echo " <div class='tablenav-pages'> $page_links_text </div> " ;
2009-05-28 13:02:16 +02:00
print_plugin_actions ( $status , " action2 " );
2009-04-19 20:50:22 +02:00
?>
</ div >
2008-06-04 20:09:31 +02:00
</ form >
2008-07-01 01:12:18 +02:00
< ? php if ( empty ( $all_plugins ) ) : ?>
< p >< ? php _e ( 'You do not appear to have any plugins available at this time.' ) ?> </p>
< ? php endif ; ?>
2004-03-25 08:05:52 +01:00
</ div >
< ? php
include ( 'admin-footer.php' );
2009-04-17 07:30:09 +02:00
?>