File "class-wc-plugins-screen-updates.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/includes/admin/plugin-updates/class-wc-plugins-screen-updates.php
File size: 4.87 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

use Automattic\Jetpack\Constants;
if (!defined('ABSPATH')) {
    exit;
}
if (!class_exists('WC_Plugin_Updates')) {
    include_once dirname(__FILE__) . '/class-wc-plugin-updates.php';
}
class WC_Plugins_Screen_Updates extends WC_Plugin_Updates
{
    protected $upgrade_notice = '';
    public function __construct()
    {
        add_action('in_plugin_update_message-woocommerce/woocommerce.php', array($this, 'in_plugin_update_message'), 10, 2);
    }
    public function in_plugin_update_message($args, $response)
    {
        $version_type = Constants::get_constant('WC_SSR_PLUGIN_UPDATE_RELEASE_VERSION_TYPE');
        if (!is_string($version_type)) {
            $version_type = 'none';
        }
        $this->new_version = $response->new_version;
        $this->upgrade_notice = $this->get_upgrade_notice($response->new_version);
        $this->major_untested_plugins = $this->get_untested_plugins($response->new_version, $version_type);
        $current_version_parts = explode('.', Constants::get_constant('WC_VERSION'));
        $new_version_parts = explode('.', $this->new_version);
        if (version_compare($current_version_parts[0] . '.' . $current_version_parts[1], $new_version_parts[0] . '.' . $new_version_parts[1], '=')) {
            return;
        }
        if (!empty($this->major_untested_plugins)) {
            $this->upgrade_notice .= $this->get_extensions_inline_warning_major();
        }
        if (!empty($this->major_untested_plugins)) {
            $this->upgrade_notice .= $this->get_extensions_modal_warning();
            add_action('admin_print_footer_scripts', array($this, 'plugin_screen_modal_js'));
        }
        echo apply_filters('woocommerce_in_plugin_update_message', $this->upgrade_notice ? '</p>' . wp_kses_post($this->upgrade_notice) . '<p class="dummy">' : '');
    }
    protected function get_upgrade_notice($version)
    {
        $transient_name = 'wc_upgrade_notice_' . $version;
        $upgrade_notice = get_transient($transient_name);
        if (false === $upgrade_notice) {
            $response = wp_safe_remote_get('https://plugins.svn.wordpress.org/woocommerce/trunk/readme.txt');
            if (!is_wp_error($response) && !empty($response['body'])) {
                $upgrade_notice = $this->parse_update_notice($response['body'], $version);
                set_transient($transient_name, $upgrade_notice, DAY_IN_SECONDS);
            }
        }
        return $upgrade_notice;
    }
    private function parse_update_notice($content, $new_version)
    {
        $version_parts = explode('.', $new_version);
        $check_for_notices = array($version_parts[0] . '.0', $version_parts[0] . '.0.0', $version_parts[0] . '.' . $version_parts[1], $version_parts[0] . '.' . $version_parts[1] . '.' . $version_parts[2]);
        $notice_regexp = '~==\\s*Upgrade Notice\\s*==\\s*=\\s*(.*)\\s*=(.*)(=\\s*' . preg_quote($new_version) . '\\s*=|$)~Uis';
        $upgrade_notice = '';
        foreach ($check_for_notices as $check_version) {
            if (version_compare(Constants::get_constant('WC_VERSION'), $check_version, '>')) {
                continue;
            }
            $matches = null;
            if (preg_match($notice_regexp, $content, $matches)) {
                $notices = (array) preg_split('~[\\r\\n]+~', trim($matches[2]));
                if (version_compare(trim($matches[1]), $check_version, '=')) {
                    $upgrade_notice .= '<p class="wc_plugin_upgrade_notice">';
                    foreach ($notices as $index => $line) {
                        $upgrade_notice .= preg_replace('~\\[([^\\]]*)\\]\\(([^\\)]*)\\)~', '<a href="${2}">${1}</a>', $line);
                    }
                    $upgrade_notice .= '</p>';
                }
                break;
            }
        }
        return wp_kses_post($upgrade_notice);
    }
    public function plugin_screen_modal_js()
    {
        ?>
		<script>
			( function( $ ) {
				var $update_box = $( '#woocommerce-update' );
				var $update_link = $update_box.find('a.update-link').first();
				var update_url = $update_link.attr( 'href' );

				// Set up thickbox.
				$update_link.removeClass( 'update-link' );
				$update_link.addClass( 'wc-thickbox' );
				$update_link.attr( 'href', '#TB_inline?height=600&width=550&inlineId=wc_untested_extensions_modal' );

				// Trigger the update if the user accepts the modal's warning.
				$( '#wc_untested_extensions_modal .accept' ).on( 'click', function( evt ) {
					evt.preventDefault();
					tb_remove();
					$update_link.removeClass( 'wc-thickbox open-plugin-details-modal' );
					$update_link.addClass( 'update-link' );
					$update_link.attr( 'href', update_url );
					$update_link.trigger( 'click' );
				});

				$( '#wc_untested_extensions_modal .cancel' ).on( 'click', function( evt ) {
					evt.preventDefault();
					tb_remove();
				});
			})( jQuery );
		</script>
		<?php 
        $this->generic_modal_js();
    }
}
new WC_Plugins_Screen_Updates();