PATH:
home
/
thebhoeo
/
.trash
/
woodmart
/
inc
/
admin
/
modules
/
guide-tour
<?php /** * Guide tours class. * * @package woodmart */ namespace XTS\Admin\Modules\Guide_Tour; if ( ! defined( 'WOODMART_THEME_DIR' ) ) { exit( 'No direct script access allowed' ); } /** * Guide tours class. */ class Main { /** * Guide tours. * * @var array */ public $guide_tours = array(); /** * Constructor. */ public function __construct() { if ( ! is_user_logged_in() || ! current_user_can( 'administrator' ) ) { return; } add_action( 'woodmart_after_welcome_box_content', array( $this, 'render_guide_tours' ) ); add_action( 'init', array( $this, 'set_guides' ) ); add_action( 'init', array( $this, 'save_complete_tour' ) ); if ( empty( $_GET['wd_tour'] ) && empty( $_COOKIE['woodmart_guide_tour'] ) ) { // phpcs:ignore return; } add_action( 'admin_footer', array( $this, 'render_navigation_tours' ) ); add_action( 'wp_footer', array( $this, 'render_navigation_tours' ) ); add_action( 'elementor/editor/after_enqueue_scripts', array( $this, 'render_navigation_tours' ) ); add_action( 'elementor/editor/before_enqueue_scripts', 'woodmart_enqueue_admin_scripts' ); add_action( 'woodmart_admin_localized_string_array', array( $this, 'add_tour_settings' ) ); add_action( 'woodmart_localized_string_array', array( $this, 'add_tour_settings' ) ); add_filter( 'body_class', array( $this, 'add_body_class' ) ); add_filter( 'admin_body_class', array( $this, 'add_body_class' ) ); } /** * Set guides. * * @return void */ public function set_guides() { if ( ( empty( $_GET['wd_tour'] ) && empty( $_COOKIE['woodmart_guide_tour'] ) ) && ( ! isset( $_GET['page'] ) || 'xts_dashboard' !== $_GET['page'] ) ) { // phpcs:ignore return; } $this->guide_tours = require dirname( __FILE__ ) . '/configs.php'; } /** * @return void */ public function save_complete_tour() { if ( empty( $_GET['wd_guide_done'] ) ) { // phpcs:ignore return; } $tour_id = absint( $_GET['wd_guide_done'] ); // phpcs:ignore $complete_tours = get_option( 'woodmart_guide_tours_complete', array() ); if ( ! in_array( $tour_id, $complete_tours, true ) ) { $complete_tours[] = $tour_id; } update_option( 'woodmart_guide_tours_complete', $complete_tours ); } /** * Render guide tours. * * @return void */ public function render_guide_tours() { if ( ! is_admin() || ! $this->guide_tours ) { return; } $complete_tours = get_option( 'woodmart_guide_tours_complete', array() ); if ( ! empty( $_GET['wd_tour'] ) && $complete_tours && in_array( absint( $_GET['wd_tour'] ), $complete_tours ) ) { $complete_tours = array_diff( $complete_tours, array( $_GET['wd_tour'] ) ); } ?> <div class="xts-col-12 xts-col-xl-6"> <div class="xts-box xts-info-boxes xts-guide xts-theme-style"> <div class="xts-box-content"> <div class="xts-guide-heading xts-row xts-sp-10"> <div class="xts-col"> <h4> <?php esc_html_e( 'Customize your website', 'woodmart' ); ?> </h4> <p> <?php esc_html_e( 'Customize your website with the help of our interactive guides. Click the buttons below to start exploring and customizing with ease.', 'woodmart' ); ?> </p> </div> <div class="xts-col-auto"> <img src="<?php echo esc_url( WOODMART_ASSETS_IMAGES . '/dashboard/guide.jpg' ); ?>" alt="guide tour"> </div> </div> <div class="xts-guide-tours"> <?php foreach ( $this->guide_tours as $index => $tour ) : ?> <?php if ( isset( $tour['requires'] ) && ! $tour['requires'] ) { continue; } $classes = 'xts-guide-tour'; if ( in_array( $index, $complete_tours, true ) ) { $classes .= ' xts-done'; } ?> <div class="<?php echo esc_attr( $classes ); ?>"> <div class="xts-guide-tour-title"> <h5> <?php echo esc_html( $tour['title'] ); ?> </h5> <?php if ( ! empty( $tour['description'] ) ) : ?> <p> <?php echo esc_html( $tour['description'] ); ?> </p> <?php endif; ?> </div> <?php if ( in_array( $index, $complete_tours, true ) ) : ?> <a href="<?php echo esc_url( add_query_arg( 'wd_tour', $index, $tour['url'] ) ); ?>" class="xts-btn-inline xts-color-primary xts-i-round-left"> <?php esc_html_e( 'Restart the guide', 'woodmart' ); ?> </a> <?php else : ?> <a href="<?php echo esc_url( add_query_arg( 'wd_tour', $index, $tour['url'] ) ); ?>" class="xts-btn-inline xts-color-primary"> <?php esc_html_e( 'Start the guide', 'woodmart' ); ?> </a> <?php endif; ?> </div> <?php endforeach; ?> </div> </div> </div> </div> <?php } /** * Render navigation tours. * * @return void */ public function render_navigation_tours() { if ( ( empty( $_GET['wd_tour'] ) && empty( $_COOKIE['woodmart_guide_tour'] ) ) || ! $this->guide_tours ) { // phpcs:ignore return; } $tour_id = 0; $current_step_index = 0; $collapse = false; if ( ! empty( $_GET['wd_tour'] ) ) { $tour_id = absint( $_GET['wd_tour'] ); $complete_tours = get_option( 'woodmart_guide_tours_complete', array() ); if ( in_array( $tour_id, $complete_tours, true ) ) { $complete_tours = array_diff( $complete_tours, array( $tour_id ) ); update_option( 'woodmart_guide_tours_complete', $complete_tours ); } } elseif ( ! empty( $_COOKIE['woodmart_guide_tour'] ) ) { $raw_value = json_decode( stripslashes( $_COOKIE['woodmart_guide_tour'] ), true ); $tour_id = $raw_value['tour_id'] ?? 0; $current_step_index = $raw_value['step'] ?? $current_step_index; $collapse = isset( $raw_value['collapse'] ) ? $raw_value['collapse'] : false; } if ( ! $tour_id || ! isset( $this->guide_tours[ $tour_id ] ) || ( isset( $this->guide_tours['requires'] ) && ! $this->guide_tours['requires'] ) ) { return; } if ( ! wp_script_is( 'js-cookie' ) ) { wp_enqueue_script( 'js-cookie', WOODMART_SCRIPTS . '/libs/cookie.min.js', array(), WOODMART_VERSION, true ); } wp_enqueue_style( 'wd-admin-base', WOODMART_ASSETS . '/css/parts/base.min.css', array(), WOODMART_VERSION ); wp_enqueue_style( 'wd-guide-tour', WOODMART_ASSETS . '/css/parts/lib-driver.min.css', array(), WOODMART_VERSION ); wp_enqueue_script( 'wd-guide-tour-library', WOODMART_ASSETS . '/js/libs/guide-tour.min.js', array(), WOODMART_VERSION, true ); if ( isset( $_GET['elementor-preview'] ) ) { // phpcs:ignore return; } wp_enqueue_script( 'wd-guide-tour', WOODMART_ASSETS . '/js/guideTour.js', array(), WOODMART_VERSION, true ); $guide_tour = $this->guide_tours[ $tour_id ]; $steps = array(); foreach ( $guide_tour['steps'] as $index => $raw_step ) { $item_class = ''; if ( $index === $current_step_index ) { $item_class = 'xts-active'; } elseif ( $index < $current_step_index ) { $item_class = 'xts-done'; } $steps[ $raw_step['step'] ][] = array( 'title' => $raw_step['title'], 'class' => $item_class, ); } $progress = round( ( $current_step_index / count( $guide_tour['steps'] ) ) * 100 ); ?> <div class="xts-tour-navigation<?php echo esc_attr( $collapse ? ' xts-collapse' : '' ); ?>"> <div class="xts-tour-heading"> <h4> <span class="xts-tour-title"> <?php echo esc_html( $guide_tour['title'] ); ?> </span> <span class="xts-step-title"> <?php if ( isset( $guide_tour['steps'][ $current_step_index ] ) ) : ?> <?php echo esc_html( $guide_tour['steps'][ $current_step_index ]['title'] ); ?> <?php endif; ?> </span> </h4> <a href="#" class="xts-tour-collapse"> <span class="dashicons dashicons-arrow-down-alt2"></span> </a> <a href="#" class="xts-tour-close"> <span class="dashicons dashicons-no-alt"></span> </a> </div> <div class="xts-tour-progress"> <div class="xts-tour-progress-bar" style="width: <?php echo esc_attr( $progress ); ?>%"></div> </div> <div class="xts-tour-steps"> <?php foreach ( $steps as $index => $step_group ) : ?> <?php $step_classes = ''; $all_classes = wp_list_pluck( $step_group, 'class' ); if ( in_array( 'xts-active', $all_classes, true ) ) { $step_classes .= ' xts-active xts-open'; } elseif ( count( $all_classes ) && count( array_unique( $all_classes ) ) === 1 && 'xts-done' === $all_classes[0] ) { $step_classes .= ' xts-done'; } ?> <div class="xts-tour-step<?php echo esc_attr( $step_classes ); ?>"> <div class="xts-step-heading"> <span><?php echo esc_html__( 'Step', 'woodmart' ) . ' ' . esc_html( $index ) . ':'; ?></span> </div> <div class="xts-step-content"> <ul> <?php foreach ( $step_group as $step ) : ?> <li class="<?php echo esc_attr( $step['class'] ); ?>"> <?php echo esc_html( $step['title'] ); ?> </li> <?php endforeach; ?> </ul> </div> </div> <?php endforeach; ?> </div> </div> <?php } /** * Add tour settings. * * @param array $settings Localized settings. * @return array */ public function add_tour_settings( $settings ) { if ( ( empty( $_GET['wd_tour'] ) && empty( $_COOKIE['woodmart_guide_tour'] ) ) || ! $this->guide_tours ) { // phpcs:ignore return $settings; } $tour_id = 0; $current_step_index = 0; if ( ! empty( $_GET['wd_tour'] ) ) { // phpcs:ignore $tour_id = esc_html( $_GET['wd_tour'] ); // phpcs:ignore } elseif ( ! empty( $_COOKIE['woodmart_guide_tour'] ) ) { $raw_value = json_decode( stripslashes( $_COOKIE['woodmart_guide_tour'] ), true ); $tour_id = $raw_value['tour_id'] ?? 0; $current_step_index = $raw_value['step'] ?? $current_step_index; } if ( ! $tour_id || empty( $this->guide_tours[ $tour_id ] ) || empty( $this->guide_tours[ $tour_id ]['steps'] ) || ( isset( $this->guide_tours['requires'] ) && ! $this->guide_tours['requires'] ) ) { if ( ! empty( $_COOKIE['woodmart_guide_tour'] ) ) { setcookie( 'woodmart_guide_tour', '', 0, COOKIEPATH, COOKIE_DOMAIN, woodmart_cookie_secure_param(), false ); $_COOKIE['woodmart_guide_tour'] = ''; } return $settings; } $steps = $this->guide_tours[ $tour_id ]['steps']; $max_step_index = end( $steps )['step']; $settings['guide_next_text'] = esc_html__( 'Next', 'woodmart' ); $settings['guide_back_text'] = esc_html__( 'Back', 'woodmart' ); $settings['guide_done_text'] = esc_html__( 'Done', 'woodmart' ); $settings['guide_url_end'] = admin_url( 'admin.php?page=xts_dashboard' ); foreach ( $steps as $index => $item ) { $show_buttons = array(); if ( ! in_array( $item['type'], array( 'button', 'hover' ), true ) ) { $show_buttons[] = 'next'; } else if ( isset( $steps[ $index - 1 ] ) && ! in_array( $steps[ $index - 1 ]['type'], array( 'button', 'hover' ), true ) ) { $show_buttons[] = 'previous'; } $settings['guide_tour'][] = array( 'element' => $item['selector'], 'step' => $index, 'disableActiveInteraction' => ! in_array( $item['type'], array( 'button', 'hover' ), true ) && empty( $item['allow_click'] ), 'isDone' => isset( $item['is_done'] ) ? $item['is_done'] : false, 'skipIf' => isset( $item['skip_if'] ) ? $item['skip_if'] : false, 'type' => $item['type'], 'offset' => isset( $item['offset'] ) ? $item['offset'] : '', 'popover' => array( 'title' => $item['title'], 'description' => $item['description'], 'showButtons' => $show_buttons, 'progressText' => $item['step'] . ' ' . esc_html__( 'of', 'woodmart' ) . ' ' . $max_step_index, 'popoverClass' => ! empty( $item['allow_click'] ) ? 'xts-step-optional' : '', ), ); } $value = wp_json_encode( array( 'tour_id' => $tour_id, 'step' => $current_step_index, ) ); if ( empty( $_COOKIE['woodmart_guide_tour'] ) ) { setcookie( 'woodmart_guide_tour', $value, 0, COOKIEPATH, COOKIE_DOMAIN, woodmart_cookie_secure_param(), false ); $_COOKIE['woodmart_guide_tour'] = $value; } return $settings; } /** * Add body classes. * * @param array|string $body_classes Body classes. * @return array|string */ public function add_body_class( $body_classes ) { if ( ! isset( $_GET['elementor-preview'] ) && ( ! empty( $_COOKIE['woodmart_guide_tour'] ) || ! empty( $_GET['wd_tour'] ) ) ) { // phpcs:ignore $tour_id = 0; $current_step_index = 0; $classes = ''; if ( ! empty( $_COOKIE['woodmart_guide_tour'] ) ) { $raw_value = json_decode( stripslashes( $_COOKIE['woodmart_guide_tour'] ), true ); // phpcs:ignore $tour_id = $raw_value['tour_id'] ?? 0; $current_step_index = $raw_value['step'] ?? 0; } if ( ! empty( $_GET['wd_tour'] ) ) { // phpcs:ignore $tour_id = absint( $_GET['wd_tour'] ); // phpcs:ignore } $classes .= 'wd-guide-tour-' . $tour_id; $classes .= ' wd-guide-step-' . $current_step_index; if ( is_array( $body_classes ) ) { $body_classes[] = $classes; } else { $body_classes .= ' ' . $classes; } } return $body_classes; } } new Main();
[-] configs.php
[edit]
[+]
..
[-] class-main.php
[edit]