File "update.php"

Full path: /home/kosmetik/public_html/wp-includes/wp-admin/includes/update.php
File size: 22.62 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

function get_preferred_from_update_core()
{
    $updates = get_core_updates();
    if (!is_array($updates)) {
        return false;
    }
    if (empty($updates)) {
        return (object) array('response' => 'latest');
    }
    return $updates[0];
}
function get_core_updates($options = array())
{
    $options = array_merge(array('available' => true, 'dismissed' => false), $options);
    $dismissed = get_site_option('dismissed_update_core');
    if (!is_array($dismissed)) {
        $dismissed = array();
    }
    $from_api = get_site_transient('update_core');
    if (!isset($from_api->updates) || !is_array($from_api->updates)) {
        return false;
    }
    $updates = $from_api->updates;
    $result = array();
    foreach ($updates as $update) {
        if ('autoupdate' === $update->response) {
            continue;
        }
        if (array_key_exists($update->current . '|' . $update->locale, $dismissed)) {
            if ($options['dismissed']) {
                $update->dismissed = true;
                $result[] = $update;
            }
        } else {
            if ($options['available']) {
                $update->dismissed = false;
                $result[] = $update;
            }
        }
    }
    return $result;
}
function find_core_auto_update()
{
    $updates = get_site_transient('update_core');
    if (!$updates || empty($updates->updates)) {
        return false;
    }
    require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
    $auto_update = false;
    $upgrader = new WP_Automatic_Updater();
    foreach ($updates->updates as $update) {
        if ('autoupdate' !== $update->response) {
            continue;
        }
        if (!$upgrader->should_update('core', $update, ABSPATH)) {
            continue;
        }
        if (!$auto_update || version_compare($update->current, $auto_update->current, '>')) {
            $auto_update = $update;
        }
    }
    return $auto_update;
}
function get_core_checksums($version, $locale)
{
    $http_url = 'http://api.wordpress.org/core/checksums/1.0/?' . http_build_query(compact('version', 'locale'), null, '&');
    $url = $http_url;
    $ssl = wp_http_supports(array('ssl'));
    if ($ssl) {
        $url = set_url_scheme($url, 'https');
    }
    $options = array('timeout' => wp_doing_cron() ? 30 : 3);
    $response = wp_remote_get($url, $options);
    if ($ssl && is_wp_error($response)) {
        trigger_error(sprintf(__('An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;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);
        $response = wp_remote_get($http_url, $options);
    }
    if (is_wp_error($response) || 200 != wp_remote_retrieve_response_code($response)) {
        return false;
    }
    $body = trim(wp_remote_retrieve_body($response));
    $body = json_decode($body, true);
    if (!is_array($body) || !isset($body['checksums']) || !is_array($body['checksums'])) {
        return false;
    }
    return $body['checksums'];
}
function dismiss_core_update($update)
{
    $dismissed = get_site_option('dismissed_update_core');
    $dismissed[$update->current . '|' . $update->locale] = true;
    return update_site_option('dismissed_update_core', $dismissed);
}
function undismiss_core_update($version, $locale)
{
    $dismissed = get_site_option('dismissed_update_core');
    $key = $version . '|' . $locale;
    if (!isset($dismissed[$key])) {
        return false;
    }
    unset($dismissed[$key]);
    return update_site_option('dismissed_update_core', $dismissed);
}
function find_core_update($version, $locale)
{
    $from_api = get_site_transient('update_core');
    if (!isset($from_api->updates) || !is_array($from_api->updates)) {
        return false;
    }
    $updates = $from_api->updates;
    foreach ($updates as $update) {
        if ($update->current == $version && $update->locale == $locale) {
            return $update;
        }
    }
    return false;
}
function core_update_footer($msg = '')
{
    if (!current_user_can('update_core')) {
        return sprintf(__('Version %s'), get_bloginfo('version', 'display'));
    }
    $cur = get_preferred_from_update_core();
    if (!is_object($cur)) {
        $cur = new stdClass();
    }
    if (!isset($cur->current)) {
        $cur->current = '';
    }
    if (!isset($cur->response)) {
        $cur->response = '';
    }
    require ABSPATH . WPINC . '/version.php';
    $is_development_version = preg_match('/alpha|beta|RC/', $wp_version);
    if ($is_development_version) {
        return sprintf(__('You are using a development version (%1$s). Cool! Please <a href="%2$s">stay updated</a>.'), get_bloginfo('version', 'display'), network_admin_url('update-core.php'));
    }
    switch ($cur->response) {
        case 'upgrade':
            return sprintf('<strong><a href="%s">%s</a></strong>', network_admin_url('update-core.php'), sprintf(__('Get Version %s'), $cur->current));
        case 'latest':
        default:
            return sprintf(__('Version %s'), get_bloginfo('version', 'display'));
    }
}
function update_nag()
{
    if (is_multisite() && !current_user_can('update_core')) {
        return false;
    }
    global $pagenow;
    if ('update-core.php' === $pagenow) {
        return;
    }
    $cur = get_preferred_from_update_core();
    if (!isset($cur->response) || 'upgrade' !== $cur->response) {
        return false;
    }
    $version_url = sprintf(esc_url(__('https://wordpress.org/support/wordpress-version/version-%s/')), sanitize_title($cur->current));
    if (current_user_can('update_core')) {
        $msg = sprintf(__('<a href="%1$s">WordPress %2$s</a> is available! <a href="%3$s" aria-label="%4$s">Please update now</a>.'), $version_url, $cur->current, network_admin_url('update-core.php'), esc_attr__('Please update WordPress now'));
    } else {
        $msg = sprintf(__('<a href="%1$s">WordPress %2$s</a> is available! Please notify the site administrator.'), $version_url, $cur->current);
    }
    echo "<div class='update-nag notice notice-warning inline'>{$msg}</div>";
}
function update_right_now_message()
{
    $theme_name = wp_get_theme();
    if (current_user_can('switch_themes')) {
        $theme_name = sprintf('<a href="themes.php">%1$s</a>', $theme_name);
    }
    $msg = '';
    if (current_user_can('update_core')) {
        $cur = get_preferred_from_update_core();
        if (isset($cur->response) && 'upgrade' === $cur->response) {
            $msg .= sprintf('<a href="%s" class="button" aria-describedby="wp-version">%s</a> ', network_admin_url('update-core.php'), sprintf(__('Update to %s'), $cur->current ? $cur->current : __('Latest')));
        }
    }
    $content = __('WordPress %1$s running %2$s theme.');
    $content = apply_filters('update_right_now_text', $content);
    $msg .= sprintf('<span id="wp-version">' . $content . '</span>', get_bloginfo('version', 'display'), $theme_name);
    echo "<p id='wp-version-message'>{$msg}</p>";
}
function get_plugin_updates()
{
    $all_plugins = get_plugins();
    $upgrade_plugins = array();
    $current = get_site_transient('update_plugins');
    foreach ((array) $all_plugins as $plugin_file => $plugin_data) {
        if (isset($current->response[$plugin_file])) {
            $upgrade_plugins[$plugin_file] = (object) $plugin_data;
            $upgrade_plugins[$plugin_file]->update = $current->response[$plugin_file];
        }
    }
    return $upgrade_plugins;
}
function wp_plugin_update_rows()
{
    if (!current_user_can('update_plugins')) {
        return;
    }
    $plugins = get_site_transient('update_plugins');
    if (isset($plugins->response) && is_array($plugins->response)) {
        $plugins = array_keys($plugins->response);
        foreach ($plugins as $plugin_file) {
            add_action("after_plugin_row_{$plugin_file}", 'wp_plugin_update_row', 10, 2);
        }
    }
}
function wp_plugin_update_row($file, $plugin_data)
{
    $current = get_site_transient('update_plugins');
    if (!isset($current->response[$file])) {
        return false;
    }
    $response = $current->response[$file];
    $plugins_allowedtags = array('a' => array('href' => array(), 'title' => array()), 'abbr' => array('title' => array()), 'acronym' => array('title' => array()), 'code' => array(), 'em' => array(), 'strong' => array());
    $plugin_name = wp_kses($plugin_data['Name'], $plugins_allowedtags);
    $details_url = self_admin_url('plugin-install.php?tab=plugin-information&plugin=' . $response->slug . '&section=changelog&TB_iframe=true&width=600&height=800');
    $wp_list_table = _get_list_table('WP_Plugins_List_Table', array('screen' => get_current_screen()));
    if (is_network_admin() || !is_multisite()) {
        if (is_network_admin()) {
            $active_class = is_plugin_active_for_network($file) ? ' active' : '';
        } else {
            $active_class = is_plugin_active($file) ? ' active' : '';
        }
        $requires_php = isset($response->requires_php) ? $response->requires_php : null;
        $compatible_php = is_php_version_compatible($requires_php);
        $notice_type = $compatible_php ? 'notice-warning' : 'notice-error';
        printf('<tr class="plugin-update-tr%s" id="%s" data-slug="%s" data-plugin="%s">' . '<td colspan="%s" class="plugin-update colspanchange">' . '<div class="update-message notice inline %s notice-alt"><p>', $active_class, esc_attr($response->slug . '-update'), esc_attr($response->slug), esc_attr($file), esc_attr($wp_list_table->get_column_count()), $notice_type);
        if (!current_user_can('update_plugins')) {
            printf(__('There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a>.'), $plugin_name, esc_url($details_url), sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"', esc_attr(sprintf(__('View %1$s version %2$s details'), $plugin_name, $response->new_version))), esc_attr($response->new_version));
        } elseif (empty($response->package)) {
            printf(__('There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a>. <em>Automatic update is unavailable for this plugin.</em>'), $plugin_name, esc_url($details_url), sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"', esc_attr(sprintf(__('View %1$s version %2$s details'), $plugin_name, $response->new_version))), esc_attr($response->new_version));
        } else {
            if ($compatible_php) {
                printf(__('There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a> or <a href="%5$s" %6$s>update now</a>.'), $plugin_name, esc_url($details_url), sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"', esc_attr(sprintf(__('View %1$s version %2$s details'), $plugin_name, $response->new_version))), esc_attr($response->new_version), wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=') . $file, 'upgrade-plugin_' . $file), sprintf('class="update-link" aria-label="%s"', esc_attr(sprintf(_x('Update %s now', 'plugin'), $plugin_name))));
            } else {
                printf(__('There is a new version of %1$s available, but it doesn&#8217;t work with your version of PHP. <a href="%2$s" %3$s>View version %4$s details</a> or <a href="%5$s">learn more about updating PHP</a>.'), $plugin_name, esc_url($details_url), sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"', esc_attr(sprintf(__('View %1$s version %2$s details'), $plugin_name, $response->new_version))), esc_attr($response->new_version), esc_url(wp_get_update_php_url()));
                wp_update_php_annotation('<br><em>', '</em>');
            }
        }
        do_action("in_plugin_update_message-{$file}", $plugin_data, $response);
        echo '</p></div></td></tr>';
    }
}
function get_theme_updates()
{
    $current = get_site_transient('update_themes');
    if (!isset($current->response)) {
        return array();
    }
    $update_themes = array();
    foreach ($current->response as $stylesheet => $data) {
        $update_themes[$stylesheet] = wp_get_theme($stylesheet);
        $update_themes[$stylesheet]->update = $data;
    }
    return $update_themes;
}
function wp_theme_update_rows()
{
    if (!current_user_can('update_themes')) {
        return;
    }
    $themes = get_site_transient('update_themes');
    if (isset($themes->response) && is_array($themes->response)) {
        $themes = array_keys($themes->response);
        foreach ($themes as $theme) {
            add_action("after_theme_row_{$theme}", 'wp_theme_update_row', 10, 2);
        }
    }
}
function wp_theme_update_row($theme_key, $theme)
{
    $current = get_site_transient('update_themes');
    if (!isset($current->response[$theme_key])) {
        return false;
    }
    $response = $current->response[$theme_key];
    $details_url = add_query_arg(array('TB_iframe' => 'true', 'width' => 1024, 'height' => 800), $current->response[$theme_key]['url']);
    $wp_list_table = _get_list_table('WP_MS_Themes_List_Table');
    $active = $theme->is_allowed('network') ? ' active' : '';
    $requires_wp = isset($response['requires']) ? $response['requires'] : null;
    $requires_php = isset($response['requires_php']) ? $response['requires_php'] : null;
    $compatible_wp = is_wp_version_compatible($requires_wp);
    $compatible_php = is_php_version_compatible($requires_php);
    printf('<tr class="plugin-update-tr%s" id="%s" data-slug="%s">' . '<td colspan="%s" class="plugin-update colspanchange">' . '<div class="update-message notice inline notice-warning notice-alt"><p>', $active, esc_attr($theme->get_stylesheet() . '-update'), esc_attr($theme->get_stylesheet()), $wp_list_table->get_column_count());
    if ($compatible_wp && $compatible_php) {
        if (!current_user_can('update_themes')) {
            printf(__('There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a>.'), $theme['Name'], esc_url($details_url), sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"', esc_attr(sprintf(__('View %1$s version %2$s details'), $theme['Name'], $response['new_version']))), $response['new_version']);
        } elseif (empty($response['package'])) {
            printf(__('There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a>. <em>Automatic update is unavailable for this theme.</em>'), $theme['Name'], esc_url($details_url), sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"', esc_attr(sprintf(__('View %1$s version %2$s details'), $theme['Name'], $response['new_version']))), $response['new_version']);
        } else {
            printf(__('There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a> or <a href="%5$s" %6$s>update now</a>.'), $theme['Name'], esc_url($details_url), sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"', esc_attr(sprintf(__('View %1$s version %2$s details'), $theme['Name'], $response['new_version']))), $response['new_version'], wp_nonce_url(self_admin_url('update.php?action=upgrade-theme&theme=') . $theme_key, 'upgrade-theme_' . $theme_key), sprintf('class="update-link" aria-label="%s"', esc_attr(sprintf(_x('Update %s now', 'theme'), $theme['Name']))));
        }
    } else {
        if (!$compatible_wp && !$compatible_php) {
            printf(__('There is a new version of %s available, but it doesn&#8217;t work with your versions of WordPress and PHP.'), $theme['Name']);
            if (current_user_can('update_core') && current_user_can('update_php')) {
                printf(' ' . __('<a href="%1$s">Please update WordPress</a>, and then <a href="%2$s">learn more about updating PHP</a>.'), self_admin_url('update-core.php'), esc_url(wp_get_update_php_url()));
                wp_update_php_annotation('</p><p><em>', '</em>');
            } elseif (current_user_can('update_core')) {
                printf(' ' . __('<a href="%s">Please update WordPress</a>.'), self_admin_url('update-core.php'));
            } elseif (current_user_can('update_php')) {
                printf(' ' . __('<a href="%s">Learn more about updating PHP</a>.'), esc_url(wp_get_update_php_url()));
                wp_update_php_annotation('</p><p><em>', '</em>');
            }
        } elseif (!$compatible_wp) {
            printf(__('There is a new version of %s available, but it doesn&#8217;t work with your version of WordPress.'), $theme['Name']);
            if (current_user_can('update_core')) {
                printf(' ' . __('<a href="%s">Please update WordPress</a>.'), self_admin_url('update-core.php'));
            }
        } elseif (!$compatible_php) {
            printf(__('There is a new version of %s available, but it doesn&#8217;t work with your version of PHP.'), $theme['Name']);
            if (current_user_can('update_php')) {
                printf(' ' . __('<a href="%s">Learn more about updating PHP</a>.'), esc_url(wp_get_update_php_url()));
                wp_update_php_annotation('</p><p><em>', '</em>');
            }
        }
    }
    do_action("in_theme_update_message-{$theme_key}", $theme, $response);
    echo '</p></div></td></tr>';
}
function maintenance_nag()
{
    require ABSPATH . WPINC . '/version.php';
    global $upgrading;
    $nag = isset($upgrading);
    if (!$nag) {
        $failed = get_site_option('auto_core_update_failed');
        $comparison = !empty($failed['critical']) ? '>=' : '>';
        if (isset($failed['attempted']) && version_compare($failed['attempted'], $wp_version, $comparison)) {
            $nag = true;
        }
    }
    if (!$nag) {
        return false;
    }
    if (current_user_can('update_core')) {
        $msg = sprintf(__('An automated WordPress update has failed to complete - <a href="%s">please attempt the update again now</a>.'), 'update-core.php');
    } else {
        $msg = __('An automated WordPress update has failed to complete! Please notify the site administrator.');
    }
    echo "<div class='update-nag notice notice-warning inline'>{$msg}</div>";
}
function wp_print_admin_notice_templates()
{
    ?>
	<script id="tmpl-wp-updates-admin-notice" type="text/html">
		<div <# if ( data.id ) { #>id="{{ data.id }}"<# } #> class="notice {{ data.className }}"><p>{{{ data.message }}}</p></div>
	</script>
	<script id="tmpl-wp-bulk-updates-admin-notice" type="text/html">
		<div id="{{ data.id }}" class="{{ data.className }} notice <# if ( data.errors ) { #>notice-error<# } else { #>notice-success<# } #>">
			<p>
				<# if ( data.successes ) { #>
					<# if ( 1 === data.successes ) { #>
						<# if ( 'plugin' === data.type ) { #>
							<?php 
    printf(__('%s plugin successfully updated.'), '{{ data.successes }}');
    ?>
						<# } else { #>
							<?php 
    printf(__('%s theme successfully updated.'), '{{ data.successes }}');
    ?>
						<# } #>
					<# } else { #>
						<# if ( 'plugin' === data.type ) { #>
							<?php 
    printf(__('%s plugins successfully updated.'), '{{ data.successes }}');
    ?>
						<# } else { #>
							<?php 
    printf(__('%s themes successfully updated.'), '{{ data.successes }}');
    ?>
						<# } #>
					<# } #>
				<# } #>
				<# if ( data.errors ) { #>
					<button class="button-link bulk-action-errors-collapsed" aria-expanded="false">
						<# if ( 1 === data.errors ) { #>
							<?php 
    printf(__('%s update failed.'), '{{ data.errors }}');
    ?>
						<# } else { #>
							<?php 
    printf(__('%s updates failed.'), '{{ data.errors }}');
    ?>
						<# } #>
						<span class="screen-reader-text"><?php 
    _e('Show more details');
    ?></span>
						<span class="toggle-indicator" aria-hidden="true"></span>
					</button>
				<# } #>
			</p>
			<# if ( data.errors ) { #>
				<ul class="bulk-action-errors hidden">
					<# _.each( data.errorMessages, function( errorMessage ) { #>
						<li>{{ errorMessage }}</li>
					<# } ); #>
				</ul>
			<# } #>
		</div>
	</script>
	<?php 
}
function wp_print_update_row_templates()
{
    ?>
	<script id="tmpl-item-update-row" type="text/template">
		<tr class="plugin-update-tr update" id="{{ data.slug }}-update" data-slug="{{ data.slug }}" <# if ( data.plugin ) { #>data-plugin="{{ data.plugin }}"<# } #>>
			<td colspan="{{ data.colspan }}" class="plugin-update colspanchange">
				{{{ data.content }}}
			</td>
		</tr>
	</script>
	<script id="tmpl-item-deleted-row" type="text/template">
		<tr class="plugin-deleted-tr inactive deleted" id="{{ data.slug }}-deleted" data-slug="{{ data.slug }}" <# if ( data.plugin ) { #>data-plugin="{{ data.plugin }}"<# } #>>
			<td colspan="{{ data.colspan }}" class="plugin-update colspanchange">
				<# if ( data.plugin ) { #>
					<?php 
    printf(_x('%s was successfully deleted.', 'plugin'), '<strong>{{{ data.name }}}</strong>');
    ?>
				<# } else { #>
					<?php 
    printf(_x('%s was successfully deleted.', 'theme'), '<strong>{{{ data.name }}}</strong>');
    ?>
				<# } #>
			</td>
		</tr>
	</script>
	<?php 
}
function wp_recovery_mode_nag()
{
    if (!wp_is_recovery_mode()) {
        return;
    }
    $url = wp_login_url();
    $url = add_query_arg('action', WP_Recovery_Mode::EXIT_ACTION, $url);
    $url = wp_nonce_url($url, WP_Recovery_Mode::EXIT_ACTION);
    ?>
	<div class="notice notice-info">
		<p>
			<?php 
    printf(__('You are in recovery mode. This means there may be an error with a theme or plugin. To exit recovery mode, log out or use the Exit button. <a href="%s">Exit Recovery Mode</a>'), esc_url($url));
    ?>
		</p>
	</div>
	<?php 
}
function wp_is_auto_update_enabled_for_type($type)
{
    if (!class_exists('WP_Automatic_Updater')) {
        require_once ABSPATH . 'wp-admin/includes/class-wp-automatic-updater.php';
    }
    $updater = new WP_Automatic_Updater();
    $enabled = !$updater->is_disabled();
    switch ($type) {
        case 'plugin':
            return apply_filters('plugins_auto_update_enabled', $enabled);
        case 'theme':
            return apply_filters('themes_auto_update_enabled', $enabled);
    }
    return false;
}
function wp_is_auto_update_forced_for_item($type, $update, $item)
{
    return apply_filters("auto_update_{$type}", $update, $item);
}
function wp_get_auto_update_message()
{
    $next_update_time = wp_next_scheduled('wp_version_check');
    if (false === $next_update_time) {
        $message = __('Automatic update not scheduled. There may be a problem with WP-Cron.');
    } else {
        $time_to_next_update = human_time_diff((int) $next_update_time);
        $overdue = time() - $next_update_time > 0;
        if ($overdue) {
            $message = sprintf(__('Automatic update overdue by %s. There may be a problem with WP-Cron.'), $time_to_next_update);
        } else {
            $message = sprintf(__('Automatic update scheduled in %s.'), $time_to_next_update);
        }
    }
    return $message;
}