From 7086111ad4dd997e12a3220e1ee60c9b9bcf0bb8 Mon Sep 17 00:00:00 2001
From: Charles
Date: Tue, 7 Jan 2020 13:06:14 +0100
Subject: Added wordpress
---
.../wordpress/wp-admin/includes/plugin-install.php | 888 +++++++++++++++++++++
1 file changed, 888 insertions(+)
create mode 100644 srcs/wordpress/wp-admin/includes/plugin-install.php
(limited to 'srcs/wordpress/wp-admin/includes/plugin-install.php')
diff --git a/srcs/wordpress/wp-admin/includes/plugin-install.php b/srcs/wordpress/wp-admin/includes/plugin-install.php
new file mode 100644
index 0000000..6e56b33
--- /dev/null
+++ b/srcs/wordpress/wp-admin/includes/plugin-install.php
@@ -0,0 +1,888 @@
+per_page ) ) {
+ $args->per_page = 24;
+ }
+ }
+
+ if ( ! isset( $args->locale ) ) {
+ $args->locale = get_user_locale();
+ }
+
+ if ( ! isset( $args->wp_version ) ) {
+ $args->wp_version = substr( $wp_version, 0, 3 ); // X.y
+ }
+
+ /**
+ * Filters the WordPress.org Plugin Installation API arguments.
+ *
+ * Important: An object MUST be returned to this filter.
+ *
+ * @since 2.7.0
+ *
+ * @param object $args Plugin API arguments.
+ * @param string $action The type of information being requested from the Plugin Installation API.
+ */
+ $args = apply_filters( 'plugins_api_args', $args, $action );
+
+ /**
+ * Filters the response for the current WordPress.org Plugin Installation API request.
+ *
+ * Passing a non-false value will effectively short-circuit the WordPress.org API request.
+ *
+ * If `$action` is 'query_plugins' or 'plugin_information', an object MUST be passed.
+ * If `$action` is 'hot_tags' or 'hot_categories', an array should be passed.
+ *
+ * @since 2.7.0
+ *
+ * @param false|object|array $result The result object or array. Default false.
+ * @param string $action The type of information being requested from the Plugin Installation API.
+ * @param object $args Plugin API arguments.
+ */
+ $res = apply_filters( 'plugins_api', false, $action, $args );
+
+ if ( false === $res ) {
+
+ $url = 'http://api.wordpress.org/plugins/info/1.2/';
+ $url = add_query_arg(
+ array(
+ 'action' => $action,
+ 'request' => $args,
+ ),
+ $url
+ );
+
+ $http_url = $url;
+ $ssl = wp_http_supports( array( 'ssl' ) );
+ if ( $ssl ) {
+ $url = set_url_scheme( $url, 'https' );
+ }
+
+ $http_args = array(
+ 'timeout' => 15,
+ 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ),
+ );
+ $request = wp_remote_get( $url, $http_args );
+
+ if ( $ssl && is_wp_error( $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 support forums.' ),
+ __( '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
+ );
+ $request = wp_remote_get( $http_url, $http_args );
+ }
+
+ if ( is_wp_error( $request ) ) {
+ $res = new WP_Error(
+ 'plugins_api_failed',
+ 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 support forums.' ),
+ __( 'https://wordpress.org/support/forums/' )
+ ),
+ $request->get_error_message()
+ );
+ } else {
+ $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 ) {
+ $res = new WP_Error(
+ 'plugins_api_failed',
+ 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 support forums.' ),
+ __( 'https://wordpress.org/support/forums/' )
+ ),
+ wp_remote_retrieve_body( $request )
+ );
+ }
+
+ if ( isset( $res->error ) ) {
+ $res = new WP_Error( 'plugins_api_failed', $res->error );
+ }
+ }
+ } elseif ( ! is_wp_error( $res ) ) {
+ $res->external = true;
+ }
+
+ /**
+ * Filters the Plugin Installation API response results.
+ *
+ * @since 2.7.0
+ *
+ * @param object|WP_Error $res Response object or WP_Error.
+ * @param string $action The type of information being requested from the Plugin Installation API.
+ * @param object $args Plugin API arguments.
+ */
+ return apply_filters( 'plugins_api_result', $res, $action, $args );
+}
+
+/**
+ * Retrieve popular WordPress plugin tags.
+ *
+ * @since 2.7.0
+ *
+ * @param array $args
+ * @return array
+ */
+function install_popular_tags( $args = array() ) {
+ $key = md5( serialize( $args ) );
+ $tags = get_site_transient( 'poptags_' . $key );
+ if ( false !== $tags ) {
+ return $tags;
+ }
+
+ $tags = plugins_api( 'hot_tags', $args );
+
+ if ( is_wp_error( $tags ) ) {
+ return $tags;
+ }
+
+ set_site_transient( 'poptags_' . $key, $tags, 3 * HOUR_IN_SECONDS );
+
+ return $tags;
+}
+
+/**
+ * @since 2.7.0
+ */
+function install_dashboard() {
+ ?>
+
+ WordPress Plugin Directory or upload a plugin in .zip format by clicking the button at the top of this page.' ),
+ __( 'https://wordpress.org/plugins/' )
+ );
+ ?>
+
+
+
+
+ ';
+}
+
+/**
+ * Displays a search form for searching plugins.
+ *
+ * @since 2.7.0
+ * @since 4.6.0 The `$type_selector` parameter was deprecated.
+ *
+ * @param bool $deprecated Not used.
+ */
+function install_search_form( $deprecated = true ) {
+ $type = isset( $_REQUEST['type'] ) ? wp_unslash( $_REQUEST['type'] ) : 'term';
+ $term = isset( $_REQUEST['s'] ) ? wp_unslash( $_REQUEST['s'] ) : '';
+ ?>
+
+
+
+
+
+
+ ' . __( 'These suggestions are based on the plugins you and other users have installed.' ) . '
';
+ break;
+ case 'install_plugins_beta':
+ printf(
+ /* translators: %s: URL to "Features as Plugins" page. */
+ '' . __( 'You are using a development version of WordPress. These feature plugins are also under development. Learn more.' ) . '
',
+ 'https://make.wordpress.org/core/handbook/about/release-cycle/features-as-plugins/'
+ );
+ break;
+ }
+
+ ?>
+
+ response ) ) {
+ 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( self_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( self_admin_url( 'update.php?action=install-plugin&plugin=' . $api->slug ), 'install-plugin_' . $api->slug );
+ }
+ } else {
+ $key = array_keys( $installed_plugin );
+ $key = reset( $key ); //Use the first plugin regardless of the name, Could have issues for multiple-plugins in one directory if they share different version numbers
+ $update_file = $api->slug . '/' . $key;
+ 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( self_admin_url( 'update.php?action=install-plugin&plugin=' . $api->slug ), 'install-plugin_' . $api->slug );
+ }
+ }
+ }
+ if ( isset( $_GET['from'] ) ) {
+ $url .= '&from=' . urlencode( wp_unslash( $_GET['from'] ) );
+ }
+
+ $file = $update_file;
+ return compact( 'status', 'url', 'version', 'file' );
+}
+
+/**
+ * Display plugin information in dialog box form.
+ *
+ * @since 2.7.0
+ *
+ * @global string $tab
+ */
+function install_plugin_information() {
+ global $tab;
+
+ if ( empty( $_REQUEST['plugin'] ) ) {
+ return;
+ }
+
+ $api = plugins_api(
+ 'plugin_information',
+ array(
+ 'slug' => wp_unslash( $_REQUEST['plugin'] ),
+ )
+ );
+
+ 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() ),
+ '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(),
+ ),
+ 'blockquote' => array( 'cite' => true ),
+ );
+
+ $plugins_section_titles = array(
+ 'description' => _x( 'Description', 'Plugin installer section title' ),
+ 'installation' => _x( 'Installation', 'Plugin installer section title' ),
+ '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' ),
+ );
+
+ // 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 ) {
+ if ( isset( $api->$key ) ) {
+ $api->$key = wp_kses( $api->$key, $plugins_allowedtags );
+ }
+ }
+
+ $_tab = esc_attr( $tab );
+
+ $section = isset( $_REQUEST['section'] ) ? wp_unslash( $_REQUEST['section'] ) : 'description'; // Default to the Description tab, Do not translate, API returns English.
+ if ( empty( $section ) || ! isset( $api->sections[ $section ] ) ) {
+ $section_titles = array_keys( (array) $api->sections );
+ $section = reset( $section_titles );
+ }
+
+ iframe_header( __( 'Plugin Installation' ) );
+
+ $_with_banner = '';
+
+ if ( ! empty( $api->banners ) && ( ! empty( $api->banners['low'] ) || ! empty( $api->banners['high'] ) ) ) {
+ $_with_banner = 'with-banner';
+ $low = empty( $api->banners['low'] ) ? $api->banners['high'] : $api->banners['low'];
+ $high = empty( $api->banners['high'] ) ? $api->banners['low'] : $api->banners['high'];
+ ?>
+
+ ';
+ echo "";
+ echo "\n";
+
+ foreach ( (array) $api->sections as $section_name => $content ) {
+ if ( 'reviews' === $section_name && ( empty( $api->ratings ) || 0 === array_sum( (array) $api->ratings ) ) ) {
+ continue;
+ }
+
+ if ( isset( $plugins_section_titles[ $section_name ] ) ) {
+ $title = $plugins_section_titles[ $section_name ];
+ } else {
+ $title = ucwords( str_replace( '_', ' ', $section_name ) );
+ }
+
+ $class = ( $section_name === $section ) ? ' class="current"' : '';
+ $href = add_query_arg(
+ array(
+ 'tab' => $tab,
+ 'section' => $section_name,
+ )
+ );
+ $href = esc_url( $href );
+ $san_section = esc_attr( $section_name );
+ echo "\t
$title\n";
+ }
+
+ echo "
\n";
+
+ ?>
+
+
+
+ version ) ) { ?>
+ - version; ?>
+ author ) ) { ?>
+ - author, '_blank' ); ?>
+ last_updated ) ) { ?>
+ -
+ last_updated ) ) );
+ ?>
+
+ requires ) ) { ?>
+ -
+
+ requires );
+ ?>
+
+ tested ) ) { ?>
+ - tested; ?>
+ requires_php ) ) { ?>
+ -
+
+ requires_php );
+ ?>
+
+ active_installs ) ) { ?>
+ -
+ active_installs >= 1000000 ) {
+ $active_installs_millions = floor( $api->active_installs / 1000000 );
+ printf(
+ /* translators: %s: Number of millions. */
+ _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 ) . '+';
+ }
+ ?>
+
+ slug ) && empty( $api->external ) ) { ?>
+
+ homepage ) ) { ?>
+
+ donate_link ) && empty( $api->contributors ) ) { ?>
+
+
+
+ rating ) ) { ?>
+
+ $api->rating,
+ 'type' => 'percent',
+ 'number' => $api->num_ratings,
+ )
+ );
+ ?>
+
+ num_ratings ),
+ number_format_i18n( $api->num_ratings )
+ );
+ ?>
+
+ ratings ) && array_sum( (array) $api->ratings ) > 0 ) {
+ ?>
+
+
+ ratings as $key => $ratecount ) {
+ // Avoid div-by-zero.
+ $_rating = $api->num_ratings ? ( $ratecount / $api->num_ratings ) : 0;
+ $aria_label = esc_attr(
+ sprintf(
+ /* translators: 1: Number of stars (used to determine singular/plural), 2: Number of reviews. */
+ _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
+ ),
+ $key,
+ number_format_i18n( $ratecount )
+ )
+ );
+ ?>
+
+
+ %s',
+ "https://wordpress.org/support/plugin/{$api->slug}/reviews/?filter={$key}",
+ $aria_label,
+ /* translators: %s: Number of stars. */
+ sprintf( _n( '%d star', '%d stars', $key ), $key )
+ );
+ ?>
+
+
+
+
+
+
+ contributors ) ) {
+ ?>
+
+
+ contributors as $contrib_username => $contrib_details ) {
+ $contrib_name = $contrib_details['display_name'];
+ if ( ! $contrib_name ) {
+ $contrib_name = $contrib_username;
+ }
+ $contrib_name = esc_html( $contrib_name );
+
+ $contrib_profile = esc_url( $contrib_details['profile'] );
+ $contrib_avatar = esc_url( add_query_arg( 's', '36', $contrib_details['avatar'] ) );
+
+ echo "
{$contrib_name} ";
+ }
+ ?>
+
+ donate_link ) ) { ?>
+
+
+
+
+
+ requires_php ) ? $api->requires_php : null;
+ $requires_wp = isset( $api->requires ) ? $api->requires : null;
+
+ $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, '<=' ) );
+
+ if ( ! $compatible_php ) {
+ echo '
';
+ _e( 'Error: This plugin requires a newer version of PHP.' );
+ if ( current_user_can( 'update_php' ) ) {
+ printf(
+ /* translators: %s: URL to Update PHP page. */
+ ' ' . __( 'Click here to learn more about updating PHP.' ),
+ esc_url( wp_get_update_php_url() )
+ );
+
+ wp_update_php_annotation( '
', '' );
+ } else {
+ echo '
';
+ }
+ echo '
';
+ }
+
+ if ( ! $tested_wp ) {
+ echo '
';
+ _e( 'Warning: This plugin has not been tested with your current version of WordPress.' );
+ echo '
';
+ } elseif ( ! $compatible_wp ) {
+ echo '
';
+ _e( 'Error: This plugin requires a newer version of WordPress.' );
+ if ( current_user_can( 'update_core' ) ) {
+ printf(
+ /* translators: %s: URL to WordPress Updates screen. */
+ ' ' . __( 'Click here to update WordPress.' ),
+ self_admin_url( 'update-core.php' )
+ );
+ }
+ echo '
';
+ }
+
+ 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' );
+
+ $san_section = esc_attr( $section_name );
+
+ $display = ( $section_name === $section ) ? 'block' : 'none';
+
+ echo "\t
\n";
+ echo $content;
+ echo "\t
\n";
+ }
+ echo "
\n";
+ echo "
\n";
+ echo "\n"; // #plugin-information-scrollable
+ echo "\n";
+
+ iframe_footer();
+ exit;
+}
--
cgit