215 lines
5.7 KiB
PHP
215 lines
5.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* UserFeedback Onboarding Wizard
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @package UserFeedback
|
|
*/
|
|
|
|
// Exit if accessed directly.
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
|
|
class UserFeedback_Onboarding_Wizard {
|
|
|
|
public function __construct() {
|
|
add_action( 'admin_init', array( $this, 'maybe_load_onboarding_wizard' ) );
|
|
add_action( 'admin_menu', array( $this, 'add_dashboard_page' ) );
|
|
add_action( 'network_admin_menu', array( $this, 'add_dashboard_page' ) );
|
|
}
|
|
|
|
/**
|
|
* Register page through WordPress's hooks.
|
|
*/
|
|
public function add_dashboard_page() {
|
|
add_dashboard_page(
|
|
'',
|
|
'',
|
|
'userfeedback_save_settings',
|
|
'userfeedback_onboarding',
|
|
''
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Checks if the Wizard should be loaded in current context.
|
|
*/
|
|
public function maybe_load_onboarding_wizard() {
|
|
// 1. Don't load the interface if doing an Ajax call.
|
|
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
|
return;
|
|
}
|
|
|
|
// 2. Don't load the interface if the page is not the onboarding wizard.
|
|
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only admin page check; no data modification at this point.
|
|
if ( ! isset( $_GET['page'] ) || 'userfeedback_onboarding' !== sanitize_key( wp_unslash( $_GET['page'] ) ) ) {
|
|
return;
|
|
}
|
|
|
|
// 3. Don't load the interface if the user doesn't have the required capability.
|
|
if ( ! current_user_can( 'userfeedback_save_settings' ) ) {
|
|
return;
|
|
}
|
|
|
|
// 4. Don't load the interface if the onboarding wizard is not enabled via a filter.
|
|
if ( ! apply_filters( 'userfeedback_enable_onboarding_wizard', true ) ) {
|
|
return;
|
|
}
|
|
|
|
set_current_screen();
|
|
|
|
// Remove an action in the Gutenberg plugin ( not core Gutenberg ) which throws an error.
|
|
remove_action( 'admin_print_styles', 'gutenberg_block_editor_admin_print_styles' );
|
|
|
|
$this->load_onboarding_wizard();
|
|
}
|
|
|
|
/**
|
|
* Load the Onboarding Wizard template.
|
|
*/
|
|
private function load_onboarding_wizard() {
|
|
|
|
$this->enqueue_scripts();
|
|
|
|
$this->onboarding_wizard_header();
|
|
$this->onboarding_wizard_content();
|
|
$this->onboarding_wizard_footer();
|
|
|
|
exit;
|
|
}
|
|
|
|
private function enqueue_scripts() {
|
|
// --------------------------------------------------
|
|
// ---------------- Common scripts ------------------
|
|
wp_register_script(
|
|
'userfeedback-vue-chunk-vendors',
|
|
userfeedback_get_admin_asset_url( '/assets/vue/js/chunk-vendors.js' ),
|
|
array(),
|
|
userfeedback_get_asset_version(),
|
|
true
|
|
);
|
|
wp_enqueue_script( 'userfeedback-vue-chunk-vendors' );
|
|
|
|
wp_register_script(
|
|
'userfeedback-vue-chunk-common',
|
|
userfeedback_get_admin_asset_url( '/assets/vue/js/chunk-common.js' ),
|
|
array(),
|
|
userfeedback_get_asset_version(),
|
|
true
|
|
);
|
|
wp_enqueue_script( 'userfeedback-vue-chunk-common' );
|
|
|
|
// -----------------------------------------------------
|
|
// --------------- Onboarding scripts ------------------
|
|
wp_register_script(
|
|
'userfeedback-vue-onboarding-script',
|
|
userfeedback_get_admin_asset_url( '/assets/vue/js/onboarding.js' ),
|
|
apply_filters(
|
|
'userfeedback_onboarding_script_dependencies',
|
|
array(
|
|
'userfeedback-vue-chunk-vendors',
|
|
'userfeedback-vue-chunk-common',
|
|
)
|
|
),
|
|
userfeedback_get_asset_version(),
|
|
true
|
|
);
|
|
wp_enqueue_script( 'userfeedback-vue-onboarding-script' );
|
|
wp_localize_script(
|
|
'userfeedback-vue-onboarding-script',
|
|
'userfeedback',
|
|
userfeedback_get_common_script_localization_object()
|
|
);
|
|
|
|
// Styles
|
|
wp_enqueue_style(
|
|
'userfeedback-vue-onboarding',
|
|
userfeedback_get_admin_asset_url( '/assets/vue/css/onboarding.css' ),
|
|
array(),
|
|
userfeedback_get_asset_version()
|
|
);
|
|
|
|
// Load frontend widget styles
|
|
wp_enqueue_style(
|
|
'userfeedback-frontend-styles',
|
|
UserFeedback_Frontend::get_frontend_asset_url( '/assets/vue/css/frontend.css' ),
|
|
array(),
|
|
userfeedback_get_asset_version()
|
|
);
|
|
|
|
$this->remove_conflicting_asset_files();
|
|
}
|
|
|
|
/**
|
|
* Outputs the simplified header used for the Onboarding Wizard.
|
|
*/
|
|
public function onboarding_wizard_header() {
|
|
/**
|
|
* Since WordPress 6.4 print_emoji_styles() and wp_admin_bar_header() have been deprecated.
|
|
*/
|
|
if (
|
|
has_action( 'admin_head', 'wp_admin_bar_header')
|
|
&& function_exists( 'wp_enqueue_admin_bar_header_styles' )
|
|
) {
|
|
remove_action( 'admin_head', 'wp_admin_bar_header' );
|
|
add_action( 'admin_head', 'wp_enqueue_admin_bar_header_styles' );
|
|
}
|
|
if ( has_action( 'admin_print_styles', 'print_emoji_styles') ) {
|
|
remove_action( 'admin_print_styles', 'print_emoji_styles' );
|
|
}
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html <?php language_attributes(); ?>>
|
|
<head>
|
|
<meta name="viewport" content="width=device-width"/>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
|
<title><?php esc_html_e( 'UserFeedback › Onboarding Wizard', 'userfeedback-lite' ); ?></title>
|
|
<?php do_action( 'admin_print_styles' ); ?>
|
|
<?php do_action( 'admin_print_scripts' ); ?>
|
|
<?php do_action( 'admin_head' ); ?>
|
|
</head>
|
|
<body class="user-feedback">
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Outputs the content of the current step.
|
|
*/
|
|
public function onboarding_wizard_content() {
|
|
echo '<div id="userfeedback-onboarding"></div>';
|
|
}
|
|
|
|
/**
|
|
* Outputs the simplified footer used for the Onboarding Wizard.
|
|
*/
|
|
public function onboarding_wizard_footer() {
|
|
?>
|
|
<?php wp_print_scripts( 'userfeedback-vue-onboarding-script' ); ?>
|
|
</body>
|
|
</html>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Remove assets added by other plugins which conflict.
|
|
*/
|
|
public function remove_conflicting_asset_files() {
|
|
$scripts = array(
|
|
'jetpack-onboarding-vendor', // Jetpack Onboarding Bluehost.
|
|
);
|
|
|
|
if ( ! empty( $scripts ) ) {
|
|
foreach ( $scripts as $script ) {
|
|
wp_dequeue_script( $script ); // Remove JS file.
|
|
wp_deregister_script( $script );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
new UserFeedback_Onboarding_Wizard();
|