759 lines
24 KiB
PHP
759 lines
24 KiB
PHP
<?php
|
|
/**
|
|
* Public pages class
|
|
*
|
|
* @since 1.0.0
|
|
* @package TInvWishlist\Public
|
|
*/
|
|
|
|
// If this file is called directly, abort.
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
die;
|
|
}
|
|
|
|
/**
|
|
* Public pages class
|
|
*/
|
|
class TInvWL_Public_TInvWL {
|
|
|
|
/**
|
|
* Plugin name
|
|
*
|
|
* @var string
|
|
*/
|
|
public $_name;
|
|
|
|
/**
|
|
* Plugin version
|
|
*
|
|
* @var string
|
|
*/
|
|
public $_version;
|
|
|
|
/**
|
|
* Raw rewrites
|
|
*
|
|
* @var array
|
|
*/
|
|
public static $rules_raw;
|
|
/**
|
|
* This class
|
|
*
|
|
* @var \TInvWL_Public_TInvWL
|
|
*/
|
|
protected static $_instance = null;
|
|
|
|
/**
|
|
* Get this class object
|
|
*
|
|
* @param string $plugin_name Plugin name.
|
|
* @param string $version Plugin version.
|
|
*
|
|
* @return \TInvWL_Public_TInvWL
|
|
*/
|
|
public static function instance( $plugin_name = TINVWL_PREFIX, $version = TINVWL_FVERSION ) {
|
|
if ( is_null( self::$_instance ) ) {
|
|
self::$_instance = new self( $plugin_name, $version );
|
|
}
|
|
|
|
return self::$_instance;
|
|
}
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param string $plugin_name Plugin name.
|
|
* @param string $version Plugin version.
|
|
*/
|
|
function __construct( $plugin_name, $version ) {
|
|
$this->_name = $plugin_name;
|
|
$this->_version = $version;
|
|
$this->pre_load_function();
|
|
}
|
|
|
|
/**
|
|
* Create all object and shortcode
|
|
*/
|
|
function pre_load_function() {
|
|
|
|
add_action( 'init', array( __CLASS__, 'add_rewrite_rules' ) );
|
|
|
|
if ( tinv_get_option( 'general', 'my_account_endpoint' ) ) {
|
|
add_action( 'init', array( $this, 'wishlist_endpoint' ) );
|
|
if ( ! is_admin() ) {
|
|
add_filter( 'query_vars', array( $this, 'wishlist_query_vars' ), 0 );
|
|
add_action( 'woocommerce_account_' . tinv_get_option( 'general', 'my_account_endpoint_slug' ) . '_endpoint', array(
|
|
$this,
|
|
'wishlist_content'
|
|
) );
|
|
}
|
|
}
|
|
|
|
add_filter( 'rewrite_rules_array', array( $this, 'add_rewrite_rules_raw' ), 9999999 );
|
|
|
|
add_filter( 'query_vars', array( $this, 'add_query_var' ) );
|
|
add_action( 'wp', array( $this, 'analytics_referer' ) );
|
|
add_action( 'deleted_user', array( $this, 'delete_user_wishlist' ) );
|
|
|
|
add_action( 'wp_ajax_nopriv_' . $this->_name . '_css', array( $this, 'dynaminc_css' ) );
|
|
add_action( 'wp_ajax_' . $this->_name . '_css', array( $this, 'dynaminc_css' ) );
|
|
add_action( 'widgets_init', array( $this, 'register_widgets' ) );
|
|
|
|
add_filter( 'woocommerce_locate_core_template', array( $this, 'locate_template' ), 10, 3 );
|
|
add_filter( 'woocommerce_locate_template', array( $this, 'locate_template' ), 10, 3 );
|
|
|
|
$this->addto = TInvWL_Public_AddToWishlist::instance( $this->_name );
|
|
$this->view = TInvWL_Public_Wishlist_View::instance( $this->_name );
|
|
$this->ajax = TInvWL_Public_Wishlist_Ajax::instance( $this->_name );
|
|
$this->cart = TInvWL_Public_Cart::instance( $this->_name );
|
|
$this->topwishlist = TInvWL_Public_WishlistCounter::instance( $this->_name );
|
|
}
|
|
|
|
/**
|
|
* @param $rules
|
|
*
|
|
* @return mixed
|
|
*/
|
|
function add_rewrite_rules_raw( $rules ) {
|
|
if ( is_array( self::$rules_raw ) && tinv_get_option( 'permalinks', 'force' ) ) {
|
|
self::add_rewrite_rules();
|
|
$rules = self::$rules_raw + $rules;
|
|
}
|
|
|
|
return $rules;
|
|
}
|
|
|
|
/**
|
|
* Define hooks
|
|
*/
|
|
function define_hooks() {
|
|
if ( tinv_get_option( 'social', 'facebook' ) ) {
|
|
add_filter( 'language_attributes', array( $this, 'add_ogp' ), 100 );
|
|
}
|
|
|
|
if ( tinv_get_option( 'general', 'link_in_myaccount' ) || tinv_get_option( 'general', 'my_account_endpoint' ) ) {
|
|
add_filter( 'woocommerce_account_menu_items', array( $this, 'account_menu_items' ) );
|
|
add_filter( 'woocommerce_get_endpoint_url', array( $this, 'account_menu_endpoint' ), 4, 10 );
|
|
}
|
|
|
|
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_header' ) );
|
|
add_action( 'wp_login', array( $this, 'transfert_local_to_user' ), 10, 2 );
|
|
add_action( 'wp_logout', array( $this, 'logout' ), 10, 2 );
|
|
add_action( 'user_register', array( $this, 'transfert_local_to_user_register' ) );
|
|
add_action( 'init', array( $this, 'legacy_transfer' ), 90 );
|
|
add_action( 'clear_auth_cookie', array( $this, 'set_user_sharekey' ) );
|
|
|
|
add_action( 'tinvwl_after_wishlist_table', array( $this, 'wishlist_button_action_before' ), 0 );
|
|
add_action( 'tinvwl_after_wishlist_table', array( $this, 'wishlist_button_action_after' ), 15 );
|
|
add_action( 'tinvwl_after_wishlist_table', array( $this, 'wishlist_button_updcart_before' ), 15 );
|
|
add_action( 'tinvwl_after_wishlist_table', array( $this, 'wishlist_button_action_after' ), 100 );
|
|
}
|
|
|
|
/**
|
|
* Add analytic click from wishlist
|
|
*/
|
|
function analytics_referer() {
|
|
$product_id = absint( get_query_var( 'tiwp' ) );
|
|
if ( empty( $product_id ) ) {
|
|
return false;
|
|
}
|
|
|
|
$wlp = new TInvWL_Product();
|
|
|
|
$items = $wlp->get( array( 'ID' => $product_id ) );
|
|
$item = array_shift( $items );
|
|
if ( empty( $item ) ) {
|
|
return false;
|
|
}
|
|
if ( empty( $item['data'] ) ) {
|
|
return false;
|
|
}
|
|
$wishlist = tinv_wishlist_get( $item['wishlist_id'] );
|
|
|
|
$wla = new TInvWL_Analytics( $wishlist, $this->_name );
|
|
if ( $wishlist['is_owner'] ) {
|
|
$wla->click_author_product_from_wl( $item['product_id'], $item['variation_id'] );
|
|
} else {
|
|
$wla->click_product_from_wl( $item['product_id'], $item['variation_id'] );
|
|
}
|
|
wp_redirect( remove_query_arg( 'tiwp' ) ); // @codingStandardsIgnoreLine WordPress.VIP.RestrictedFunctions.wp_redirect
|
|
}
|
|
|
|
/**
|
|
* Left class button
|
|
*/
|
|
function wishlist_button_action_before() {
|
|
echo '<div class="tinvwl-to-left look_in"><div class="tinvwl-input-group tinvwl-no-full">';
|
|
}
|
|
|
|
/**
|
|
* Right class button
|
|
*/
|
|
function wishlist_button_updcart_before() {
|
|
echo '<div class="tinvwl-to-right look_in">';
|
|
}
|
|
|
|
/**
|
|
* Close class button
|
|
*/
|
|
function wishlist_button_action_after() {
|
|
echo '</div></div>';
|
|
}
|
|
|
|
/**
|
|
* Register Widgets
|
|
*/
|
|
function register_widgets() {
|
|
$paths = glob( TINVWL_PATH . 'public' . DIRECTORY_SEPARATOR . 'widget' . DIRECTORY_SEPARATOR . '*.class.php' );
|
|
foreach ( $paths as $path ) {
|
|
$path = ucfirst( str_replace( '.class.php', '', basename( $path ) ) );
|
|
register_widget( 'TInvWL_Public_Widget_' . $path );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Overwrites path for email and other template
|
|
*
|
|
* @param string $core_file Absolute path.
|
|
* @param string $template Requered Template file.
|
|
* @param string $template_base Template path.
|
|
*
|
|
* @return string
|
|
*/
|
|
function locate_template( $core_file, $template, $template_base ) {
|
|
$_core_file = tinv_wishlist_locate_template( $template, $template_base );
|
|
if ( empty( $_core_file ) ) {
|
|
return $core_file;
|
|
}
|
|
|
|
return $_core_file;
|
|
}
|
|
|
|
/**
|
|
* Update rewrite url for wishlist
|
|
*/
|
|
public static function update_rewrite_rules() {
|
|
wp_schedule_single_event( time(), 'tinvwl_flush_rewrite_rules' );
|
|
}
|
|
|
|
/**
|
|
* Apply rewrite url for wishlist
|
|
*/
|
|
public static function apply_rewrite_rules() {
|
|
self::add_rewrite_rules();
|
|
flush_rewrite_rules();
|
|
}
|
|
|
|
/**
|
|
* Create rewrite url for wishlist
|
|
*/
|
|
public static function add_rewrite_rules() {
|
|
if ( tinv_get_option( 'general', 'my_account_endpoint' ) ) {
|
|
return;
|
|
}
|
|
|
|
$id = tinv_get_option( 'page', 'wishlist' );
|
|
$pages = array( $id );
|
|
$language_codes = array();
|
|
if ( function_exists( 'pll_languages_list' ) ) {
|
|
$language_codes = implode( '|', pll_languages_list() );
|
|
$translations = PLL()->model->post->get_translations( $id );
|
|
$pages = array_merge( $pages, array_values( $translations ) );
|
|
} else {
|
|
$languages = apply_filters( 'wpml_active_languages', array(), array(
|
|
'skip_missing' => 0,
|
|
'orderby' => 'code',
|
|
) );
|
|
if ( ! empty( $languages ) ) {
|
|
foreach ( $languages as $l ) {
|
|
$pages[] = apply_filters( 'wpml_object_id', $id, 'page', true, $l['language_code'] );
|
|
$language_codes[] = $l['language_code'];
|
|
}
|
|
$pages = array_unique( $pages );
|
|
$language_codes = implode( '|', array_unique( $language_codes ) );
|
|
}
|
|
}
|
|
|
|
$pages = array_filter( $pages );
|
|
if ( ! empty( $pages ) ) {
|
|
foreach ( $pages as $page ) {
|
|
$page = get_post( $page );
|
|
|
|
if ( ! $page ) {
|
|
continue;
|
|
}
|
|
|
|
$page_slug = $page->post_name;
|
|
|
|
if ( $language_codes && ( defined( 'POLYLANG_VERSION' ) || defined( 'ICL_PLUGIN_PATH' ) ) ) {
|
|
add_rewrite_rule( '^(' . $language_codes . ')/(([^/]+/)*' . $page_slug . ')/([A-Fa-f0-9]{6})?/wl_page/([0-9]{1,})/{0,1}$', 'index.php?pagename=$matches[2]&tinvwlID=$matches[4]&wl_paged=$matches[5]&lang=$matches[1]', 'top' );
|
|
self::$rules_raw[ '^(' . $language_codes . ')/(([^/]+/)*' . $page_slug . ')/([A-Fa-f0-9]{6})?/wl_page/([0-9]{1,})/{0,1}$' ] = 'index.php?pagename=$matches[2]&tinvwlID=$matches[4]&wl_paged=$matches[5]&lang=$matches[1]';
|
|
add_rewrite_rule( '^(' . $language_codes . ')/(([^/]+/)*' . $page_slug . ')/([A-Fa-f0-9]{6})?/{0,1}$', 'index.php?pagename=$matches[2]&tinvwlID=$matches[4]&lang=$matches[1]', 'top' );
|
|
self::$rules_raw[ '^(' . $language_codes . ')/(([^/]+/)*' . $page_slug . ')/([A-Fa-f0-9]{6})?/{0,1}$' ] = 'index.php?pagename=$matches[2]&tinvwlID=$matches[4]&lang=$matches[1]';
|
|
}
|
|
|
|
// Wishlist on frontpage.
|
|
$page_on_front = absint( get_option( 'page_on_front' ) );
|
|
if ( $page_on_front && 'page' === get_option( 'show_on_front' ) && $page->ID === $page_on_front ) {
|
|
add_filter( 'redirect_canonical', array(
|
|
'TInvWL_Public_TInvWL',
|
|
'disable_canonical_redirect_for_front_page',
|
|
) );
|
|
// Match the front page and pass item value as a query var.
|
|
add_rewrite_rule( '^([A-Fa-f0-9]{6})?/{0,1}$', 'index.php?page_id=' . $page_on_front . '&tinvwlID=$matches[1]', 'top' );
|
|
self::$rules_raw['^([A-Fa-f0-9]{6})?/{0,1}$'] = 'index.php?page_id=' . $page_on_front . '&tinvwlID=$matches[1]';
|
|
add_rewrite_rule( '^([A-Fa-f0-9]{6})?/wl_page/([0-9]{1,})/{0,1}$', 'index.php?page_id=' . $page_on_front . '&tinvwlID=$matches[3]&wl_paged=$matches[4]', 'top' );
|
|
self::$rules_raw['^([A-Fa-f0-9]{6})?/wl_page/([0-9]{1,})/{0,1}$'] = 'index.php?page_id=' . $page_on_front . '&tinvwlID=$matches[3]&wl_paged=$matches[4]';
|
|
}
|
|
|
|
add_rewrite_rule( '(([^/]+/)*' . $page_slug . ')/([A-Fa-f0-9]{6})?/wl_page/([0-9]{1,})/{0,1}$', 'index.php?pagename=$matches[1]&tinvwlID=$matches[3]&wl_paged=$matches[4]', 'top' );
|
|
self::$rules_raw[ '(([^/]+/)*' . $page_slug . ')/([A-Fa-f0-9]{6})?/wl_page/([0-9]{1,})/{0,1}$' ] = 'index.php?pagename=$matches[1]&tinvwlID=$matches[3]&wl_paged=$matches[4]';
|
|
add_rewrite_rule( '(([^/]+/)*' . $page_slug . ')/([A-Fa-f0-9]{6})?/{0,1}$', 'index.php?pagename=$matches[1]&tinvwlID=$matches[3]', 'top' );
|
|
self::$rules_raw[ '(([^/]+/)*' . $page_slug . ')/([A-Fa-f0-9]{6})?/{0,1}$' ] = 'index.php?pagename=$matches[1]&tinvwlID=$matches[3]';
|
|
|
|
// Wishlist on shop page.
|
|
$shop_page_id = wc_get_page_id( 'shop' );
|
|
if ( $shop_page_id && $page->ID === $shop_page_id ) {
|
|
$shop = get_post( $shop_page_id );
|
|
$shop_slug = $shop->post_name;
|
|
add_rewrite_rule( '(([^/]+/)*' . $shop_slug . ')/([A-Fa-f0-9]{6})?/{0,1}$', 'index.php?post_type=product&tinvwlID=$matches[3]', 'top' );
|
|
self::$rules_raw[ '(([^/]+/)*' . $shop_slug . ')/([A-Fa-f0-9]{6})?/{0,1}$' ] = 'index.php?post_type=product&tinvwlID=$matches[3]';
|
|
add_rewrite_rule( '(([^/]+/)*' . $shop_slug . ')/([A-Fa-f0-9]{6})?/wl_page/([0-9]{1,})/{0,1}$', 'index.php?post_type=product&tinvwlID=$matches[3]&wl_paged=$matches[4]', 'top' );
|
|
self::$rules_raw[ '(([^/]+/)*' . $shop_slug . ')/([A-Fa-f0-9]{6})?/wl_page/([0-9]{1,})/{0,1}$' ] = 'index.php?post_type=product&tinvwlID=$matches[3]&wl_paged=$matches[4]';
|
|
add_rewrite_rule( '(([^/]+/)*' . $shop_slug . ')/([A-Fa-f0-9]{6})?/page/([0-9]{1,})/{0,1}$', 'index.php?post_type=product&tinvwlID=$matches[3]&paged=$matches[4]', 'top' );
|
|
self::$rules_raw[ '(([^/]+/)*' . $shop_slug . ')/([A-Fa-f0-9]{6})?/page/([0-9]{1,})/{0,1}$' ] = 'index.php?post_type=product&tinvwlID=$matches[3]&paged=$matches[4]';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Disable the front page redirect.
|
|
*
|
|
* @param bool $redirect Allow redirect.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public static function disable_canonical_redirect_for_front_page( $redirect ) {
|
|
$page_on_front = absint( get_option( 'page_on_front' ) );
|
|
if ( is_page() && 'page' === get_option( 'show_on_front' ) && $page_on_front ) {
|
|
if ( is_page( $page_on_front ) ) {
|
|
$redirect = false;
|
|
}
|
|
}
|
|
|
|
return $redirect;
|
|
}
|
|
|
|
/**
|
|
* Add new POST variable
|
|
*
|
|
* @param array $public_var WordPress Public variable.
|
|
*
|
|
* @return array
|
|
*/
|
|
function add_query_var( $public_var ) {
|
|
$public_var[] = 'tinvwlID';
|
|
$public_var[] = 'tiws';
|
|
$public_var[] = 'tiwp';
|
|
$public_var[] = 'wl_paged';
|
|
|
|
return $public_var;
|
|
}
|
|
|
|
/**
|
|
* Create ogp namespace
|
|
*
|
|
* @param string $text A space-separated list of language attributes.
|
|
*
|
|
* @return string
|
|
*/
|
|
function add_ogp( $text ) {
|
|
global $wp_query;
|
|
if ( isset( $wp_query ) && is_page( apply_filters( 'wpml_object_id', tinv_get_option( 'page', 'wishlist' ), 'page', true ) ) ) {
|
|
if ( ! preg_match( '/prefix\=/i', $text ) ) {
|
|
$text .= ' prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#"';
|
|
}
|
|
if ( ! preg_match( '/itemscope/i', $text ) ) {
|
|
$text .= ' itemscope';
|
|
}
|
|
if ( ! preg_match( '/itemtype\=/i', $text ) ) {
|
|
$text .= ' itemtype="http://schema.org/Offer"';
|
|
}
|
|
}
|
|
|
|
return $text;
|
|
}
|
|
|
|
/**
|
|
* Check if is plugin page
|
|
*
|
|
* @return boolean
|
|
*/
|
|
function is_pluginpage() {
|
|
$pages = tinv_get_option( 'page' );
|
|
$pages = array_filter( $pages );
|
|
foreach ( $pages as $page ) {
|
|
if ( is_page( apply_filters( 'wpml_object_id', $page, 'page', true ) ) ) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Load style and javascript
|
|
*/
|
|
function enqueue_header() {
|
|
if ( $this->is_pluginpage() ) {
|
|
$this->enqueue_wc_styles();
|
|
}
|
|
$this->enqueue_scripts();
|
|
$this->enqueue_styles();
|
|
}
|
|
|
|
/**
|
|
* Load style
|
|
*/
|
|
function enqueue_styles() {
|
|
if ( apply_filters( 'tinvwl_load_webfont', true ) ) {
|
|
wp_enqueue_style( $this->_name . '-webfont-font', TINVWL_URL . 'assets/fonts/tinvwl-webfont.woff2', array(), 'xu2uyi' );
|
|
wp_enqueue_style( $this->_name . '-webfont', TINVWL_URL . 'assets/css/webfont.min.css', array(), $this->_version, 'all' );
|
|
wp_style_add_data( $this->_name . '-webfont', 'rtl', 'replace' );
|
|
wp_style_add_data( $this->_name . '-webfont', 'suffix', '.min' );
|
|
add_filter( 'style_loader_tag', array( $this, 'font_loader_tag_filter' ), 100, 2 );
|
|
}
|
|
wp_enqueue_style( 'tinvwl', TINVWL_URL . 'assets/css/public.min.css', array(), $this->_version, 'all' );
|
|
wp_style_add_data( 'tinvwl', 'rtl', 'replace' );
|
|
wp_style_add_data( 'tinvwl', 'suffix', '.min' );
|
|
|
|
if ( ! tinv_get_option( 'style', 'customstyle' ) ) {
|
|
wp_enqueue_style( 'tinvwl-theme', TINVWL_URL . 'assets/css/theme.min.css', array(), $this->_version, 'all' );
|
|
wp_style_add_data( 'tinvwl-theme', 'rtl', 'replace' );
|
|
wp_style_add_data( 'tinvwl-theme', 'suffix', '.min' );
|
|
}
|
|
if ( ! tinv_get_option( 'style', 'customstyle' ) || ( tinv_get_option( 'style_plain', 'allow' ) && tinv_get_option( 'style_plain', 'css' ) ) ) {
|
|
$newcss = $this->dynaminc_css();
|
|
if ( $newcss ) {
|
|
$name_style = tinv_get_option( 'style', 'customstyle' ) ? 'tinvwl' : 'tinvwl-theme';
|
|
wp_add_inline_style( $name_style, $newcss );
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Preload Icons font */
|
|
function font_loader_tag_filter( $html, $handle ) {
|
|
if ( $handle === $this->_name . '-webfont-font' ) {
|
|
$html = str_replace( "type='text/css'", '', $html );
|
|
|
|
return str_replace( "rel='stylesheet'", "rel='preload' as='font' type='font/woff2' crossorigin='anonymous'", $html );
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* Compress CSS
|
|
*
|
|
* @param string $css CSS Content.
|
|
*
|
|
* @return string
|
|
*/
|
|
function compress_css( $css ) {
|
|
$css = preg_replace( '!/\*[^*]*\*+([^/][^*]*\*+)*/!', ' ', $css );
|
|
$css = preg_replace( '/(\r|\n|\t| {2,})/', ' ', $css );
|
|
|
|
return $css;
|
|
}
|
|
|
|
/**
|
|
* Generate dynaminc css
|
|
*/
|
|
function dynaminc_css() {
|
|
$css = get_transient( TINVWL_PREFIX . '_dynamic_' );
|
|
if ( ! $css ) {
|
|
$css = '';
|
|
if ( ! tinv_get_option( 'style', 'customstyle' ) ) {
|
|
$newcss = tinv_get_option( 'style_options', 'css' );
|
|
if ( $newcss ) {
|
|
$newcss = $this->compress_css( $newcss );
|
|
$css .= $newcss;
|
|
}
|
|
}
|
|
if ( tinv_get_option( 'style_plain', 'allow' ) ) {
|
|
$newcss = tinv_get_option( 'style_plain', 'css' );
|
|
if ( $newcss ) {
|
|
$newcss = $this->compress_css( $newcss );
|
|
$css .= $newcss;
|
|
}
|
|
}
|
|
$image_url = TINVWL_URL . 'assets/img/';
|
|
$css = str_replace( '../img/', $image_url, $css );
|
|
set_transient( TINVWL_PREFIX . '_dynamic_', $css, DAY_IN_SECONDS );
|
|
}
|
|
|
|
return $css;
|
|
}
|
|
|
|
/**
|
|
* Add woocommerce style
|
|
*/
|
|
function enqueue_wc_styles() {
|
|
if ( $enqueue_styles = WC_Frontend_Scripts::get_styles() ) {
|
|
foreach ( $enqueue_styles as $handle => $args ) {
|
|
wp_register_style( $handle, $args['src'], $args['deps'], $args['version'], $args['media'] );
|
|
wp_enqueue_style( $handle );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Load javascript
|
|
*/
|
|
function enqueue_scripts() {
|
|
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
|
|
wp_register_script( $this->_name . '-clipboard', TINVWL_URL . 'assets/js/clipboard.min.js', array( 'jquery' ), $this->_version, true );
|
|
wp_register_script( $this->_name, TINVWL_URL . 'assets/js/public' . $suffix . '.js', array(
|
|
'jquery',
|
|
'jquery-blockui',
|
|
'js-cookie',
|
|
apply_filters( 'tinvwl_wc_cart_fragments_enabled', true ) ? 'wc-cart-fragments' : 'jquery',
|
|
), $this->_version, true );
|
|
|
|
$args = array(
|
|
'text_create' => __( 'Create New', 'ti-woocommerce-wishlist' ),
|
|
'text_already_in' => apply_filters( 'tinvwl_already_in_wishlist_text', tinv_get_option( 'general', 'text_already_in' ) ),
|
|
'simple_flow' => tinv_get_option( 'general', 'simple_flow' ),
|
|
'hide_zero_counter' => tinv_get_option( 'topline', 'hide_zero_counter' ),
|
|
'i18n_make_a_selection_text' => esc_attr__( 'Please select some product options before adding this product to your wishlist.', 'ti-woocommerce-wishlist' ),
|
|
'tinvwl_break_submit' => esc_attr__( 'No items or actions are selected.', 'ti-woocommerce-wishlist' ),
|
|
'tinvwl_clipboard' => esc_attr__( 'Copied!', 'ti-woocommerce-wishlist' ),
|
|
'allow_parent_variable' => apply_filters( 'tinvwl_allow_add_parent_variable_product', false ),
|
|
'block_ajax_wishlists_data' => apply_filters( 'tinvwl_block_ajax_wishlists_data', false ),
|
|
'update_wishlists_data' => apply_filters( 'tinvwl_update_wishlists_data', false ),
|
|
'hash_key' => 'ti_wishlist_data_' . md5( get_current_blog_id() . '_' . get_site_url( get_current_blog_id(), '/' ) . get_template() ),
|
|
'nonce' => wp_create_nonce( 'wp_rest' ),
|
|
'rest_root' => esc_url_raw( get_rest_url() ),
|
|
'plugin_url' => esc_url_raw( TINVWL_URL ),
|
|
'wc_ajax_url' => WC_AJAX::get_endpoint( 'tinvwl' ),
|
|
'stats' => tinv_get_option( 'general', 'product_stats' ),
|
|
'popup_timer' => apply_filters( 'tinvwl_popup_close_timer', 6000 ),
|
|
);
|
|
|
|
if ( function_exists( 'wpml_get_current_language' ) ) {
|
|
|
|
global $sitepress;
|
|
|
|
if ( $sitepress && $sitepress instanceof SitePress ) {
|
|
$wpml_settings = $sitepress->get_settings();
|
|
if ( isset( $wpml_settings['custom_posts_sync_option'] ) && isset( $wpml_settings['custom_posts_sync_option']['product'] ) && in_array( $wpml_settings['custom_posts_sync_option']['product'], array(
|
|
1,
|
|
2,
|
|
) ) ) {
|
|
|
|
if ( 2 == $wpml_settings['custom_posts_sync_option']['product'] ) {
|
|
$args['wpml_default'] = wpml_get_default_language();
|
|
}
|
|
$args['wpml'] = wpml_get_current_language();
|
|
}
|
|
}
|
|
}
|
|
|
|
wp_localize_script( $this->_name, 'tinvwl_add_to_wishlist', $args );
|
|
|
|
if ( wp_script_is( 'woocommerce', 'enqueued' ) ) {
|
|
wp_enqueue_script( 'tinvwl' );
|
|
}
|
|
|
|
$support_all_products_block = function_exists( 'has_block' ) && has_block( 'woocommerce/all-products' );
|
|
|
|
if ( $support_all_products_block ) {
|
|
wp_enqueue_script( $this->_name . '-blocks', TINVWL_URL . 'assets/js/blocks.js', array(
|
|
'wc-blocks-registry',
|
|
'wp-i18n',
|
|
'wp-element'
|
|
), $this->_version, true );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Load function
|
|
*/
|
|
function load_function() {
|
|
$this->define_hooks();
|
|
}
|
|
|
|
/**
|
|
* Transfer Cookie Wishlist when login user
|
|
*
|
|
* @param string $user_login Not used.
|
|
* @param object $user User object.
|
|
*
|
|
* @return void
|
|
*/
|
|
function transfert_local_to_user( $user_login, $user ) {
|
|
return $this->transfert_local_to_user_register( $user->ID );
|
|
}
|
|
|
|
function logout( $user_id ) {
|
|
set_transient( '_tinvwl_update_wishlists_data', '1' );
|
|
}
|
|
|
|
/**
|
|
* Transfer Cookie Wishlist when register user
|
|
*
|
|
* @param integer $user_id New user id.
|
|
*/
|
|
function transfert_local_to_user_register( $user_id ) {
|
|
|
|
set_transient( '_tinvwl_update_wishlists_data', '1' );
|
|
|
|
$wl = new TInvWL_Wishlist( $this->_name );
|
|
$wishlist = $wl->get_by_sharekey_default();
|
|
if ( ! empty( $wishlist ) ) {
|
|
$wishlist = array_shift( $wishlist );
|
|
if ( empty( $wishlist['author'] ) ) {
|
|
$wlpl = new TInvWL_Product( $wishlist );
|
|
$wl->user = $user_id;
|
|
$_wishlist = $wl->get_by_user_default( $user_id );
|
|
if ( empty( $_wishlist ) ) {
|
|
$wishlist['author'] = $user_id;
|
|
unset( $wishlist['title'] );
|
|
$wl->update( $wishlist['ID'], $wishlist );
|
|
$wlp = new TInvWL_Product( $wishlist, $this->_name );
|
|
$products = $wlp->get_wishlist( array( 'external' => false ) );
|
|
foreach ( $products as $product ) {
|
|
$product['author'] = $user_id;
|
|
$wlp->update( $product );
|
|
}
|
|
} else {
|
|
$_wishlist = array_shift( $_wishlist );
|
|
if ( $wishlist['ID'] != $_wishlist['ID'] ) {
|
|
$wlp = new TInvWL_Product( $_wishlist, $this->_name );
|
|
$products = $wlpl->get_wishlist( array( 'external' => false ) );
|
|
$added = true;
|
|
foreach ( $products as $product ) {
|
|
unset( $product['author'] );
|
|
unset( $product['wishlist_id'] );
|
|
$added = $added && $wlp->add_product( $product );
|
|
}
|
|
if ( $added ) {
|
|
$wlpl->remove_product_from_wl();
|
|
}
|
|
}
|
|
$wl->set_sharekey( $_wishlist['share_key'] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set the default wishlist key if the user loguot
|
|
*/
|
|
public function set_user_sharekey() {
|
|
$wl = new TInvWL_Wishlist( $this->_name );
|
|
$wishlist = $wl->get_by_user_default();
|
|
if ( ! empty( $wishlist ) ) {
|
|
$wishlist = array_shift( $wishlist );
|
|
$wl->set_sharekey( $wishlist['share_key'] );
|
|
}
|
|
}
|
|
|
|
|
|
function wishlist_endpoint() {
|
|
add_rewrite_endpoint( tinv_get_option( 'general', 'my_account_endpoint_slug' ), EP_ROOT | EP_PAGES );
|
|
}
|
|
|
|
function wishlist_query_vars( $vars ) {
|
|
$vars[] = tinv_get_option( 'general', 'my_account_endpoint_slug' );
|
|
|
|
return $vars;
|
|
}
|
|
|
|
function wishlist_content() {
|
|
echo do_shortcode( ' [ti_wishlistsview] ' );
|
|
}
|
|
|
|
/**
|
|
* Add link to wishlist in WooCommerce My Account page.
|
|
*
|
|
* @param array $items Menu items links in my accounts.
|
|
*
|
|
* @return array
|
|
*/
|
|
function account_menu_items( $items ) {
|
|
$index_position = apply_filters( 'tinvwl_myaccount_position_wishlist', - 1, $items );
|
|
|
|
$items = array_merge(
|
|
array_slice( $items, 0, $index_position, true ),
|
|
array(
|
|
tinv_get_option( 'general', 'my_account_endpoint_slug' ) => __( 'Wishlist', 'ti-woocommerce-wishlist' ),
|
|
),
|
|
array_slice( $items, $index_position, null, true )
|
|
);
|
|
|
|
return $items;
|
|
}
|
|
|
|
/**
|
|
* Create end point for wishlist url
|
|
*
|
|
* @param string $url URL from wishlist.
|
|
* @param string $endpoint End point name.
|
|
* @param string $value Not used.
|
|
* @param string $permalink Not used.
|
|
*
|
|
* @return string
|
|
*/
|
|
function account_menu_endpoint( $url, $endpoint, $value, $permalink ) {
|
|
if ( ! tinv_get_option( 'general', 'my_account_endpoint' ) && tinv_get_option( 'general', 'my_account_endpoint_slug' ) === $endpoint ) {
|
|
$url = tinv_url_wishlist_default();
|
|
}
|
|
|
|
return $url;
|
|
}
|
|
|
|
/**
|
|
* Remove Wishlist a user when the user is deleted
|
|
*
|
|
* @param integer $id Removed userid.
|
|
*/
|
|
function delete_user_wishlist( $id ) {
|
|
$wl = new TInvWL_Wishlist( $this->_name );
|
|
$wishlists = $wl->get( array(
|
|
'author' => $id,
|
|
'count' => 9999999,
|
|
) );
|
|
if ( ! empty( $wishlists ) ) {
|
|
foreach ( $wishlists as $wishlist ) {
|
|
$wl->remove( $wishlist['ID'] );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Export cookies wishlist to database
|
|
*/
|
|
function legacy_transfer() {
|
|
$wlpl = TInvWL_Product_Legacy::instance( $this->_name );
|
|
$products = $wlpl->get_wishlist( array( 'external' => false ) );
|
|
if ( ! empty( $products ) && is_array( $products ) ) {
|
|
$wl = new TInvWL_Wishlist( $this->_name );
|
|
$wishlist = $wl->add_user_default();
|
|
|
|
$wlp = new TInvWL_Product( $wishlist, $this->_name );
|
|
|
|
$added = true;
|
|
foreach ( $products as $product ) {
|
|
unset( $product['author'] );
|
|
if ( ! $wlp->add_product( $product ) ) {
|
|
$added = false;
|
|
}
|
|
}
|
|
if ( $added ) {
|
|
$wlpl->remove_product_from_wl();
|
|
}
|
|
}
|
|
}
|
|
}
|