*/ /* Copyright 2016 - 2024 - Benjamin Denis (email : contact@seopress.org) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /** * Setup Wizard Class. * * Takes new users through some basic steps to setup SiteSEO. * * @version 3.5.8 */ if ( ! defined('ABSPATH')) { exit; } /** * SITESEO_Admin_Setup_Wizard class. */ class SITESEO_Admin_Setup_Wizard { /** * Current step. * * @var string */ private $step = ''; /** * Parent step. * * @var string */ private $parent = ''; /** * Steps for the setup wizard. * * @var array */ private $steps = []; /** * Hook in tabs. */ public function __construct() { if (apply_filters('siteseo_enable_setup_wizard', true) && current_user_can(siteseo_capability('manage_options', 'Admin_Setup_Wizard'))) { add_action('admin_menu', [$this, 'admin_menus']); add_action('admin_init', [$this, 'setup_wizard']); //Remove notices remove_all_actions( 'admin_notices' ); remove_all_actions( 'all_admin_notices' ); //Disable Query Monitor add_filter('user_has_cap', 'siteseo_disable_qm', 10, 3); //Load our scripts and CSS add_action('admin_enqueue_scripts', [$this, 'enqueue_scripts']); } } /** * Add admin menus/screens. */ public function admin_menus() { add_dashboard_page('', '', siteseo_capability('manage_options', 'menu'), 'siteseo-setup', ''); } /** * Register/enqueue scripts and styles for the Setup Wizard. * * Hooked onto 'admin_enqueue_scripts'. */ public function enqueue_scripts() { $prefix = ''; wp_enqueue_style('siteseo-setup', SITESEO_ASSETS_DIR. '/css/setup' . $prefix . '.css', ['install'], SITESEO_VERSION); wp_register_script('siteseo-migrate-ajax', SITESEO_ASSETS_DIR . '/js/siteseo-migrate' . $prefix . '.js', ['jquery'], SITESEO_VERSION, true); wp_enqueue_media(); wp_register_script('siteseo-media-uploader', SITESEO_ASSETS_DIR . '/js/siteseo-media-uploader' . $prefix . '.js', ['jquery'], SITESEO_VERSION, true); $siteseo_migrate = [ 'siteseo_aio_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_aio_migrate_nonce'), 'siteseo_aio_migration' => admin_url('admin-ajax.php'), ], 'siteseo_yoast_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_yoast_migrate_nonce'), 'siteseo_yoast_migration' => admin_url('admin-ajax.php'), ], 'siteseo_seo_framework_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_seo_framework_migrate_nonce'), 'siteseo_seo_framework_migration' => admin_url('admin-ajax.php'), ], 'siteseo_rk_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_rk_migrate_nonce'), 'siteseo_rk_migration' => admin_url('admin-ajax.php'), ], 'siteseo_squirrly_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_squirrly_migrate_nonce'), 'siteseo_squirrly_migration' => admin_url('admin-ajax.php'), ], 'siteseo_seo_ultimate_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_seo_ultimate_migrate_nonce'), 'siteseo_seo_ultimate_migration' => admin_url('admin-ajax.php'), ], 'siteseo_wp_meta_seo_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_meta_seo_migrate_nonce'), 'siteseo_wp_meta_seo_migration' => admin_url('admin-ajax.php'), ], 'siteseo_premium_seo_pack_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_premium_seo_pack_migrate_nonce'), 'siteseo_premium_seo_pack_migration' => admin_url('admin-ajax.php'), ], 'siteseo_wpseo_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_wpseo_migrate_nonce'), 'siteseo_wpseo_migration' => admin_url('admin-ajax.php'), ], 'siteseo_platinum_seo_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_platinum_seo_migrate_nonce'), 'siteseo_platinum_seo_migration' => admin_url('admin-ajax.php'), ], 'siteseo_smart_crawl_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_smart_crawl_migrate_nonce'), 'siteseo_smart_crawl_migration' => admin_url('admin-ajax.php'), ], 'siteseo_seopressor_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_seopressor_migrate_nonce'), 'siteseo_seopressor_migration' => admin_url('admin-ajax.php'), ], 'siteseo_slim_seo_migrate' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_slim_seo_migrate_nonce'), 'siteseo_slim_seo_migration' => admin_url('admin-ajax.php'), ], 'siteseo_metadata_csv' => [ 'siteseo_nonce' => wp_create_nonce('siteseo_export_csv_metadata_nonce'), 'siteseo_metadata_export' => admin_url('admin-ajax.php'), ], 'i18n' => [ 'migration' => esc_html__('Migration completed!', 'siteseo'), 'export' => esc_html__('Export completed!', 'siteseo'), ], ]; wp_localize_script('siteseo-migrate-ajax', 'siteseoAjaxMigrate', $siteseo_migrate); } /** * Show the setup wizard. */ public function setup_wizard() { if (empty($_GET['page']) || 'siteseo-setup' !== $_GET['page']) { return; } $seo_title = 'SiteSEO'; if (function_exists('siteseo_get_toggle_white_label_option') && '1' == siteseo_get_toggle_white_label_option()) { $seo_title = method_exists(siteseo_pro_get_service('OptionPro'), 'getWhiteLabelListTitle') && siteseo_pro_get_service('OptionPro')->getWhiteLabelListTitle() ? siteseo_pro_get_service('OptionPro')->getWhiteLabelListTitle() : 'SiteSEO'; } $default_steps = [ 'welcome' => [ 'breadcrumbs' => true, 'name' => esc_html__('Welcome', 'siteseo'), 'view' => [$this, 'siteseo_setup_welcome'], 'description' => __('Configure site\'s SEO', 'siteseo'), 'handler' => [$this, 'siteseo_setup_import_settings_save'], 'sub_steps' => [ 'welcome' => esc_html__('Welcome','siteseo'), 'import_settings' => esc_html__('Import metadata','siteseo') ], 'parent' => 'welcome' ], 'import_settings' => [ 'name' => esc_html__('Import SEO metadata', 'siteseo'), 'view' => [$this, 'siteseo_setup_import_settings'], 'description' => __('Import Metadata', 'siteseo'), 'handler' => [$this, 'siteseo_setup_import_settings_save'], 'sub_steps' => [ 'welcome' => esc_html__('Welcome','siteseo'), 'import_settings' => esc_html__('Import metadata','siteseo') ], 'parent' => 'welcome' ], 'site' => [ 'breadcrumbs' => true, 'name' => esc_html__('Your site', 'siteseo'), 'view' => [$this, 'siteseo_setup_site'], 'description' => __('Fill site and social data', 'siteseo'), 'handler' => [$this, 'siteseo_setup_site_save'], 'sub_steps' => [ 'site' => esc_html__('General','siteseo'), 'social_accounts' => esc_html__('Your social accounts','siteseo') ], 'parent' => 'site' ], 'social_accounts' => [ 'name' => esc_html__('Your site', 'siteseo'), 'view' => [$this, 'siteseo_setup_social_accounts'], 'description' => __('Fill site and social data', 'siteseo'), 'handler' => [$this, 'siteseo_setup_social_accounts_save'], 'sub_steps' => [ 'site' => esc_html__('General','siteseo'), 'social_accounts' => esc_html__('Your social accounts','siteseo') ], 'parent' => 'site' ], 'indexing_post_types' => [ 'breadcrumbs' => true, 'name' => esc_html__('Indexing', 'siteseo'), 'view' => [$this, 'siteseo_setup_indexing_post_types'], 'description' => __('Select post type indexing', 'siteseo'), 'handler' => [$this, 'siteseo_setup_indexing_post_types_save'], 'sub_steps' => [ 'indexing_post_types' => esc_html__('Post Types','siteseo'), 'indexing_archives' => esc_html__('Archives','siteseo'), 'indexing_taxonomies' => esc_html__('Taxonomies','siteseo') ], 'parent' => 'indexing_post_types' ], 'indexing_archives' => [ 'name' => esc_html__('Indexing', 'siteseo'), 'view' => [$this, 'siteseo_setup_indexing_archives'], 'description' => __('Select post type indexing', 'siteseo'), 'handler' => [$this, 'siteseo_setup_indexing_archives_save'], 'sub_steps' => [ 'indexing_post_types' => esc_html__('Post Types','siteseo'), 'indexing_archives' => esc_html__('Archives','siteseo'), 'indexing_taxonomies' => esc_html__('Taxonomies','siteseo') ], 'parent' => 'indexing_post_types' ], 'indexing_taxonomies' => [ 'name' => esc_html__('Indexing', 'siteseo'), 'view' => [$this, 'siteseo_setup_indexing_taxonomies'], 'description' => __('Select post type indexing', 'siteseo'), 'handler' => [$this, 'siteseo_setup_indexing_taxonomies_save'], 'sub_steps' => [ 'indexing_post_types' => esc_html__('Post Types','siteseo'), 'indexing_archives' => esc_html__('Archives','siteseo'), 'indexing_taxonomies' => esc_html__('Taxonomies','siteseo') ], 'parent' => 'indexing_post_types' ], 'advanced' => [ 'breadcrumbs' => true, 'name' => esc_html__('Advanced options', 'siteseo'), 'view' => [$this, 'siteseo_setup_advanced'], 'description' => __('URL configurations', 'siteseo'), 'handler' => [$this, 'siteseo_setup_advanced_save'], 'sub_steps' => [ 'advanced' => esc_html__('Advanced','siteseo'), 'universal' => esc_html__('Universal SEO metabox','siteseo'), ], 'parent' => 'advanced' ], 'universal' => [ 'name' => esc_html__('Advanced options', 'siteseo'), 'view' => [$this, 'siteseo_setup_universal'], 'description' => __('Enable Univeral SiteSEO', 'siteseo'), 'handler' => [$this, 'siteseo_setup_universal_save'], 'sub_steps' => [ 'advanced' => esc_html__('Advanced','siteseo'), 'universal' => esc_html__('Universal SEO metabox','siteseo'), ], 'parent' => 'advanced' ], ]; if (function_exists('siteseo_get_toggle_white_label_option') && '1' === siteseo_get_toggle_white_label_option()) { //do nothing } /*elseif ((! is_multisite()) || ! is_plugin_active('siteseo-pro/siteseo-pro.php')){ $sub_steps = [ 'pro' => esc_html__('PRO','siteseo'), ]; if (is_plugin_active('siteseo-pro/siteseo-pro.php')) { unset($sub_steps['pro']); } if ( ! is_plugin_active('siteseo-pro/siteseo-pro.php')) { $default_steps['pro'] = [ 'name' => sprintf(__('Extend %s', 'siteseo'), $seo_title), 'view' => [$this, 'siteseo_setup_pro'], 'description' => __('Upgrade to Pro!', 'siteseo'), 'handler' => '', 'sub_steps' => $sub_steps, 'parent' => 'pro' ]; } if (!is_plugin_active('siteseo-pro/siteseo-pro.php')) { $default_steps['pro']['breadcrumbs'] = true; } }*/ $default_steps['ready'] = [ 'breadcrumbs' => true, 'name' => esc_html__('Ready!', 'siteseo'), 'view' => [$this, 'siteseo_setup_ready'], 'description' => __('Its all set now', 'siteseo'), 'handler' => '', 'sub_steps' => [ 'ready' => esc_html__('Ready!', 'siteseo') ] ]; $this->steps = apply_filters('siteseo_setup_wizard_steps', $default_steps); $this->step = isset($_GET['step']) ? sanitize_key($_GET['step']) : current(array_keys($this->steps)); $this->parent = isset($_GET['parent']) ? sanitize_key($_GET['parent']) : current(array_keys($this->steps)); if ( !empty($_POST['save_step']) && isset($this->steps[$this->step]['handler'])) { call_user_func($this->steps[$this->step]['handler'], $this); } ob_start(); $this->setup_wizard_header(); $this->setup_wizard_steps(); $this->setup_wizard_content(); $this->setup_wizard_footer(); exit; } /** * Get the URL for the next step's screen. * * @param string $step slug (default: current step) * * @return string URL for next step if a next step exists. * Admin URL if it's the last step. * Empty string on failure. * * @since 3.5.8 */ public function get_next_step_link($step = '') { if ( ! $step) { $step = $this->step; } $keys = array_keys($this->steps); if (end($keys) === $step) { return admin_url(); } $step_index = array_search($step, $keys, true); if (false === $step_index) { return ''; } $parent = ''; $all = $this->steps; if (isset($all[$step]['parent'])) { $key = $keys[$step_index + 1]; if (isset($all[$key]['parent'])) { $parent = $all[$key]['parent']; } } return add_query_arg( [ 'step' => $keys[$step_index + 1], 'parent' => $parent, ], remove_query_arg( 'parent' ) ); } /** * Setup Wizard Header. */ public function setup_wizard_header() { set_current_screen(); $seo_title = 'SiteSEO'; if (function_exists('siteseo_get_toggle_white_label_option') && '1' == siteseo_get_toggle_white_label_option()) { $seo_title = method_exists(siteseo_pro_get_service('OptionPro'), 'getWhiteLabelListTitle') && siteseo_pro_get_service('OptionPro')->getWhiteLabelListTitle() ? siteseo_pro_get_service('OptionPro')->getWhiteLabelListTitle() : 'SiteSEO'; } ?> >
local search results.', 'siteseo')); ?>
WooCommerce or Easy Digital Downloads.', 'siteseo')); ?>
Google structured data (schema) to your content to improve its visibility in search results.', 'siteseo')); ?>
robots.txt and .htaccess files.', 'siteseo')); ?>
Google Analytics stats directly from your WordPress Dashboard.', 'siteseo')); ?>