license = sanitize_title($_GET['license']); } if ( isset($_GET['item_id']) ) { $this->item_id = sanitize_title($_GET['item_id']); } if ( isset($_GET['plugin']) ) { $plugin = sanitize_title($_GET['plugin']); switch ($plugin) { case "rsssl_pro": $rsssl_admin_url = is_multisite() ? network_admin_url('settings.php') : admin_url("options-general.php"); $this->slug = is_multisite() ? "really-simple-ssl-pro-multisite/really-simple-ssl-pro-multisite.php" : "really-simple-ssl-pro/really-simple-ssl-pro.php"; $this->plugin_name = "Really Simple SSL Pro"; $this->plugin_constant = "rsssl_pro_version"; $this->prefix = "rsssl_"; $this->api_url = "https://really-simple-ssl.com"; $this->dashboard_url = add_query_arg(["page" => "really-simple-security"], $rsssl_admin_url ); $this->account_url = 'https://really-simple-ssl.com/account'; $this->instructions = 'https://really-simple-ssl.com/knowledge-base/install-really-simple-ssl-pro'; break; case "burst_pro": $this->slug = "burst-pro/burst-pro.php"; $this->plugin_name = "Burst"; $this->plugin_constant = "burst_pro"; $this->prefix = "burst_"; $this->api_url = "https://burst-statistics.com"; $this->dashboard_url = add_query_arg(["page" => "burst"], admin_url( "index.php" )); $this->account_url = 'https://burst-statistics.com/account'; $this->instructions = 'https://burst-statistics.com/how-to-install-burst-premium'; break; case "cmplz_pro": default: $this->slug = is_multisite() ? "complianz-gdpr-premium-multisite/complianz-gpdr-premium.php" : "complianz-gdpr-premium/complianz-gpdr-premium.php"; $this->plugin_name = "Complianz"; $this->plugin_constant = "cmplz_premium"; $this->prefix = "cmplz_"; $this->api_url = "https://complianz.io"; $this->dashboard_url = add_query_arg(["page" => "complianz"], admin_url("admin.php") ); $this->account_url = 'https://complianz.io/account'; $this->instructions = 'https://complianz.io/how-to-install-complianz-gdpr-premium-plugin'; break; } } $this->steps = array( array( 'action' => 'rsp_upgrade_destination_clear', 'doing' => __("Checking if plugin folder exists...", "really-simple-ssl"), 'success' => __("Able to create destination folder", "really-simple-ssl"), 'error' => __("Destination folder already exists", "really-simple-ssl"), 'type' => 'folder', ), array( 'action' => 'rsp_upgrade_activate_license', 'doing' => __("Validating license...", "really-simple-ssl"), 'success' => __("License valid", "really-simple-ssl"), 'error' => __("License invalid", "really-simple-ssl"), 'type' => 'license', ), array( 'action' => 'rsp_upgrade_package_information', 'doing' => __("Retrieving package information...", "really-simple-ssl"), 'success' => __("Package information retrieved", "really-simple-ssl"), 'error' => __("Failed to gather package information", "really-simple-ssl"), 'type' => 'package', ), array( 'action' => 'rsp_upgrade_install_plugin', 'doing' => __("Installing plugin...", "really-simple-ssl"), 'success' => __("Plugin installed", "really-simple-ssl"), 'error' => __("Failed to install plugin", "really-simple-ssl"), 'type' => 'install', ), array( 'action' => 'rsp_upgrade_activate_plugin', 'doing' => __("Activating plugin...", "really-simple-ssl"), 'success' => __("Plugin activated", "really-simple-ssl"), 'error' => __("Failed to activate plugin", "really-simple-ssl"), 'type' => 'activate', ) ); // Set up hooks. $this->init(); } private function get_suggested_plugin($attr){ $plugin_to_be_installed = $current_plugin = false; if (isset($_GET['plugin']) && $_GET['plugin']==='cmplz_pro' ) { $plugin_to_be_installed = 'complianz-gdpr'; } else if (isset($_GET['plugin']) && $_GET['plugin']==='rsssl_pro' ) { $plugin_to_be_installed = 'really-simple-ssl'; } else if (isset($_GET['plugin']) && $_GET['plugin']==='burst_pro' ) { $plugin_to_be_installed = 'burst'; } $path = __FILE__; if (strpos($path, 'really-simple-ssl')!==false) { $current_plugin = 'really-simple-ssl'; } else if (strpos($path, 'complianz')!==false){ $current_plugin = 'complianz-gdpr'; } else if (strpos($path, 'burst')!==false){ $current_plugin = 'burst'; } $dir_url = plugin_dir_url(__FILE__).'img/'; $suggestion = $fallback_suggestion = [ 'icon_url' => $dir_url.'burst.png', 'constant' => 'burst_version', 'title' => 'Burst – Privacy Friendly Statistics', 'description_short' => __('Self-hosted and privacy-friendly analytics tool.', "really-simple-ssl"), 'disabled' => '', 'button_text' => __("Install", "really-simple-ssl"), 'slug' => 'burst-statistics', 'description' => __("Get detailed insights into visitors' behaviour with Burst Statistics, the privacy-friendly analytics dashboard from Really Simple Plugins.", "really-simple-ssl"), 'install_url' => 'burst%20statistics%20hesseldejong%20%20burst-statistics.com&tab=search&type=term', ]; if ( $plugin_to_be_installed === 'really-simple-ssl' || $plugin_to_be_installed === 'burst' ){ $suggestion = [ 'icon_url' => $dir_url.'complianz-gdpr.png', 'constant' => 'cmplz_version', 'title' => 'Complianz GDPR/CCPA', 'description_short' => __('GDPR/CCPA Privacy Suite', "really-simple-ssl"), 'disabled' => '', 'button_text' => __("Install", "really-simple-ssl"), 'slug' => 'complianz-gdpr', 'description' => __('Configure your Cookie Notice, Consent Management and Cookie Policy with our Wizard and Cookie Scan. Supports GDPR, DSGVO, TTDSG, LGPD, POPIA, RGPD, CCPA and PIPEDA.', "really-simple-ssl"), 'install_url' => 'complianz+gdpr+POPIA&tab=search&type=term', ]; if ($current_plugin==='complianz-gdpr') { $suggestion = $fallback_suggestion; } } if ( $plugin_to_be_installed === 'complianz-gdpr' ){ $suggestion = [ 'icon_url' => $dir_url.'really-simple-ssl.png', 'constant' => 'rsssl_version', 'title' => 'Really Simple SSL', 'description_short' => __('One click SSL optimization', "really-simple-ssl"), 'disabled' => '', 'button_text' => __("Install", "really-simple-ssl"), 'slug' => 'really-simple-ssl', 'description' => __('Really Simple SSL automatically detects your settings and configures your website to run over HTTPS. To keep it lightweight, we kept the options to a minimum. Your website will move to SSL with one click.', "really-simple-ssl"), 'install_url' => 'ssl%20really%20simple%20plugins%20complianz+HSTS&tab=search&type=term', ]; if ( $current_plugin==='really-simple-ssl' ) { $suggestion = $fallback_suggestion; } } $admin_url = is_multisite() ? network_admin_url('plugin-install.php?s=') : admin_url('plugin-install.php?s='); $suggestion['install_url'] = $admin_url.$suggestion['install_url']; if (defined($suggestion['constant'])){ $suggestion['install_url'] = '#'; $suggestion['button_text'] = __("Installed", "really-simple-ssl"); $suggestion['disabled'] = 'disabled'; } return $suggestion[$attr]; } /** * Set up WordPress filters to hook into WP's update process. * * @uses add_filter() * * @return void */ public function init() { add_action( 'admin_footer', array( $this, 'print_install_modal' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets') ); add_action( 'wp_ajax_rsp_upgrade_destination_clear', array($this, 'process_ajax_destination_clear') ); add_action( 'wp_ajax_rsp_upgrade_activate_license', array($this, 'process_ajax_activate_license') ); add_action( 'wp_ajax_rsp_upgrade_package_information', array($this, 'process_ajax_package_information') ); add_action( 'wp_ajax_rsp_upgrade_install_plugin', array($this, 'process_ajax_install_plugin') ); add_action( 'wp_ajax_rsp_upgrade_activate_plugin', array($this, 'process_ajax_activate_plugin') ); } /** * Enqueue javascript * @todo minification */ public function enqueue_assets( $hook ) { if ( $hook === "plugins.php" && isset($_GET['install_pro']) ) { $minified = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min'; wp_register_style( 'rsp-upgrade-css', plugin_dir_url(__FILE__) . "upgrade-to-pro$minified.css", false, $this->version ); wp_enqueue_style( 'rsp-upgrade-css' ); wp_enqueue_script( 'rsp-ajax-js', plugin_dir_url(__FILE__) . "ajax$minified.js", array(), $this->version, true ); wp_enqueue_script( 'rsp-upgrade-js', plugin_dir_url(__FILE__) . "upgrade-to-pro$minified.js", array(), $this->version, true ); wp_localize_script( 'rsp-upgrade-js', 'rsp_upgrade', array( 'steps' => $this->steps, 'admin_url' => admin_url( 'admin-ajax.php' ), 'token' => wp_create_nonce( 'upgrade_to_pro_nonce'), 'cmplz_nonce' => wp_create_nonce( 'complianz_save'), 'finished_title' => __("Installation finished", "really-simple-ssl"), ) ); } } /** * Calls the API and, if successfull, returns the object delivered by the API. * * @uses get_bloginfo() * @uses wp_remote_post() * @uses is_wp_error() * * @return false|object */ private function api_request() { if ( !rsssl_user_can_manage() ) { return false; } global $edd_plugin_url_available; // Do a quick status check on this domain if we haven't already checked it. $store_hash = md5( $this->api_url ); if ( ! is_array( $edd_plugin_url_available ) || ! isset( $edd_plugin_url_available[ $store_hash ] ) ) { $test_url_parts = parse_url( $this->api_url ); $port = ! empty( $test_url_parts['port'] ) ? ':' . $test_url_parts['port'] : ''; $host = ! empty( $test_url_parts['host'] ) ? $test_url_parts['host'] : ''; $test_url = 'https://' . $host . $port; $response = wp_remote_get( $test_url, array( 'timeout' => $this->health_check_timeout, 'sslverify' => true ) ); $edd_plugin_url_available[ $store_hash ] = is_wp_error( $response ) ? false : true; } if ( false === $edd_plugin_url_available[ $store_hash ] ) { return false; } if( $this->api_url == trailingslashit ( home_url() ) ) { return false; // Don't allow a plugin to ping itself } $api_params = array( 'edd_action' => 'get_version', 'license' => ! empty( $this->license ) ? $this->license : '', 'item_id' => isset( $this->item_id ) ? $this->item_id : false, 'url' => home_url(), ); $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => true, 'body' => $api_params ) ); if ( ! is_wp_error( $request ) ) { $request = json_decode( wp_remote_retrieve_body( $request ) ); } if ( $request && isset( $request->sections ) ) { $request->sections = maybe_unserialize( $request->sections ); } else { $request = false; } if ( $request && isset( $request->banners ) ) { $request->banners = maybe_unserialize( $request->banners ); } if ( $request && isset( $request->icons ) ) { $request->icons = maybe_unserialize( $request->icons ); } if( ! empty( $request->sections ) ) { foreach( $request->sections as $key => $section ) { $request->$key = (array) $section; } } return $request; } /** * Prints a modal with bullets for each step of the install process */ public function print_install_modal() { if ( !rsssl_user_can_manage() ) { return false; } if ( is_admin() && isset($_GET['install_pro']) && isset($_GET['license']) && isset($_GET['item_id']) && isset($_GET['plugin']) ) { $dashboard_url = $this->dashboard_url; $plugins_url = admin_url( "plugins.php" ); ?>