File "class-mixed-content-fixer.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/really-simple-ssl/class-mixed-content-fixer.php
File size: 3.69 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

defined('ABSPATH') or die("you do not have access to this page!");
if (!class_exists('rsssl_admin_mixed_content_fixer')) {
    class rsssl_mixed_content_fixer
    {
        private static $_this;
        public $http_urls = array();
        function __construct()
        {
            if (isset(self::$_this)) {
                wp_die(sprintf(__('%s is a singleton class and you cannot create a second instance.', 'really-simple-ssl'), get_class($this)));
            }
            self::$_this = $this;
            if (!is_admin() && is_ssl() && RSSSL()->rsssl_front_end->autoreplace_insecure_links) {
                $this->fix_mixed_content();
            }
        }
        static function this()
        {
            return self::$_this;
        }
        public function fix_mixed_content()
        {
            if (defined('JSON_REQUEST') && JSON_REQUEST) {
                return;
            }
            if (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST) {
                return;
            }
            $this->build_url_list();
            if (is_admin()) {
                add_action("admin_init", array($this, "start_buffer"), 100);
                add_action("shutdown", array($this, "end_buffer"), 999);
            } else {
                if (RSSSL()->rsssl_front_end->switch_mixed_content_fixer_hook || defined('RSSSL_CONTENT_FIXER_ON_INIT') && RSSSL_CONTENT_FIXER_ON_INIT) {
                    add_action("init", array($this, "start_buffer"));
                } else {
                    add_action("template_redirect", array($this, "start_buffer"));
                }
                add_action("shutdown", array($this, "end_buffer"), 999);
            }
        }
        public function filter_buffer($buffer)
        {
            $buffer = $this->replace_insecure_links($buffer);
            return $buffer;
        }
        public function start_buffer()
        {
            ob_start(array($this, "filter_buffer"));
        }
        public function end_buffer()
        {
            if (ob_get_length()) {
                ob_end_flush();
            }
        }
        public function build_url_list()
        {
            $home = str_replace("https://", "http://", get_option('home'));
            $home_no_www = str_replace("://www.", "://", $home);
            $home_yes_www = str_replace("://", "://www.", $home_no_www);
            $escaped_home = str_replace("/", "\\/", $home);
            $this->http_urls = array($home_yes_www, $home_no_www, $escaped_home, "src='http://", 'src="http://');
        }
        public function replace_insecure_links($str)
        {
            if (substr($str, 0, 5) == "<?xml") {
                return $str;
            }
            $search_array = apply_filters('rlrsssl_replace_url_args', $this->http_urls);
            $ssl_array = str_replace(array("http://", "http:\\/\\/"), array("https://", "https:\\/\\/"), $search_array);
            $str = str_replace($search_array, $ssl_array, $str);
            $pattern = array('/url\\([\'"]?\\K(http:\\/\\/)(?=[^)]+)/i', '/<link [^>]*?href=[\'"]\\K(http:\\/\\/)(?=[^\'"]+)/i', '/<meta property="og:image" [^>]*?content=[\'"]\\K(http:\\/\\/)(?=[^\'"]+)/i', '/<form [^>]*?action=[\'"]\\K(http:\\/\\/)(?=[^\'"]+)/i');
            $str = preg_replace($pattern, 'https://', $str);
            $str = preg_replace_callback('/<img[^\\>]*[^\\>\\S]+srcset=[\'"]\\K((?:[^"\'\\s,]+\\s*(?:\\s+\\d+[wx])(?:,\\s*)?)+)["\']/', array($this, 'replace_src_set'), $str);
            $str = str_replace("<body", '<body data-rsssl=1', $str);
            return apply_filters("rsssl_fixer_output", $str);
        }
        public function replace_src_set($matches)
        {
            return str_replace("http://", "https://", $matches[0]);
        }
    }
}