wp/wp-admin/includes/class-wp-plugin-install-list-table.php
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * Plugin Installer List Table class.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * @subpackage List_Table
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
class WP_Plugin_Install_List_Table extends WP_List_Table {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
	function ajax_user_can() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
		return current_user_can('install_plugins');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
	function prepare_items() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
		include( ABSPATH . 'wp-admin/includes/plugin-install.php' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
		global $tabs, $tab, $paged, $type, $term;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
		wp_reset_vars( array( 'tab' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
		$paged = $this->get_pagenum();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		$per_page = 30;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
		// These are the tabs which are shown on the page
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		$tabs = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		$tabs['dashboard'] = __( 'Search' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
		if ( 'search' == $tab )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
			$tabs['search']	= __( 'Search Results' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
		$tabs['upload']    = __( 'Upload' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
		$tabs['featured']  = _x( 'Featured', 'Plugin Installer' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
		$tabs['popular']   = _x( 'Popular', 'Plugin Installer' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
		$tabs['new']       = _x( 'Newest', 'Plugin Installer' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		$tabs['favorites'] = _x( 'Favorites', 'Plugin Installer' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
		$nonmenu_tabs = array( 'plugin-information' ); //Valid actions to perform which do not have a Menu item.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		 * Filter the tabs shown on the Plugin Install screen.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		 * @param array $tabs The tabs shown on the Plugin Install screen. Defaults are 'dashboard', 'search',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
		 *                    'upload', 'featured', 'popular', 'new', and 'favorites'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
		$tabs = apply_filters( 'install_plugins_tabs', $tabs );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
		 * Filter tabs not associated with a menu item on the Plugin Install screen.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
		 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		 * @param array $nonmenu_tabs The tabs that don't have a Menu item on the Plugin Install screen.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
		$nonmenu_tabs = apply_filters( 'install_plugins_nonmenu_tabs', $nonmenu_tabs );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
		// If a non-valid menu tab has been selected, And it's not a non-menu action.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
		if ( empty( $tab ) || ( !isset( $tabs[ $tab ] ) && !in_array( $tab, (array) $nonmenu_tabs ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
			$tab = key( $tabs );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		$args = array( 'page' => $paged, 'per_page' => $per_page );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		switch ( $tab ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
			case 'search':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
				$type = isset( $_REQUEST['type'] ) ? wp_unslash( $_REQUEST['type'] ) : 'term';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
				$term = isset( $_REQUEST['s'] ) ? wp_unslash( $_REQUEST['s'] ) : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
				switch ( $type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
					case 'tag':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
						$args['tag'] = sanitize_title_with_dashes( $term );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
					case 'term':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
						$args['search'] = $term;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
					case 'author':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
						$args['author'] = $term;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
				add_action( 'install_plugins_table_header', 'install_search_form', 10, 0 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
			case 'featured':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
			case 'popular':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
			case 'new':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
				$args['browse'] = $tab;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
			case 'favorites':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
				$user = isset( $_GET['user'] ) ? wp_unslash( $_GET['user'] ) : get_user_option( 'wporg_favorites' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
				update_user_meta( get_current_user_id(), 'wporg_favorites', $user );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
				if ( $user )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
					$args['user'] = $user;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
					$args = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
				add_action( 'install_plugins_favorites', 'install_plugins_favorites_form', 9, 0 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
				$args = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
		 * Filter API request arguments for each Plugin Install screen tab.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		 * The dynamic portion of the hook name, $tab, refers to the plugin install tabs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		 * Default tabs are 'dashboard', 'search', 'upload', 'featured', 'popular', 'new',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
		 * and 'favorites'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
		 * @param array|bool $args Plugin Install API arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		$args = apply_filters( "install_plugins_table_api_args_$tab", $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		if ( !$args )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
		$api = plugins_api( 'query_plugins', $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
		if ( is_wp_error( $api ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			wp_die( $api->get_error_message() . '</p> <p class="hide-if-no-js"><a href="#" onclick="document.location.reload(); return false;">' . __( 'Try again' ) . '</a>' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
		$this->items = $api->plugins;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
		$this->set_pagination_args( array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
			'total_items' => $api->info['results'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
			'per_page' => $per_page,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
		) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
	function no_items() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
		_e( 'No plugins match your request.' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
	function get_views() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
		global $tabs, $tab;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
		$display_tabs = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
		foreach ( (array) $tabs as $action => $text ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
			$class = ( $action == $tab ) ? ' class="current"' : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
			$href = self_admin_url('plugin-install.php?tab=' . $action);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
			$display_tabs['plugin-install-'.$action] = "<a href='$href'$class>$text</a>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
		return $display_tabs;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
	function display_tablenav( $which ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
		if ( 'top' ==  $which ) { ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
			<div class="tablenav top">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
				<div class="alignleft actions">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
					<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
					/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
					 * Fires before the Plugin Install table header pagination is displayed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
					 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
					 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
					 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
					do_action( 'install_plugins_table_header' ); ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
				</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
				<?php $this->pagination( $which ); ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
				<br class="clear" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
			</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
		<?php } else { ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
			<div class="tablenav bottom">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
				<?php $this->pagination( $which ); ?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
				<br class="clear" />
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
			</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
		<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
	function get_table_classes() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
		extract( $this->_args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
		return array( 'widefat', $plural );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
	function get_columns() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
		return array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
			'name'        => _x( 'Name', 'plugin name' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
			'version'     => __( 'Version' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
			'rating'      => __( 'Rating' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
			'description' => __( 'Description' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
	function display_rows() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
		$plugins_allowedtags = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
			'a' => array( 'href' => array(),'title' => array(), 'target' => array() ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
			'abbr' => array( 'title' => array() ),'acronym' => array( 'title' => array() ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
			'code' => array(), 'pre' => array(), 'em' => array(),'strong' => array(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
			'ul' => array(), 'ol' => array(), 'li' => array(), 'p' => array(), 'br' => array()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
		list( $columns, $hidden ) = $this->get_column_info();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
		$style = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
		foreach ( $columns as $column_name => $column_display_name ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
			$style[ $column_name ] = in_array( $column_name, $hidden ) ? 'style="display:none;"' : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
		foreach ( (array) $this->items as $plugin ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
			if ( is_object( $plugin ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
				$plugin = (array) $plugin;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
			$title = wp_kses( $plugin['name'], $plugins_allowedtags );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
			//Limit description to 400char, and remove any HTML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
			$description = strip_tags( $plugin['description'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
			if ( strlen( $description ) > 400 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
				$description = mb_substr( $description, 0, 400 ) . '&#8230;';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
			//remove any trailing entities
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
			$description = preg_replace( '/&[^;\s]{0,6}$/', '', $description );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
			//strip leading/trailing & multiple consecutive lines
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
			$description = trim( $description );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
			$description = preg_replace( "|(\r?\n)+|", "\n", $description );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
			//\n => <br>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
			$description = nl2br( $description );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
			$version = wp_kses( $plugin['version'], $plugins_allowedtags );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
			$name = strip_tags( $title . ' ' . $version );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
			$author = $plugin['author'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
			if ( ! empty( $plugin['author'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
				$author = ' <cite>' . sprintf( __( 'By %s' ), $author ) . '.</cite>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
			$author = wp_kses( $author, $plugins_allowedtags );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
			$action_links = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
			$action_links[] = '<a href="' . self_admin_url( 'plugin-install.php?tab=plugin-information&amp;plugin=' . $plugin['slug'] .
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
								'&amp;TB_iframe=true&amp;width=600&amp;height=550' ) . '" class="thickbox" title="' .
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
								esc_attr( sprintf( __( 'More information about %s' ), $name ) ) . '">' . __( 'Details' ) . '</a>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
			if ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
				$status = install_plugin_install_status( $plugin );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
				switch ( $status['status'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
					case 'install':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
						if ( $status['url'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
							$action_links[] = '<a class="install-now" href="' . $status['url'] . '" title="' . esc_attr( sprintf( __( 'Install %s' ), $name ) ) . '">' . __( 'Install Now' ) . '</a>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
					case 'update_available':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
						if ( $status['url'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
							$action_links[] = '<a href="' . $status['url'] . '" title="' . esc_attr( sprintf( __( 'Update to version %s' ), $status['version'] ) ) . '">' . sprintf( __( 'Update Now' ), $status['version'] ) . '</a>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
					case 'latest_installed':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
					case 'newer_installed':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
						$action_links[] = '<span title="' . esc_attr__( 'This plugin is already installed and is up to date' ) . ' ">' . _x( 'Installed', 'plugin' ) . '</span>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
			/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
			 * Filter the install action links for a plugin.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
			 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
			 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
			 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
			 * @param array $action_links An array of plugin action hyperlinks. Defaults are links to Details and Install Now.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
			 * @param array $plugin       The plugin currently being listed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
			 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
			$action_links = apply_filters( 'plugin_install_action_links', $action_links, $plugin );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
		?>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
		<tr>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
			<td class="name column-name"<?php echo $style['name']; ?>><strong><?php echo $title; ?></strong>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
				<div class="action-links"><?php if ( !empty( $action_links ) ) echo implode( ' | ', $action_links ); ?></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
			</td>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
			<td class="vers column-version"<?php echo $style['version']; ?>><?php echo $version; ?></td>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
			<td class="vers column-rating"<?php echo $style['rating']; ?>>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
				<div class="star-holder" title="<?php printf( _n( '(based on %s rating)', '(based on %s ratings)', $plugin['num_ratings'] ), number_format_i18n( $plugin['num_ratings'] ) ) ?>">
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
					<div class="star star-rating" style="width: <?php echo esc_attr( str_replace( ',', '.', $plugin['rating'] ) ); ?>px"></div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
				</div>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
			</td>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
			<td class="desc column-description"<?php echo $style['description']; ?>><?php echo $description, $author; ?></td>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
		</tr>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
		<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
}