_name = $plugin_name; $this->_version = $version; $this->maybe_update(); } /** * Testing for the ability to update the functional */ function maybe_update() { $prev = get_option( $this->_name . '_ver' ); if ( false === $prev ) { add_option( $this->_name . '_ver', $this->_version ); $prev = $this->_version; } if ( version_compare( $this->_version, $prev, 'gt' ) ) { TInvWL_Activator::update(); new TInvWL_Update( $this->_version, $prev ); update_option( $this->_name . '_ver', $this->_version ); do_action( 'tinvwl_updated', $this->_version, $prev ); } } /** * Load functions. * Create Wishlist and Product class. * Load settings classes. */ function load_function(): void { $this->wishlist = new TInvWL_Admin_Wishlist( $this->_name, $this->_version ); // $this->product = new TInvWL_Admin_Product( $this->_name, $this->_version ); $this->load_settings(); $this->define_hooks(); } /** * Load settings classes. * * @return boolean */ function load_settings() { $dir = TINVWL_PATH . 'admin/settings/'; if ( ! file_exists( $dir ) || ! is_dir( $dir ) ) { return false; } $files = scandir( $dir ); foreach ( $files as $value ) { if ( preg_match( '/\.class\.php$/i', $value ) ) { $file = preg_replace( '/\.class\.php$/i', '', $value ); $class = 'TInvWL_Admin_Settings_' . ucfirst( $file ); $class::instance( $this->_name, $this->_version ); } } return true; } /** * Define hooks */ function define_hooks() { add_action( 'admin_menu', array( $this, 'action_menu' ) ); if ( 'skip' === filter_input( INPUT_GET, $this->_name . '-wizard' ) ) { update_option( $this->_name . '_wizard', true ); } if ( ! get_option( $this->_name . '_wizard' ) ) { add_action( 'admin_notices', array( $this, 'wizard_run_admin_notice' ) ); } elseif ( ! tinv_get_option( 'page', 'wishlist' ) ) { add_action( 'admin_notices', array( $this, 'empty_page_admin_notice' ) ); } add_action( 'woocommerce_system_status_report', array( $this, 'system_report_templates' ) ); add_action( 'switch_theme', array( $this, 'admin_notice_outdated_templates' ) ); add_action( 'tinvwl_updated', array( $this, 'admin_notice_outdated_templates' ) ); // Add a post display state for special WC pages. add_filter( 'display_post_states', array( $this, 'add_display_post_states' ), 10, 2 ); add_action( 'tinvwl_admin_promo_footer', array( $this, 'promo_footer' ) ); $this->scheduled_remove_wishlist(); add_action( 'enqueue_block_editor_assets', array( $this, 'woocommerce_blocks_editor' ), 10, 2 ); } /** * Error notice if wizard didn't run. */ function wizard_run_admin_notice() { printf( '
', __( 'Welcome to WooCommerce Wishlist Plugin – You‘re almost ready to start :)', 'ti-woocommerce-wishlist' ), // @codingStandardsIgnoreLine WordPress.XSS.EscapeOutput.OutputNotEscaped esc_url( admin_url( 'index.php?page=tinvwl-wizard' ) ), esc_html__( 'Run the Setup Wizard', 'ti-woocommerce-wishlist' ), esc_url( admin_url( 'index.php?page=' . $this->_name . '&' . $this->_name . '-wizard=skip' ) ), esc_html__( 'Skip Setup', 'ti-woocommerce-wishlist' ) ); } /** * Error notice if wishlist page not set. */ function empty_page_admin_notice() { printf( '', // @codingStandardsIgnoreLine WordPress.XSS.EscapeOutput.OutputNotEscaped esc_html__( 'WooCommerce Wishlist Plugin is misconfigured!', 'ti-woocommerce-wishlist' ), esc_html__( 'Since the Setup Wizard was skipped, the Wishlist may function improperly.', 'ti-woocommerce-wishlist' ), esc_html__( 'Create a New Page or open to edit a page where the Wishlist should be displayed.', 'ti-woocommerce-wishlist' ), __( 'Add[ti_wishlistsview]
shortcode into a page content.', 'ti-woocommerce-wishlist' ),
esc_html__( 'In a plugin General Settings section apply this page as a "Wishlist" page.', 'ti-woocommerce-wishlist' ),
esc_url( $this->admin_url( '' ) . '#general' ),
esc_html__( 'Please apply the Wishlist page', 'ti-woocommerce-wishlist' ),
esc_html__( ' or ', 'ti-woocommerce-wishlist' ),
esc_url( admin_url( 'index.php?page=tinvwl-wizard' ) ),
esc_html__( 'Run the Setup Wizard', 'ti-woocommerce-wishlist' )
);
}
/**
* Creation menu and sub-menu
*/
function action_menu() {
global $wp_roles;
$page = add_menu_page( __( 'TI Wishlist', 'ti-woocommerce-wishlist' ), __( 'TI Wishlist', 'ti-woocommerce-wishlist' ), 'tinvwl_general_settings', $this->_name, null, TINVWL_URL . 'assets/img/icon_menu.png', '55.888' );
add_action( "load-$page", array( $this, 'onload' ) );
wp_add_inline_style( 'admin-menu', '#adminmenu #toplevel_page_tinvwl a[href="admin.php?page=tinvwl-upgrade"] {font-weight: 600;background-color: #df4d57;color: #fff;margin: 3px 10px 0;display: block;text-align: center;border-radius: 3px;transition: all .3s }#adminmenu #toplevel_page_tinvwl a[href="admin.php?page=tinvwl-upgrade"]:focus,#adminmenu #toplevel_page_tinvwl a[href="admin.php?page=tinvwl-upgrade"]:hover {background-color: #f48460;box-shadow: none }' );
$menu = apply_filters( 'tinvwl_admin_menu', array() );
foreach ( $menu as $item ) {
if ( ! array_key_exists( 'page_title', $item ) ) {
$item['page_title'] = $item['title'];
}
if ( ! array_key_exists( 'parent', $item ) ) {
$item['parent'] = $this->_name;
}
if ( ! array_key_exists( 'capability', $item ) ) {
$item['capability'] = 'manage_woocommerce';
}
if ( ! array_key_exists( 'roles', $item ) ) {
$item['roles'] = array( 'administrator' );
}
foreach ( $item['roles'] as $role ) {
$wp_roles->add_cap( $role, $item['capability'] );
}
$item['slug'] = implode( '-', array_filter( array( $this->_name, $item['slug'] ) ) );
$page = add_submenu_page( $item['parent'], $item['page_title'], $item['title'], $item['capability'], $item['slug'], $item['method'] );
add_action( "load-$page", array( $this, 'onload' ) );
}
}
/**
* Load style and javascript
*/
function onload() {
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
add_filter( 'admin_footer_text', array( $this, 'footer_admin' ) );
add_filter( 'screen_options_show_screen', array( $this, 'screen_options_hide_screen' ), 10, 2 );
add_filter( 'tinvwl_view_panelstatus', array( $this, 'status_panel' ), 9999 );
}
/**
* 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 );
}
/**
* Load javascript
*/
function enqueue_scripts() {
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
wp_enqueue_script( $this->_name . '-bootstrap', TINVWL_URL . 'assets/js/bootstrap' . $suffix . '.js', array( 'jquery' ), $this->_version, 'all' );
wp_register_script( $this->_name, TINVWL_URL . 'assets/js/admin' . $suffix . '.js', array(
'jquery',
'wp-color-picker',
), $this->_version, 'all' );
wp_localize_script( $this->_name, 'tinvwl_comfirm', array(
'text_comfirm_reset' => __( 'Are you sure you want to reset the settings?', 'ti-woocommerce-wishlist' ),
'ajax_url' => WC()->ajax_url(),
) );
wp_enqueue_script( $this->_name );
$geo = new WC_Geolocation(); // Get WC_Geolocation instance object
$user_ip = $geo->get_ip_address(); // Get user IP
$user_geo = $geo->geolocate_ip( $user_ip ); // Get geolocated user data.
$country_code = $user_geo['country']; // Get the country code
$restricted_codes = array( 'BD', 'PK', 'IN', 'NG', 'KE' );
$chat_option = ( isset( $_POST['chat_nonce'] ) ) ? ( isset( $_POST['chat-enabled'] ) ? true : false ) : tinv_get_option( 'chat', 'enabled' );
$disable_chat = ! $chat_option || in_array( $country_code, $restricted_codes );
if ( ! $disable_chat ) {
global $wpdb;
$user_id = get_current_user_id();
$user_info = get_userdata( $user_id );
$current_theme = wp_get_theme();
$parent_theme = $current_theme->parent();
$lists_table = sprintf( '%s%s_%s', $wpdb->prefix, TINVWL_PREFIX, 'lists' );
$total_wishlists = $wpdb->get_var( "SELECT COUNT(*) FROM `{$lists_table}`" );
$first_wishlist_date = $wpdb->get_var( "SELECT `date` FROM `{$lists_table}` ORDER BY `ID` ASC" );
$timestamp = $first_wishlist_date ? strtotime( $first_wishlist_date ) : time();
$date1 = new DateTime(); // current date
$date2 = ( new DateTime() )->setTimestamp( $timestamp ); // your timestamp
$interval = $date1->diff( $date2 );
$days_used = $interval->days;
// If the difference is 0 days, show as 1 day
if ( $days_used === 0 ) {
$days_used = 1;
}
wp_add_inline_script( $this->_name, 'window.intercomSettings = {
app_id: "zyh6v0pc",
hide_default_launcher: ' . ( ( $disable_chat ) ? 'true' : 'false' ) . ',
"Website": "' . get_site_url() . '",
"Plugin name": "WooCommerce Wishlist Plugin",
"Plugin version":"' . TINVWL_FVERSION . '",
"Theme name":"' . $current_theme->get( 'Name' ) . '",
"Theme version":"' . $current_theme->get( 'Version' ) . '",
"Theme URI":"' . $current_theme->get( 'ThemeURI' ) . '",
"Theme author":"' . $current_theme->get( 'Author' ) . '",
"Theme author URI":"' . $current_theme->get( 'AuthorURI' ) . '",
"Parent theme name":"' . ( ( $parent_theme ) ? $parent_theme->get( 'Name' ) : '' ) . '",
"Parent theme version":"' . ( ( $parent_theme ) ? $parent_theme->get( 'Version' ) : '' ) . '",
"Parent theme URI":"' . ( ( $parent_theme ) ? $parent_theme->get( 'ThemeURI' ) : '' ) . '",
"Parent theme author":"' . ( ( $parent_theme ) ? $parent_theme->get( 'Author' ) : '' ) . '",
"Parent theme author URI":"' . ( ( $parent_theme ) ? $parent_theme->get( 'AuthorURI' ) : '' ) . '",
};
(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic("reattach_activator");ic("update",intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement("script");s.type="text/javascript";s.async=true;s.src="https://widget.intercom.io/widget/zyh6v0pc";var x=d.getElementsByTagName("script")[0];x.parentNode.insertBefore(s,x);}if(w.attachEvent){w.attachEvent("onload",l);}else{w.addEventListener("load",l,false);}}})();
Intercom("trackEvent", "wishlist-free-install", {
theme_name:"' . ( ( $parent_theme ) ? $parent_theme->get( 'Name' ) : $current_theme->get( 'Name' ) ) . '",
theme_uri:"' . ( ( $parent_theme ) ? $parent_theme->get( 'ThemeURI' ) : $current_theme->get( 'ThemeURI' ) ) . '",
theme_author:"' . ( ( $parent_theme ) ? $parent_theme->get( 'Author' ) : $current_theme->get( 'Author' ) ) . '",
theme_author_uri:"' . ( ( $parent_theme ) ? $parent_theme->get( 'AuthorURI' ) : $current_theme->get( 'AuthorURI' ) ) . '",
theme_version:"' . ( ( $parent_theme ) ? $parent_theme->get( 'Version' ) : $current_theme->get( 'Version' ) ) . '",
website:"' . get_site_url() . '",
user:"' . $user_info->user_email . '",
user_name:"' . $user_info->user_nicename . '",
plugin_name:"WooCommerce Wishlist Plugin",
plugin_version:"' . TINVWL_FVERSION . '",
partner:"' . TINVWL_UTM_SOURCE . '"
});
Intercom("trackEvent", "lists-data", {
wishlists:' . $total_wishlists . ',
days_used:' . $days_used . '
});
' );
}
}
/**
* Add plugin footer copyrighting
*/
function footer_admin() {
do_action( 'tinvwl_admin_promo_footer' );
}
/**
* Promo in footer for wishlist
*/
function promo_footer() {
echo 'Made with by TemplateInvaders%1$s
version %2$s is out of date. The core version is %3$s', 'ti-woocommerce-wishlist' ), str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file ), $theme_version ? $theme_version : '-', $core_version );
} else {
$found_files[] = str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file );
}
}
}
return $found_files;
}
/**
* Templates overriding status for WooCommerce Status report page.
*/
function system_report_templates() {
TInvWL_View::view( 'templates-status', array( 'found_files' => $this->templates_status_check() ) );
}
/**
* Outdated templates notice.
*/
function admin_notice_outdated_templates() {
if ( 'outdated' === $this->templates_status_check( true ) ) {
$theme = wp_get_theme();
$html = sprintf( __( 'Your theme (%1$s) contains outdated copies of some WooCommerce Wishlist Plugin template files.