File "plugin-install.php"
Full path: /home/kosmetik/public_html/wp-includes/wp-admin/includes/plugin-install.php
File
size: 23.99 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
function plugins_api($action, $args = array())
{
require ABSPATH . WPINC . '/version.php';
if (is_array($args)) {
$args = (object) $args;
}
if ('query_plugins' === $action) {
if (!isset($args->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);
}
$args = apply_filters('plugins_api_args', $args, $action);
$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)) {
if (!wp_is_json_request()) {
trigger_error(sprintf(__('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);
}
$request = wp_remote_get($http_url, $http_args);
}
if (is_wp_error($request)) {
$res = new WP_Error('plugins_api_failed', sprintf(__('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/')), $request->get_error_message());
} else {
$res = json_decode(wp_remote_retrieve_body($request), true);
if (is_array($res)) {
$res = (object) $res;
} elseif (null === $res) {
$res = new WP_Error('plugins_api_failed', sprintf(__('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/')), 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;
}
return apply_filters('plugins_api_result', $res, $action, $args);
}
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;
}
function install_dashboard()
{
?>
<p>
<?php
printf(__('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>
<?php
display_plugins_table();
?>
<div class="plugins-popular-tags-wrapper">
<h2><?php
_e('Popular tags');
?></h2>
<p><?php
_e('You may also browse based on the most popular tags in the Plugin Directory:');
?></p>
<?php
$api_tags = install_popular_tags();
echo '<p class="popular-tags">';
if (is_wp_error($api_tags)) {
echo $api_tags->get_error_message();
} else {
$tags = array();
foreach ((array) $api_tags as $tag) {
$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']);
$tags[$tag['name']] = (object) $data;
}
echo wp_generate_tag_cloud($tags, array('single_text' => __('%s plugin'), 'multiple_text' => __('%s plugins')));
}
echo '</p><br class="clear" /></div>';
}
function install_search_form($deprecated = true)
{
$type = isset($_REQUEST['type']) ? wp_unslash($_REQUEST['type']) : 'term';
$term = isset($_REQUEST['s']) ? wp_unslash($_REQUEST['s']) : '';
?>
<form class="search-form search-plugins" method="get">
<input type="hidden" name="tab" value="search" />
<label class="screen-reader-text" for="typeselector"><?php
_e('Search plugins by:');
?></label>
<select name="type" id="typeselector">
<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>
</select>
<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...');
?>" />
<?php
submit_button(__('Search Plugins'), 'hide-if-js', false, false, array('id' => 'search-submit'));
?>
</form>
<?php
}
function install_plugins_upload()
{
?>
<div class="upload-plugin">
<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>
<form method="post" enctype="multipart/form-data" class="wp-upload-form" action="<?php
echo self_admin_url('update.php?action=upload-plugin');
?>">
<?php
wp_nonce_field('plugin-upload');
?>
<label class="screen-reader-text" for="pluginzip"><?php
_e('Plugin zip file');
?></label>
<input type="file" id="pluginzip" name="pluginzip" accept=".zip" />
<?php
submit_button(__('Install Now'), '', 'install-plugin-submit', false);
?>
</form>
</div>
<?php
}
function install_plugins_favorites_form()
{
$user = get_user_option('wporg_favorites');
$action = 'save_wporg_username_' . get_current_user_id();
?>
<p><?php
_e('If you have marked plugins as favorites on WordPress.org, you can browse them here.');
?></p>
<form method="get">
<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');
?>" />
<input type="hidden" id="wporg-username-nonce" name="_wpnonce" value="<?php
echo esc_attr(wp_create_nonce($action));
?>" />
</p>
</form>
<?php
}
function display_plugins_table()
{
global $wp_list_table;
switch (current_filter()) {
case 'install_plugins_favorites':
if (empty($_GET['user']) && !get_user_option('wporg_favorites')) {
return;
}
break;
case 'install_plugins_recommended':
echo '<p>' . __('These suggestions are based on the plugins you and other users have installed.') . '</p>';
break;
case 'install_plugins_beta':
printf('<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;
}
?>
<form id="plugin-filter" method="post">
<?php
$wp_list_table->display();
?>
</form>
<?php
}
function install_plugin_install_status($api, $loop = false)
{
if (is_array($api)) {
$api = (object) $api;
}
$status = 'install';
$url = false;
$update_file = false;
$version = '';
$update_plugins = get_site_transient('update_plugins');
if (isset($update_plugins->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);
$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 (!$loop) {
delete_site_transient('update_plugins');
wp_update_plugins();
return install_plugin_install_status($api, true);
}
}
}
} else {
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');
}
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'));
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';
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'];
?>
<style type="text/css">
#plugin-information-title.with-banner {
background-image: url( <?php
echo esc_url($low);
?> );
}
@media only screen and ( -webkit-min-device-pixel-ratio: 1.5 ) {
#plugin-information-title.with-banner {
background-image: url( <?php
echo esc_url($high);
?> );
}
}
</style>
<?php
}
echo '<div id="plugin-information-scrollable">';
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";
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<a name='{$san_section}' href='{$href}' {$class}>{$title}</a>\n";
}
echo "</div>\n";
?>
<div id="<?php
echo $_tab;
?>-content" class='<?php
echo $_with_banner;
?>'>
<div class="fyi">
<ul>
<?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
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
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>
<?php
}
if (!empty($api->requires_php)) {
?>
<li>
<strong><?php
_e('Requires PHP Version:');
?></strong>
<?php
printf(__('%s or higher'), $api->requires_php);
?>
</li>
<?php
}
if (isset($api->active_installs)) {
?>
<li><strong><?php
_e('Active Installations:');
?></strong>
<?php
if ($api->active_installs >= 1000000) {
$active_installs_millions = floor($api->active_installs / 1000000);
printf(_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>
<?php
}
if (!empty($api->slug) && empty($api->external)) {
?>
<li><a target="_blank" href="<?php
echo __('https://wordpress.org/plugins/') . $api->slug;
?>/"><?php
_e('WordPress.org Plugin Page »');
?></a></li>
<?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
}
?>
</ul>
<?php
if (!empty($api->rating)) {
?>
<h3><?php
_e('Average Rating');
?></h3>
<?php
wp_star_rating(array('rating' => $api->rating, 'type' => 'percent', 'number' => $api->num_ratings));
?>
<p aria-hidden="true" class="fyi-description">
<?php
printf(_n('(based on %s rating)', '(based on %s ratings)', $api->num_ratings), number_format_i18n($api->num_ratings));
?>
</p>
<?php
}
if (!empty($api->ratings) && array_sum((array) $api->ratings) > 0) {
?>
<h3><?php
_e('Reviews');
?></h3>
<p class="fyi-description"><?php
_e('Read all reviews on WordPress.org or write your own!');
?></p>
<?php
foreach ($api->ratings as $key => $ratecount) {
$_rating = $api->num_ratings ? $ratecount / $api->num_ratings : 0;
$aria_label = esc_attr(sprintf(_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)));
?>
<div class="counter-container">
<span class="counter-label">
<?php
printf('<a href="%s" target="_blank" aria-label="%s">%s</a>', "https://wordpress.org/support/plugin/{$api->slug}/reviews/?filter={$key}", $aria_label, sprintf(_n('%d star', '%d stars', $key), $key));
?>
</span>
<span class="counter-back">
<span class="counter-bar" style="width: <?php
echo 92 * $_rating;
?>px;"></span>
</span>
<span class="counter-count" aria-hidden="true"><?php
echo number_format_i18n($ratecount);
?></span>
</div>
<?php
}
}
if (!empty($api->contributors)) {
?>
<h3><?php
_e('Contributors');
?></h3>
<ul class="contributors">
<?php
foreach ((array) $api->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 "<li><a href='{$contrib_profile}' target='_blank'><img src='{$contrib_avatar}' width='18' height='18' alt='' />{$contrib_name}</a></li>";
}
?>
</ul>
<?php
if (!empty($api->donate_link)) {
?>
<a target="_blank" href="<?php
echo esc_url($api->donate_link);
?>"><?php
_e('Donate to this plugin »');
?></a>
<?php
}
?>
<?php
}
?>
</div>
<div id="section-holder">
<?php
$requires_php = isset($api->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 '<div class="notice notice-error notice-alt"><p>';
_e('<strong>Error:</strong> This plugin <strong>requires a newer version of PHP</strong>.');
if (current_user_can('update_php')) {
printf(' ' . __('<a href="%s" target="_blank">Click here to learn more about updating PHP</a>.'), esc_url(wp_get_update_php_url()));
wp_update_php_annotation('</p><p><em>', '</em>');
} else {
echo '</p>';
}
echo '</div>';
}
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>';
_e('<strong>Error:</strong> This plugin <strong>requires a newer version of WordPress</strong>.');
if (current_user_can('update_core')) {
printf(' ' . __('<a href="%s" target="_parent">Click here to update WordPress</a>.'), self_admin_url('update-core.php'));
}
echo '</p></div>';
}
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<div id='section-{$san_section}' class='section' style='display: {$display};'>\n";
echo $content;
echo "\t</div>\n";
}
echo "</div>\n";
echo "</div>\n";
echo "</div>\n";
echo "<div id='{$tab}-footer'>\n";
if (!empty($api->download_link) && (current_user_can('install_plugins') || current_user_can('update_plugins'))) {
$status = install_plugin_install_status($api);
switch ($status['status']) {
case 'install':
if ($status['url']) {
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'));
}
}
break;
case 'update_available':
if ($status['url']) {
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'));
}
}
break;
case 'newer_installed':
echo '<a class="button button-primary right disabled">' . sprintf(__('Newer Version (%s) Installed'), $status['version']) . '</a>';
break;
case 'latest_installed':
echo '<a class="button button-primary right disabled">' . __('Latest Version Installed') . '</a>';
break;
}
}
echo "</div>\n";
iframe_footer();
exit;
}