Files
krolewskie-miody.pl/wp-content/plugins/userfeedback-lite/includes/admin/class-userfeedback-onboarding-wizard.php
2026-04-28 15:13:50 +02:00

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 &rsaquo; 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();