geno/wp-content/plugins/cartflows/wizard/inc/wizard-core.php
2024-02-01 11:54:18 +00:00

430 lines
12 KiB
PHP

<?php
/**
* CartFlows Admin Menu.
*
* @package CartFlows
*/
namespace CartflowsAdmin\Wizard\Inc;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class Admin_Menu.
*/
class WizardCore {
/**
* Instance
*
* @access private
* @var object Class object.
* @since 1.0.0
*/
private static $instance;
/**
* Initiator
*
* @since 1.0.0
* @return object initialized object of class.
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor.
*/
public function __construct() {
if ( apply_filters( 'cartflows_enable_setup_wizard', true ) && current_user_can( 'manage_options' ) ) {
add_action( 'admin_menu', array( $this, 'admin_menus' ) );
add_action( 'admin_init', array( $this, 'setup_wizard' ) );
add_action( 'admin_init', array( $this, 'hide_notices' ) );
add_action( 'admin_notices', array( $this, 'show_setup_wizard' ) );
add_action( 'woocommerce_installed', array( $this, 'disable_woo_setup_redirect' ) );
// We are hiding admin bar intentionally for setup wizard.
add_filter( 'show_admin_bar', '__return_false', 1 ); //phpcs:ignore WordPressVIPMinimum.UserExperience.AdminBarRemoval.RemovalDetected
add_action( 'init', array( $this, 'load_scripts' ) );
add_action( 'admin_print_styles', array( $this, 'load_admin_media_styles' ) );
add_action( 'admin_init', array( $this, 'redirect_to_onboarding' ) );
}
}
/**
* Redirect to onboarding if required.
*
* @return void
* @since 2.0.0
*/
public function redirect_to_onboarding() {
if ( ! get_option( 'wcf_start_onboarding', false ) ) {
return;
}
if ( '1' === get_option( 'wcf_setup_complete', false ) || '1' === get_option( 'wcf_setup_skipped', false ) ) {
return;
}
delete_option( 'wcf_start_onboarding' );
wp_safe_redirect( esc_url_raw( admin_url( 'index.php?page=cartflow-setup' ) ) );
exit();
}
/**
* Load styles.
*/
public function load_admin_media_styles() {
$ary_libs = array(
'common',
'forms',
);
$admin_media_styles_url = add_query_arg(
array(
'c' => 0,
'dir' => ! is_rtl() ? 'ltr' : 'rtl',
'load[]' => implode( ',', $ary_libs ),
'ver' => 'you_wp_version',
),
admin_url() . 'load-styles.php'
);
echo "<link rel='stylesheet' id='admin_styles_for_media-css' href='" . esc_url( $admin_media_styles_url ) . "' type='text/css' media='all' />";
}
/**
* Load media.
*/
public function load_scripts() {
add_action( 'wp_enqueue_scripts', array( $this, 'load_media_script' ) );
}
/**
* Load WP media script on init.
*/
public function load_media_script() {
wp_enqueue_media();
}
/**
* Hide a notice if the GET variable is set.
*/
public function hide_notices() {
if ( ! isset( $_GET['wcf-hide-notice'] ) ) {
return;
}
$wcf_hide_notice = isset( $_GET['wcf-hide-notice'] ) ? sanitize_text_field( wp_unslash( $_GET['wcf-hide-notice'] ) ) : '';
$_wcf_notice_nonce = isset( $_GET['_wcf_notice_nonce'] ) ? sanitize_text_field( wp_unslash( $_GET['_wcf_notice_nonce'] ) ) : '';
if ( $wcf_hide_notice && $_wcf_notice_nonce && wp_verify_nonce( sanitize_text_field( wp_unslash( $_wcf_notice_nonce ) ), 'wcf_hide_notices_nonce' ) ) {
update_option( 'wcf_setup_skipped', true );
}
}
/**
* Disable the woo redirect for new setup.
*/
public function disable_woo_setup_redirect() {
delete_transient( '_wc_activation_redirect' );
}
/**
* Show action links on the plugin screen.
*
* @since 1.0.0
* @return void
*/
public function show_setup_wizard() {
$screen = get_current_screen();
$screen_id = $screen ? $screen->id : '';
$allowed_screens = array(
'cartflows_page_cartflows_settings',
'edit-cartflows_flow',
'dashboard',
'plugins',
);
if ( ! in_array( $screen_id, $allowed_screens, true ) ) {
return;
}
$status = get_option( 'wcf_setup_complete', false );
$skip_setup = get_option( 'wcf_setup_skipped', false );
if ( false === $status && ! $skip_setup ) { ?>
<div class="notice notice-info wcf-notice">
<p><b><?php esc_html_e( 'Thanks for installing and using CartFlows!', 'cartflows' ); ?></b></p>
<p><?php esc_html_e( 'It is easy to use the CartFlows. Please use the setup wizard to quick start setup.', 'cartflows' ); ?></p>
<p>
<a href="<?php echo esc_url( admin_url( 'index.php?page=cartflow-setup' ) ); ?>" class="button button-primary"> <?php esc_html_e( 'Start Wizard', 'cartflows' ); ?></a>
<a class="button-secondary" href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'wcf-hide-notice', 'install' ), 'wcf_hide_notices_nonce', '_wcf_notice_nonce' ) ); ?>"><?php esc_html_e( 'Skip Setup', 'cartflows' ); ?></a>
</p>
</div>
<?php
}
}
/**
* Add admin menus/screens.
*/
public function admin_menus() {
// Ignoring phpcs nonce rule as we are calling this function on admin action.
if ( empty( $_GET['page'] ) || 'cartflow-setup' !== $_GET['page'] ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
return;
}
add_dashboard_page( '', '', 'manage_options', 'cartflow-setup', '' );
}
/**
* Show the setup wizard.
*/
public function setup_wizard() {
// Ignoring phpcs nonce rule as we are calling this function on admin action.
if ( empty( $_GET['page'] ) || 'cartflow-setup' !== $_GET['page'] ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
return;
}
$this->load_required_scripts();
$this->localize_vars();
// Diable loading of Query Monitor in footer.
add_filter( 'qm/dispatch/html', '__return_false' );
ob_start();
include_once CARTFLOWS_DIR . 'wizard/views/wizard-base.php';
}
/**
* Load scripts.
*/
public function load_required_scripts() {
$handle = 'cartflows-wizard';
$build_path = CARTFLOWS_DIR . 'wizard/assets/build/';
$build_url = CARTFLOWS_URL . 'wizard/assets/build/';
$script_asset_path = $build_path . 'wizard-app.asset.php';
$script_info = file_exists( $script_asset_path )
? include $script_asset_path
: array(
'dependencies' => array(),
'version' => CARTFLOWS_VER,
);
$script_dep = array_merge( $script_info['dependencies'], array( 'updates' ) );
wp_register_script(
$handle,
$build_url . 'wizard-app.js',
$script_dep,
$script_info['version'],
true
);
wp_register_style(
$handle,
$build_url . 'wizard-app.css',
array(),
CARTFLOWS_VER
);
wp_enqueue_script( $handle );
wp_enqueue_style( $handle );
wp_style_add_data( $handle, 'rtl', 'replace' );
wp_register_script(
'cartflows-setup-helper',
CARTFLOWS_URL . 'wizard/assets/js/helper.js',
array( 'jquery', 'wp-util', 'updates', 'media-upload' ),
CARTFLOWS_VER,
true
);
wp_enqueue_script( 'cartflows-setup-helper' );
wp_enqueue_media();
wp_enqueue_script( 'jquery-ui' );
}
/**
* Save usage tracking Settings.
*/
public function save_usage_tracking_option() {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
check_ajax_referer( 'wcf-usage-tracking-option', 'security' );
$allow_usage_tracking = isset( $_POST['allow_usage_tracking'] ) && 'true' == $_POST['allow_usage_tracking'] ? 'yes' : 'no';
$usage_tracking = get_site_option( 'cf_analytics_optin' );
if ( ( false === $usage_tracking ) || $allow_usage_tracking !== $usage_tracking ) {
update_site_option( 'cf_analytics_optin', $allow_usage_tracking );
}
wp_send_json_success( get_site_option( 'cf_analytics_optin' ) );
}
/**
* Redirect the user to create his first flow depending on which UI he is using.
*/
public function get_final_page_link() {
$default_url = add_query_arg(
array(
'page' => CARTFLOWS_SLUG,
'path' => 'flows',
),
admin_url()
);
return $default_url;
}
/**
* Localize variables in admin.
*/
public function localize_vars() {
$vars = array();
$plugins = array(
'woocommerce' => $this->get_plugin_status( 'woocommerce/woocommerce.php' ),
'woo-cart-abandonment-recovery' => $this->get_plugin_status( 'woo-cart-abandonment-recovery/woo-cart-abandonment-recovery.php' ),
);
$installed_plugins = get_plugins();
$page_builders = array(
'elementor' => array(
'slug' => 'elementor',
'init' => 'elementor/elementor.php',
'active' => is_plugin_active( 'elementor/elementor.php' ) ? 'yes' : 'no',
'install' => isset( $installed_plugins['elementor/elementor.php'] ) ? 'yes' : 'no',
),
'beaver-builder' => array(
'slug' => 'beaver-builder-lite-version',
'init' => 'beaver-builder-lite-version/fl-builder.php',
'active' => is_plugin_active( 'beaver-builder-lite-version/fl-builder.php' ) ? 'yes' : 'no',
'install' => isset( $installed_plugins['beaver-builder-lite-version/fl-builder.php'] ) ? 'yes' : 'no',
),
'divi' => array(
'slug' => 'divi',
'init' => 'divi',
'active' => 'yes',
'install' => 'NA',
),
'gutenberg' => array(
'slug' => 'ultimate-addons-for-gutenberg',
'init' => 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php',
'active' => is_plugin_active( 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php' ) ? 'yes' : 'no',
'install' => isset( $installed_plugins['ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php'] ) ? 'yes' : 'no',
),
// Intentionally installing the GB plugin when the other option is selected.
'other' => array(
'slug' => 'ultimate-addons-for-gutenberg',
'init' => 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php',
'active' => is_plugin_active( 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php' ) ? 'yes' : 'no',
'install' => isset( $installed_plugins['ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php'] ) ? 'yes' : 'no',
),
);
$current_user = wp_get_current_user();
$vars = array(
'current_user_name' => ! empty( $current_user->user_firstname ) ? $current_user->user_firstname : $current_user->display_name,
'current_user_email' => ! empty( $current_user->user_email ) ? $current_user->user_email : '',
'plugins' => $plugins,
'page_builders' => $page_builders,
'ajax_url' => admin_url( 'admin-ajax.php' ),
'admin_url' => admin_url( 'admin.php' ),
'admin_base_url' => admin_url(),
'admin_index_url' => admin_url( 'index.php' ),
'default_page_builder' => \Cartflows_Helper::get_common_settings()['default_page_builder'],
'site_logo' => $this->get_site_logo_url(),
'template_import_errors' => array(
'api_errors' => array(
'title' => __( 'Oops!! Unexpected error occoured', 'cartflows' ),
'msg' => __( 'Import template API call failed. Please reload the page and try again!', 'cartflows' ),
),
),
'is_pro' => _is_cartflows_pro(),
'cf_pro_type' => defined( 'CARTFLOWS_PRO_PLUGIN_TYPE' ) ? CARTFLOWS_PRO_PLUGIN_TYPE : 'free',
);
$vars = apply_filters( 'cartflows_admin_wizard_localized_vars', $vars );
wp_localize_script( 'cartflows-wizard', 'cartflows_wizard', $vars );
}
/**
* Get customizer/site logo URL.
*
* @since 1.10.0
*
* @return $image_url Site logo URL
*/
public function get_site_logo_url() {
$logo = get_theme_mod( 'custom_logo' );
$site_logo = '';
if ( ! empty( $logo ) ) {
$image = wp_get_attachment_image_src( $logo, 'full' );
$site_logo = array(
'id' => $logo,
'url' => $image[0] ? $image[0] : '',
'width' => $image[1] ? $image[1] : '',
'height' => $image[2] ? $image[2] : '',
);
}
return $site_logo;
}
/**
* Get plugin status
*
* @since 1.1.4
*
* @param string $plugin_init_file Plguin init file.
* @return mixed
*/
public function get_plugin_status( $plugin_init_file ) {
$installed_plugins = get_plugins();
if ( ! isset( $installed_plugins[ $plugin_init_file ] ) ) {
return 'not-installed';
} elseif ( is_plugin_active( $plugin_init_file ) ) {
return 'active';
} else {
return 'inactive';
}
}
}
WizardCore::get_instance();