_name = $plugin_name; $this->_version = $version; if (apply_filters('tinvwl_enable_wizard', true)) { $this->define_hooks(); } update_option($this->_name . '_wizard', true); } /** * Define hooks */ function define_hooks() { add_action('admin_menu', array($this, 'action_menu')); add_action('admin_init', array($this, 'wizard')); } /** * Create admin page for wizard */ function action_menu() { add_dashboard_page('', '', 'manage_options', 'tinvwl-wizard', ''); } /** * Apply render wizard steps and save previous step * * @return void */ function wizard() { $page = filter_input(INPUT_GET, 'page'); if ('tinvwl-wizard' !== $page) { return; } $this->page = filter_input(INPUT_GET, 'step', FILTER_VALIDATE_INT, array( 'default' => 0, 'min_range' => 0, )); if (empty($this->page)) { $this->page = 'intro'; } if (!method_exists($this, __FUNCTION__ . '_' . $this->page)) { $this->page = 'finish'; } if (method_exists($this, __FUNCTION__ . '_' . $this->page)) { $this->method = __FUNCTION__ . '_' . $this->page; } // Run save form. $referer = wp_get_referer(); if ($referer) { $url_attr = wp_parse_url($referer); if (array_key_exists('query', (array)$url_attr)) { parse_str($url_attr['query'], $url_attr); } else { $url_attr['step'] = 0; } $url_attr = filter_var_array($url_attr, array( 'step' => array( 'filter' => FILTER_VALIDATE_INT, 'default' => 0, 'min_range' => 0, ), )); if (empty($url_attr['step'])) { $url_attr['step'] = 'intro'; } $method = __FUNCTION__ . '_' . $url_attr['step'] . '_save'; if (!method_exists($this, $method)) { $method = __FUNCTION__ . '_finish_save'; } if (method_exists($this, $method)) { $nonce = filter_input(0, '_wpnonce'); if ($nonce && wp_verify_nonce($nonce, sprintf('%s-setup-%s', $this->_name, $url_attr['step']))) { $this->$method(); } } } ob_start(); $this->load_header(); $this->load_content(); $this->load_footer(); exit; } /** * Create index next page * * @return string */ private function next_page() { $index = $this->page; if ('finish' === $index) { return ''; } elseif ('intro' === $index) { $index = 0; } $index++; return 'index.php?' . http_build_query(array( 'page' => 'tinvwl-wizard', 'step' => $index, )); } /** * Output header wizard page */ function load_header() { $this->enqueue_styles(); $this->enqueue_scripts(); $content = $title = ''; $method = $this->method . '_title'; if (method_exists($this, $method)) { $title = $this->$method(); } $method = $this->method . '_header'; if (method_exists($this, $method)) { ob_start(); $this->$method(); $content = ob_get_clean(); } TInvWL_View::view('header', array( 'title' => $title, 'content' => $content, 'page' => $this->page, 'list_steps' => $this->get_list_steps(), ), 'wizard'); } /** * Load style */ function enqueue_styles() { $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; if (apply_filters('tinvwl_load_webfont_admin', true)) { wp_enqueue_style($this->_name . '-gfonts', (is_ssl() ? 'https' : 'http') . '://fonts.googleapis.com/css?family=Open+Sans:400,600,700,800', '', null, 'all'); wp_enqueue_style($this->_name . '-webfont', TINVWL_URL . 'assets/css/webfont' . $suffix . '.css', array(), $this->_version, 'all'); wp_style_add_data($this->_name . '-webfont', 'rtl', 'replace'); wp_style_add_data($this->_name . '-webfont', 'suffix', $suffix); } wp_enqueue_style($this->_name, TINVWL_URL . 'assets/css/admin' . $suffix . '.css', array(), $this->_version, 'all'); wp_style_add_data($this->_name, 'rtl', 'replace'); wp_style_add_data($this->_name, 'suffix', $suffix); wp_enqueue_style($this->_name . '-form', TINVWL_URL . 'assets/css/admin-form' . $suffix . '.css', array(), $this->_version, 'all'); wp_style_add_data($this->_name . '-form', 'rtl', 'replace'); wp_style_add_data($this->_name . '-form', 'suffix', $suffix); wp_enqueue_style($this->_name . '-setup', TINVWL_URL . 'assets/css/admin-setup' . $suffix . '.css', array( 'dashicons', ), $this->_version, 'all'); wp_style_add_data($this->_name . '-setup', 'rtl', 'replace'); wp_style_add_data($this->_name . '-setup', 'suffix', $suffix); } /** * Load javascript */ function enqueue_scripts() { wp_enqueue_script($this->_name, TINVWL_URL . 'assets/js/admin.js', array('jquery'), $this->_version, 'all'); } /** * Output content wizard page */ function load_content() { ?>
method; if (method_exists($this, $method)) { $this->$method(); } wp_nonce_field(sprintf('%s-setup-%s', $this->_name, $this->page)); ?>
$value) { if (!preg_match('/^wizard_[^_]+_title$/i', $value)) { unset($lists[$key]); } } sort($lists); $steps = array(); foreach ($lists as $method) { $key = preg_replace('/(^wizard_|_title$)/i', '', $method); if ('intro' == $key) { // WPCS: loose comparison ok. $key = 0; } elseif ('finish' == $key) { // WPCS: loose comparison ok. $key = count($lists) - 1; } $steps[$key] = $this->$method(); } ksort($steps); return $steps; } /** * Output footer wizard page */ function load_footer() { $content = ''; $method = $this->method . '_footer'; if (method_exists($this, $method)) { ob_start(); $this->$method(); $content = ob_get_clean(); } TInvWL_View::view('footer', array( 'content' => $content, 'page' => $this->page, ), 'wizard'); } /** * Title intro * * @return string */ function wizard_intro_title() { return __('Introduction', 'ti-woocommerce-wishlist'); } /** * Content intro */ function wizard_intro() { TInvWL_View::view('intro', array(), 'wizard'); } /** * Title step 1 * * @return string */ function wizard_1_title() { return __('Page Setup', 'ti-woocommerce-wishlist'); } /** * Content step 1 */ function wizard_1() { $title_pages = array( 'wishlist' => __('Wishlist', 'ti-woocommerce-wishlist'), ); $lists = get_pages(array('number' => 9999999)); // @codingStandardsIgnoreLine WordPress.VIP.RestrictedFunctions.get_pages $page_list = array( '' => __('Create Automatically', 'ti-woocommerce-wishlist'), -100 => __('Create new Page', 'ti-woocommerce-wishlist'), ); $page_name = array(); foreach ($lists as $list) { $page_list[$list->ID] = $list->post_title; $page_name[$list->post_name] = $list->ID; } $data = array( 'general_default_title_value' => apply_filters('tinvwl_default_wishlist_title', tinv_get_option('general', 'default_title')), ); foreach ($title_pages as $key => $text) { $_data['options'] = $page_list; $_data['new_value'] = $text; $_data['value'] = tinv_get_option('page', $key) ? tinv_get_option('page', $key) : ''; $_data['error'] = array_key_exists(('wishlist' === $key ? $key : 'wishlist-' . $key), $page_name); $data['page_pages'][$key] = $_data; } TInvWL_View::view('step-page', $data, 'wizard'); } /** * Save content step 1 */ function wizard_1_save() { $title_pages = array( 'wishlist' => __('Wishlist', 'ti-woocommerce-wishlist'), ); $shortcode_pages = array( 'wishlist' => '[ti_wishlistsview]', ); $data = array( 'general_default_title' => FILTER_SANITIZE_FULL_SPECIAL_CHARS, ); foreach (array_keys($title_pages) as $key) { $data['page_' . $key] = FILTER_VALIDATE_INT; $data['page_' . $key . '_new'] = FILTER_SANITIZE_FULL_SPECIAL_CHARS; $data['page_' . $key . '_auto'] = FILTER_VALIDATE_BOOLEAN; } $data = filter_input_array(INPUT_POST, $data); if (!empty($data['general_default_title'])) { tinv_update_option('general', 'default_title', $data['general_default_title']); } $required = array('wishlist'); $required_notsets = array(); foreach ($title_pages as $key => $title) { $shortcode = $shortcode_pages[$key]; $auto = $data[sprintf('page_%s_auto', $key)]; $title_new = $data[sprintf('page_%s_new', $key)]; $page = $data[sprintf('page_%s', $key)]; $the_page_id = 0; if ((empty($page) && $auto) || (is_integer($page) && -100 === $page)) { if (-100 === $page) { $title = empty($title_new) ? $title : $title_new; } $title = apply_filters('tinvwl_create_new_page_post_title', $title, $key); $_page = array( 'post_title' => $title, 'post_content' => $shortcode, 'post_status' => '', 'post_name' => 'wishlist' === $key ? $key : 'wishlist-' . $key, 'post_type' => 'page', 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_category' => array(1), ); if (-100 === $page) { unset($_page['post_name']); } $the_page_id = wp_insert_post($_page); } elseif (is_integer($page) && 0 < $page) { $the_page_id = $page; } if (0 < $the_page_id) { $the_page = get_post($the_page_id); $the_page->post_content = (strpos($the_page->post_content, $shortcode) !== false) ? $the_page->post_content : $shortcode . $the_page->post_content; $the_page->post_status = 'publish'; $the_page_id = wp_update_post($the_page); tinv_update_option('page', $key, $the_page_id); } else { tinv_update_option('page', $key, ''); if (in_array($key, $required)) { // @codingStandardsIgnoreLine WordPress.PHP.StrictInArray.MissingTrueStrict $required_notsets[] = $key; } } } // End foreach(). if (!empty($required_notsets)) { wp_safe_redirect(wp_get_referer()); exit; } else { TInvWL_Public_TInvWL::update_rewrite_rules(); } } /** * Title step 2 * * @return string */ function wizard_2_title() { return __('Button', 'ti-woocommerce-wishlist'); } /** * Content step 2 */ function wizard_2() { $data = array( 'add_to_wishlist_position_value' => tinv_get_option('add_to_wishlist', 'position'), 'add_to_wishlist_position_options' => array( 'after' => __('After "Add to Cart" button', 'ti-woocommerce-wishlist'), 'before' => __('Before "Add to Cart" button', 'ti-woocommerce-wishlist'), 'shortcode' => __('Custom position with code', 'ti-woocommerce-wishlist'), ), 'add_to_wishlist_text_value' => tinv_get_option('add_to_wishlist', 'text'), 'add_to_wishlist_catalog_show_in_loop_value' => tinv_get_option('add_to_wishlist_catalog', 'show_in_loop'), 'add_to_wishlist_catalog_text_value' => tinv_get_option('add_to_wishlist_catalog', 'text'), ); TInvWL_View::view('step-button', $data, 'wizard'); } /** * Save content step 2 */ function wizard_2_save() { $data = filter_input_array(INPUT_POST, array( 'add_to_wishlist_position' => FILTER_SANITIZE_FULL_SPECIAL_CHARS, 'add_to_wishlist_text' => FILTER_SANITIZE_FULL_SPECIAL_CHARS, 'add_to_wishlist_catalog_show_in_loop' => FILTER_VALIDATE_BOOLEAN, 'add_to_wishlist_catalog_text' => FILTER_SANITIZE_FULL_SPECIAL_CHARS, )); tinv_update_option('add_to_wishlist', 'position', $data['add_to_wishlist_position']); tinv_update_option('add_to_wishlist', 'text', $data['add_to_wishlist_text']); tinv_update_option('add_to_wishlist_catalog', 'show_in_loop', (bool)$data['add_to_wishlist_catalog_show_in_loop']); tinv_update_option('add_to_wishlist_catalog', 'text', $data['add_to_wishlist_catalog_text']); } /** * Title step 3 * * @return string */ function wizard_3_title() { return __('Processing', 'ti-woocommerce-wishlist'); } /** * Content step 3 */ function wizard_3() { $data = array( 'processing_autoremove_value' => tinv_get_option('processing', 'autoremove') ? 'auto' : 'manual', 'processing_autoremove_options' => array( 'auto' => __('Automatically', 'ti-woocommerce-wishlist'), 'manual' => __('Manual', 'ti-woocommerce-wishlist'), ), ); TInvWL_View::view('step-processing', $data, 'wizard'); } /** * Save content step 3 */ function wizard_3_save() { $data = filter_input_array(INPUT_POST, array( 'processing_autoremove' => FILTER_SANITIZE_FULL_SPECIAL_CHARS, )); $autoremove = 'auto' === $data['processing_autoremove']; tinv_update_option('processing', 'autoremove', $autoremove); tinv_update_option('processing', 'autoremove_status', 'tinvwl-addcart'); } /** * Title step 4 * * @return string */ function wizard_4_title() { return __('Share', 'ti-woocommerce-wishlist'); } /** * Content step 4 */ function wizard_4() { $data = array( 'social_facebook_value' => tinv_get_option('social', 'facebook'), 'social_twitter_value' => tinv_get_option('social', 'twitter'), 'social_pinterest_value' => tinv_get_option('social', 'pinterest'), 'social_whatsapp_value' => tinv_get_option('social', 'whatsapp'), 'social_clipboard_value' => tinv_get_option('social', 'clipboard'), 'social_email_value' => tinv_get_option('social', 'email'), ); TInvWL_View::view('step-social', $data, 'wizard'); } /** * Save content step 4 */ function wizard_4_save() { $data = filter_input_array(INPUT_POST, array( 'social_facebook' => FILTER_VALIDATE_BOOLEAN, 'social_twitter' => FILTER_VALIDATE_BOOLEAN, 'social_pinterest' => FILTER_VALIDATE_BOOLEAN, 'social_whatsapp' => FILTER_VALIDATE_BOOLEAN, 'social_clipboard' => FILTER_VALIDATE_BOOLEAN, 'social_email' => FILTER_VALIDATE_BOOLEAN, )); tinv_update_option('social', 'facebook', (bool)$data['social_facebook']); tinv_update_option('social', 'twitter', (bool)$data['social_twitter']); tinv_update_option('social', 'pinterest', (bool)$data['social_pinterest']); tinv_update_option('social', 'whatsapp', (bool)$data['social_whatsapp']); tinv_update_option('social', 'clipboard', (bool)$data['social_clipboard']); tinv_update_option('social', 'email', (bool)$data['social_email']); } /** * Title step 5 * * @return string */ function wizard_5_title() { return __('Support', 'ti-woocommerce-wishlist'); } /** * Content step 5 */ function wizard_5() { $data = array( 'chat_enabled' => 'off', ); TInvWL_View::view('step-support', $data, 'wizard'); } /** * Save content step 5 */ function wizard_5_save() { $data = filter_input_array(INPUT_POST, array( 'chat_enabled' => FILTER_VALIDATE_BOOLEAN, )); tinv_update_option('chat', 'enabled', (bool)$data['chat_enabled']); } /** * Title finish * * @return string */ function wizard_finish_title() { return __('Ready!', 'ti-woocommerce-wishlist'); } /** * Content finish */ function wizard_finish() { TInvWL_View::view('finish', array(), 'wizard'); } }