2011-11-02 00:14:14 -04:00
< ? php
2008-09-16 20:40:10 -04:00
/**
* WordPress Plugin Install Administration API
*
* @ package WordPress
* @ subpackage Administration
*/
/**
2015-09-27 18:07:24 -04:00
* Retrieves plugin installer pages from the WordPress . org Plugins API .
2008-09-16 20:40:10 -04:00
*
* 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
2015-09-26 11:13:25 -04:00
* offer more choices . This is very powerful and must be used with care when
2011-09-05 15:25:55 -04:00
* overriding the filters .
2008-09-16 20:40:10 -04:00
*
2015-09-26 11:13:25 -04:00
* The first filter , { @ see 'plugins_api_args' }, is for the args and gives the action
* as the second parameter . The hook for { @ see 'plugins_api_args' } must ensure that
* an object is returned .
2008-09-16 20:40:10 -04:00
*
2015-09-27 18:23:24 -04:00
* The second filter , { @ see 'plugins_api' }, allows a plugin to override the WordPress . org
2017-08-22 07:52:48 -04:00
* Plugin Installation API entirely . If `$action` is 'query_plugins' or 'plugin_information' ,
2016-07-09 10:39:33 -04:00
* an object MUST be passed . If `$action` is 'hot_tags' or 'hot_categories' , an array MUST
2015-09-27 18:23:24 -04:00
* be passed .
*
* Finally , the third filter , { @ see 'plugins_api_result' }, makes it possible to filter the
* response object or array , depending on the `$action` type .
2008-09-16 20:40:10 -04:00
*
2015-09-27 18:00:25 -04:00
* Supported arguments per action :
*
* | Argument Name | query_plugins | plugin_information | hot_tags | hot_categories |
* | -------------------- | :-----------: | :----------------: | :------: | :------------: |
* | `$slug` | No | Yes | No | No |
* | `$per_page` | Yes | No | No | No |
* | `$page` | Yes | No | No | No |
* | `$number` | No | No | Yes | Yes |
* | `$search` | Yes | No | No | No |
* | `$tag` | Yes | No | No | No |
* | `$author` | Yes | No | No | No |
* | `$user` | Yes | No | No | No |
* | `$browse` | Yes | No | No | No |
* | `$locale` | Yes | Yes | No | No |
* | `$installed_plugins` | Yes | No | No | No |
* | `$is_ssl` | Yes | Yes | No | No |
* | `$fields` | Yes | Yes | No | No |
*
2008-10-10 14:21:16 -04:00
* @ since 2.7 . 0
*
2015-09-26 11:13:25 -04:00
* @ param string $action API action to perform : 'query_plugins' , 'plugin_information' ,
* 'hot_tags' or 'hot_categories' .
* @ param array | object $args {
* Optional . Array or object of arguments to serialize for the Plugin Info API .
*
2015-09-27 14:13:48 -04:00
* @ type string $slug The plugin slug . Default empty .
* @ type int $per_page Number of plugins per page . Default 24.
* @ type int $page Number of current page . Default 1.
* @ type int $number Number of tags or categories to be queried .
* @ type string $search A search term . Default empty .
* @ type string $tag Tag to filter plugins . Default empty .
* @ type string $author Username of an plugin author to filter plugins . Default empty .
* @ type string $user Username to query for their favorites . Default empty .
* @ type string $browse Browse view : 'popular' , 'new' , 'beta' , 'recommended' .
* @ type string $locale Locale to provide context - sensitive results . Default is the value
* of get_locale () .
* @ type string $installed_plugins Installed plugins to provide context - sensitive results .
* @ type bool $is_ssl Whether links should be returned with https or not . Default false .
* @ type array $fields {
2015-09-26 11:13:25 -04:00
* Array of fields which should or should not be returned .
*
* @ type bool $short_description Whether to return the plugin short description . Default true .
* @ type bool $description Whether to return the plugin full description . Default false .
* @ type bool $sections Whether to return the plugin readme sections : description , installation ,
* FAQ , screenshots , other notes , and changelog . Default false .
* @ type bool $tested Whether to return the 'Compatible up to' value . Default true .
* @ type bool $requires Whether to return the required WordPress version . Default true .
2019-10-11 22:35:04 -04:00
* @ type bool $requires_php Whether to return the required PHP version . Default true .
2015-09-26 11:13:25 -04:00
* @ type bool $rating Whether to return the rating in percent and total number of ratings .
* Default true .
* @ type bool $ratings Whether to return the number of rating for each star ( 1 - 5 ) . Default true .
* @ type bool $downloaded Whether to return the download count . Default true .
* @ type bool $downloadlink Whether to return the download link for the package . Default true .
* @ type bool $last_updated Whether to return the date of the last update . Default true .
* @ type bool $added Whether to return the date when the plugin was added to the wordpress . org
* repository . Default true .
* @ type bool $tags Whether to return the assigned tags . Default true .
* @ type bool $compatibility Whether to return the WordPress compatibility list . Default true .
* @ type bool $homepage Whether to return the plugin homepage link . Default true .
* @ type bool $versions Whether to return the list of all available versions . Default false .
* @ type bool $donate_link Whether to return the donation link . Default true .
* @ type bool $reviews Whether to return the plugin reviews . Default false .
* @ type bool $banners Whether to return the banner images links . Default false .
* @ type bool $icons Whether to return the icon links . Default false .
2017-08-22 07:52:48 -04:00
* @ type bool $active_installs Whether to return the number of active installations . Default false .
2015-09-26 11:13:25 -04:00
* @ type bool $group Whether to return the assigned group . Default false .
* @ type bool $contributors Whether to return the list of contributors . Default false .
* }
* }
2015-09-27 18:00:25 -04:00
* @ return object | array | WP_Error Response object or array on success , WP_Error on failure . See the
2015-09-26 11:13:25 -04:00
* { @ link https :// developer . wordpress . org / reference / functions / plugins_api / function reference article }
2015-09-27 18:00:25 -04:00
* for more information on the make - up of possible return values depending on the value of `$action` .
2008-09-16 20:40:10 -04:00
*/
2015-09-26 11:13:25 -04:00
function plugins_api ( $action , $args = array () ) {
2020-01-28 19:35:08 -05:00
// Include an unmodified $wp_version.
2020-02-06 01:33:11 -05:00
require ABSPATH . WPINC . '/version.php' ;
2008-08-04 17:17:42 -04:00
2014-12-16 17:39:22 -05:00
if ( is_array ( $args ) ) {
$args = ( object ) $args ;
}
2008-08-04 17:17:42 -04:00
2020-05-16 14:42:12 -04:00
if ( 'query_plugins' === $action ) {
2018-02-01 00:17:33 -05:00
if ( ! isset ( $args -> per_page ) ) {
$args -> per_page = 24 ;
}
2014-12-16 17:39:22 -05:00
}
if ( ! isset ( $args -> locale ) ) {
2016-10-03 03:04:29 -04:00
$args -> locale = get_user_locale ();
2014-12-16 17:39:22 -05:00
}
2008-11-20 16:22:24 -05:00
2018-02-01 00:17:33 -05:00
if ( ! isset ( $args -> wp_version ) ) {
2020-01-28 19:35:08 -05:00
$args -> wp_version = substr ( $wp_version , 0 , 3 ); // x.y
2018-02-01 00:17:33 -05:00
}
2013-09-19 22:22:10 -04:00
/**
2017-08-22 07:52:48 -04:00
* Filters the WordPress . org Plugin Installation API arguments .
2013-09-19 22:22:10 -04:00
*
2015-09-27 19:03:24 -04:00
* Important : An object MUST be returned to this filter .
2013-09-19 22:22:10 -04:00
*
* @ since 2.7 . 0
*
* @ param object $args Plugin API arguments .
2017-08-22 07:52:48 -04:00
* @ param string $action The type of information being requested from the Plugin Installation API .
2013-09-19 22:22:10 -04:00
*/
$args = apply_filters ( 'plugins_api_args' , $args , $action );
/**
2017-08-22 07:52:48 -04:00
* Filters the response for the current WordPress . org Plugin Installation API request .
2013-09-19 22:22:10 -04:00
*
2015-09-27 18:29:24 -04:00
* Passing a non - false value will effectively short - circuit the WordPress . org API request .
*
2015-10-02 00:52:25 -04:00
* If `$action` is 'query_plugins' or 'plugin_information' , an object MUST be passed .
2016-07-09 10:39:33 -04:00
* If `$action` is 'hot_tags' or 'hot_categories' , an array should be passed .
2013-09-19 22:22:10 -04:00
*
* @ since 2.7 . 0
*
2015-09-27 18:29:24 -04:00
* @ param false | object | array $result The result object or array . Default false .
2017-08-22 07:52:48 -04:00
* @ param string $action The type of information being requested from the Plugin Installation API .
2015-09-27 18:29:24 -04:00
* @ param object $args Plugin API arguments .
2013-09-19 22:22:10 -04:00
*/
$res = apply_filters ( 'plugins_api' , false , $action , $args );
2008-08-09 01:36:14 -04:00
2010-01-16 22:26:50 -05:00
if ( false === $res ) {
2017-09-27 04:00:49 -04:00
2018-02-01 00:17:33 -05:00
$url = 'http://api.wordpress.org/plugins/info/1.2/' ;
$url = add_query_arg (
array (
'action' => $action ,
'request' => $args ,
),
$url
);
$http_url = $url ;
2019-07-01 08:52:01 -04:00
$ssl = wp_http_supports ( array ( 'ssl' ) );
if ( $ssl ) {
2013-09-09 03:54:11 -04:00
$url = set_url_scheme ( $url , 'https' );
2017-11-30 18:11:00 -05:00
}
2013-09-09 03:54:11 -04:00
2015-02-07 01:21:22 -05:00
$http_args = array (
2017-11-30 18:11:00 -05:00
'timeout' => 15 ,
2017-09-27 04:00:49 -04:00
'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url ( '/' ),
2013-10-27 17:09:10 -04:00
);
2018-02-01 00:17:33 -05:00
$request = wp_remote_get ( $url , $http_args );
2013-10-27 17:09:10 -04:00
if ( $ssl && is_wp_error ( $request ) ) {
REST API: Introduce plugin management and block directory endpoints.
These endpoints facilitate the Block Directory Inserter feature in Gutenberg. Users can now install, activate, deactivate, and delete plugins over the REST API. The block directoryendpoint allows searching for available blocks from the WordPress.org block directory.
Props cklee, talldanwp, noisysocks, joen, soean, youknowriad, dufresnesteven, gziolo, dd32, tellyworth, ryelle, spacedmonkey, TimothyBlynJacobs.
Fixes #50321.
Built from https://develop.svn.wordpress.org/trunk@48242
git-svn-id: http://core.svn.wordpress.org/trunk@48011 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-01 00:24:03 -04:00
if ( ! wp_is_json_request () ) {
trigger_error (
sprintf (
/* translators: %s: Support forums URL. */
__ ( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.' ),
__ ( 'https://wordpress.org/support/forums/' )
) . ' ' . __ ( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ),
headers_sent () || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE
);
}
2018-02-01 00:17:33 -05:00
$request = wp_remote_get ( $http_url , $http_args );
2013-10-27 17:09:10 -04:00
}
2013-09-09 03:54:11 -04:00
2017-11-30 18:11:00 -05:00
if ( is_wp_error ( $request ) ) {
$res = new WP_Error (
'plugins_api_failed' ,
2016-11-20 20:52:32 -05:00
sprintf (
2019-09-02 20:41:05 -04:00
/* translators: %s: Support forums URL. */
2016-11-20 20:52:32 -05:00
__ ( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.' ),
2019-05-25 10:24:50 -04:00
__ ( 'https://wordpress.org/support/forums/' )
2016-11-20 20:52:32 -05:00
),
$request -> get_error_message ()
);
2008-10-14 11:56:33 -04:00
} else {
2018-02-01 00:17:33 -05:00
$res = json_decode ( wp_remote_retrieve_body ( $request ), true );
if ( is_array ( $res ) ) {
// Object casting is required in order to match the info/1.0 format.
$res = ( object ) $res ;
} elseif ( null === $res ) {
2017-11-30 18:11:00 -05:00
$res = new WP_Error (
'plugins_api_failed' ,
2016-11-20 20:52:32 -05:00
sprintf (
2019-09-02 20:41:05 -04:00
/* translators: %s: Support forums URL. */
2016-11-20 20:52:32 -05:00
__ ( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.' ),
2019-05-25 10:24:50 -04:00
__ ( 'https://wordpress.org/support/forums/' )
2016-11-20 20:52:32 -05:00
),
wp_remote_retrieve_body ( $request )
);
}
2018-02-01 00:17:33 -05:00
if ( isset ( $res -> error ) ) {
$res = new WP_Error ( 'plugins_api_failed' , $res -> error );
}
2008-10-14 11:56:33 -04:00
}
2017-11-30 18:11:00 -05:00
} elseif ( ! is_wp_error ( $res ) ) {
2009-06-16 15:36:48 -04:00
$res -> external = true ;
2008-08-04 17:17:42 -04:00
}
2013-09-19 22:22:10 -04:00
/**
2017-08-22 07:52:48 -04:00
* Filters the Plugin Installation API response results .
2013-09-19 22:22:10 -04:00
*
* @ since 2.7 . 0
*
* @ param object | WP_Error $res Response object or WP_Error .
2017-08-22 07:52:48 -04:00
* @ param string $action The type of information being requested from the Plugin Installation API .
2013-09-19 22:22:10 -04:00
* @ param object $args Plugin API arguments .
*/
return apply_filters ( 'plugins_api_result' , $res , $action , $args );
2008-08-04 17:17:42 -04:00
}
2008-09-16 20:40:10 -04:00
/**
2008-10-10 14:21:16 -04:00
* Retrieve popular WordPress plugin tags .
*
* @ since 2.7 . 0
2008-09-16 20:40:10 -04:00
*
2008-10-10 14:21:16 -04:00
* @ param array $args
* @ return array
2008-09-16 20:40:10 -04:00
*/
2008-08-04 17:17:42 -04:00
function install_popular_tags ( $args = array () ) {
2019-07-01 08:52:01 -04:00
$key = md5 ( serialize ( $args ) );
$tags = get_site_transient ( 'poptags_' . $key );
if ( false !== $tags ) {
2010-06-19 03:28:27 -04:00
return $tags ;
2017-11-30 18:11:00 -05:00
}
2008-08-04 17:17:42 -04:00
2017-11-30 18:11:00 -05:00
$tags = plugins_api ( 'hot_tags' , $args );
2008-08-04 17:17:42 -04:00
2017-11-30 18:11:00 -05:00
if ( is_wp_error ( $tags ) ) {
2008-10-14 11:56:33 -04:00
return $tags ;
2017-11-30 18:11:00 -05:00
}
2008-10-14 11:56:33 -04:00
2012-09-25 01:26:19 -04:00
set_site_transient ( 'poptags_' . $key , $tags , 3 * HOUR_IN_SECONDS );
2008-08-04 17:17:42 -04:00
return $tags ;
}
2008-10-10 14:21:16 -04:00
2015-05-30 23:18:25 -04:00
/**
* @ since 2.7 . 0
*/
2008-10-13 19:39:56 -04:00
function install_dashboard () {
2008-08-04 17:17:42 -04:00
?>
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
< p >
< ? php
printf (
/* translators: %s: https://wordpress.org/plugins/ */
__ ( 'Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the <a href="%s">WordPress Plugin Directory</a> or upload a plugin in .zip format by clicking the button at the top of this page.' ),
__ ( 'https://wordpress.org/plugins/' )
);
?>
</ p >
2008-08-09 01:36:14 -04:00
2014-08-26 22:53:16 -04:00
< ? php display_plugins_table (); ?>
2008-12-09 13:03:31 -05:00
2016-07-20 12:32:31 -04:00
< div class = " plugins-popular-tags-wrapper " >
2017-11-30 18:11:00 -05:00
< h2 >< ? php _e ( 'Popular tags' ); ?> </h2>
< p >< ? php _e ( 'You may also browse based on the most popular tags in the Plugin Directory:' ); ?> </p>
2008-08-04 17:17:42 -04:00
< ? php
2008-10-10 14:21:16 -04:00
$api_tags = install_popular_tags ();
2008-08-04 17:17:42 -04:00
2009-03-19 20:14:57 -04:00
echo '<p class="popular-tags">' ;
2017-11-30 18:11:00 -05:00
if ( is_wp_error ( $api_tags ) ) {
2010-04-25 01:39:39 -04:00
echo $api_tags -> get_error_message ();
} else {
2020-01-28 19:35:08 -05:00
// Set up the tags in a way which can be interpreted by wp_generate_tag_cloud().
2010-04-25 01:39:39 -04:00
$tags = array ();
2015-07-07 15:19:24 -04:00
foreach ( ( array ) $api_tags as $tag ) {
2017-11-30 18:11:00 -05:00
$url = self_admin_url ( 'plugin-install.php?tab=search&type=tag&s=' . urlencode ( $tag [ 'name' ] ) );
$data = array (
'link' => esc_url ( $url ),
'name' => $tag [ 'name' ],
'slug' => $tag [ 'slug' ],
'id' => sanitize_title_with_dashes ( $tag [ 'name' ] ),
'count' => $tag [ 'count' ],
2015-07-07 15:19:24 -04:00
);
$tags [ $tag [ 'name' ] ] = ( object ) $data ;
}
2017-11-30 18:11:00 -05:00
echo wp_generate_tag_cloud (
2018-08-16 21:51:36 -04:00
$tags ,
array (
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of plugins. */
2017-11-30 18:11:00 -05:00
'single_text' => __ ( '%s plugin' ),
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of plugins. */
2017-11-30 18:11:00 -05:00
'multiple_text' => __ ( '%s plugins' ),
)
);
2010-04-25 01:39:39 -04:00
}
2016-07-20 12:32:31 -04:00
echo '</p><br class="clear" /></div>' ;
2008-08-04 17:17:42 -04:00
}
2008-10-18 16:46:30 -04:00
/**
2016-07-20 12:32:31 -04:00
* Displays a search form for searching plugins .
2008-10-18 16:46:30 -04:00
*
* @ since 2.7 . 0
2016-07-20 12:32:31 -04:00
* @ since 4.6 . 0 The `$type_selector` parameter was deprecated .
2015-05-29 17:17:27 -04:00
*
2016-07-20 12:32:31 -04:00
* @ param bool $deprecated Not used .
2008-10-18 16:46:30 -04:00
*/
2016-07-20 12:32:31 -04:00
function install_search_form ( $deprecated = true ) {
$type = isset ( $_REQUEST [ 'type' ] ) ? wp_unslash ( $_REQUEST [ 'type' ] ) : 'term' ;
$term = isset ( $_REQUEST [ 's' ] ) ? wp_unslash ( $_REQUEST [ 's' ] ) : '' ;
2017-11-30 18:11:00 -05:00
?>
< form class = " search-form search-plugins " method = " get " >
2010-08-11 17:54:51 -04:00
< input type = " hidden " name = " tab " value = " search " />
2016-07-20 12:32:31 -04:00
< label class = " screen-reader-text " for = " typeselector " >< ? php _e ( 'Search plugins by:' ); ?> </label>
2008-08-04 17:17:42 -04:00
< select name = " type " id = " typeselector " >
2016-07-20 12:32:31 -04:00
< option value = " term " < ? php selected ( 'term' , $type ); ?> ><?php _e( 'Keyword' ); ?></option>
< option value = " author " < ? php selected ( 'author' , $type ); ?> ><?php _e( 'Author' ); ?></option>
< option value = " tag " < ? php selected ( 'tag' , $type ); ?> ><?php _ex( 'Tag', 'Plugin Installer' ); ?></option>
2008-08-04 17:17:42 -04:00
</ select >
2020-07-03 04:51:05 -04:00
< label class = " screen-reader-text " for = " search-plugins " >< ? php _e ( 'Search Plugins' ); ?> </label>
< input type = " search " name = " s " id = " search-plugins " value = " <?php echo esc_attr( $term ); ?> " class = " wp-filter-search " placeholder = " <?php esc_attr_e( 'Search plugins...' ); ?> " />
2016-09-28 15:54:28 -04:00
< ? php submit_button ( __ ( 'Search Plugins' ), 'hide-if-js' , false , false , array ( 'id' => 'search-submit' ) ); ?>
2017-11-30 18:11:00 -05:00
</ form >
< ? php
2008-08-04 17:17:42 -04:00
}
2009-03-20 09:31:00 -04:00
/**
* Upload from zip
2017-11-30 18:11:00 -05:00
*
2009-03-20 09:31:00 -04:00
* @ since 2.8 . 0
*/
2015-02-03 01:14:22 -05:00
function install_plugins_upload () {
2018-08-16 21:51:36 -04:00
?>
2014-08-26 21:32:18 -04:00
< div class = " upload-plugin " >
2020-07-19 13:11:02 -04:00
< p class = " install-help " >< ? php _e ( 'If you have a plugin in a .zip format, you may install or update it by uploading it here.' ); ?> </p>
2017-11-30 18:11:00 -05:00
< form method = " post " enctype = " multipart/form-data " class = " wp-upload-form " action = " <?php echo self_admin_url( 'update.php?action=upload-plugin' ); ?> " >
2015-12-16 02:56:29 -05:00
< ? php wp_nonce_field ( 'plugin-upload' ); ?>
< label class = " screen-reader-text " for = " pluginzip " >< ? php _e ( 'Plugin zip file' ); ?> </label>
Upgrade/install: Allow plugin and theme updates from a uploaded .zip file.
Props mariovalney, cyberhobo, imath, shaunandrews, mariovalney, earnjam, desrosj, dd32, folletto, swissspidy, melchoyce, pento, joshuawold, psykro, clorith, ahortin, galbaras, pingram3541, joyously, doobeedoo, karmatosed, poena, whyisjake, earnjam, sergeybiryukov, audrasjb, azaozz.
Fixes #9757.
Built from https://develop.svn.wordpress.org/trunk@48390
git-svn-id: http://core.svn.wordpress.org/trunk@48159 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-07 13:49:05 -04:00
< input type = " file " id = " pluginzip " name = " pluginzip " accept = " .zip " />
2016-09-28 15:54:28 -04:00
< ? php submit_button ( __ ( 'Install Now' ), '' , 'install-plugin-submit' , false ); ?>
2009-03-20 09:31:00 -04:00
</ form >
2014-08-26 21:32:18 -04:00
</ div >
2018-08-16 21:51:36 -04:00
< ? php
2009-03-20 09:31:00 -04:00
}
2008-08-04 17:17:42 -04:00
2012-09-26 20:47:01 -04:00
/**
* Show a username form for the favorites page
*
2017-11-30 18:11:00 -05:00
* @ since 3.5 . 0
2012-09-26 20:47:01 -04:00
*/
function install_plugins_favorites_form () {
2016-03-30 14:36:26 -04:00
$user = get_user_option ( 'wporg_favorites' );
$action = 'save_wporg_username_' . get_current_user_id ();
2012-09-26 20:47:01 -04:00
?>
2020-07-03 04:51:05 -04:00
< p >< ? php _e ( 'If you have marked plugins as favorites on WordPress.org, you can browse them here.' ); ?> </p>
2015-01-15 23:16:24 -05:00
< form method = " get " >
2012-09-26 20:47:01 -04:00
< input type = " hidden " name = " tab " value = " favorites " />
< p >
< label for = " user " >< ? php _e ( 'Your WordPress.org username:' ); ?> </label>
< input type = " search " id = " user " name = " user " value = " <?php echo esc_attr( $user ); ?> " />
< input type = " submit " class = " button " value = " <?php esc_attr_e( 'Get Favorites' ); ?> " />
2016-04-02 07:12:26 -04:00
< input type = " hidden " id = " wporg-username-nonce " name = " _wpnonce " value = " <?php echo esc_attr( wp_create_nonce( $action ) ); ?> " />
2012-09-26 20:47:01 -04:00
</ p >
</ form >
< ? php
}
2008-10-10 14:21:16 -04:00
/**
* Display plugin content based on plugin list .
*
* @ since 2.7 . 0
2015-05-28 17:41:30 -04:00
*
* @ global WP_List_Table $wp_list_table
2008-10-10 14:21:16 -04:00
*/
2010-08-11 17:54:51 -04:00
function display_plugins_table () {
2010-08-22 07:22:46 -04:00
global $wp_list_table ;
2008-08-04 17:17:42 -04:00
2014-12-16 05:06:24 -05:00
switch ( current_filter () ) {
2017-11-30 18:11:00 -05:00
case 'install_plugins_favorites' :
2014-12-16 05:06:24 -05:00
if ( empty ( $_GET [ 'user' ] ) && ! get_user_option ( 'wporg_favorites' ) ) {
return ;
}
break ;
2017-11-30 18:11:00 -05:00
case 'install_plugins_recommended' :
2014-12-16 05:06:24 -05:00
echo '<p>' . __ ( 'These suggestions are based on the plugins you and other users have installed.' ) . '</p>' ;
break ;
2017-11-30 18:11:00 -05:00
case 'install_plugins_beta' :
2016-01-14 04:07:26 -05:00
printf (
2019-09-02 20:41:05 -04:00
/* translators: %s: URL to "Features as Plugins" page. */
2016-01-14 04:07:26 -05:00
'<p>' . __ ( 'You are using a development version of WordPress. These feature plugins are also under development. <a href="%s">Learn more</a>.' ) . '</p>' ,
'https://make.wordpress.org/core/handbook/about/release-cycle/features-as-plugins/'
);
break ;
2014-10-03 09:08:16 -04:00
}
2012-09-26 20:47:01 -04:00
2014-10-03 09:08:16 -04:00
?>
2015-01-15 23:16:24 -05:00
< form id = " plugin-filter " method = " post " >
2014-10-03 09:08:16 -04:00
< ? php $wp_list_table -> display (); ?>
</ form >
< ? php
2008-08-04 17:17:42 -04:00
}
2008-10-10 14:21:16 -04:00
2010-04-01 19:17:53 -04:00
/**
* Determine the status we can perform on a plugin .
*
* @ since 3.0 . 0
2015-05-29 17:17:27 -04:00
*
2020-06-20 08:58:10 -04:00
* @ param array | object $api Data about the plugin retrieved from the API .
* @ param bool $loop Optional . Disable further loops . Default false .
2016-10-17 04:30:29 -04:00
* @ return array {
* Plugin installation status data .
*
* @ type string $status Status of a plugin . Could be one of 'install' , 'update_available' , 'latest_installed' or 'newer_installed' .
* @ type string $url Plugin installation URL .
* @ type string $version The most recent version of the plugin .
* @ type string $file Plugin filename relative to the plugins directory .
* }
2010-04-01 19:17:53 -04:00
*/
2017-11-30 18:11:00 -05:00
function install_plugin_install_status ( $api , $loop = false ) {
2014-07-17 05:14:16 -04:00
// This function is called recursively, $loop prevents further loops.
2017-11-30 18:11:00 -05:00
if ( is_array ( $api ) ) {
2010-04-01 19:17:53 -04:00
$api = ( object ) $api ;
2017-11-30 18:11:00 -05:00
}
2010-04-01 19:17:53 -04:00
2020-01-28 19:35:08 -05:00
// Default to a "new" plugin.
2017-11-30 18:11:00 -05:00
$status = 'install' ;
$url = false ;
2015-02-04 23:19:23 -05:00
$update_file = false ;
2018-12-18 22:17:37 -05:00
$version = '' ;
2010-04-01 19:17:53 -04:00
2014-07-17 05:14:16 -04:00
/*
* Check to see if this plugin is known to be installed ,
* and has an update awaiting it .
*/
2017-11-30 18:11:00 -05:00
$update_plugins = get_site_transient ( 'update_plugins' );
2012-04-16 22:43:13 -04:00
if ( isset ( $update_plugins -> response ) ) {
2017-11-30 18:11:00 -05:00
foreach ( ( array ) $update_plugins -> response as $file => $plugin ) {
2010-04-01 19:17:53 -04:00
if ( $plugin -> slug === $api -> slug ) {
2017-11-30 18:11:00 -05:00
$status = 'update_available' ;
2010-04-01 19:17:53 -04:00
$update_file = $file ;
2017-11-30 18:11:00 -05:00
$version = $plugin -> new_version ;
if ( current_user_can ( 'update_plugins' ) ) {
$url = wp_nonce_url ( self_admin_url ( 'update.php?action=upgrade-plugin&plugin=' . $update_file ), 'upgrade-plugin_' . $update_file );
}
2010-04-01 19:17:53 -04:00
break ;
}
}
}
2020-05-16 14:42:12 -04:00
if ( 'install' === $status ) {
2011-12-13 18:45:31 -05:00
if ( is_dir ( WP_PLUGIN_DIR . '/' . $api -> slug ) ) {
2017-11-30 18:11:00 -05:00
$installed_plugin = get_plugins ( '/' . $api -> slug );
if ( empty ( $installed_plugin ) ) {
if ( current_user_can ( 'install_plugins' ) ) {
$url = wp_nonce_url ( self_admin_url ( 'update.php?action=install-plugin&plugin=' . $api -> slug ), 'install-plugin_' . $api -> slug );
}
2010-04-01 19:17:53 -04:00
} else {
2020-01-28 19:35:08 -05:00
$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.
$key = reset ( $key );
2015-02-04 23:19:23 -05:00
$update_file = $api -> slug . '/' . $key ;
2017-11-30 18:11:00 -05:00
if ( version_compare ( $api -> version , $installed_plugin [ $key ][ 'Version' ], '=' ) ) {
2010-04-01 19:17:53 -04:00
$status = 'latest_installed' ;
2017-11-30 18:11:00 -05:00
} elseif ( version_compare ( $api -> version , $installed_plugin [ $key ][ 'Version' ], '<' ) ) {
$status = 'newer_installed' ;
2010-04-01 19:17:53 -04:00
$version = $installed_plugin [ $key ][ 'Version' ];
} else {
2020-01-28 19:35:08 -05:00
// If the above update check failed, then that probably means that the update checker has out-of-date information, force a refresh.
2010-04-01 19:17:53 -04:00
if ( ! $loop ) {
2017-11-30 18:11:00 -05:00
delete_site_transient ( 'update_plugins' );
2010-04-01 19:17:53 -04:00
wp_update_plugins ();
2017-11-30 18:11:00 -05:00
return install_plugin_install_status ( $api , true );
2010-04-01 19:17:53 -04:00
}
}
}
} else {
2020-01-28 19:35:08 -05:00
// "install" & no directory with that slug.
2017-11-30 18:11:00 -05:00
if ( current_user_can ( 'install_plugins' ) ) {
$url = wp_nonce_url ( self_admin_url ( 'update.php?action=install-plugin&plugin=' . $api -> slug ), 'install-plugin_' . $api -> slug );
}
2010-04-01 19:17:53 -04:00
}
}
2017-11-30 18:11:00 -05:00
if ( isset ( $_GET [ 'from' ] ) ) {
2013-03-01 12:00:25 -05:00
$url .= '&from=' . urlencode ( wp_unslash ( $_GET [ 'from' ] ) );
2017-11-30 18:11:00 -05:00
}
2010-04-01 19:17:53 -04:00
2015-02-04 23:19:23 -05:00
$file = $update_file ;
return compact ( 'status' , 'url' , 'version' , 'file' );
2010-04-01 19:17:53 -04:00
}
2008-10-10 14:21:16 -04:00
/**
* Display plugin information in dialog box form .
*
* @ since 2.7 . 0
2015-05-28 17:41:30 -04:00
*
* @ global string $tab
2008-10-10 14:21:16 -04:00
*/
2008-08-04 17:17:42 -04:00
function install_plugin_information () {
global $tab ;
2008-08-09 01:36:14 -04:00
2014-10-12 09:06:19 -04:00
if ( empty ( $_REQUEST [ 'plugin' ] ) ) {
return ;
}
2017-11-30 18:11:00 -05:00
$api = plugins_api (
2018-08-16 21:51:36 -04:00
'plugin_information' ,
array (
'slug' => wp_unslash ( $_REQUEST [ 'plugin' ] ),
2015-04-02 19:49:27 -04:00
)
2017-11-30 18:11:00 -05:00
);
2008-08-04 17:17:42 -04:00
2014-07-12 18:08:16 -04:00
if ( is_wp_error ( $api ) ) {
2014-03-16 14:28:17 -04:00
wp_die ( $api );
2014-07-12 18:08:16 -04:00
}
2008-10-14 11:56:33 -04:00
2012-01-08 04:18:56 -05:00
$plugins_allowedtags = array (
2017-11-30 18:11:00 -05:00
'a' => array (
'href' => array (),
'title' => array (),
'target' => array (),
),
'abbr' => array ( 'title' => array () ),
'acronym' => array ( 'title' => array () ),
'code' => array (),
'pre' => array (),
'em' => array (),
'strong' => array (),
'div' => array ( 'class' => array () ),
'span' => array ( 'class' => array () ),
'p' => array (),
'br' => 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 (),
),
2017-05-11 15:16:42 -04:00
'blockquote' => array ( 'cite' => true ),
2012-01-08 04:18:56 -05:00
);
2012-01-08 00:39:49 -05:00
$plugins_section_titles = array (
2017-11-30 18:11:00 -05:00
'description' => _x ( 'Description' , 'Plugin installer section title' ),
2014-07-12 18:08:16 -04:00
'installation' => _x ( 'Installation' , 'Plugin installer section title' ),
2017-11-30 18:11:00 -05:00
'faq' => _x ( 'FAQ' , 'Plugin installer section title' ),
'screenshots' => _x ( 'Screenshots' , 'Plugin installer section title' ),
'changelog' => _x ( 'Changelog' , 'Plugin installer section title' ),
'reviews' => _x ( 'Reviews' , 'Plugin installer section title' ),
'other_notes' => _x ( 'Other Notes' , 'Plugin installer section title' ),
2012-01-08 04:18:56 -05:00
);
2012-01-08 00:39:49 -05:00
2020-01-28 19:35:08 -05:00
// Sanitize HTML.
2014-07-12 18:08:16 -04:00
foreach ( ( array ) $api -> sections as $section_name => $content ) {
2017-11-30 18:11:00 -05:00
$api -> sections [ $section_name ] = wp_kses ( $content , $plugins_allowedtags );
2014-03-16 14:28:17 -04:00
}
2011-08-23 11:56:14 -04:00
foreach ( array ( 'version' , 'author' , 'requires' , 'tested' , 'homepage' , 'downloaded' , 'slug' ) as $key ) {
2014-07-12 18:08:16 -04:00
if ( isset ( $api -> $key ) ) {
2011-08-23 11:56:14 -04:00
$api -> $key = wp_kses ( $api -> $key , $plugins_allowedtags );
2014-07-12 18:08:16 -04:00
}
2011-08-23 11:56:14 -04:00
}
2008-10-14 11:56:33 -04:00
2014-03-16 14:28:17 -04:00
$_tab = esc_attr ( $tab );
2020-01-28 19:35:08 -05:00
// Default to the Description tab, Do not translate, API returns English.
$section = isset ( $_REQUEST [ 'section' ] ) ? wp_unslash ( $_REQUEST [ 'section' ] ) : 'description' ;
2013-09-02 09:54:10 -04:00
if ( empty ( $section ) || ! isset ( $api -> sections [ $section ] ) ) {
$section_titles = array_keys ( ( array ) $api -> sections );
2017-11-30 18:11:00 -05:00
$section = reset ( $section_titles );
2013-09-02 09:54:10 -04:00
}
2008-08-09 01:36:14 -04:00
2017-08-22 07:52:48 -04:00
iframe_header ( __ ( 'Plugin Installation' ) );
2014-08-15 13:17:16 -04:00
2014-07-09 13:28:17 -04:00
$_with_banner = '' ;
2014-07-12 18:08:16 -04:00
if ( ! empty ( $api -> banners ) && ( ! empty ( $api -> banners [ 'low' ] ) || ! empty ( $api -> banners [ 'high' ] ) ) ) {
2014-07-09 13:28:17 -04:00
$_with_banner = 'with-banner' ;
2017-11-30 18:11:00 -05:00
$low = empty ( $api -> banners [ 'low' ] ) ? $api -> banners [ 'high' ] : $api -> banners [ 'low' ];
$high = empty ( $api -> banners [ 'high' ] ) ? $api -> banners [ 'low' ] : $api -> banners [ 'high' ];
2014-07-09 13:28:17 -04:00
?>
< style type = " text/css " >
#plugin-information-title.with-banner {
2014-07-12 18:08:16 -04:00
background - image : url ( < ? php echo esc_url ( $low ); ?> );
2014-07-09 13:28:17 -04:00
}
2014-07-12 18:08:16 -04:00
@ media only screen and ( - webkit - min - device - pixel - ratio : 1.5 ) {
2014-07-09 13:28:17 -04:00
#plugin-information-title.with-banner {
2014-07-12 18:08:16 -04:00
background - image : url ( < ? php echo esc_url ( $high ); ?> );
2014-07-09 13:28:17 -04:00
}
}
</ style >
< ? php
}
2014-08-12 19:02:16 -04:00
echo '<div id="plugin-information-scrollable">' ;
2014-07-09 13:28:17 -04:00
echo " <div id=' { $_tab } -title' class=' { $_with_banner } '><div class='vignette'></div><h2> { $api -> name } </h2></div> " ;
echo " <div id=' { $_tab } -tabs' class=' { $_with_banner } '> \n " ;
2014-03-16 14:28:17 -04:00
2014-07-12 18:08:16 -04:00
foreach ( ( array ) $api -> sections as $section_name => $content ) {
if ( 'reviews' === $section_name && ( empty ( $api -> ratings ) || 0 === array_sum ( ( array ) $api -> ratings ) ) ) {
2014-07-09 13:28:17 -04:00
continue ;
2014-07-12 18:08:16 -04:00
}
2008-08-09 01:36:14 -04:00
2014-07-12 18:08:16 -04:00
if ( isset ( $plugins_section_titles [ $section_name ] ) ) {
2012-01-08 00:39:49 -05:00
$title = $plugins_section_titles [ $section_name ];
2014-07-12 18:08:16 -04:00
} else {
2012-01-08 00:39:49 -05:00
$title = ucwords ( str_replace ( '_' , ' ' , $section_name ) );
2014-07-12 18:08:16 -04:00
}
2008-08-04 17:17:42 -04:00
2017-11-30 18:11:00 -05:00
$class = ( $section_name === $section ) ? ' class="current"' : '' ;
$href = add_query_arg (
array (
'tab' => $tab ,
'section' => $section_name ,
)
);
$href = esc_url ( $href );
2012-01-08 00:39:49 -05:00
$san_section = esc_attr ( $section_name );
2014-03-16 14:28:17 -04:00
echo " \t <a name=' $san_section ' href=' $href ' $class > $title </a> \n " ;
2008-08-04 17:17:42 -04:00
}
2014-03-16 14:28:17 -04:00
2008-08-04 17:17:42 -04:00
echo " </div> \n " ;
2014-03-16 14:28:17 -04:00
2008-08-04 17:17:42 -04:00
?>
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
< div id = " <?php echo $_tab ; ?>-content " class = '<?php echo $_with_banner; ?>' >
2014-03-16 14:28:17 -04:00
< div class = " fyi " >
2008-08-04 17:17:42 -04:00
< ul >
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
< ? php if ( ! empty ( $api -> version ) ) { ?>
< li >< strong >< ? php _e ( 'Version:' ); ?> </strong> <?php echo $api->version; ?></li>
< ? php } if ( ! empty ( $api -> author ) ) { ?>
< li >< strong >< ? php _e ( 'Author:' ); ?> </strong> <?php echo links_add_target( $api->author, '_blank' ); ?></li>
< ? php } if ( ! empty ( $api -> last_updated ) ) { ?>
< li >< strong >< ? php _e ( 'Last Updated:' ); ?> </strong>
< ? php
2019-09-02 20:41:05 -04:00
/* translators: %s: Human-readable time difference. */
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
printf ( __ ( '%s ago' ), human_time_diff ( strtotime ( $api -> last_updated ) ) );
?>
</ li >
< ? php } if ( ! empty ( $api -> requires ) ) { ?>
< li >
< strong >< ? php _e ( 'Requires WordPress Version:' ); ?> </strong>
< ? php
2019-09-02 20:41:05 -04:00
/* translators: %s: Version number. */
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
printf ( __ ( '%s or higher' ), $api -> requires );
?>
</ li >
< ? php } if ( ! empty ( $api -> tested ) ) { ?>
< li >< strong >< ? php _e ( 'Compatible up to:' ); ?> </strong> <?php echo $api->tested; ?></li>
2018-04-24 07:41:25 -04:00
< ? php } if ( ! empty ( $api -> requires_php ) ) { ?>
< li >
< strong >< ? php _e ( 'Requires PHP Version:' ); ?> </strong>
< ? php
2019-09-02 20:41:05 -04:00
/* translators: %s: Version number. */
2018-04-24 07:41:25 -04:00
printf ( __ ( '%s or higher' ), $api -> requires_php );
?>
</ li >
2016-10-04 23:33:29 -04:00
< ? php } if ( isset ( $api -> active_installs ) ) { ?>
2018-01-15 19:15:46 -05:00
< li >< strong >< ? php _e ( 'Active Installations:' ); ?> </strong>
2018-08-15 02:22:26 -04:00
< ? php
if ( $api -> active_installs >= 1000000 ) {
$active_installs_millions = floor ( $api -> active_installs / 1000000 );
printf (
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of millions. */
2018-08-15 02:22:26 -04:00
_nx ( '%s+ Million' , '%s+ Million' , $active_installs_millions , 'Active plugin installations' ),
number_format_i18n ( $active_installs_millions )
);
} elseif ( 0 == $api -> active_installs ) {
_ex ( 'Less Than 10' , 'Active plugin installations' );
} else {
echo number_format_i18n ( $api -> active_installs ) . '+' ;
}
?>
</ li >
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
< ? php } if ( ! empty ( $api -> slug ) && empty ( $api -> external ) ) { ?>
2016-10-26 08:18:06 -04:00
< li >< a target = " _blank " href = " <?php echo __( 'https://wordpress.org/plugins/' ) . $api->slug ; ?>/ " >< ? php _e ( 'WordPress.org Plugin Page »' ); ?> </a></li>
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
< ? php } if ( ! empty ( $api -> homepage ) ) { ?>
< li >< a target = " _blank " href = " <?php echo esc_url( $api->homepage ); ?> " >< ? php _e ( 'Plugin Homepage »' ); ?> </a></li>
< ? php } if ( ! empty ( $api -> donate_link ) && empty ( $api -> contributors ) ) { ?>
< li >< a target = " _blank " href = " <?php echo esc_url( $api->donate_link ); ?> " >< ? php _e ( 'Donate to this plugin »' ); ?> </a></li>
< ? php } ?>
2008-08-04 17:17:42 -04:00
</ ul >
2014-07-12 18:08:16 -04:00
< ? php if ( ! empty ( $api -> rating ) ) { ?>
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
< h3 >< ? php _e ( 'Average Rating' ); ?> </h3>
2017-11-30 18:11:00 -05:00
< ? php
wp_star_rating (
array (
'rating' => $api -> rating ,
'type' => 'percent' ,
'number' => $api -> num_ratings ,
)
);
2018-08-16 21:51:36 -04:00
?>
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
< p aria - hidden = " true " class = " fyi-description " >
< ? php
printf (
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of ratings. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
_n ( '(based on %s rating)' , '(based on %s ratings)' , $api -> num_ratings ),
number_format_i18n ( $api -> num_ratings )
);
?>
</ p >
2018-08-16 21:51:36 -04:00
< ? php
2019-01-12 01:41:52 -05:00
}
2014-07-12 18:08:16 -04:00
2019-01-12 01:41:52 -05:00
if ( ! empty ( $api -> ratings ) && array_sum ( ( array ) $api -> ratings ) > 0 ) {
?>
2016-02-22 18:18:29 -05:00
< h3 >< ? php _e ( 'Reviews' ); ?> </h3>
< p class = " fyi-description " >< ? php _e ( 'Read all reviews on WordPress.org or write your own!' ); ?> </p>
< ? php
2015-08-25 16:28:22 -04:00
foreach ( $api -> ratings as $key => $ratecount ) {
2014-07-17 05:14:16 -04:00
// Avoid div-by-zero.
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
$_rating = $api -> num_ratings ? ( $ratecount / $api -> num_ratings ) : 0 ;
2017-11-30 18:11:00 -05:00
$aria_label = esc_attr (
sprintf (
2019-09-02 20:41:05 -04:00
/* translators: 1: Number of stars (used to determine singular/plural), 2: Number of reviews. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
_n (
'Reviews with %1$d star: %2$s. Opens in a new tab.' ,
'Reviews with %1$d stars: %2$s. Opens in a new tab.' ,
$key
),
2017-11-30 18:11:00 -05:00
$key ,
number_format_i18n ( $ratecount )
)
);
2014-07-09 13:28:17 -04:00
?>
< div class = " counter-container " >
2017-11-26 18:57:55 -05:00
< span class = " counter-label " >
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
< ? php
printf (
'<a href="%s" target="_blank" aria-label="%s">%s</a>' ,
" https://wordpress.org/support/plugin/ { $api -> slug } /reviews/?filter= { $key } " ,
$aria_label ,
2019-09-02 20:41:05 -04:00
/* translators: %s: Number of stars. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 13:13:59 -04:00
sprintf ( _n ( '%d star' , '%d stars' , $key ), $key )
);
?>
2017-11-26 18:57:55 -05:00
</ span >
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
< span class = " counter-back " >
< span class = " counter-bar " style = " width: <?php echo 92 * $_rating ; ?>px; " ></ span >
</ span >
2016-02-22 18:18:29 -05:00
< span class = " counter-count " aria - hidden = " true " >< ? php echo number_format_i18n ( $ratecount ); ?> </span>
2014-07-09 13:28:17 -04:00
</ div >
2014-07-12 18:08:16 -04:00
< ? php
2014-07-09 13:28:17 -04:00
}
2019-01-12 01:41:52 -05:00
}
if ( ! empty ( $api -> contributors ) ) {
?>
2014-07-12 18:08:16 -04:00
< h3 >< ? php _e ( 'Contributors' ); ?> </h3>
2014-07-09 13:28:17 -04:00
< ul class = " contributors " >
< ? php
2018-02-01 00:17:33 -05:00
foreach ( ( array ) $api -> contributors as $contrib_username => $contrib_details ) {
$contrib_name = $contrib_details [ 'display_name' ];
if ( ! $contrib_name ) {
2018-02-10 17:08:30 -05:00
$contrib_name = $contrib_username ;
2014-07-12 18:08:16 -04:00
}
2018-02-01 00:17:33 -05:00
$contrib_name = esc_html ( $contrib_name );
$contrib_profile = esc_url ( $contrib_details [ 'profile' ] );
2018-08-16 21:51:36 -04:00
$contrib_avatar = esc_url ( add_query_arg ( 's' , '36' , $contrib_details [ 'avatar' ] ) );
2018-02-01 00:17:33 -05:00
echo " <li><a href=' { $contrib_profile } ' target='_blank'><img src=' { $contrib_avatar } ' width='18' height='18' alt='' /> { $contrib_name } </a></li> " ;
2014-07-09 13:28:17 -04:00
}
?>
</ ul >
2019-01-12 01:41:52 -05:00
< ? php if ( ! empty ( $api -> donate_link ) ) { ?>
2014-07-12 18:08:16 -04:00
< a target = " _blank " href = " <?php echo esc_url( $api->donate_link ); ?> " >< ? php _e ( 'Donate to this plugin »' ); ?> </a>
< ? php } ?>
2019-01-12 01:41:52 -05:00
< ? php } ?>
2008-08-04 17:17:42 -04:00
</ div >
2019-06-25 10:11:55 -04:00
< div id = " section-holder " >
2008-10-13 19:39:56 -04:00
< ? php
2019-04-12 19:56:52 -04:00
$requires_php = isset ( $api -> requires_php ) ? $api -> requires_php : null ;
$requires_wp = isset ( $api -> requires ) ? $api -> requires : null ;
2016-08-31 01:49:37 -04:00
2019-04-12 19:56:52 -04:00
$compatible_php = is_php_version_compatible ( $requires_php );
$compatible_wp = is_wp_version_compatible ( $requires_wp );
$tested_wp = ( empty ( $api -> tested ) || version_compare ( get_bloginfo ( 'version' ), $api -> tested , '<=' ) );
Plugins: Disable "Install Now" button for plugins that require a higher version of PHP or WordPress.
Display a notice with an explanation and the steps required to resolve the issue.
Props afragen, schlessera, flixos90, nerrad, melchoyce, boemedia, hedgefield, joyously, johnalarcon, lakenh, afercia, acirujano, ibantxillo, SergeyBiryukov.
Fixes #43986.
Built from https://develop.svn.wordpress.org/trunk@43436
git-svn-id: http://core.svn.wordpress.org/trunk@43263 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-07-09 09:45:25 -04:00
if ( ! $compatible_php ) {
echo '<div class="notice notice-error notice-alt"><p>' ;
2020-06-21 10:00:09 -04:00
_e ( '<strong>Error:</strong> This plugin <strong>requires a newer version of PHP</strong>.' );
2019-01-16 12:07:00 -05:00
if ( current_user_can ( 'update_php' ) ) {
printf (
2019-09-02 20:41:05 -04:00
/* translators: %s: URL to Update PHP page. */
2019-01-16 12:07:00 -05:00
' ' . __ ( '<a href="%s" target="_blank">Click here to learn more about updating PHP</a>.' ),
esc_url ( wp_get_update_php_url () )
);
2019-03-19 21:44:51 -04:00
wp_update_php_annotation ( '</p><p><em>' , '</em>' );
2019-01-16 12:07:00 -05:00
} else {
echo '</p>' ;
}
echo '</div>' ;
Plugins: Disable "Install Now" button for plugins that require a higher version of PHP or WordPress.
Display a notice with an explanation and the steps required to resolve the issue.
Props afragen, schlessera, flixos90, nerrad, melchoyce, boemedia, hedgefield, joyously, johnalarcon, lakenh, afercia, acirujano, ibantxillo, SergeyBiryukov.
Fixes #43986.
Built from https://develop.svn.wordpress.org/trunk@43436
git-svn-id: http://core.svn.wordpress.org/trunk@43263 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-07-09 09:45:25 -04:00
}
if ( ! $tested_wp ) {
echo '<div class="notice notice-warning notice-alt"><p>' ;
_e ( '<strong>Warning:</strong> This plugin <strong>has not been tested</strong> with your current version of WordPress.' );
echo '</p></div>' ;
} elseif ( ! $compatible_wp ) {
echo '<div class="notice notice-error notice-alt"><p>' ;
2020-06-21 10:00:09 -04:00
_e ( '<strong>Error:</strong> This plugin <strong>requires a newer version of WordPress</strong>.' );
Plugins: Disable "Install Now" button for plugins that require a higher version of PHP or WordPress.
Display a notice with an explanation and the steps required to resolve the issue.
Props afragen, schlessera, flixos90, nerrad, melchoyce, boemedia, hedgefield, joyously, johnalarcon, lakenh, afercia, acirujano, ibantxillo, SergeyBiryukov.
Fixes #43986.
Built from https://develop.svn.wordpress.org/trunk@43436
git-svn-id: http://core.svn.wordpress.org/trunk@43263 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-07-09 09:45:25 -04:00
if ( current_user_can ( 'update_core' ) ) {
printf (
2019-09-02 20:41:05 -04:00
/* translators: %s: URL to WordPress Updates screen. */
Plugins: Disable "Install Now" button for plugins that require a higher version of PHP or WordPress.
Display a notice with an explanation and the steps required to resolve the issue.
Props afragen, schlessera, flixos90, nerrad, melchoyce, boemedia, hedgefield, joyously, johnalarcon, lakenh, afercia, acirujano, ibantxillo, SergeyBiryukov.
Fixes #43986.
Built from https://develop.svn.wordpress.org/trunk@43436
git-svn-id: http://core.svn.wordpress.org/trunk@43263 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-07-09 09:45:25 -04:00
' ' . __ ( '<a href="%s" target="_parent">Click here to update WordPress</a>.' ),
self_admin_url ( 'update-core.php' )
);
}
echo '</p></div>' ;
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
}
2009-03-10 14:31:55 -04:00
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
foreach ( ( array ) $api -> sections as $section_name => $content ) {
$content = links_add_base_url ( $content , 'https://wordpress.org/plugins/' . $api -> slug . '/' );
$content = links_add_target ( $content , '_blank' );
2008-08-09 01:36:14 -04:00
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
$san_section = esc_attr ( $section_name );
2008-08-09 01:36:14 -04:00
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
$display = ( $section_name === $section ) ? 'block' : 'none' ;
2008-08-09 01:36:14 -04:00
Update/Install: Shiny Updates v2.
Gone are the days of isolation and feelings of "meh", brought on by The Bleak Screen of Sadness. For a shiny knight has arrived to usher our plugins and themes along their arduous journey of installation, updates, and the inevitable fate of ultimate deletion.
Props swissspidy, adamsilverstein, mapk, afragen, ocean90, ryelle, j-falk, michael-arestad, melchoyce, DrewAPicture, AdamSoucie, ethitter, pento, dd32, kraftbj, Ipstenu, jorbin, afercia, stephdau, paulwilde, jipmoors, khag7, svovaf, jipmoors, obenland.
Fixes #22029, #25828, #31002, #31529, #31530, #31773, #33637, #35032.
Built from https://develop.svn.wordpress.org/trunk@37714
git-svn-id: http://core.svn.wordpress.org/trunk@37680 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-15 12:37:29 -04:00
echo " \t <div id='section- { $san_section } ' class='section' style='display: { $display } ;'> \n " ;
echo $content ;
echo " \t </div> \n " ;
}
2008-08-04 17:17:42 -04:00
echo " </div> \n " ;
2014-03-16 14:28:17 -04:00
echo " </div> \n " ;
2014-08-12 19:02:16 -04:00
echo " </div> \n " ; // #plugin-information-scrollable
2014-03-16 14:28:17 -04:00
echo " <div id=' $tab -footer'> \n " ;
2014-07-12 18:08:16 -04:00
if ( ! empty ( $api -> download_link ) && ( current_user_can ( 'install_plugins' ) || current_user_can ( 'update_plugins' ) ) ) {
$status = install_plugin_install_status ( $api );
2014-03-16 14:28:17 -04:00
switch ( $status [ 'status' ] ) {
case 'install' :
2014-07-12 18:08:16 -04:00
if ( $status [ 'url' ] ) {
Plugins: Disable "Install Now" button for plugins that require a higher version of PHP or WordPress.
Display a notice with an explanation and the steps required to resolve the issue.
Props afragen, schlessera, flixos90, nerrad, melchoyce, boemedia, hedgefield, joyously, johnalarcon, lakenh, afercia, acirujano, ibantxillo, SergeyBiryukov.
Fixes #43986.
Built from https://develop.svn.wordpress.org/trunk@43436
git-svn-id: http://core.svn.wordpress.org/trunk@43263 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-07-09 09:45:25 -04:00
if ( $compatible_php && $compatible_wp ) {
echo '<a data-slug="' . esc_attr ( $api -> slug ) . '" id="plugin_install_from_iframe" class="button button-primary right" href="' . $status [ 'url' ] . '" target="_parent">' . __ ( 'Install Now' ) . '</a>' ;
} else {
printf (
'<button type="button" class="button button-primary button-disabled right" disabled="disabled">%s</button>' ,
_x ( 'Cannot Install' , 'plugin' )
);
}
2014-07-12 18:08:16 -04:00
}
2014-03-16 14:28:17 -04:00
break ;
case 'update_available' :
2014-07-12 18:08:16 -04:00
if ( $status [ 'url' ] ) {
2019-03-19 21:44:51 -04:00
if ( $compatible_php ) {
echo '<a data-slug="' . esc_attr ( $api -> slug ) . '" data-plugin="' . esc_attr ( $status [ 'file' ] ) . '" id="plugin_update_from_iframe" class="button button-primary right" href="' . $status [ 'url' ] . '" target="_parent">' . __ ( 'Install Update Now' ) . '</a>' ;
} else {
printf (
'<button type="button" class="button button-primary button-disabled right" disabled="disabled">%s</button>' ,
_x ( 'Cannot Update' , 'plugin' )
);
}
2014-07-12 18:08:16 -04:00
}
2014-03-16 14:28:17 -04:00
break ;
case 'newer_installed' :
2019-09-02 20:41:05 -04:00
/* translators: %s: Plugin version. */
2017-11-30 18:11:00 -05:00
echo '<a class="button button-primary right disabled">' . sprintf ( __ ( 'Newer Version (%s) Installed' ), $status [ 'version' ] ) . '</a>' ;
2014-03-16 14:28:17 -04:00
break ;
case 'latest_installed' :
2014-07-12 18:08:16 -04:00
echo '<a class="button button-primary right disabled">' . __ ( 'Latest Version Installed' ) . '</a>' ;
2014-03-16 14:28:17 -04:00
break ;
}
}
echo " </div> \n " ;
2008-08-05 13:06:42 -04:00
2008-10-13 19:39:56 -04:00
iframe_footer ();
2008-08-04 17:17:42 -04:00
exit ;
}