set_vars( $config );
$this->init();
}
/**
* Set some settings
* @since 1.0.0
* @param $config Our config parameters
*/
public function set_vars( $config ) {
require_once trailingslashit( WHIZZIE_DIR ) . 'tgm/class-tgm-plugin-activation.php';
require_once trailingslashit( WHIZZIE_DIR ) . 'tgm/tgm.php';
if( isset( $config['air_ticket_booking_page_slug'] ) ) {
$this->air_ticket_booking_page_slug = esc_attr( $config['air_ticket_booking_page_slug'] );
}
if( isset( $config['air_ticket_booking_page_title'] ) ) {
$this->air_ticket_booking_page_title = esc_attr( $config['air_ticket_booking_page_title'] );
}
if( isset( $config['steps'] ) ) {
$this->config_steps = $config['steps'];
}
$this->air_ticket_booking_plugin_path = trailingslashit( dirname( __FILE__ ) );
$relative_url = str_replace( get_template_directory(), '', $this->air_ticket_booking_plugin_path );
$this->air_ticket_booking_plugin_url = trailingslashit( get_template_directory_uri() . $relative_url );
$air_ticket_booking_current_theme = wp_get_theme();
$this->air_ticket_booking_theme_title = $air_ticket_booking_current_theme->get( 'Name' );
$this->air_ticket_booking_theme_name = strtolower( preg_replace( '#[^a-zA-Z]#', '', $air_ticket_booking_current_theme->get( 'Name' ) ) );
$this->air_ticket_booking_page_slug = apply_filters( $this->air_ticket_booking_theme_name . '_theme_setup_wizard_air_ticket_booking_page_slug', $this->air_ticket_booking_theme_name . '-wizard' );
$this->parent_slug = apply_filters( $this->air_ticket_booking_theme_name . '_theme_setup_wizard_parent_slug', '' );
}
/**
* Hooks and filters
* @since 1.0.0
*/
public function init() {
if ( class_exists( 'TGM_Plugin_Activation' ) && isset( $GLOBALS['tgmpa'] ) ) {
add_action( 'init', array( $this, 'get_tgmpa_instance' ), 30 );
add_action( 'init', array( $this, 'set_tgmpa_url' ), 40 );
}
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
add_action( 'admin_menu', array( $this, 'menu_page' ) );
add_action( 'admin_init', array( $this, 'get_plugins' ), 30 );
add_filter( 'tgmpa_load', array( $this, 'tgmpa_load' ), 10, 1 );
add_action( 'wp_ajax_setup_plugins', array( $this, 'setup_plugins' ) );
}
public function enqueue_scripts() {
wp_enqueue_style( 'air-ticket-booking-homepage-setup-style', get_template_directory_uri() . '/inc/homepage-setup/assets/css/homepage-setup-style.css');
wp_register_script( 'air-ticket-booking-homepage-setup-script', get_template_directory_uri() . '/inc/homepage-setup/assets/js/homepage-setup-script.js', array( 'jquery' ), time() );
wp_localize_script(
'air-ticket-booking-homepage-setup-script',
'whizzie_params',
array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'wpnonce' => wp_create_nonce( 'whizzie_nonce' ),
'verify_text' => esc_html( 'verifying', 'air-ticket-booking' )
)
);
wp_enqueue_script( 'air-ticket-booking-homepage-setup-script' );
}
public static function get_instance() {
if ( ! self::$instance ) {
self::$instance = new self;
}
return self::$instance;
}
public function tgmpa_load( $status ) {
return is_admin() || current_user_can( 'install_themes' );
}
/**
* Get configured TGMPA instance
*
* @access public
* @since 1.1.2
*/
public function get_tgmpa_instance() {
$this->tgmpa_instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) );
}
/**
* Update $tgmpa_menu_slug and $tgmpa_parent_slug from TGMPA instance
*
* @access public
* @since 1.1.2
*/
public function set_tgmpa_url() {
$this->tgmpa_menu_slug = ( property_exists( $this->tgmpa_instance, 'menu' ) ) ? $this->tgmpa_instance->menu : $this->tgmpa_menu_slug;
$this->tgmpa_menu_slug = apply_filters( $this->air_ticket_booking_theme_name . '_theme_setup_wizard_tgmpa_menu_slug', $this->tgmpa_menu_slug );
$tgmpa_parent_slug = ( property_exists( $this->tgmpa_instance, 'parent_slug' ) && $this->tgmpa_instance->parent_slug !== 'themes.php' ) ? 'admin.php' : 'themes.php';
$this->tgmpa_url = apply_filters( $this->air_ticket_booking_theme_name . '_theme_setup_wizard_tgmpa_url', $tgmpa_parent_slug . '?page=' . $this->tgmpa_menu_slug );
}
/**
* Make a modal screen for the wizard
*/
public function menu_page() {
add_theme_page( esc_html( $this->air_ticket_booking_page_title ), esc_html( $this->air_ticket_booking_page_title ), 'manage_options', $this->air_ticket_booking_page_slug, array( $this, 'wizard_page' ) );
}
/**
* Make an interface for the wizard
*/
public function wizard_page() {
tgmpa_load_bulk_installer();
if ( ! class_exists( 'TGM_Plugin_Activation' ) || ! isset( $GLOBALS['tgmpa'] ) ) {
die( esc_html__( 'Failed to find TGM', 'air-ticket-booking' ) );
}
$url = wp_nonce_url( add_query_arg( array( 'plugins' => 'go' ) ), 'whizzie-setup' );
$method = '';
$fields = array_keys( $_POST );
if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, $fields ) ) ) {
return true;
}
if ( ! WP_Filesystem( $creds ) ) {
request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, $fields );
return true;
}
$air_ticket_booking_theme = wp_get_theme();
$air_ticket_booking_theme_title = $air_ticket_booking_theme->get( 'Name' );
$air_ticket_booking_theme_version = $air_ticket_booking_theme->get( 'Version' );
?>
%s %s', esc_html( $air_ticket_booking_theme_title ), esc_html( '(Version :- ' . $air_ticket_booking_theme_version . ')' ) );
?>
get_steps();
echo '';
?>
';
echo '' . esc_html( $step_number ) . '';
echo '';
$step_number++;
}
?>
config_steps;
$air_ticket_booking_steps = array(
'plugins' => array(
'id' => 'plugins',
'title' => __( 'Install and Activate Essential Plugins', 'air-ticket-booking' ),
'icon' => 'admin-plugins',
'view' => 'get_step_plugins',
'callback' => 'install_plugins',
'button_text' => __( 'Install Plugins', 'air-ticket-booking' ),
'can_skip' => true
),
'widgets' => array(
'id' => 'widgets',
'title' => __( 'Setup Home Page', 'air-ticket-booking' ),
'icon' => 'welcome-widgets-menus',
'view' => 'get_step_widgets',
'callback' => 'air_ticket_booking_install_widgets',
'button_text' => __( 'Start Home Page Setup', 'air-ticket-booking' ),
'button_url' => esc_url( admin_url( 'themes.php?page=ediot-template-importer' ) ),
'can_skip' => false,
)
);
// Iterate through each step and replace with dev config values
if( $air_ticket_booking_dev_steps ) {
// Configurable elements - these are the only ones the dev can update from homepage-setup-settings.php
$can_config = array( 'title', 'icon', 'button_text', 'can_skip' );
foreach( $air_ticket_booking_dev_steps as $air_ticket_booking_dev_step ) {
// We can only proceed if an ID exists and matches one of our IDs
if( isset( $air_ticket_booking_dev_step['id'] ) ) {
$id = $air_ticket_booking_dev_step['id'];
if( isset( $air_ticket_booking_steps[$id] ) ) {
foreach( $can_config as $element ) {
if( isset( $air_ticket_booking_dev_step[$element] ) ) {
$air_ticket_booking_steps[$id][$element] = $air_ticket_booking_dev_step[$element];
}
}
}
}
}
}
return $air_ticket_booking_steps;
}
/**
* Get the content for the plugins step
* @return $content Array
*/
public function get_step_plugins() {
$plugins = $this->get_plugins();
$content = array();
// Add plugin name and type at the top
$content['detail'] = '';
$content['detail'] .= '
Plugin
';
$content['detail'] .= '
Type
';
$content['detail'] .= '
';
// The detail element is initially hidden from the user
$content['detail'] .= '';
// Add each plugin into a list
foreach( $plugins['all'] as $slug=>$plugin ) {
if ( $slug != 'easy-post-views-count') {
$content['detail'] .= '- ' . esc_html( $plugin['name'] ) . '';
$keys = array();
if ( isset( $plugins['install'][ $slug ] ) ) {
$keys[] = 'Installation';
}
if ( isset( $plugins['update'][ $slug ] ) ) {
$keys[] = 'Update';
}
if ( isset( $plugins['activate'][ $slug ] ) ) {
$keys[] = 'Activation';
}
$content['detail'] .= implode( ' and ', $keys ) . ' required';
$content['detail'] .= '
';
}
}
$content['detail'] .= '
';
return $content;
}
/**
* Print the content for the widgets step
* @since 1.1.0
*/
public function get_step_widgets() { ?> array(),
'install' => array(),
'update' => array(),
'activate' => array()
);
foreach( $instance->plugins as $slug=>$plugin ) {
if( $instance->is_plugin_active( $slug ) && false === $instance->does_plugin_have_update( $slug ) ) {
// Plugin is installed and up to date
continue;
} else {
$plugins['all'][$slug] = $plugin;
if( ! $instance->is_plugin_installed( $slug ) ) {
$plugins['install'][$slug] = $plugin;
} else {
if( false !== $instance->does_plugin_have_update( $slug ) ) {
$plugins['update'][$slug] = $plugin;
}
if( $instance->can_plugin_activate( $slug ) ) {
$plugins['activate'][$slug] = $plugin;
}
}
}
}
return $plugins;
}
/**
* Get the widgets.wie file from the /content folder
* @return Mixed Either the file or false
* @since 1.1.0
*/
public function has_widget_file() {
if( file_exists( $this->widget_file_url ) ) {
return true;
}
return false;
}
public function setup_plugins() {
if ( ! check_ajax_referer( 'whizzie_nonce', 'wpnonce' ) || empty( $_POST['slug'] ) ) {
wp_send_json_error( array( 'error' => 1, 'message' => esc_html__( 'No Slug Found','air-ticket-booking' ) ) );
}
$json = array();
// send back some json we use to hit up TGM
$plugins = $this->get_plugins();
// what are we doing with this plugin?
foreach ( $plugins['activate'] as $slug => $plugin ) {
if ( $_POST['slug'] == $slug ) {
$json = array(
'url' => admin_url( $this->tgmpa_url ),
'plugin' => array( $slug ),
'tgmpa-page' => $this->tgmpa_menu_slug,
'plugin_status' => 'all',
'_wpnonce' => wp_create_nonce( 'bulk-plugins' ),
'action' => 'tgmpa-bulk-activate',
'action2' => - 1,
'message' => esc_html__( 'Activating Plugin','air-ticket-booking' ),
);
break;
}
}
foreach ( $plugins['update'] as $slug => $plugin ) {
if ( $_POST['slug'] == $slug ) {
$json = array(
'url' => admin_url( $this->tgmpa_url ),
'plugin' => array( $slug ),
'tgmpa-page' => $this->tgmpa_menu_slug,
'plugin_status' => 'all',
'_wpnonce' => wp_create_nonce( 'bulk-plugins' ),
'action' => 'tgmpa-bulk-update',
'action2' => - 1,
'message' => esc_html__( 'Updating Plugin','air-ticket-booking' ),
);
break;
}
}
foreach ( $plugins['install'] as $slug => $plugin ) {
if ( $_POST['slug'] == $slug ) {
$json = array(
'url' => admin_url( $this->tgmpa_url ),
'plugin' => array( $slug ),
'tgmpa-page' => $this->tgmpa_menu_slug,
'plugin_status' => 'all',
'_wpnonce' => wp_create_nonce( 'bulk-plugins' ),
'action' => 'tgmpa-bulk-install',
'action2' => - 1,
'message' => esc_html__( 'Installing Plugin','air-ticket-booking' ),
);
break;
}
}
if ( $json ) {
$json['hash'] = md5( serialize( $json ) ); // used for checking if duplicates happen, move to next plugin
wp_send_json( $json );
} else {
wp_send_json( array( 'done' => 1, 'message' => esc_html__( 'Success','air-ticket-booking' ) ) );
}
exit;
}
}