is_wp_inited() ) { $this->init_steps_data(); } else { add_action( 'init', array( $this, 'init_steps_data' ) ); } add_action( 'wpbc_after_wpbc_page_top__header_tabs', array( $this, 'show_top_right_wizard_button' ), 10, 3 ); } /** * Define Steps Data Structure - Init * * @return void */ public function init_steps_data(){ $step_default_params = array( 'show_section_left' => false, 'show_section_right' => false, 'is_done' => false, 'do_action' => 'none', 'prior' => '', 'next' => '', 'prior_title' => __( 'Go Back', 'booking' ), 'next_title' => __( 'Save and Continue', 'booking' ) ); $steps_arr = array(); // Step #1 $step_name = 'welcome'; $steps_arr[ $step_name ] = $step_default_params; $steps_arr[ $step_name ]['do_action'] = 'save_and_continue__welcome'; $steps_arr[ $step_name ]['next'] = ( wpbc_is_this_demo() ) ? 'date_time_formats' : 'general_info'; //$steps_arr[ $step_name ]['next_title'] = __( 'Let\'s Get Started', 'booking' ); if ( ! wpbc_is_this_demo() ) { // Step #2 $step_name = 'general_info'; $steps_arr[ $step_name ] = $step_default_params; $steps_arr[ $step_name ]['do_action'] = 'save_and_continue__general_info'; //$steps_arr[ $step_name ]['prior'] = 'bookings_types'; $steps_arr[ $step_name ]['next'] = 'date_time_formats'; } // Step #3 $step_name = 'date_time_formats'; $steps_arr[ $step_name ] = $step_default_params; $steps_arr[ $step_name ]['do_action'] = 'save_and_continue__date_time_formats'; if ( ! wpbc_is_this_demo() ) { $steps_arr[ $step_name ]['prior'] = 'general_info'; } $steps_arr[ $step_name ]['next'] = 'bookings_types'; // Step #4 $step_name = 'bookings_types'; $steps_arr[ $step_name ] = $step_default_params; $steps_arr[ $step_name ]['do_action'] = 'save_and_continue__bookings_types'; $steps_arr[ $step_name ]['prior'] = 'date_time_formats'; $steps_arr[ $step_name ]['next'] = 'form_structure'; // Step #5 $step_name = 'form_structure'; $steps_arr[ $step_name ] = $step_default_params; $steps_arr[ $step_name ]['do_action'] = 'save_and_continue__form_structure'; $steps_arr[ $step_name ]['prior'] = 'bookings_types'; $steps_arr[ $step_name ]['next'] = 'cal_availability'; $steps_arr[ $step_name ]['next_title'] = __( 'Continue', 'booking' ); // Step #6 $step_name = 'cal_availability'; $steps_arr[ $step_name ] = $step_default_params; $steps_arr[ $step_name ]['do_action'] = 'save_and_continue__cal_availability'; $steps_arr[ $step_name ]['prior'] = 'form_structure'; $steps_arr[ $step_name ]['next'] = 'color_theme'; $steps_arr[ $step_name ]['next_title'] = __( 'Continue', 'booking' ); // Step #7 $step_name = 'color_theme'; $steps_arr[ $step_name ] = $step_default_params; $steps_arr[ $step_name ]['do_action'] = 'save_and_continue__color_theme'; $steps_arr[ $step_name ]['prior'] = 'cal_availability'; $steps_arr[ $step_name ]['next'] = 'optional_other_settings'; // Step #8 $step_name = 'optional_other_settings'; $steps_arr[ $step_name ] = $step_default_params; //$steps_arr[ $step_name ]['show_section_left'] = true; //$steps_arr[ $step_name ]['show_section_right'] = true; $steps_arr[ $step_name ]['do_action'] = 'save_and_continue__optional_other_settings'; $steps_arr[ $step_name ]['prior'] = 'color_theme'; $steps_arr[ $step_name ]['next'] = ( wpbc_is_this_demo() ) ? 'get_started' : 'wizard_publish'; $steps_arr[ $step_name ]['next_title'] = __( 'Continue', 'booking' ); if ( ! wpbc_is_this_demo() ) { // Step #9 $step_name = 'wizard_publish'; $steps_arr[ $step_name ] = $step_default_params; //$steps_arr[ $step_name ]['show_section_left'] = true; //$steps_arr[ $step_name ]['show_section_right'] = true; $steps_arr[ $step_name ]['do_action'] = 'save_and_continue__wizard_publish'; $steps_arr[ $step_name ]['prior'] = 'optional_other_settings'; $steps_arr[ $step_name ]['next'] = 'get_started'; $steps_arr[ $step_name ]['next_title'] = __( 'Continue', 'booking' ); } // Step #10 $step_name = 'get_started'; $steps_arr[ $step_name ] = $step_default_params; //$steps_arr[ $step_name ]['show_section_left'] = true; //$steps_arr[ $step_name ]['show_section_right'] = true; $steps_arr[ $step_name ]['do_action'] = 'save_and_continue__get_started'; $steps_arr[ $step_name ]['prior'] = ( wpbc_is_this_demo() ) ? 'optional_other_settings' : 'wizard_publish'; $steps_arr[ $step_name ]['next'] = 'welcome'; //$steps_arr[ $step_name ]['next_title'] = __( 'Complete', 'booking' ); $this->steps_arr = $steps_arr; } /** * Get Steps Data Structure * @return array */ public function get_steps_arr(){ return $this->steps_arr; } // ================================================================================================================= // == Steps STRUCTURE == // ================================================================================================================= /** * Actual Step Number -> 'general_info' or 'optional_other_settings' * * @return int */ public function get_active_step_name() { $steps_arr = $this->db__get_steps_is_done(); $first_step_name = ''; foreach ( $steps_arr as $step_name => $step ) { $first_step_name = (empty($first_step_name)) ? $step_name : $first_step_name; if ( empty( $step ) ) { return $step_name; } } return $first_step_name; } /** * Actual Step Number -> 2 * * @return int */ public function get_active_step_num() { $steps_arr = $this->db__get_steps_is_done(); $active_step = 0; foreach ( $steps_arr as $step ) { if ( ! empty( $step ) ) { $active_step++; } } return $active_step; } /** * Get Steps Count -> 9 * * @return int */ public function get_total_steps_count(){ $steps_arr = $this->db__get_steps_is_done(); return count($steps_arr); } /** * Get % Progress for Setup Steps -> 30 * @return int */ public function get_progess_value() { $progess_value = ( ($this->get_active_step_num()-0) * 100 ) / $this->get_total_steps_count(); $progess_value = intval( $progess_value ); return $progess_value; } // ================================================================================================================= // == DB :: "Set Wizard Steps as Done" == // ================================================================================================================= /** * Get all Steps from DB and from Structure, * * If not saved yet to DB, then get default structure * * And if later Wizard structure ->init_steps_data() was extended, then system get such steps as uncompleted. * * @return array|mixed */ public function db__get_steps_is_done() { $steps_is_done = get_bk_option( 'booking_setup_wizard_page_steps_is_done' ); if ( empty( $steps_is_done ) ) { // Get Default Steps from the Steps structure $steps_names = $this->get_steps_arr(); $steps_names = array_keys( $steps_names ); $steps_values = array_fill( 0, count( $steps_names ), false ); $steps_is_done = array_combine( $steps_names, $steps_values ); } else { // Check if some new steps here ? $possible_new_steps_names = $this->get_steps_arr(); $possible_new_steps_names = array_keys( $possible_new_steps_names ); foreach ( $possible_new_steps_names as $possible_new_steps_name ) { if ( ! isset( $steps_is_done[ $possible_new_steps_name ] ) ) { $steps_is_done[ $possible_new_steps_name ] = false; } } } return $steps_is_done; } /** * Save statuses to all steps * * @param $steps_arr * * @return void */ public function db__save_steps_is_done( $steps_arr ) { update_bk_option( 'booking_setup_wizard_page_steps_is_done', $steps_arr ); } /** * Set specific step as Completed * * @param $step_name * * @return void */ public function db__set_step_as_completed( $step_name ) { $steps_arr = $this->db__get_steps_is_done(); $steps_arr[ $step_name ] = true; $this->db__save_steps_is_done( $steps_arr ); } /** * Set specific step as Uncompleted * * @param $step_name * * @return void */ public function db__set_step_as_uncompleted( $step_name ) { $steps_arr = $this->db__get_steps_is_done(); $steps_arr[ $step_name ] = false; $this->db__save_steps_is_done( $steps_arr ); } /** * Check if specific step 'Is completed' ? * * @param string $step_name * * @return bool */ public function db__is_step_completed( $step_name ) { $steps_arr = $this->db__get_steps_is_done(); if ( empty( $steps_arr[ $step_name ] ) ) { return false; } else { return true; } } /** * Mark All Steps as Completed or Uncompleted * * @param $is_completed bool (default true) * * @return void */ public function db__set_all_steps_as( $is_completed = true ) { if ( false === $is_completed ) { delete_bk_option( 'booking_setup_wizard_page_steps_is_done' ); } $steps_names = $this->db__get_steps_is_done(); $steps_names = array_keys( $steps_names ); $steps_values = array_fill( 0, count( $steps_names ), $is_completed ); $steps_is_done = array_combine( $steps_names, $steps_values ); // Set all steps as not completed $this->db__save_steps_is_done( $steps_is_done ); } /** * Check Is all steps Completed * @return bool */ public function db__is_all_steps_completed() { $steps_arr = $this->db__get_steps_is_done(); foreach ( $steps_arr as $step_name => $steps_val ) { if ( empty( $steps_val ) ) { return false; } } return true; } // ================================================================================================================= // == C O N T E N T == // ================================================================================================================= // ---------------------------------------------------------- // == Left Plugin Menu --> "Setup" with Progress Bar == // ---------------------------------------------------------- /** * Main Left Menu Title - "Setup" with Progress Bar * * @return false|string */ public function get_plugin_menu_title__setup_progress(){ ob_start(); ?>