Make WordPress Core

Ticket #7091: 7091.diff

File 7091.diff, 25.2 KB (added by DD32, 16 years ago)
  • wp-admin/css/colors-classic.css

     
    415415        background-color: #fff;
    416416}
    417417
    418 #plugins .active {
     418.plugins .active {
    419419        background-color: #BBEEBB;
    420420}
    421421
    422 #plugins .togl {
     422.plugins .togl {
    423423        border-right-color: #ccc;
    424424}
    425425
     
    427427        background-color: #ffffe0;
    428428}
    429429
    430 #plugins tr {
     430.plugins tr {
    431431        background-color: #fff;
    432432}
    433433
  • wp-admin/css/colors-fresh.css

     
    384384        background-color: #fff;
    385385}
    386386
    387 #plugins .active {
     387.plugins .active {
    388388        background-color: #e7f7d3;
    389389}
    390390
    391 #plugins .togl {
     391.plugins .togl {
    392392        border-right-color: #ccc;
    393393}
    394394
     
    396396        background-color: #ffffe0;
    397397}
    398398
    399 #plugins tr {
     399.plugins tr {
    400400        background-color: #fff;
    401401}
    402402
  • wp-admin/includes/plugin.php

     
    132132        update_option('active_plugins', $current);
    133133}
    134134
    135 function deactivate_all_plugins() {
    136         $current = get_option('active_plugins');
    137         if ( empty($current) )
    138                 return;
     135//Replaces reactivate_all_plugins() / deactivate_all_plugins()  = 'deactivated_plugins' is now useless
     136function activate_plugins($plugins, $redirect = '') {
     137        if ( !is_array($plugins) )
     138                $plugins = array($plugins);
    139139
    140         deactivate_plugins($current);
     140        $errors = array();
     141        foreach ( (array) $plugins as $plugin ) {
     142                if ( !empty($redirect) )
     143                        $redirect = add_query_arg('plugin', $plugin, $redirect);
     144                $result = activate_plugin($plugin, $redirect);
     145                if ( is_wp_error($result) )
     146                        $errors[$plugin] = $result;
     147        }
    141148
    142         update_option('deactivated_plugins', $current);
     149        if ( !empty($errors) )
     150                return new WP_Error('plugins_invalid', __('One of the plugins is invalid.'), $errors);
     151
     152        return true;
    143153}
    144154
    145 function reactivate_all_plugins($redirect = '') {
    146         $plugins = get_option('deactivated_plugins');
     155function delete_plugins($plugins, $redirect = '' ) {
     156        global $wp_filesystem;
    147157
    148         if ( empty($plugins) )
     158        if( empty($plugins) )
     159                return false;
     160
     161        $checked = array();
     162        foreach( $plugins as $plugin )
     163                $checked[] = 'checked[]=' . $plugin;
     164
     165        ob_start();
     166        $url = wp_nonce_url('plugins.php?action=delete-selected&' . implode('&', $checked), 'mass-manage-plugins');
     167        if ( false === ($credentials = request_filesystem_credentials($url)) ) {
     168                $data = ob_get_contents();
     169                ob_end_clean();
     170                if( ! empty($data) ){
     171                        include_once( ABSPATH . 'wp-admin/admin-header.php');
     172                        echo $data;
     173                        include( ABSPATH . 'wp-admin/admin-footer.php');
     174                        exit;
     175                }
    149176                return;
     177        }
    150178
    151         if ( !empty($redirect) )
    152                 wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), $redirect));
     179        if ( ! WP_Filesystem($credentials) ) {
     180                request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again
     181                $data = ob_get_contents();
     182                ob_end_clean();
     183                if( ! empty($data) ){
     184                        include_once( ABSPATH . 'wp-admin/admin-header.php');
     185                        echo $data;
     186                        include( ABSPATH . 'wp-admin/admin-footer.php');
     187                        exit;
     188                }
     189                return;
     190        }
    153191
    154         $errors = array();
    155         foreach ( (array) $plugins as $plugin ) {
    156                 $result = activate_plugin($plugin);
    157                 if ( is_wp_error($result) )
    158                         $errors[$plugin] = $result;
     192        if ( $wp_filesystem->errors->get_error_code() ) {
     193                return $wp_filesystem->errors;
    159194        }
    160195
    161         delete_option('deactivated_plugins');
     196        if ( ! is_object($wp_filesystem) )
     197                return new WP_Error('fs_unavailable', __('Could not access filesystem.'));
    162198
    163         if ( !empty($errors) )
    164                 return new WP_Error('plugins_invalid', __('One of the plugins is invalid.'), $errors);
     199        if ( $wp_filesystem->errors->get_error_code() )
     200                return new WP_Error('fs_error', __('Filesystem error'), $wp_filesystem->errors);
    165201
     202        //Get the base plugin folder
     203        $plugins_dir = $wp_filesystem->wp_plugins_dir();
     204        if ( empty($plugins_dir) )
     205                return new WP_Error('fs_no_plugins_dir', __('Unable to locate WordPress Plugin directory.'));
     206       
     207        $plugins_dir = trailingslashit( $plugins_dir );
     208
     209        $errors = array();
     210
     211        foreach( $plugins as $plugin_file ) {
     212                $this_plugin_dir = trailingslashit( dirname($plugins_dir . $plugin_file) );
     213                // If plugin is in its own directory, recursively delete the directory.
     214                if ( strpos($plugin_file, '/') && $this_plugin_dir != $plugins_dir ) //base check on if plugin includes directory seperator AND that its not the root plugin folder
     215                        $deleted = $wp_filesystem->delete($this_plugin_dir, true);
     216                else
     217                        $deleted = $wp_filesystem->delete($plugins_dir . $plugin_file);
     218       
     219                if ( ! $deleted )
     220                        $errors[] = $plugin_file;
     221        }
     222       
     223        if( ! empty($errors) )
     224                return new WP_Error('could_not_remove_plugin', sprintf(__('Could not fully remove the plugin(s) %s'), implode(', ', $errors)) );
     225       
    166226        return true;
    167227}
    168228
  • wp-admin/includes/update.php

     
    118118}
    119119add_action( 'load-plugins.php', 'wp_update_plugins' );
    120120
    121 function wp_plugin_update_row( $file ) {
    122         global $plugin_data;
     121function wp_plugin_update_row( $file, $plugin_data ) {
    123122        $current = get_option( 'update_plugins' );
    124123        if ( !isset( $current->response[ $file ] ) )
    125124                return false;
    126125
    127126        $r = $current->response[ $file ];
    128127
    129         echo "<tr><td colspan='5' class='plugin-update'>";
     128        echo '<tr><td colspan="5" class="plugin-update">';
    130129        if ( !current_user_can('edit_plugins') )
    131130                printf( __('There is a new version of %1$s available. <a href="%2$s">Download version %3$s here</a>.'), $plugin_data['Name'], $r->url, $r->new_version);
    132131        else if ( empty($r->package) )
    133132                printf( __('There is a new version of %1$s available. <a href="%2$s">Download version %3$s here</a> <em>automatic upgrade unavailable for this plugin</em>.'), $plugin_data['Name'], $r->url, $r->new_version);
    134133        else
    135                 printf( __('There is a new version of %1$s available. <a href="%2$s">Download version %3$s here</a> or <a href="%4$s">upgrade automatically</a>.'), $plugin_data['Name'], $r->url, $r->new_version, wp_nonce_url("update.php?action=upgrade-plugin&amp;plugin=$file", 'upgrade-plugin_' . $file) );
     134                printf( __('There is a new version of %1$s available. <a href="%2$s">Download version %3$s here</a> or <a href="%4$s">upgrade automatically</a>.'), $plugin_data['Name'], $r->url, $r->new_version, wp_nonce_url('update.php?action=upgrade-plugin&amp;plugin=' . $file, 'upgrade-plugin_' . $file) );
    136135       
    137         echo "</td></tr>";
     136        echo '</td></tr>';
    138137}
    139 add_action( 'after_plugin_row', 'wp_plugin_update_row' );
     138add_action( 'after_plugin_row', 'wp_plugin_update_row', 10, 2 );
    140139
    141140function wp_update_plugin($plugin, $feedback = '') {
    142141        global $wp_filesystem;
  • wp-admin/menu-header.php

     
    22$self = preg_replace('|^.*/wp-admin/|i', '', $_SERVER['PHP_SELF']);
    33$self = preg_replace('|^.*/plugins/|i', '', $self);
    44
     5global $menu, $submenu, $parent_file; //For when admin-header is included from within a function.
     6
    57get_admin_page_parent();
    68
    79// We're going to do this loop three times
  • wp-admin/plugins.php

     
    11<?php
    22require_once('admin.php');
    33
    4 if ( isset($_GET['action']) ) {
    5         if ( isset($_GET['plugin']) )
    6                 $plugin = trim($_GET['plugin']);
     4$action = '';
     5foreach( array('activate-selected', 'deactivate-selected', 'delete-selected') as $action_key ) {
     6        if( isset($_POST[$action_key]) ) {
     7                $action = $action_key;
     8                break;
     9        }
     10}
    711
    8         if ( 'activate' == $_GET['action'] ) {
    9                 check_admin_referer('activate-plugin_' . $_GET['plugin']);
    10                 $result = activate_plugin($_GET['plugin'], 'plugins.php?error=true&plugin=' . $plugin);
    11                 if ( is_wp_error( $result ) )
    12                         wp_die( $result->get_error_message() );
    13                 wp_redirect('plugins.php?activate=true'); // overrides the ?error=true one above
    14         } elseif ( 'error_scrape' == $_GET['action'] ) {
    15                 check_admin_referer('plugin-activation-error_' . $plugin);
    16                 $valid = validate_plugin($plugin);
    17                 if ( is_wp_error($valid) )
    18                         wp_die($valid);
    19                 error_reporting( E_ALL ^ E_NOTICE );
    20                 @ini_set('display_errors', true); //Ensure that Fatal errors are displayed.
    21                 include(WP_PLUGIN_DIR . '/' . $plugin);
    22         } elseif ( 'deactivate' == $_GET['action'] ) {
    23                 check_admin_referer('deactivate-plugin_' . $_GET['plugin']);
    24                 deactivate_plugins($_GET['plugin']);
    25                 wp_redirect('plugins.php?deactivate=true');
    26         } elseif ( 'deactivate-all' == $_GET['action'] ) {
    27                 check_admin_referer('deactivate-all');
    28                 deactivate_all_plugins();
    29                 wp_redirect('plugins.php?deactivate-all=true');
    30         } elseif ('reactivate-all' == $_GET['action']) {
    31                 check_admin_referer('reactivate-all');
    32                 reactivate_all_plugins('plugins.php?errors=true');
    33                 wp_redirect('plugins.php?reactivate-all=true'); // overrides the ?error=true one above
     12if( isset($_GET['action']) )
     13        $action = $_GET['action'];
     14
     15$plugin = $_REQUEST['plugin'];
     16
     17if( !empty($action) ) {
     18        switch( $action ) {
     19                case 'activate':
     20                        check_admin_referer('activate-plugin_' . $plugin);
     21                        $result = activate_plugin($plugin, 'plugins.php?error=true&plugin=' . $plugin);
     22                        if ( is_wp_error( $result ) )
     23                                wp_die( $result->get_error_message() );
     24                        $recent = (array)get_option('recently_activated');
     25                        if( isset($recent[ $plugin ]) ){
     26                                unset($recent[ $plugin ]);
     27                                update_option('recently_activated', $recent);
     28                        }
     29                        wp_redirect('plugins.php?activate=true'); // overrides the ?error=true one above
     30                        exit;
     31                        break;
     32                case 'activate-selected':
     33                        check_admin_referer('mass-manage-plugins');
     34                        activate_plugins($_POST['checked'], 'plugins.php?error=true');
     35
     36                        $recent = (array)get_option('recently_activated');
     37                        foreach( (array)$_POST['checked'] as $plugin => $time) {
     38                                if( isset($recent[ $plugin ]) )
     39                                        unset($recent[ $plugin ]);
     40                        }
     41                        if( $recent != get_option('recently_activated') ) //If array changed, update it.
     42                                update_option('recently_activated', $recent);
     43
     44                        wp_redirect('plugins.php?activate-multi=true');
     45                        exit;
     46                        break;
     47                case 'error_scrape':
     48                        check_admin_referer('plugin-activation-error_' . $plugin);
     49                        $valid = validate_plugin($plugin);
     50                        if ( is_wp_error($valid) )
     51                                wp_die($valid);
     52                        error_reporting( E_ALL ^ E_NOTICE );
     53                        @ini_set('display_errors', true); //Ensure that Fatal errors are displayed.
     54                        include(WP_PLUGIN_DIR . '/' . $plugin);
     55                        exit;
     56                        break;
     57                case 'deactivate':
     58                        check_admin_referer('deactivate-plugin_' . $plugin);
     59                        deactivate_plugins($plugin);
     60                        update_option('recently_activated', array($plugin => time()) + (array)get_option('recently_activated'));
     61                        wp_redirect('plugins.php?deactivate=true');
     62                        exit;
     63                        break;
     64                case 'deactivate-selected':
     65                        check_admin_referer('mass-manage-plugins');
     66                        deactivate_plugins($_POST['checked']);
     67                        $deactivated = array();
     68                        foreach( (array)$_POST['checked'] as $plugin )
     69                                $deactivated[ $plugin ] = time();
     70                        update_option('recently_activated', $deactivated + (array)get_option('recently_activated'));
     71                        wp_redirect('plugins.php?deactivate-multi=true');
     72                        exit;
     73                        break;
     74                case 'delete-selected':
     75                        check_admin_referer('mass-manage-plugins');
     76                        $plugins = $_REQUEST['checked'];
     77                        include(ABSPATH . 'wp-admin/update.php');
     78
     79                        $title = __('Delete Plugin');
     80                        $parent_file = 'plugins.php';
     81
     82                        $delete_result = delete_plugins($plugins);
     83                       
     84                        //HACK TIME!
     85                        // Proper way needed, perhaps get_plugins() to convert to wp_cache_get() any reason why it hasnt allready?
     86                        // This clears the cached plugin list
     87                        global $wp_plugins;
     88                        $wp_plugins = null;
     89                       
     90                       
     91                               
     92                        //TODO: Implement!.. STAT!
     93                        break;
     94                default:
     95                        var_dump("Unknown Action $action");
    3496        }
    35 
    36         exit;
    3797}
    3898
     99wp_enqueue_script('admin-forms');
     100
    39101$title = __('Manage Plugins');
    40102require_once('admin-header.php');
    41103
     
    46108<?php if ( isset($_GET['error']) ) : ?>
    47109        <div id="message" class="updated fade"><p><?php _e('Plugin could not be activated because it triggered a <strong>fatal error</strong>.') ?></p>
    48110        <?php
    49                 $plugin = trim($_GET['plugin']);
    50111                if ( wp_verify_nonce($_GET['_error_nonce'], 'plugin-activation-error_' . $plugin) ) { ?>
    51         <iframe style="border:0" width="100%" height="70px" src="<?php bloginfo('wpurl'); ?>/wp-admin/plugins.php?action=error_scrape&amp;plugin=<?php echo attribute_escape($plugin); ?>&amp;_wpnonce=<?php echo attribute_escape($_GET['_error_nonce']); ?>"></iframe>
     112        <iframe style="border:0" width="100%" height="70px" src="<?php echo admin_url('plugins.php?action=error_scrape&amp;plugin=' . attribute_escape($plugin) . '&amp;_wpnonce=' . attribute_escape($_GET['_error_nonce'])); ?>"></iframe>
    52113        <?php
    53114                }
    54115        ?>
    55116        </div>
    56 <?php elseif ( isset($_GET['errors']) ) : ?>
    57         <div id="message" class="updated fade"><p><?php _e('Some plugins could not be reactivated because they triggered a <strong>fatal error</strong>.') ?></p></div>
     117<?php elseif ( 'delete-selected' == $action ) :
     118                if ( is_wp_error($delete_result) ) : ?>
     119                <div id="message" class="updated fade"><p><?php printf( __('Plugin could not be deleted due to an error: %s'), $delete_result->get_error_message() ); ?></p></div>
     120                <?php else : ?>
     121                <div id="message" class="updated fade"><p><?php _e('The selected plugins have been <strong>deleted</strong>.'); ?></p></div>
     122                <?php endif; ?>
    58123<?php elseif ( isset($_GET['activate']) ) : ?>
    59124        <div id="message" class="updated fade"><p><?php _e('Plugin <strong>activated</strong>.') ?></p></div>
     125<?php elseif (isset($_GET['activate-multi'])) : ?>
     126        <div id="message" class="updated fade"><p><?php _e('Selected plugins <strong>activated</strong>.'); ?></p></div>
    60127<?php elseif ( isset($_GET['deactivate']) ) : ?>
    61128        <div id="message" class="updated fade"><p><?php _e('Plugin <strong>deactivated</strong>.') ?></p></div>
    62 <?php elseif (isset($_GET['deactivate-all'])) : ?>
    63         <div id="message" class="updated fade"><p><?php _e('All plugins <strong>deactivated</strong>.'); ?></p></div>
    64 <?php elseif (isset($_GET['reactivate-all'])) : ?>
    65         <div id="message" class="updated fade"><p><?php _e('Plugins <strong>reactivated</strong>.'); ?></p></div>
     129<?php elseif (isset($_GET['deactivate-multi'])) : ?>
     130        <div id="message" class="updated fade"><p><?php _e('Selected plugins <strong>deactivated</strong>.'); ?></p></div>
    66131<?php endif; ?>
    67132
    68133<div class="wrap">
     
    70135<p><?php _e('Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here.'); ?></p>
    71136<?php
    72137
    73 $plugins = get_plugins();
     138$active_plugins = array();
     139$available_plugins = array();
     140$recent_plugins = array();
     141$recently_activated = (array)get_option('recently_activated');
    74142
    75 if (empty($plugins)) {
    76         echo '<p>';
    77         _e("Couldn&#8217;t open plugins directory or there are no plugins available."); // TODO: make more helpful
    78         echo '</p>';
    79 } else {
    80 ?>
     143//Clean out any plugins which were deactivated over a week ago.
     144foreach( $recently_activated as $key => $time )
     145        if( $time + (7*24*60*60) < time() ) //1 week
     146                unset($recently_activated[ $key ]);
     147if( $recently_activated != get_option('recently_activated') ) //If array changed, update it.
     148        update_option('recently_activated', $recently_activated);
    81149
    82 <div class="tablenav">
    83         <div class="alignleft">
    84         <?php
    85         $active = get_option('active_plugins');
    86         $inactive = get_option('deactivated_plugins');
    87         if ( !empty($active) ) {
    88         ?>
    89         <a class="button-secondary delete" href="<?php echo wp_nonce_url('plugins.php?action=deactivate-all', 'deactivate-all'); ?>"><?php _e('Deactivate All Plugins'); ?></a>
    90         <?php
    91         } elseif ( empty($active) && !empty($inactive) ) {
    92         ?>
    93         <a class="button-secondary delete" href="<?php echo wp_nonce_url('plugins.php?action=reactivate-all', 'reactivate-all'); ?>"><?php _e('Reactivate Plugins'); ?></a>
    94         <?php
    95         } // endif active/inactive plugin check
    96         ?>
    97         </div>
    98         <br class="clear" />
    99 </div>
     150$all_plugins = get_plugins();
    100151
    101 <br class="clear" />
     152$plugins_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array());
    102153
    103 <table class="widefat">
     154foreach( (array)$all_plugins as $plugin_file => $plugin_data) {
     155
     156        // Sanitize all displayed data
     157        $plugin_data['Title']       = wp_kses($plugin_data['Title'], $plugins_allowedtags);
     158        $plugin_data['Version']     = wp_kses($plugin_data['Version'], $plugins_allowedtags);
     159        $plugin_data['Description'] = wp_kses($plugin_data['Description'], $plugins_allowedtags);
     160        $plugin_data['Author']      = wp_kses($plugin_data['Author'], $plugins_allowedtags);
     161        if( ! empty($plugin_data['Author']) )
     162                $plugin_data['Description'] .= ' <cite>' . sprintf( __('By %s'), $plugin_data['Author'] ) . '.</cite>';
     163
     164        if ( is_plugin_active($plugin_file) ) {
     165                $active_plugins[ $plugin_file ] = $plugin_data;
     166        } else {
     167                if ( isset( $recently_activated[ $plugin_file ] ) ) //Was the plugin recently activated?
     168                        $recent_plugins[ $plugin_file ] = $plugin_data;
     169                else
     170                        $available_plugins[ $plugin_file ] = $plugin_data;
     171        }
     172}
     173
     174?>
     175
     176<?php
     177function print_plugins_table($plugins, $context = '') {
     178?>
     179<table class="widefat" id="<?php echo $context ?>-plugins-table">
    104180        <thead>
    105181        <tr>
    106                 <th><?php _e('Plugin'); ?></th>
    107                 <th class="num"><?php _e('Version'); ?></th>
    108                 <th><?php _e('Description'); ?></th>
    109                 <th class="status"><?php _e('Status') ?></th>
    110                 <th class="action-links"><?php _e('Action'); ?></th>
     182                <th scope="col" class="check-column"><input type="checkbox" /></th>
     183                <th scope="col"><?php _e('Plugin'); ?></th>
     184                <th scope="col" class="num"><?php _e('Version'); ?></th>
     185                <th scope="col"><?php _e('Description'); ?></th>
     186                <th scope="col" class="action-links"><?php _e('Action'); ?></th>
    111187        </tr>
    112188        </thead>
    113         <tbody id="plugins">
     189        <tbody class="plugins">
    114190<?php
    115         foreach($plugins as $plugin_file => $plugin_data) {
     191
     192        if( empty($plugins) ) {
     193                echo '<tr>
     194                        <td colspan="6">' . __('No plugins to show') . '</td>
     195                </tr>';
     196        }
     197        foreach( (array)$plugins as $plugin_file => $plugin_data) {
    116198                $action_links = array();
    117                
    118                 $style = '';
    119199
    120                 if ( is_plugin_active($plugin_file) ) {
    121                         $action_links[] = "<a href='" . wp_nonce_url("plugins.php?action=deactivate&amp;plugin=$plugin_file", 'deactivate-plugin_' . $plugin_file) . "' title='".__('Deactivate this plugin')."' class='delete'>".__('Deactivate')."</a>";
    122                         $style = 'active';
    123                 } else {
    124                         $action_links[] = "<a href='" . wp_nonce_url("plugins.php?action=activate&amp;plugin=$plugin_file", 'activate-plugin_' . $plugin_file) . "' title='".__('Activate this plugin')."' class='edit'>".__('Activate')."</a>";
    125                 }
     200                if( 'active' == $context )
     201                        $action_links[] = '<a href="' . wp_nonce_url('plugins.php?action=deactivate&amp;plugin=' . $plugin_file, 'deactivate-plugin_' . $plugin_file) . '" title="' . __('Deactivate this plugin') . '" class="delete">' . __('Deactivate') . '</a>';
     202                else //Available or Recently deactivated
     203                        $action_links[] = '<a href="' . wp_nonce_url('plugins.php?action=activate&amp;plugin=' . $plugin_file, 'activate-plugin_' . $plugin_file) . '" title="' . __('Activate this plugin') . '" class="edit">' . __('Activate') . '</a>';
     204
    126205                if ( current_user_can('edit_plugins') && is_writable(WP_PLUGIN_DIR . '/' . $plugin_file) )
    127                         $action_links[] = "<a href='plugin-editor.php?file=$plugin_file' title='".__('Open this file in the Plugin Editor')."' class='edit'>".__('Edit')."</a>";
     206                        $action_links[] = '<a href="plugin-editor.php?file=' . $plugin_file . '" title="' . __('Open this file in the Plugin Editor') . '" class="edit">' . __('Edit') . '</a>';
    128207
    129                 $plugins_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array());
     208                $action_links = apply_filters('plugin_action_links', $action_links, $plugin_file, $plugin_data, $context);
    130209
    131                 // Sanitize all displayed data
    132                 $plugin_data['Title']       = wp_kses($plugin_data['Title'], $plugins_allowedtags);
    133                 $plugin_data['Version']     = wp_kses($plugin_data['Version'], $plugins_allowedtags);
    134                 $plugin_data['Description'] = wp_kses($plugin_data['Description'], $plugins_allowedtags);
    135                 $plugin_data['Author']      = wp_kses($plugin_data['Author'], $plugins_allowedtags);
    136                 $author = ( empty($plugin_data['Author']) ) ? '' :  ' <cite>' . sprintf( __('By %s'), $plugin_data['Author'] ) . '.</cite>';
    137 
    138                 if ( $style != '' )
    139                         $style = ' class="' . $style . '"';
    140 
    141                 $action_links = apply_filters('plugin_action_links', $action_links, $plugin_file, $plugin_info);
    142 
    143210                echo "
    144         <tr$style>
     211        <tr class='$context'>
     212                <th scope='row' class='check-column'><input type='checkbox' name='checked[]' value='" . attribute_escape($plugin_file) . "' /></th>
    145213                <td class='name'>{$plugin_data['Title']}</td>
    146214                <td class='vers'>{$plugin_data['Version']}</td>
    147                 <td class='desc'><p>{$plugin_data['Description']}$author</p></td>
    148                 <td class='status'>";
    149                 if ( is_plugin_active($plugin_file) )
    150                         echo  __('<span class="active">Active</span>');
    151                 else
    152                         _e('<span class="inactive">Inactive</span>');
    153                 echo "</td>
    154                 <td class='togl action-links'>$toggle"; 
     215                <td class='desc'><p>{$plugin_data['Description']}</p></td>
     216                <td class='togl action-links'>"; 
    155217                if ( !empty($action_links) )
    156218                        echo implode(' | ', $action_links);
    157                 echo "</td>
    158         </tr>";
    159         do_action( 'after_plugin_row', $plugin_file );
     219                echo '</td>
     220        </tr>';
     221                do_action( 'after_plugin_row', $plugin_file, $plugin_data, $context );
    160222        }
    161223?>
    162224        </tbody>
    163225</table>
    164 
    165 <?php
    166 }
     226<?php
     227} //End print_plugins_table()
    167228?>
    168229
     230<h3 id="currently-active"><?php _e('Currently Active Plugins') ?></h3>
     231<form method="post" action="<?php echo admin_url('plugins.php') ?>">
     232<?php wp_nonce_field('mass-manage-plugins') ?>
     233
     234<div class="tablenav">
     235        <div class="alignleft">
     236                <input type="submit" name="deactivate-selected" value="<?php _e('Deactivate Selected') ?>" class="button-secondary" />
     237        </div>
     238</div>
     239<br class="clear" />
     240<?php print_plugins_table($active_plugins, 'active') ?>
     241</form>
     242
    169243<p><?php printf(__('If something goes wrong with a plugin and you can&#8217;t use WordPress, delete or rename that file in the <code>%s</code> directory and it will be automatically deactivated.'), WP_PLUGIN_DIR); ?></p>
    170244
     245<?php if ( ! empty($recent_plugins) ) : ?>
     246<h3 id="recent-plugins"><?php _e('Recently Active Plugins') ?></h3>
     247<form method="post" action="<?php echo admin_url('plugins.php') ?>">
     248<?php wp_nonce_field('mass-manage-plugins') ?>
     249
     250<div class="tablenav">
     251        <div class="alignleft">
     252                <input type="submit" name="activate-selected" value="<?php _e('Activate Selected') ?>" class="button-secondary" />
     253<?php if( current_user_can('edit_plugins') ) : ?>
     254                <input type="submit" name="delete-selected" value="<?php _e('Delete Selected') ?>" class="button-secondary" />
     255<?php endif; ?>
     256        </div>
     257</div>
     258<br class="clear" />
     259<?php print_plugins_table($recent_plugins, 'recent') ?>
     260</form>
     261<?php endif; ?>
     262
     263<h3 id="available-plugins"><?php _e('Available Plugins') ?></h3>
     264<form method="post" action="<?php echo admin_url('plugins.php') ?>">
     265<?php wp_nonce_field('mass-manage-plugins') ?>
     266
     267<div class="tablenav">
     268        <div class="alignleft">
     269                <input type="submit" name="activate-selected" value="<?php _e('Activate Selected') ?>" class="button-secondary" />
     270<?php if( current_user_can('edit_plugins') ) : ?>
     271                <input type="submit" name="delete-selected" value="<?php _e('Delete Selected') ?>" class="button-secondary" />
     272<?php endif; ?>
     273        </div>
     274</div>
     275<br class="clear" />
     276<?php print_plugins_table($available_plugins, 'available') ?>
     277</form>
     278
    171279<h2><?php _e('Get More Plugins'); ?></h2>
    172280<p><?php _e('You can find additional plugins for your site in the <a href="http://wordpress.org/extend/plugins/">WordPress plugin directory</a>.'); ?></p>
    173281<p><?php printf(__('To install a plugin you generally just need to upload the plugin file into your <code>%s</code> directory. Once a plugin is uploaded, you may activate it here.'), WP_PLUGIN_DIR); ?></p>
  • wp-admin/wp-admin.css

     
    1 #plugins .name {
     1.plugins .name {
    22        font-weight: bold;
    33}
    44
    5 #plugins p {
     5.plugins p {
    66        margin: 0 4px;
    77        padding: 0;
    88}
    99
    10 #plugins .togl {
     10.plugins .togl {
    1111        width: 150px;
    1212        border-right-width: 1px;
    1313        border-right-style: solid;