config = $config; self::$instance->setup_config(); self::$instance->setup_actions(); } } } /** * Setup the class props based on the config array. */ public function setup_config() { $theme = wp_get_theme(); if (is_child_theme()) { $this->theme_name = $theme->parent()->get('Name'); $this->theme = $theme->parent(); } else { $this->theme_name = $theme->get('Name'); $this->theme = $theme->parent(); } $this->theme_version = $theme->get('Version'); $this->theme_slug = $theme->get_template(); $this->menu_name = isset($this->config['menu_name']) ? $this->config['menu_name'] : 'About ' . $this->theme_name; $this->page_name = isset($this->config['page_name']) ? $this->config['page_name'] : 'About ' . $this->theme_name; $this->notification = isset($this->config['notification']) ? $this->config['notification'] : ( apply_filters('traffica_welcome_notice_filter', ( '

' . sprintf('Welcome! Thank you for choosing %1$s! To fully take advantage of the best our theme can offer please make sure you visit our %2$swelcome page%3$s.', $this->theme_name, '', '') . '

' . sprintf('Get started with %s', $this->theme_name) . '

')) ); $this->tabs = isset($this->config['tabs']) ? $this->config['tabs'] : array(); } /** * Setup the actions used for this page. */ public function setup_actions() { add_action('admin_menu', array($this, 'register')); /* activation notice */ add_action('load-themes.php', array($this, 'activation_admin_notice')); /* enqueue script and style for about page */ add_action('admin_enqueue_scripts', array($this, 'style_and_scripts')); /* ajax callback for dismissable required actions */ add_action('wp_ajax_ti_about_page_dismiss_required_action', array($this, 'dismiss_required_action_callback')); add_action('wp_ajax_nopriv_ti_about_page_dismiss_required_action', array($this, 'dismiss_required_action_callback')); } /** * Hide required tab if no actions present. * * @return bool Either hide the tab or not. */ public function hide_required($value, $tab) { if ($tab != 'recommended_actions') { return $value; } $required = $this->get_required_actions(); if (count($required) == 0) { return false; } else { return true; } } /** * Register the menu page under Appearance menu. */ function register() { if (!empty($this->menu_name) && !empty($this->page_name)) { $count = 0; $actions_count = $this->get_required_actions(); if (!empty($actions_count)) { $count = count($actions_count); } $title = $count > 0 ? $this->page_name . '' . esc_html($count) . '' : $this->page_name; add_theme_page( $this->menu_name, $title, 'activate_plugins', $this->theme_slug . '-welcome', array( $this, 'inkthemes_about_page_render', ) ); } } /** * Adds an admin notice upon successful activation. */ public function activation_admin_notice() { global $pagenow; if (is_admin() && ( 'themes.php' == $pagenow ) && isset($_GET['activated'])) { add_action('admin_notices', array($this, 'inkthemes_about_page_welcome_admin_notice'), 99); } } /** * Display an admin notice linking to the about page */ public function inkthemes_about_page_welcome_admin_notice() { if (!empty($this->notification)) { echo '
'; echo wp_kses_post($this->notification); echo '
'; } } /** * Render the main content page. */ public function inkthemes_about_page_render() { if (!empty($this->config['welcome_title'])) { $welcome_title = $this->config['welcome_title']; } if (!empty($this->config['welcome_content'])) { $welcome_content = $this->config['welcome_content']; } if (!empty($welcome_title) || !empty($welcome_content) || !empty($this->tabs)) { echo '
'; if (!empty($welcome_title)) { echo '

'; echo esc_html($welcome_title); if (!empty($this->theme_version)) { echo esc_html('') . ' '; } echo '

'; } if (!empty($welcome_content)) { echo '
' . wp_kses_post($welcome_content) . '
'; } echo ''; /* Display tabs */ if (!empty($this->tabs)) { $active_tab = isset($_GET['tab']) ? wp_unslash($_GET['tab']) : 'getting_started'; echo ''; /* Display content for current tab */ if (method_exists($this, $active_tab)) { $this->$active_tab(); } }// End if(). echo '
'; }// End if(). } /** * Display button for recommended actions or * * @param array $data Data for an item. */ public function display_button($data) { $button_new_tab = '_self'; $button_class = ''; if (isset($tab_data['is_new_tab'])) { if ($data['is_new_tab']) { $button_new_tab = '_blank'; } } if ($data['is_button']) { $button_class = 'button button-primary'; } echo '' . $data['button_label'] . ''; } /** * Getting started tab */ public function getting_started() { if (!empty($this->config['getting_started'])) { $getting_started = $this->config['getting_started']; if (!empty($getting_started)) { echo '
'; foreach ($getting_started as $getting_started_item) { echo '
'; if (!empty($getting_started_item['title'])) { echo '

' . $getting_started_item['title'] . '

'; } if (!empty($getting_started_item['text'])) { echo '

' . $getting_started_item['text'] . '

'; } if (!empty($getting_started_item['button_link']) && !empty($getting_started_item['button_label'])) { echo '

'; $count = 0; $actions_count = $this->get_required_actions(); if (!empty($actions_count)) { $count = count($actions_count); } if ($getting_started_item['recommended_actions'] && isset($count)) { if ($count == 0) { echo ''; } else { echo ''; } } $this->display_button($getting_started_item); echo '

'; } echo '
'; }// End foreach(). echo '
'; }// End if(). }// End if(). } /** * Getting started theme tab */ public function getting_started_theme() { if (!empty($this->config['getting_started_theme'])) { $getting_started = $this->config['getting_started_theme']; if (!empty($getting_started)) { echo '
'; foreach ($getting_started as $getting_started_item) { echo '
'; if (!empty($getting_started_item['title'])) { echo '

' . $getting_started_item['title'] . '

'; } if (!empty($getting_started_item['text'])) { echo '

' . $getting_started_item['text'] . '

'; } if (!empty($getting_started_item['button_link']) && !empty($getting_started_item['button_label'])) { echo '

'; $count = 0; $actions_count = $this->get_required_actions(); if (!empty($actions_count)) { $count = count($actions_count); } if ($getting_started_item['recommended_actions'] && isset($count)) { if ($count == 0) { echo ''; } else { echo ''; } } $this->display_button($getting_started_item); echo '

'; } echo '
'; }// End foreach(). echo '
'; }// End if(). }// End if(). } /** * Child themes */ public function child_themes() { echo '
'; $child_themes = isset($this->config['child_themes']) ? $this->config['child_themes'] : array(); if (!empty($child_themes)) { if (!empty($child_themes['content']) && is_array($child_themes['content'])) { echo '
'; for ($i = 0; $i < count($child_themes['content']); $i ++) { if (( $i !== 0 ) && ( $i / 3 === 0 )) { echo '
'; echo '
'; } $child = $child_themes['content'][$i]; if (!empty($child['image'])) { echo '
'; echo '
'; echo '' . (!empty($child['image_alt']) ? esc_html($child['image_alt']) : '' ) . ''; if (!empty($child['title'])) { echo '
'; if ($child['title'] != $this->theme_name) { echo '
'; echo '' . $child['title'] . ''; if (!empty($child['download_link']) && !empty($child_themes['download_button_label'])) { echo '' . esc_html($child_themes['download_button_label']) . ''; } if (!empty($child['preview_link']) && !empty($child_themes['preview_button_label'])) { echo '' . esc_html($child_themes['preview_button_label']) . ''; } echo '
'; } echo '
'; } echo '
'; echo '
'; }// End if(). }// End for(). echo '
'; }// End if(). }// End if(). echo '
'; } /** * Support tab */ public function support() { echo '
'; if (!empty($this->config['support_content'])) { $support_steps = $this->config['support_content']; if (!empty($support_steps)) { foreach ($support_steps as $support_step) { echo '
'; if (!empty($support_step['title'])) { echo '

'; if (!empty($support_step['icon'])) { echo ''; } echo $support_step['title']; echo '

'; } if (!empty($support_step['text'])) { echo '

' . $support_step['text'] . '

'; } if (!empty($support_step['button_link']) && !empty($support_step['button_label'])) { echo '

'; $this->display_button($support_step); echo '

'; } echo '
'; }// End foreach(). }// End if(). }// End if(). echo '
'; } /** * Changelog tab */ public function changelog() { $changelog = $this->parse_changelog(); if (!empty($changelog)) { echo ''; } } /** * Return the releases changes array. * * @return array The releases array. */ private function parse_changelog() { WP_Filesystem(); global $wp_filesystem; $changelog = $wp_filesystem->get_contents(get_template_directory() . '/changelog.txt'); echo "
";
            print_r($changelog);
            echo "
"; if (is_wp_error($changelog)) { $changelog = ''; } } /** * Display feature title and description * * @param array $feature Feature data. */ public function display_feature_title_and_description($feature) { if (!empty($feature['title'])) { echo '

' . wp_kses_post($feature['title']) . '

'; } if (!empty($feature['description'])) { echo '

' . wp_kses_post($feature['description']) . '

'; } } /** * Free vs PRO tab */ public function free_pro() { $free_pro = isset($this->config['free_pro']) ? $this->config['free_pro'] : array(); if (!empty($free_pro)) { if (!empty($free_pro['free_theme_name']) && !empty($free_pro['pro_theme_name']) && !empty($free_pro['features']) && is_array($free_pro['features'])) { echo '
'; echo '
'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; foreach ($free_pro['features'] as $feature) { echo ''; if (!empty($feature['title']) || !empty($feature['description'])) { echo ''; } if (!empty($feature['is_in_lite']) && ( $feature['is_in_lite'] == 'true' )) { echo ''; } else { echo ''; } if (!empty($feature['is_in_pro']) && ( $feature['is_in_pro'] == 'true' )) { echo ''; } else { echo ''; } echo ''; } if (!empty($free_pro['pro_theme_link']) && !empty($free_pro['get_pro_theme_label'])) { echo ''; echo ''; echo ''; echo ''; } echo ''; echo '
' . esc_html($free_pro['free_theme_name']) . '' . esc_html($free_pro['pro_theme_name']) . '
'; $this->display_feature_title_and_description($feature); echo '
'; echo '' . wp_kses_post($free_pro['get_pro_theme_label']) . '
'; echo '
'; echo '
'; }// End if(). }// End if(). } /** * Load css and scripts for the about page */ public function style_and_scripts($hook_suffix) { // this is needed on all admin pages, not just the about page, for the badge action count in the WordPress main sidebar wp_enqueue_style('cw-about-page-css', get_template_directory_uri() . '/cw-notifications/cw-about-page/css/cw_about_page_css.css', array()); if ('appearance_page_' . $this->theme_slug . '-welcome' == $hook_suffix) { wp_enqueue_script('cw-about-page-js', get_template_directory_uri() . '/cw-notifications/cw-about-page/js/cw_about_page_scripts.js', array('jquery')); wp_enqueue_style('plugin-install'); wp_enqueue_script('plugin-install'); wp_enqueue_script('updates'); $recommended_actions = isset($this->config['recommended_actions']) ? $this->config['recommended_actions'] : array(); $required_actions = $this->get_required_actions(); wp_localize_script( 'cw-about-page-js', 'cwAboutPageObject', array( 'nr_actions_required' => count($required_actions), 'ajaxurl' => admin_url('admin-ajax.php'), 'template_directory' => get_template_directory_uri(), 'activating_string' => esc_html__('Activating', 'appointway'), ) ); } } /** * Return the valid array of required actions. * * @return array The valid array of required actions. */ private function get_required_actions() { $saved_actions = get_option($this->theme_slug . '_required_actions'); if (!is_array($saved_actions)) { $saved_actions = array(); } $req_actions = isset($this->config['recommended_actions']) ? $this->config['recommended_actions'] : array(); $valid = array(); // foreach ( $req_actions['content'] as $req_action ) { // if ( ( ! isset( $req_action['check'] ) || ( isset( $req_action['check'] ) && ( $req_action['check'] == false ) ) ) && ( ! isset( $saved_actions[ $req_action['id'] ] ) ) ) { // $valid[] = $req_action; // } // } return $valid; } /** * Dismiss required actions */ // public function dismiss_required_action_callback() { // // $recommended_actions = array(); // $req_actions = isset($this->config['recommended_actions']) ? $this->config['recommended_actions'] : array(); // foreach ($req_actions['content'] as $req_action) { // $recommended_actions[] = $req_action; // } // // $action_id = ( isset($_GET['id']) ) ? $_GET['id'] : 0; // // echo esc_html(wp_unslash($action_id)); /* this is needed and it's the id of the dismissable required action */ // // if (!empty($action_id)) { // // /* if the option exists, update the record for the specified id */ // if (get_option($this->theme_slug . '_required_actions')) { // // $ti_about_page_show_required_actions = get_option($this->theme_slug . '_required_actions'); // // switch (esc_html($_GET['todo'])) { // case 'add': // $ti_about_page_show_required_actions[absint($action_id)] = true; // break; // case 'dismiss': // $ti_about_page_show_required_actions[absint($action_id)] = false; // break; // } // // update_option($this->theme_slug . '_required_actions', $ti_about_page_show_required_actions); // // /* create the new option,with false for the specified id */ // } else { // // $ti_about_page_show_required_actions_new = array(); // // if (!empty($recommended_actions)) { // // foreach ($recommended_actions as $ti_about_page_required_action) { // // if ($ti_about_page_required_action['id'] == $action_id) { // $ti_about_page_show_required_actions_new[$ti_about_page_required_action['id']] = false; // } else { // $ti_about_page_show_required_actions_new[$ti_about_page_required_action['id']] = true; // } // } // // update_option($this->theme_slug . '_required_actions', $ti_about_page_show_required_actions_new); // } // } // }// End if(). // } } }// End if().