[Back] <?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
if ( ! class_exists( 'OsWizardController' ) ) :
class OsWizardController extends OsController {
var $steps_info, $steps_in_order;
protected $show_next_btn = false,
$show_prev_btn = false;
function __construct() {
parent::__construct();
$this->views_folder = LATEPOINT_VIEWS_ABSPATH . 'wizard/';
$this->vars['page_header'] = __( 'Wizard', 'latepoint' );
$this->set_layout( 'wizard' );
$this->steps_info = array(
'default_agent' => array(
'show_in_sidemenu' => true,
'name' => __( 'Setup Notifications', 'latepoint' )
),
'agents' => array( 'show_in_sidemenu' => true, 'name' => __( 'Create Agents', 'latepoint' ) ),
'intro' => array( 'show_in_sidemenu' => false, 'name' => __( 'Intro', 'latepoint' ) ),
'services' => array( 'show_in_sidemenu' => true, 'name' => __( 'Add Services', 'latepoint' ) ),
'work_periods' => array(
'show_in_sidemenu' => true,
'name' => __( 'Set Working Hours', 'latepoint' )
),
'info' => array(
'show_in_sidemenu' => true,
'name' => __( 'Fill Business Info', 'latepoint' )
),
'complete' => array( 'show_in_sidemenu' => true, 'name' => __( 'Setup Complete', 'latepoint' ) ),
);
$this->steps_in_order = array( 'intro', 'default_agent', 'services', 'work_periods', 'complete' );
$this->vars['steps_in_order'] = $this->steps_in_order;
$this->vars['steps_info'] = $this->steps_info;
}
function save_service() {
$service = new OsServiceModel();
$service->set_data( $this->params['service'] );
if ( $service->save() && $service->save_agents_and_locations( $this->params['service']['agents'] ) ) {
$this->vars['current_step_code'] = 'agents';
$this->step_services();
$response_html = $this->render( $this->get_view_uri( 'steps/_list_services' ) );
$status = LATEPOINT_STATUS_SUCCESS;
} else {
$response_html = $service->get_error_messages();
$status = LATEPOINT_STATUS_ERROR;
}
if ( $this->get_return_format() == 'json' ) {
$this->send_json( array( 'status' => $status,
'message' => $response_html,
'show_prev_btn' => true,
'show_next_btn' => $this->show_next_btn
) );
}
}
function save_agent() {
$agent = new OsAgentModel();
$agent->set_data( $this->params['agent'] );
if ( $agent->save() ) {
$this->vars['current_step_code'] = 'agents';
$this->step_agents();
$response_html = $this->render( $this->get_view_uri( 'steps/_list_agents' ) );
$status = LATEPOINT_STATUS_SUCCESS;
} else {
$response_html = $agent->get_error_messages();
$status = LATEPOINT_STATUS_ERROR;
}
if ( $this->get_return_format() == 'json' ) {
$this->send_json( array( 'status' => $status,
'message' => $response_html,
'show_prev_btn' => $this->show_prev_btn,
'show_next_btn' => $this->show_next_btn
) );
}
}
function setup() {
$current_step_code = $this->steps_in_order[0];
$step_function_name = 'step_' . $current_step_code;
self::$step_function_name();
add_option( 'latepoint_wizard_visited', true );
$this->vars['current_step_code'] = $current_step_code;
$this->vars['current_step_number'] = array_search( $current_step_code, $this->steps_in_order );
$this->vars['step_file_to_include'] = 'steps/_' . $current_step_code . '.php';
$this->format_render( __FUNCTION__ );
}
function next_step() {
$this->show_prev_btn = true;
$this->show_next_btn = true;
// Check if a valid step_code name
if ( isset( $this->steps_info[ $this->params['current_step_code'] ] ) ) {
$current_step_code = $this->params['current_step_code'];
} else {
$current_step_code = $this->steps_in_order[0];
}
$process_step_function_name = 'process_step_' . $current_step_code;
self::$process_step_function_name();
$new_current_step_code = $this->steps_in_order[ array_search( $current_step_code, $this->steps_in_order ) + 1 ];
if ( array_search( $new_current_step_code, $this->steps_in_order ) <= 1 ) {
$this->show_prev_btn = false;
}
$step_function_name = 'step_' . $new_current_step_code;
self::$step_function_name();
$this->vars['current_step_code'] = $new_current_step_code;
$this->vars['current_step_number'] = array_search( $new_current_step_code, $this->steps_in_order );
$this->format_render( 'steps/_' . $new_current_step_code, array(), array( 'step_code' => $new_current_step_code,
'show_prev_btn' => $this->show_prev_btn,
'show_next_btn' => $this->show_next_btn
) );
}
function prev_step() {
// Check if a valid step_code name
if ( isset( $this->steps_info[ $this->params['current_step_code'] ] ) ) {
$current_step_code = $this->params['current_step_code'];
} else {
$current_step_code = $this->steps_in_order[0];
}
$new_current_step_code = ( array_search( $current_step_code, $this->steps_in_order ) > 0 ) ? $this->steps_in_order[ array_search( $current_step_code, $this->steps_in_order ) - 1 ] : $this->steps_in_order[0];
$this->show_prev_btn = array_search( $new_current_step_code, $this->steps_in_order ) > 0;
if ( array_search( $new_current_step_code, $this->steps_in_order ) <= 1 ) {
$this->show_prev_btn = false;
}
$step_function_name = 'step_' . $new_current_step_code;
self::$step_function_name();
$this->vars['current_step_code'] = $new_current_step_code;
$this->vars['current_step_number'] = array_search( $new_current_step_code, $this->steps_in_order );
$this->format_render( 'steps/_' . $new_current_step_code, array(), array( 'step_code' => $new_current_step_code,
'show_prev_btn' => $this->show_prev_btn,
'show_next_btn' => $this->show_next_btn
) );
}
function load_step() {
// Check if a valid step_code name
if ( isset( $this->steps_info[ $this->params['current_step_code'] ] ) ) {
$current_step_code = $this->params['current_step_code'];
} else {
$current_step_code = $this->steps_in_order[0];
}
$step_function_name = 'step_' . $current_step_code;
self::$step_function_name();
$this->vars['current_step_code'] = $current_step_code;
$this->vars['current_step_number'] = array_search( $current_step_code, $this->steps_in_order );
$this->format_render( 'steps/_' . $current_step_code, array(), array( 'step_code' => $current_step_code ) );
}
function add_or_edit_agent() {
$agents = new OsAgentModel();
$this->vars['agents'] = $agents->get_results_as_models();
$agent = new OsAgentModel();
if ( ! empty( $this->params['id'] ) && is_numeric( $this->params['id'] ) ) {
$agent->load_by_id( $this->params['id'] );
}
$this->vars['agent'] = $agent;
$this->format_render( 'steps/_form_agent', array(), array() );
}
function add_or_edit_service() {
$services = new OsServiceModel();
$this->vars['services'] = $services->get_results_as_models();
$service = new OsServiceModel();
if ( isset( $this->params['id'] ) && is_numeric( $this->params['id'] ) ) {
$service->load_by_id( $this->params['id'] );
}
$agents = new OsAgentModel();
$service_categories = new OsServiceCategoryModel();
$this->vars['service_categories_for_select'] = $service_categories->index_for_select();
$this->vars['agents'] = $agents->get_results_as_models();
$this->vars['location'] = OsLocationHelper::get_default_location();
$this->vars['service'] = $service;
$this->format_render( 'steps/_form_service', array(), array() );
}
function step_services() {
$services = new OsServiceModel();
$services = $services->get_results_as_models();
$this->show_prev_btn = false;
$this->vars['services'] = $services;
$this->vars['location'] = OsLocationHelper::get_default_location();
$agents = new OsAgentModel();
$this->vars['agents'] = $agents->get_results_as_models();
if ( ! $services ) {
$service = new OsServiceModel();
$this->vars['service'] = $service;
$this->show_next_btn = false;
} else {
$this->show_next_btn = true;
$this->show_prev_btn = true;
}
}
function step_agents() {
$agents = new OsAgentModel();
$agents = $agents->get_results_as_models();
$this->vars['agents'] = $agents;
$this->show_prev_btn = false;
if ( ! $agents ) {
$agent = new OsAgentModel();
$this->vars['agent'] = $agent;
$this->show_next_btn = false;
} else {
$this->show_next_btn = true;
}
}
function step_default_agent(){
$this->vars['agent'] = OsAgentHelper::get_default_agent();
$this->show_next_btn = true;
}
function step_work_periods() {
$work_periods = OsWorkPeriodsHelper::get_work_periods( new \LatePoint\Misc\Filter() );
$working_periods_with_weekdays = array();
if ( $work_periods ) {
foreach ( $work_periods as $work_period ) {
$working_periods_with_weekdays[ 'day_' . $work_period->week_day ][] = $work_period;
}
}
$this->vars['working_periods_with_weekdays'] = $working_periods_with_weekdays;
}
function step_intro() {
$this->show_next_btn = true;
}
function step_settings() {
}
function step_complete() {
$this->show_next_btn = false;
$this->show_prev_btn = false;
}
function process_step_agents() {
}
function process_step_services() {
}
function process_step_intro() {
}
function process_step_default_agent() {
$default_agent = OsAgentHelper::get_default_agent();
if ( ! $default_agent->is_new_record() ) {
$default_agent->set_data( $this->params['agent'] );
$default_agent->save();
}
}
function process_step_work_periods() {
$work_periods_form_data = $this->params['work_periods'];
OsWorkPeriodsHelper::save_work_periods( $work_periods_form_data );
}
function process_step_info() {
}
}
endif;