2008-08-04 23:17:42 +02:00
< ? php
2008-09-17 02:40:10 +02:00
/**
* WordPress Plugin Install Administration API
*
* @ package WordPress
* @ subpackage Administration
*/
/**
* Retrieve plugin installer pages from WordPress Plugins API .
*
* It is possible for a plugin to override the Plugin API result with three
* filters . Assume this is for plugins , which can extend on the Plugin Info to
* offer more choices . This is very powerful and must be used with care , when
* overridding the filters .
*
* The first filter , 'plugins_api_args' , is for the args and gives the action as
* the second parameter . The hook for 'plugins_api_args' must ensure that an
* object is returned .
*
* The second filter , 'plugins_api' , is the result that would be returned .
*
2008-10-10 20:21:16 +02:00
* @ since 2.7 . 0
*
2008-09-17 02:40:10 +02:00
* @ param string $action
* @ param array | object $args Optional . Arguments to serialize for the Plugin Info API .
2010-01-17 04:26:50 +01:00
* @ return object plugins_api response object on success , WP_Error on failure .
2008-09-17 02:40:10 +02:00
*/
function plugins_api ( $action , $args = null ) {
2008-08-04 23:17:42 +02:00
2010-01-18 21:34:48 +01:00
if ( is_array ( $args ) )
2008-08-04 23:17:42 +02:00
$args = ( object ) $args ;
2008-11-20 22:22:24 +01:00
if ( ! isset ( $args -> per_page ) )
$args -> per_page = 24 ;
2010-01-26 23:49:05 +01:00
// Allows a plugin to override the WordPress.org API entirely.
2010-01-17 04:26:50 +01:00
// Use the filter 'plugins_api_result' to mearly add results.
// Please ensure that a object is returned from the following filters.
$args = apply_filters ( 'plugins_api_args' , $args , $action );
$res = apply_filters ( 'plugins_api' , false , $action , $args );
2008-08-09 07:36:14 +02:00
2010-01-17 04:26:50 +01:00
if ( false === $res ) {
$request = wp_remote_post ( 'http://api.wordpress.org/plugins/info/1.0/' , array ( 'timeout' => 15 , 'body' => array ( 'action' => $action , 'request' => serialize ( $args ))) );
2008-10-14 17:56:33 +02:00
if ( is_wp_error ( $request ) ) {
2010-04-25 07:39:39 +02:00
$res = new WP_Error ( 'plugins_api_failed' , __ ( 'An Unexpected HTTP Error occurred during the API request.' ), $request -> get_error_message () );
2008-10-14 17:56:33 +02:00
} else {
$res = unserialize ( $request [ 'body' ]);
2010-01-17 04:26:50 +01:00
if ( false === $res )
2010-04-25 07:39:39 +02:00
$res = new WP_Error ( 'plugins_api_failed' , __ ( 'An unknown error occurred.' ), $request [ 'body' ]);
2008-10-14 17:56:33 +02:00
}
2009-06-16 21:36:48 +02:00
} elseif ( ! is_wp_error ( $res ) ) {
$res -> external = true ;
2008-08-04 23:17:42 +02:00
}
2008-08-05 19:06:42 +02:00
return apply_filters ( 'plugins_api_result' , $res , $action , $args );
2008-08-04 23:17:42 +02:00
}
2008-09-17 02:40:10 +02:00
/**
2008-10-10 20:21:16 +02:00
* Retrieve popular WordPress plugin tags .
*
* @ since 2.7 . 0
2008-09-17 02:40:10 +02:00
*
2008-10-10 20:21:16 +02:00
* @ param array $args
* @ return array
2008-09-17 02:40:10 +02:00
*/
2008-08-04 23:17:42 +02:00
function install_popular_tags ( $args = array () ) {
2010-06-19 09:28:27 +02:00
$key = md5 ( serialize ( $args ));
if ( false !== ( $tags = get_site_transient ( 'poptags_' . $key ) ) )
return $tags ;
2008-08-04 23:17:42 +02:00
2008-08-05 19:06:42 +02:00
$tags = plugins_api ( 'hot_tags' , $args );
2008-08-04 23:17:42 +02:00
2008-10-14 17:56:33 +02:00
if ( is_wp_error ( $tags ) )
return $tags ;
2010-06-19 09:28:27 +02:00
set_site_transient ( 'poptags_' . $key , $tags , 10800 ); // 3 * 60 * 60 = 10800
2008-08-04 23:17:42 +02:00
return $tags ;
}
add_action ( 'install_plugins_search' , 'install_search' , 10 , 1 );
2008-10-10 20:21:16 +02:00
/**
* Display search results and display as tag cloud .
*
* @ since 2.7 . 0
*
* @ param string $page
*/
2008-08-04 23:17:42 +02:00
function install_search ( $page ) {
2008-11-05 07:47:35 +01:00
$type = isset ( $_REQUEST [ 'type' ]) ? stripslashes ( $_REQUEST [ 'type' ] ) : '' ;
$term = isset ( $_REQUEST [ 's' ]) ? stripslashes ( $_REQUEST [ 's' ] ) : '' ;
2008-08-04 23:17:42 +02:00
2008-10-14 01:39:56 +02:00
$args = array ();
switch ( $type ){
case 'tag' :
$args [ 'tag' ] = sanitize_title_with_dashes ( $term );
break ;
case 'term' :
$args [ 'search' ] = $term ;
break ;
case 'author' :
$args [ 'author' ] = $term ;
break ;
}
2008-08-04 23:17:42 +02:00
2008-10-14 01:39:56 +02:00
$args [ 'page' ] = $page ;
2008-08-04 23:17:42 +02:00
2008-10-14 01:39:56 +02:00
$api = plugins_api ( 'query_plugins' , $args );
2008-08-04 23:17:42 +02:00
2008-10-14 17:56:33 +02:00
if ( is_wp_error ( $api ) )
wp_die ( $api );
2008-10-14 01:39:56 +02:00
add_action ( 'install_plugins_table_header' , 'install_search_form' );
2008-08-04 23:17:42 +02:00
2008-10-14 01:39:56 +02:00
display_plugins_table ( $api -> plugins , $api -> info [ 'page' ], $api -> info [ 'pages' ]);
2008-08-04 23:17:42 +02:00
2008-10-14 01:39:56 +02:00
return ;
}
2008-08-04 23:17:42 +02:00
2008-10-14 01:39:56 +02:00
add_action ( 'install_plugins_dashboard' , 'install_dashboard' );
function install_dashboard () {
2008-08-04 23:17:42 +02:00
?>
2008-10-14 01:39:56 +02:00
< p >< ? php _e ( 'Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the <a href="http://wordpress.org/extend/plugins/">WordPress Plugin Directory</a> or upload a plugin in .zip format via this page.' ) ?> </p>
2008-08-09 07:36:14 +02:00
2008-08-04 23:17:42 +02:00
< h4 >< ? php _e ( 'Search' ) ?> </h4>
2009-03-20 01:14:57 +01:00
< p class = " install-help " >< ? php _e ( 'Search for plugins by keyword, author, or tag.' ) ?> </p>
2009-03-15 12:04:34 +01:00
< ? php install_search_form (); ?>
2008-12-09 19:03:31 +01:00
2008-08-04 23:17:42 +02:00
< h4 >< ? php _e ( 'Popular tags' ) ?> </h4>
2009-03-20 01:14:57 +01:00
< p class = " install-help " >< ? php _e ( 'You may also browse based on the most popular tags in the Plugin Directory:' ) ?> </p>
2008-08-04 23:17:42 +02:00
< ? php
2008-10-10 20:21:16 +02:00
$api_tags = install_popular_tags ();
2008-08-04 23:17:42 +02:00
2009-03-20 01:14:57 +01:00
echo '<p class="popular-tags">' ;
2010-04-25 07:39:39 +02:00
if ( is_wp_error ( $api_tags ) ) {
echo $api_tags -> get_error_message ();
} else {
//Set up the tags in a way which can be interprated by wp_generate_tag_cloud()
$tags = array ();
foreach ( ( array ) $api_tags as $tag )
$tags [ $tag [ 'name' ] ] = ( object ) array (
2010-05-03 20:16:22 +02:00
'link' => esc_url ( admin_url ( 'plugin-install.php?tab=search&type=tag&s=' . urlencode ( $tag [ 'name' ])) ),
2010-04-25 07:39:39 +02:00
'name' => $tag [ 'name' ],
'id' => sanitize_title_with_dashes ( $tag [ 'name' ]),
'count' => $tag [ 'count' ] );
echo wp_generate_tag_cloud ( $tags , array ( 'single_text' => __ ( '%d plugin' ), 'multiple_text' => __ ( '%d plugins' ) ) );
}
2009-03-10 19:31:55 +01:00
echo '</p><br class="clear" />' ;
2008-08-04 23:17:42 +02:00
}
2008-10-18 22:46:30 +02:00
/**
* Display search form for searching plugins .
*
* @ since 2.7 . 0
*/
function install_search_form (){
2008-11-05 07:47:35 +01:00
$type = isset ( $_REQUEST [ 'type' ]) ? stripslashes ( $_REQUEST [ 'type' ] ) : '' ;
$term = isset ( $_REQUEST [ 's' ]) ? stripslashes ( $_REQUEST [ 's' ] ) : '' ;
2008-08-04 23:17:42 +02:00
2009-05-07 12:18:12 +02:00
?> <form id="search-plugins" method="post" action="<?php echo admin_url('plugin-install.php?tab=search'); ?>">
2008-08-04 23:17:42 +02:00
< select name = " type " id = " typeselector " >
2009-05-07 12:18:12 +02:00
< option value = " term " < ? php selected ( 'term' , $type ) ?> ><?php _e('Term'); ?></option>
< option value = " author " < ? php selected ( 'author' , $type ) ?> ><?php _e('Author'); ?></option>
2010-05-14 23:46:25 +02:00
< option value = " tag " < ? php selected ( 'tag' , $type ) ?> ><?php _ex('Tag', 'Plugin Installer'); ?></option>
2008-08-04 23:17:42 +02:00
</ select >
2009-05-05 21:43:53 +02:00
< input type = " text " name = " s " value = " <?php echo esc_attr( $term ) ?> " />
2009-05-13 00:40:56 +02:00
< label class = " screen-reader-text " for = " plugin-search-input " >< ? php _e ( 'Search Plugins' ); ?> </label>
2009-05-07 12:18:12 +02:00
< input type = " submit " id = " plugin-search-input " name = " search " value = " <?php esc_attr_e('Search Plugins'); ?> " class = " button " />
2008-08-04 23:17:42 +02:00
</ form >< ? php
}
add_action ( 'install_plugins_featured' , 'install_featured' , 10 , 1 );
2008-10-10 20:21:16 +02:00
/**
* Display featured plugins .
*
* @ since 2.7 . 0
*
* @ param string $page
*/
2008-10-14 01:39:56 +02:00
function install_featured ( $page = 1 ) {
2008-08-04 23:17:42 +02:00
$args = array ( 'browse' => 'featured' , 'page' => $page );
$api = plugins_api ( 'query_plugins' , $args );
2008-10-14 17:56:33 +02:00
if ( is_wp_error ( $api ) )
2010-04-25 07:39:39 +02:00
wp_die ( $api -> get_error_message () . '</p> <p class="hide-if-no-js"><a href="#" onclick="document.location.reload(); return false;">' . __ ( 'Try again' ) . '</a>' );
2008-08-04 23:17:42 +02:00
display_plugins_table ( $api -> plugins , $api -> info [ 'page' ], $api -> info [ 'pages' ]);
}
2008-10-10 20:21:16 +02:00
2008-10-14 01:39:56 +02:00
add_action ( 'install_plugins_popular' , 'install_popular' , 10 , 1 );
2008-10-10 20:21:16 +02:00
/**
* Display popular plugins .
*
* @ since 2.7 . 0
*
* @ param string $page
*/
2008-10-14 01:39:56 +02:00
function install_popular ( $page = 1 ) {
2008-08-04 23:17:42 +02:00
$args = array ( 'browse' => 'popular' , 'page' => $page );
$api = plugins_api ( 'query_plugins' , $args );
2010-01-17 04:26:50 +01:00
if ( is_wp_error ( $api ) )
2010-04-25 07:39:39 +02:00
wp_die ( $api -> get_error_message () . '</p> <p class="hide-if-no-js"><a href="#" onclick="document.location.reload(); return false;">' . __ ( 'Try again' ) . '</a>' );
2008-08-04 23:17:42 +02:00
display_plugins_table ( $api -> plugins , $api -> info [ 'page' ], $api -> info [ 'pages' ]);
}
2008-10-10 20:21:16 +02:00
2009-03-20 14:31:00 +01:00
add_action ( 'install_plugins_upload' , 'install_plugins_upload' , 10 , 1 );
/**
* Upload from zip
* @ since 2.8 . 0
2009-04-20 20:18:39 +02:00
*
2009-03-20 14:31:00 +01:00
* @ param string $page
*/
function install_plugins_upload ( $page = 1 ) {
?>
< h4 >< ? php _e ( 'Install a plugin in .zip format' ) ?> </h4>
2010-01-21 22:37:43 +01:00
< p class = " install-help " >< ? php _e ( 'If you have a plugin in a .zip format, you may install it by uploading it here.' ) ?> </p>
2009-04-19 21:36:28 +02:00
< form method = " post " enctype = " multipart/form-data " action = " <?php echo admin_url('update.php?action=upload-plugin') ?> " >
2009-03-20 14:31:00 +01:00
< ? php wp_nonce_field ( 'plugin-upload' ) ?>
2009-05-13 00:40:56 +02:00
< label class = " screen-reader-text " for = " pluginzip " >< ? php _e ( 'Plugin zip file' ); ?> </label>
2009-05-01 23:52:34 +02:00
< input type = " file " id = " pluginzip " name = " pluginzip " />
2009-05-05 21:43:53 +02:00
< input type = " submit " class = " button " value = " <?php esc_attr_e('Install Now') ?> " />
2009-03-20 14:31:00 +01:00
</ form >
< ? php
}
2008-10-14 01:39:56 +02:00
add_action ( 'install_plugins_new' , 'install_new' , 10 , 1 );
2008-10-10 20:21:16 +02:00
/**
* Display new plugins .
*
* @ since 2.7 . 0
*
* @ param string $page
*/
2008-10-14 01:39:56 +02:00
function install_new ( $page = 1 ) {
2008-08-04 23:17:42 +02:00
$args = array ( 'browse' => 'new' , 'page' => $page );
$api = plugins_api ( 'query_plugins' , $args );
2008-10-14 17:56:33 +02:00
if ( is_wp_error ( $api ) )
2010-04-25 07:39:39 +02:00
wp_die ( $api -> get_error_message () . '</p> <p class="hide-if-no-js"><a href="#" onclick="document.location.reload(); return false;">' . __ ( 'Try again' ) . '</a>' );
2008-08-04 23:17:42 +02:00
display_plugins_table ( $api -> plugins , $api -> info [ 'page' ], $api -> info [ 'pages' ]);
}
add_action ( 'install_plugins_updated' , 'install_updated' , 10 , 1 );
2008-10-10 20:21:16 +02:00
2008-10-14 01:39:56 +02:00
2008-10-10 20:21:16 +02:00
/**
* Display recently updated plugins .
*
* @ since 2.7 . 0
*
* @ param string $page
*/
2008-10-14 01:39:56 +02:00
function install_updated ( $page = 1 ) {
2008-08-04 23:17:42 +02:00
$args = array ( 'browse' => 'updated' , 'page' => $page );
$api = plugins_api ( 'query_plugins' , $args );
2010-01-17 04:26:50 +01:00
if ( is_wp_error ( $api ) )
2010-04-25 07:39:39 +02:00
wp_die ( $api -> get_error_message () . '</p> <p class="hide-if-no-js"><a href="#" onclick="document.location.reload(); return false;">' . __ ( 'Try again' ) . '</a>' );
2008-08-04 23:17:42 +02:00
display_plugins_table ( $api -> plugins , $api -> info [ 'page' ], $api -> info [ 'pages' ]);
}
2008-10-10 20:21:16 +02:00
/**
* Display plugin content based on plugin list .
*
* @ since 2.7 . 0
*
* @ param array $plugins List of plugins .
* @ param string $page
* @ param int $totalpages Number of pages .
*/
2008-08-04 23:17:42 +02:00
function display_plugins_table ( $plugins , $page = 1 , $totalpages = 1 ){
2008-11-05 07:47:35 +01:00
$type = isset ( $_REQUEST [ 'type' ]) ? stripslashes ( $_REQUEST [ 'type' ] ) : '' ;
$term = isset ( $_REQUEST [ 's' ]) ? stripslashes ( $_REQUEST [ 's' ] ) : '' ;
2008-08-04 23:17:42 +02:00
2008-10-14 17:56:33 +02:00
$plugins_allowedtags = array ( 'a' => array ( 'href' => array (), 'title' => array (), 'target' => array ()),
'abbr' => array ( 'title' => array ()), 'acronym' => array ( 'title' => array ()),
2009-03-15 14:09:25 +01:00
'code' => array (), 'pre' => array (), 'em' => array (), 'strong' => array (),
'ul' => array (), 'ol' => array (), 'li' => array (), 'p' => array (), 'br' => array ());
2008-08-04 23:17:42 +02:00
?>
< div class = " tablenav " >
2008-10-24 20:25:46 +02:00
< div class = " alignleft actions " >
2008-08-04 23:17:42 +02:00
< ? php do_action ( 'install_plugins_table_header' ); ?>
</ div >
< ? php
2009-05-18 18:00:33 +02:00
$url = esc_url ( $_SERVER [ 'REQUEST_URI' ]);
2008-08-04 23:17:42 +02:00
if ( ! empty ( $term ) )
$url = add_query_arg ( 's' , $term , $url );
if ( ! empty ( $type ) )
$url = add_query_arg ( 'type' , $type , $url );
$page_links = paginate_links ( array (
'base' => add_query_arg ( 'paged' , '%#%' , $url ),
'format' => '' ,
2008-11-27 01:28:24 +01:00
'prev_text' => __ ( '«' ),
'next_text' => __ ( '»' ),
2008-08-04 23:17:42 +02:00
'total' => $totalpages ,
'current' => $page
));
2008-08-09 07:36:14 +02:00
2008-08-04 23:17:42 +02:00
if ( $page_links )
2008-08-09 07:36:14 +02:00
echo " \t \t <div class='tablenav-pages'> $page_links </div> " ;
2008-08-04 23:17:42 +02:00
?>
2008-10-14 01:39:56 +02:00
< br class = " clear " />
2008-08-04 23:17:42 +02:00
</ div >
2008-11-17 19:01:00 +01:00
< table class = " widefat " id = " install-plugins " cellspacing = " 0 " >
2008-08-04 23:17:42 +02:00
< thead >
< tr >
< th scope = " col " class = " name " >< ? php _e ( 'Name' ); ?> </th>
< th scope = " col " class = " num " >< ? php _e ( 'Version' ); ?> </th>
< th scope = " col " class = " num " >< ? php _e ( 'Rating' ); ?> </th>
< th scope = " col " class = " desc " >< ? php _e ( 'Description' ); ?> </th>
</ tr >
</ thead >
2008-09-29 11:26:21 +02:00
< tfoot >
< tr >
< th scope = " col " class = " name " >< ? php _e ( 'Name' ); ?> </th>
< th scope = " col " class = " num " >< ? php _e ( 'Version' ); ?> </th>
< th scope = " col " class = " num " >< ? php _e ( 'Rating' ); ?> </th>
< th scope = " col " class = " desc " >< ? php _e ( 'Description' ); ?> </th>
</ tr >
</ tfoot >
2008-08-04 23:17:42 +02:00
< tbody class = " plugins " >
< ? php
2010-01-18 21:34:48 +01:00
if ( empty ( $plugins ) )
2008-08-04 23:17:42 +02:00
echo '<tr><td colspan="5">' , __ ( 'No plugins match your request.' ), '</td></tr>' ;
2008-08-09 07:36:14 +02:00
2010-01-18 21:34:48 +01:00
foreach ( ( array ) $plugins as $plugin ){
2008-08-04 23:17:42 +02:00
if ( is_object ( $plugin ) )
$plugin = ( array ) $plugin ;
$title = wp_kses ( $plugin [ 'name' ], $plugins_allowedtags );
2009-05-16 19:16:45 +02:00
//Limit description to 400char, and remove any HTML.
$description = strip_tags ( $plugin [ 'description' ]);
if ( strlen ( $description ) > 400 )
$description = mb_substr ( $description , 0 , 400 ) . '…' ;
//remove any trailing entities
$description = preg_replace ( '/&[^;\s]{0,6}$/' , '' , $description );
//strip leading/trailing & multiple consecutive lines
$description = trim ( $description );
$description = preg_replace ( " |( \r ? \n )+| " , " \n " , $description );
//\n => <br>
$description = nl2br ( $description );
2008-08-04 23:17:42 +02:00
$version = wp_kses ( $plugin [ 'version' ], $plugins_allowedtags );
2008-08-09 07:36:14 +02:00
2008-08-04 23:17:42 +02:00
$name = strip_tags ( $title . ' ' . $version );
2008-08-09 07:36:14 +02:00
2008-08-04 23:17:42 +02:00
$author = $plugin [ 'author' ];
2010-01-18 21:34:48 +01:00
if ( ! empty ( $plugin [ 'author' ]) )
2008-08-04 23:17:42 +02:00
$author = ' <cite>' . sprintf ( __ ( 'By %s' ), $author ) . '.</cite>' ;
$author = wp_kses ( $author , $plugins_allowedtags );
2008-08-09 07:36:14 +02:00
2008-08-04 23:17:42 +02:00
$action_links = array ();
2008-09-14 07:37:54 +02:00
$action_links [] = '<a href="' . admin_url ( 'plugin-install.php?tab=plugin-information&plugin=' . $plugin [ 'slug' ] .
2010-04-02 01:17:53 +02:00
'&TB_iframe=true&width=600&height=550' ) . '" class="thickbox" title="' .
2010-04-03 01:04:48 +02:00
esc_attr ( sprintf ( __ ( 'More information about %s' ), $name ) ) . '">' . __ ( 'Details' ) . '</a>' ;
2010-04-02 01:17:53 +02:00
if ( current_user_can ( 'install_plugins' ) || current_user_can ( 'update_plugins' ) ) {
$status = install_plugin_install_status ( $plugin );
switch ( $status [ 'status' ] ) {
case 'install' :
2010-04-02 01:38:37 +02:00
if ( $status [ 'url' ] )
2010-04-03 01:27:23 +02:00
$action_links [] = '<a class="install-now" href="' . $status [ 'url' ] . '" title="' . esc_attr ( sprintf ( __ ( 'Install %s' ), $name ) ) . '">' . __ ( 'Install Now' ) . '</a>' ;
2010-04-02 01:17:53 +02:00
break ;
case 'update_available' :
2010-04-02 01:38:37 +02:00
if ( $status [ 'url' ] )
2010-04-03 01:04:48 +02:00
$action_links [] = '<a href="' . $status [ 'url' ] . '" title="' . esc_attr ( sprintf ( __ ( 'Update to version %s' ), $status [ 'version' ] ) ) . '">' . sprintf ( __ ( 'Update Now' ), $status [ 'version' ] ) . '</a>' ;
2010-04-02 01:17:53 +02:00
break ;
case 'latest_installed' :
case 'newer_installed' :
2010-04-03 01:04:48 +02:00
$action_links [] = '<span title="' . esc_attr__ ( 'This plugin is already installed and is up to date' ) . ' ">' . __ ( 'Installed' ) . '</span>' ;
2010-04-02 01:17:53 +02:00
break ;
}
}
2008-08-09 07:36:14 +02:00
2010-03-01 07:01:00 +01:00
$action_links = apply_filters ( 'plugin_install_action_links' , $action_links , $plugin );
2008-08-04 23:17:42 +02:00
?>
< tr >
2010-03-01 01:50:55 +01:00
< td class = " name " >< strong >< ? php echo $title ; ?> </strong>
< div class = " action-links " >< ? php if ( ! empty ( $action_links ) ) echo implode ( ' | ' , $action_links ); ?> </div>
</ td >
2008-08-04 23:17:42 +02:00
< td class = " vers " >< ? php echo $version ; ?> </td>
< td class = " vers " >
2009-02-20 20:35:16 +01:00
< 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'] )) ?> " >
2009-05-05 21:43:53 +02:00
< div class = " star star-rating " style = " width: <?php echo esc_attr( $plugin['rating'] ) ?>px " ></ div >
2008-08-04 23:17:42 +02:00
< div class = " star star5 " >< img src = " <?php echo admin_url('images/star.gif'); ?> " alt = " <?php _e('5 stars') ?> " /></ div >
< div class = " star star4 " >< img src = " <?php echo admin_url('images/star.gif'); ?> " alt = " <?php _e('4 stars') ?> " /></ div >
< div class = " star star3 " >< img src = " <?php echo admin_url('images/star.gif'); ?> " alt = " <?php _e('3 stars') ?> " /></ div >
< div class = " star star2 " >< img src = " <?php echo admin_url('images/star.gif'); ?> " alt = " <?php _e('2 stars') ?> " /></ div >
< div class = " star star1 " >< img src = " <?php echo admin_url('images/star.gif'); ?> " alt = " <?php _e('1 star') ?> " /></ div >
</ div >
</ td >
2009-03-15 14:09:25 +01:00
< td class = " desc " >< ? php echo $description , $author ; ?> </td>
2008-08-04 23:17:42 +02:00
</ tr >
< ? php
}
?>
</ tbody >
</ table >
2008-09-29 11:26:21 +02:00
< div class = " tablenav " >
< ? php if ( $page_links )
echo " \t \t <div class='tablenav-pages'> $page_links </div> " ; ?>
2008-10-14 01:39:56 +02:00
< br class = " clear " />
2008-09-29 11:26:21 +02:00
</ div >
2008-08-04 23:17:42 +02:00
< ? php
}
add_action ( 'install_plugins_pre_plugin-information' , 'install_plugin_information' );
2008-10-10 20:21:16 +02:00
2010-04-02 01:17:53 +02:00
/**
* Determine the status we can perform on a plugin .
*
* @ since 3.0 . 0
*/
function install_plugin_install_status ( $api , $loop = false ) {
// this function is called recursivly, $loop prevents futhur loops.
if ( is_array ( $api ) )
$api = ( object ) $api ;
//Default to a "new" plugin
$status = 'install' ;
$url = false ;
//Check to see if this plugin is known to be installed, and has an update awaiting it.
$update_plugins = get_site_transient ( 'update_plugins' );
if ( is_object ( $update_plugins ) ) {
foreach ( ( array ) $update_plugins -> response as $file => $plugin ) {
if ( $plugin -> slug === $api -> slug ) {
$status = 'update_available' ;
$update_file = $file ;
$version = $plugin -> new_version ;
if ( current_user_can ( 'update_plugins' ) )
$url = wp_nonce_url ( admin_url ( 'update.php?action=upgrade-plugin&plugin=' . $update_file ), 'upgrade-plugin_' . $update_file );
break ;
}
}
}
if ( 'install' == $status ) {
if ( is_dir ( WP_PLUGIN_DIR . '/' . $api -> slug ) ) {
$installed_plugin = get_plugins ( '/' . $api -> slug );
if ( empty ( $installed_plugin ) ) {
if ( current_user_can ( 'install_plugins' ) )
$url = wp_nonce_url ( admin_url ( 'update.php?action=install-plugin&plugin=' . $api -> slug ), 'install-plugin_' . $api -> slug );
} else {
$key = array_shift ( $key = array_keys ( $installed_plugin ) ); //Use the first plugin regardless of the name, Could have issues for multiple-plugins in one directory if they share different version numbers
if ( version_compare ( $api -> version , $installed_plugin [ $key ][ 'Version' ], '=' ) ){
$status = 'latest_installed' ;
} elseif ( version_compare ( $api -> version , $installed_plugin [ $key ][ 'Version' ], '<' ) ) {
$status = 'newer_installed' ;
$version = $installed_plugin [ $key ][ 'Version' ];
} else {
//If the above update check failed, Then that probably means that the update checker has out-of-date information, force a refresh
if ( ! $loop ) {
delete_site_transient ( 'update_plugins' );
wp_update_plugins ();
return install_plugin_install_status ( $api , true );
}
}
}
} else {
// "install" & no directory with that slug
if ( current_user_can ( 'install_plugins' ) )
$url = wp_nonce_url ( admin_url ( 'update.php?action=install-plugin&plugin=' . $api -> slug ), 'install-plugin_' . $api -> slug );
}
}
2010-05-27 13:04:08 +02:00
if ( isset ( $_GET [ 'from' ]) )
$url .= '&from=' . urlencode ( stripslashes ( $_GET [ 'from' ]));
2010-04-02 01:17:53 +02:00
return compact ( 'status' , 'url' , 'version' );
}
2008-10-10 20:21:16 +02:00
/**
* Display plugin information in dialog box form .
*
* @ since 2.7 . 0
*/
2008-08-04 23:17:42 +02:00
function install_plugin_information () {
global $tab ;
2008-08-09 07:36:14 +02:00
2008-11-05 07:47:35 +01:00
$api = plugins_api ( 'plugin_information' , array ( 'slug' => stripslashes ( $_REQUEST [ 'plugin' ] ) ));
2008-08-04 23:17:42 +02:00
2008-10-14 17:56:33 +02:00
if ( is_wp_error ( $api ) )
wp_die ( $api );
$plugins_allowedtags = array ( 'a' => array ( 'href' => array (), 'title' => array (), 'target' => array ()),
'abbr' => array ( 'title' => array ()), 'acronym' => array ( 'title' => array ()),
2008-10-24 06:54:21 +02:00
'code' => array (), 'pre' => array (), 'em' => array (), 'strong' => array (),
2008-11-14 18:07:24 +01:00
'div' => array (), 'p' => array (), 'ul' => array (), 'ol' => array (), 'li' => array (),
'h1' => array (), 'h2' => array (), 'h3' => array (), 'h4' => array (), 'h5' => array (), 'h6' => array (),
'img' => array ( 'src' => array (), 'class' => array (), 'alt' => array ()));
2008-10-14 17:56:33 +02:00
//Sanitize HTML
foreach ( ( array ) $api -> sections as $section_name => $content )
$api -> sections [ $section_name ] = wp_kses ( $content , $plugins_allowedtags );
foreach ( array ( 'version' , 'author' , 'requires' , 'tested' , 'homepage' , 'downloaded' , 'slug' ) as $key )
$api -> $key = wp_kses ( $api -> $key , $plugins_allowedtags );
2008-11-05 07:47:35 +01:00
$section = isset ( $_REQUEST [ 'section' ]) ? stripslashes ( $_REQUEST [ 'section' ] ) : 'description' ; //Default to the Description tab, Do not translate, API returns English.
2010-01-18 21:34:48 +01:00
if ( empty ( $section ) || ! isset ( $api -> sections [ $section ]) )
2008-08-04 23:17:42 +02:00
$section = array_shift ( $section_titles = array_keys (( array ) $api -> sections ) );
2008-08-09 07:36:14 +02:00
2008-12-09 19:03:31 +01:00
iframe_header ( __ ( 'Plugin Install' ) );
2008-08-04 23:17:42 +02:00
echo " <div id=' $tab -header'> \n " ;
echo " <ul id='sidemenu'> \n " ;
foreach ( ( array ) $api -> sections as $section_name => $content ) {
2008-08-09 07:36:14 +02:00
2008-08-04 23:17:42 +02:00
$title = $section_name ;
2008-10-14 01:39:56 +02:00
$title = ucwords ( str_replace ( '_' , ' ' , $title ));
2008-08-04 23:17:42 +02:00
$class = ( $section_name == $section ) ? ' class="current"' : '' ;
$href = add_query_arg ( array ( 'tab' => $tab , 'section' => $section_name ) );
2009-05-18 18:00:33 +02:00
$href = esc_url ( $href );
2009-05-05 21:43:53 +02:00
$san_title = esc_attr ( sanitize_title_with_dashes ( $title ));
2008-08-04 23:17:42 +02:00
echo " \t <li><a name=' $san_title ' target='' href=' $href ' $class > $title </a></li> \n " ;
}
echo " </ul> \n " ;
echo " </div> \n " ;
?>
< div class = " alignright fyi " >
2010-04-02 01:17:53 +02:00
< ? php if ( ! empty ( $api -> download_link ) && ( current_user_can ( 'install_plugins' ) || current_user_can ( 'update_plugins' ) ) ) : ?>
2008-08-04 23:17:42 +02:00
< p class = " action-button " >
< ? php
2010-04-02 01:17:53 +02:00
$status = install_plugin_install_status ( $api );
switch ( $status [ 'status' ] ) {
case 'install' :
2010-04-02 01:38:37 +02:00
if ( $status [ 'url' ] )
2010-04-02 01:17:53 +02:00
echo '<a href="' . $status [ 'url' ] . '" target="_parent">' . __ ( 'Install Now' ) . '</a>' ;
2008-08-04 23:17:42 +02:00
break ;
2010-04-02 01:17:53 +02:00
case 'update_available' :
2010-04-02 01:38:37 +02:00
if ( $status [ 'url' ] )
2010-04-02 01:17:53 +02:00
echo '<a href="' . $status [ 'url' ] . '" target="_parent">' . __ ( 'Install Update Now' ) . '</a>' ;
2008-08-04 23:17:42 +02:00
break ;
2010-04-02 01:17:53 +02:00
case 'newer_installed' :
echo '<a>' . sprintf ( __ ( 'Newer Version (%s) Installed' ), $status [ 'version' ]) . '</a>' ;
2008-11-19 20:25:53 +01:00
break ;
2010-04-02 01:17:53 +02:00
case 'latest_installed' :
echo '<a>' . __ ( 'Latest Version Installed' ) . '</a>' ;
2008-08-04 23:17:42 +02:00
break ;
2010-04-02 01:17:53 +02:00
}
?>
2008-08-04 23:17:42 +02:00
</ p >
< ? php endif ; ?>
2010-01-21 22:37:43 +01:00
< h2 class = " mainheader " >< ? php /* translators: For Your Information */ _e ( 'FYI' ) ?> </h2>
2008-08-04 23:17:42 +02:00
< ul >
< ? php if ( ! empty ( $api -> version ) ) : ?>
< li >< strong >< ? php _e ( 'Version:' ) ?> </strong> <?php echo $api->version ?></li>
< ? php endif ; if ( ! empty ( $api -> author ) ) : ?>
< li >< strong >< ? php _e ( 'Author:' ) ?> </strong> <?php echo links_add_target($api->author, '_blank') ?></li>
< ? php endif ; if ( ! empty ( $api -> last_updated ) ) : ?>
2008-08-09 07:36:14 +02:00
< li >< strong >< ? php _e ( 'Last Updated:' ) ?> </strong> <span title="<?php echo $api->last_updated ?>"><?php
2008-08-04 23:17:42 +02:00
printf ( __ ( '%s ago' ), human_time_diff ( strtotime ( $api -> last_updated )) ) ?> </span></li>
< ? php endif ; if ( ! empty ( $api -> requires ) ) : ?>
< li >< strong >< ? php _e ( 'Requires WordPress Version:' ) ?> </strong> <?php printf(__('%s or higher'), $api->requires) ?></li>
< ? php endif ; if ( ! empty ( $api -> tested ) ) : ?>
< li >< strong >< ? php _e ( 'Compatible up to:' ) ?> </strong> <?php echo $api->tested ?></li>
< ? php endif ; if ( ! empty ( $api -> downloaded ) ) : ?>
2009-02-20 20:35:16 +01:00
< li >< strong >< ? php _e ( 'Downloaded:' ) ?> </strong> <?php printf(_n('%s time', '%s times', $api->downloaded), number_format_i18n($api->downloaded)) ?></li>
2009-06-16 21:36:48 +02:00
< ? php endif ; if ( ! empty ( $api -> slug ) && empty ( $api -> external ) ) : ?>
2008-08-04 23:17:42 +02:00
< li >< a target = " _blank " href = " http://wordpress.org/extend/plugins/<?php echo $api->slug ?>/ " >< ? php _e ( 'WordPress.org Plugin Page »' ) ?> </a></li>
< ? php endif ; if ( ! empty ( $api -> homepage ) ) : ?>
< li >< a target = " _blank " href = " <?php echo $api->homepage ?> " >< ? php _e ( 'Plugin Homepage »' ) ?> </a></li>
< ? php endif ; ?>
</ ul >
2009-06-16 21:36:48 +02:00
< ? php if ( ! empty ( $api -> rating ) ) : ?>
2008-08-04 23:17:42 +02:00
< h2 >< ? php _e ( 'Average Rating' ) ?> </h2>
2009-02-20 20:35:16 +01:00
< div class = " star-holder " title = " <?php printf(_n('(based on %s rating)', '(based on %s ratings)', $api->num_ratings ), number_format_i18n( $api->num_ratings )); ?> " >
2009-05-05 21:43:53 +02:00
< div class = " star star-rating " style = " width: <?php echo esc_attr( $api->rating ) ?>px " ></ div >
2008-08-04 23:17:42 +02:00
< div class = " star star5 " >< img src = " <?php echo admin_url('images/star.gif'); ?> " alt = " <?php _e('5 stars') ?> " /></ div >
< div class = " star star4 " >< img src = " <?php echo admin_url('images/star.gif'); ?> " alt = " <?php _e('4 stars') ?> " /></ div >
< div class = " star star3 " >< img src = " <?php echo admin_url('images/star.gif'); ?> " alt = " <?php _e('3 stars') ?> " /></ div >
< div class = " star star2 " >< img src = " <?php echo admin_url('images/star.gif'); ?> " alt = " <?php _e('2 stars') ?> " /></ div >
< div class = " star star1 " >< img src = " <?php echo admin_url('images/star.gif'); ?> " alt = " <?php _e('1 star') ?> " /></ div >
</ div >
2009-02-20 20:35:16 +01:00
< small >< ? php printf ( _n ( '(based on %s rating)' , '(based on %s ratings)' , $api -> num_ratings ), number_format_i18n ( $api -> num_ratings )); ?> </small>
2009-06-16 21:36:48 +02:00
< ? php endif ; ?>
2008-08-04 23:17:42 +02:00
</ div >
2008-08-05 19:06:42 +02:00
< div id = " section-holder " class = " wrap " >
2008-10-14 01:39:56 +02:00
< ? php
2009-03-10 19:31:55 +01:00
if ( ! empty ( $api -> tested ) && version_compare ( substr ( $GLOBALS [ 'wp_version' ], 0 , strlen ( $api -> tested )), $api -> tested , '>' ) )
2008-10-14 01:39:56 +02:00
echo '<div class="updated"><p>' . __ ( '<strong>Warning:</strong> This plugin has <strong>not been tested</strong> with your current version of WordPress.' ) . '</p></div>' ;
2009-03-10 19:31:55 +01:00
else if ( ! empty ( $api -> requires ) && version_compare ( substr ( $GLOBALS [ 'wp_version' ], 0 , strlen ( $api -> requires )), $api -> requires , '<' ) )
echo '<div class="updated"><p>' . __ ( '<strong>Warning:</strong> This plugin has <strong>not been marked as compatible</strong> with your version of WordPress.' ) . '</p></div>' ;
2008-08-05 19:06:42 +02:00
foreach ( ( array ) $api -> sections as $section_name => $content ) {
$title = $section_name ;
$title [ 0 ] = strtoupper ( $title [ 0 ]);
$title = str_replace ( '_' , ' ' , $title );
2008-08-09 07:36:14 +02:00
2008-08-05 19:06:42 +02:00
$content = links_add_base_url ( $content , 'http://wordpress.org/extend/plugins/' . $api -> slug . '/' );
$content = links_add_target ( $content , '_blank' );
2008-08-09 07:36:14 +02:00
2009-05-05 21:43:53 +02:00
$san_title = esc_attr ( sanitize_title_with_dashes ( $title ));
2008-08-09 07:36:14 +02:00
2008-08-05 19:06:42 +02:00
$display = ( $section_name == $section ) ? 'block' : 'none' ;
2008-08-09 07:36:14 +02:00
2008-10-14 01:39:56 +02:00
echo " \t <div id='section- { $san_title } ' class='section' style='display: { $display } ;'> \n " ;
2008-08-05 19:06:42 +02:00
echo " \t \t <h2 class='long-header'> $title </h2> " ;
echo $content ;
echo " \t </div> \n " ;
}
2008-08-04 23:17:42 +02:00
echo " </div> \n " ;
2008-08-05 19:06:42 +02:00
2008-10-14 01:39:56 +02:00
iframe_footer ();
2008-08-04 23:17:42 +02:00
exit ;
}