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']) : '' ) . '](' . esc_url($child['image']) . ')
';
if (!empty($child['title'])) {
echo '
';
if ($child['title'] != $this->theme_name) {
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 '';
foreach ($changelog as $release) {
if (!empty($release['title'])) {
echo '
' . $release['title'] . '
';
}
if (!empty($release['changes'])) {
echo implode('
', $release['changes']);
}
}
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 '' . esc_html($free_pro['free_theme_name']) . ' | ';
echo '' . esc_html($free_pro['pro_theme_name']) . ' | ';
echo '
';
echo '';
echo '';
foreach ($free_pro['features'] as $feature) {
echo '';
if (!empty($feature['title']) || !empty($feature['description'])) {
echo '| ';
$this->display_feature_title_and_description($feature);
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 '' . wp_kses_post($free_pro['get_pro_theme_label']) . ' | ';
echo '
';
}
echo '';
echo '
';
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().