Files

393 lines
14 KiB
PHP

<?php
defined('ABSPATH') or die(); // Exit if accessed directly
/**
* Nasa Wishlist
*
* Since 3.0
*/
if (!NASA_WISHLIST_ENABLE && NASA_WOO_ACTIVED) :
class ELESSI_WOO_WISHLIST {
/**
* instance of the class
*/
protected static $instance = null;
/**
* Support multi Languages
*/
protected $multi_langs = false;
/**
* Current Language
*/
public $current_lang = '';
/**
* List Languages
*/
public $languages = array();
/**
* Cookie name
*/
public $cookie_name = 'nasa_wishlist';
/**
* wishlist_list
*/
public $wishlist_list = array();
/**
* expire time
*/
public $expire = 0;
/**
* Init Class
*/
public static function init() {
global $nasa_opt;
if (isset($nasa_opt['enable_nasa_wishlist']) && !$nasa_opt['enable_nasa_wishlist']) {
return null;
}
if (null == self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor.
*/
public function __construct() {
global $nasa_opt;
$in_mobile = isset($nasa_opt['nasa_in_mobile']) && $nasa_opt['nasa_in_mobile'] ? true : false;
$mobile_app = $in_mobile && isset($nasa_opt['mobile_layout']) && $nasa_opt['mobile_layout'] == 'app' ? true : false;
$siteurl = get_option('siteurl');
$this->cookie_name .= $siteurl ? '_' . md5($siteurl) : '';
$this->current_lang = defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE : get_option('WPLANG');
if (trim($this->current_lang) == '') {
$this->current_lang = 'default';
}
$this->languages = array($this->current_lang);
/**
* Support Multi Languages
*/
if (function_exists('icl_get_languages')) {
$this->multi_langs = true;
$wpml_langs = icl_get_languages('skip_missing=0&orderby=code');
if (!empty($wpml_langs)) {
foreach ($wpml_langs as $lang) {
if (isset($lang['language_code']) && !in_array($lang['language_code'], $this->languages)) {
$this->languages[] = $lang['language_code'];
}
}
}
}
$this->wishlist_list = $this->get_wishlist_list();
/**
* Live 30 days
*/
$this->expire = apply_filters('nasa_cookie_wishlist_live', NASA_TIME_NOW + (60 * 60 * 24 * 30));
add_action('nasa_show_buttons_loop', array($this, 'btn_in_list'), 20);
if ($mobile_app) {
add_action('woocommerce_single_product_summary', array($this, 'btn_wishlist_with_label'), 31);
} else {
add_action('nasa_single_buttons', array($this, 'btn_in_detail'), 10);
}
}
/**
* get Cookie Name
*
* @return type
*/
public function get_cookie_name($_lang = null) {
$lang = !$_lang ? $this->current_lang : $_lang;
return $this->cookie_name . '_' . $lang;
}
/**
* Get Wishlist items id
*/
public function get_wishlist_list($_lang = null) {
$wishlists = isset($_COOKIE[$this->get_cookie_name($_lang)]) ? json_decode($_COOKIE[$this->get_cookie_name($_lang)]) : array();
if (!is_array($wishlists)) {
$wishlists = array();
}
return $wishlists;
}
/**
* Get Wishlist items id of Current language
*/
public function get_current_wishlist() {
return $this->wishlist_list;
}
/**
* btn wishlist with label
*
* @global type $product
*/
public function btn_wishlist_with_label() {
global $product;
if (!$product) {
return;
}
$variation = false;
$productId = $product->get_id();
$productType = $product->get_type();
if ($productType == 'variation') {
$variation_product = $product;
$productId = wp_get_post_parent_id($productId);
$parentProduct = wc_get_product($productId);
$productType = $parentProduct->get_type();
$GLOBALS['product'] = $parentProduct;
$variation = true;
}
$class_btn = 'btn-wishlist btn-link wishlist-icon btn-nasa-wishlist nasa-flex ns-has-wrap';
$ns_wishlist_stroke = apply_filters('elessi_wishlist_svg_stroke', '<svg class="nasa-icon ns-stroke" width="20" height="20" viewBox="0 0 32 32">
<path d="M21.886 5.115c3.521 0 6.376 2.855 6.376 6.376 0 1.809-0.754 3.439-1.964 4.6l-10.297 10.349-10.484-10.536c-1.1-1.146-1.778-2.699-1.778-4.413 0-3.522 2.855-6.376 6.376-6.376 2.652 0 4.925 1.62 5.886 3.924 0.961-2.304 3.234-3.924 5.886-3.924zM21.886 4.049c-2.345 0-4.499 1.089-5.886 2.884-1.386-1.795-3.54-2.884-5.886-2.884-4.104 0-7.442 3.339-7.442 7.442 0 1.928 0.737 3.758 2.075 5.152l11.253 11.309 11.053-11.108c1.46-1.402 2.275-3.308 2.275-5.352 0-4.104-3.339-7.442-7.442-7.442v0z" fill="currentColor" />
</svg>');
$ns_wishlist_filled = apply_filters('elessi_wishlist_svg_filled', '<svg class="nasa-icon ns-filled" width="20" height="20" viewBox="0 0 28 32">
<path d="M19.886 4.049c-2.345 0-4.499 1.089-5.886 2.884-1.386-1.795-3.54-2.884-5.886-2.884-4.104 0-7.442 3.339-7.442 7.442 0 1.928 0.737 3.758 2.075 5.152l11.253 11.309 11.053-11.108c1.46-1.402 2.275-3.308 2.275-5.352 0-4.104-3.339-7.442-7.442-7.442z" fill="currentColor" />
</svg>');
?>
<a href="javascript:void(0);" class="<?php echo esc_attr($class_btn); ?>" data-prod="<?php echo (int) $productId; ?>" data-prod_type="<?php echo esc_attr($productType); ?>" title="<?php esc_attr_e('Wishlist', 'elessi-theme'); ?>" rel="nofollow">
<?php echo $ns_wishlist_stroke; ?>
<?php echo $ns_wishlist_filled; ?>
<span class="nasa-icon-text-wrap">
<span class="margin-left-5 rtl-margin-left-0 rtl-margin-right-5 nasa-icon-text"><?php echo esc_html__('Add to wishlist', 'elessi-theme'); ?></span>
<span class="margin-left-5 rtl-margin-left-0 rtl-margin-right-5 nasa-icon-text"><?php echo esc_html__('Added to wishlist', 'elessi-theme'); ?></span>
</span>
</a>
<?php
if ($variation) {
$GLOBALS['product'] = $variation_product;
}
}
/**
* btn wishlist in list
*
* @global type $product
*/
public function btn_wishlist($tip = 'left') {
global $product;
if (!$product) {
return;
}
$variation = false;
$productId = $product->get_id();
$productType = $product->get_type();
if ($productType == 'variation') {
$variation_product = $product;
$productId = wp_get_post_parent_id($productId);
$parentProduct = wc_get_product($productId);
$productType = $parentProduct->get_type();
$GLOBALS['product'] = $parentProduct;
$variation = true;
}
$class_btn = 'btn-wishlist btn-link wishlist-icon btn-nasa-wishlist nasa-tip';
$class_btn .= ' nasa-tip-' . $tip;
$ns_wishlist_stroke = apply_filters('elessi_wishlist_svg_stroke', '<svg class="nasa-icon ns-stroke" width="20" height="20" viewBox="0 0 32 32">
<path d="M21.886 5.115c3.521 0 6.376 2.855 6.376 6.376 0 1.809-0.754 3.439-1.964 4.6l-10.297 10.349-10.484-10.536c-1.1-1.146-1.778-2.699-1.778-4.413 0-3.522 2.855-6.376 6.376-6.376 2.652 0 4.925 1.62 5.886 3.924 0.961-2.304 3.234-3.924 5.886-3.924zM21.886 4.049c-2.345 0-4.499 1.089-5.886 2.884-1.386-1.795-3.54-2.884-5.886-2.884-4.104 0-7.442 3.339-7.442 7.442 0 1.928 0.737 3.758 2.075 5.152l11.253 11.309 11.053-11.108c1.46-1.402 2.275-3.308 2.275-5.352 0-4.104-3.339-7.442-7.442-7.442v0z" fill="currentColor" />
</svg>');
$ns_wishlist_filled = apply_filters('elessi_wishlist_svg_filled', '<svg class="nasa-icon ns-filled" width="20" height="20" viewBox="0 0 28 32">
<path d="M19.886 4.049c-2.345 0-4.499 1.089-5.886 2.884-1.386-1.795-3.54-2.884-5.886-2.884-4.104 0-7.442 3.339-7.442 7.442 0 1.928 0.737 3.758 2.075 5.152l11.253 11.309 11.053-11.108c1.46-1.402 2.275-3.308 2.275-5.352 0-4.104-3.339-7.442-7.442-7.442z" fill="currentColor" />
</svg>');
?>
<a href="javascript:void(0);" class="<?php echo esc_attr($class_btn); ?>" data-prod="<?php echo (int) $productId; ?>" data-prod_type="<?php echo esc_attr($productType); ?>" data-icon-text="<?php esc_attr_e('Add to Wishlist', 'elessi-theme'); ?>" data-added="<?php esc_attr_e('Added to Wishlist', 'elessi-theme'); ?>" title="<?php esc_attr_e('Wishlist', 'elessi-theme'); ?>" rel="nofollow">
<?php echo $ns_wishlist_stroke; ?>
<?php echo $ns_wishlist_filled; ?>
</a>
<?php
if ($variation) {
$GLOBALS['product'] = $variation_product;
}
}
/**
* btn wishlist in list
*
* @global type $product
*/
public function btn_in_list() {
$this->btn_wishlist('left');
}
/**
* btn wishlist in detail
*
* @global type $product
*/
public function btn_in_detail() {
$this->btn_wishlist('right');
}
/**
* Add Wishlist
*/
public function add_to_wishlist($_product_id) {
$product_id = intval($_product_id);
if (!$product_id) {
return false;
}
if ($this->languages) {
foreach ($this->languages as $lang) {
$wishlists = $this->get_wishlist_list($lang);
if ($this->current_lang == $lang) {
$wishlists[] = $product_id;
$this->wishlist_list = $wishlists;
}
/**
* Support Multi Languages
*/
else {
if ($this->multi_langs) {
$product_langID = icl_object_id($product_id, 'product', true, $lang);
$wishlists[] = $product_langID;
}
}
$this->set_cookie_wishlist($lang, $wishlists);
}
}
return true;
}
/**
* Remove from Wishlist
*/
public function remove_from_wishlist($_product_id) {
$product_id = intval($_product_id);
if (!$product_id) {
return false;
}
if ($this->languages) {
foreach ($this->languages as $lang) {
if ($this->current_lang == $lang) {
$wishlists = $this->wishlist_list;
if ($wishlists) {
foreach ($wishlists as $k => $v) {
if ($v == $product_id) {
unset($wishlists[$k]);
}
}
}
$this->wishlist_list = $wishlists;
}
/**
* Support WPML
*/
else {
$wishlists = $this->get_wishlist_list($lang);
if ($this->multi_langs) {
if ($wishlists) {
$product_langID = icl_object_id($product_id, 'product', true, $lang);
foreach ($wishlists as $k => $v) {
if ($v == $product_langID) {
unset($wishlists[$k]);
}
}
}
}
}
$this->set_cookie_wishlist($lang, $wishlists);
}
}
return true;
}
/**
* Count wishlist items
*
* @return type
*/
public function count_items() {
return count($this->wishlist_list);
}
/**
* Set cookie wishlist
*/
protected function set_cookie_wishlist($lang = null, $wishlists = array()) {
setcookie($this->get_cookie_name($lang), json_encode(array_values($wishlists)), $this->expire, COOKIEPATH, COOKIE_DOMAIN, false, false);
}
/**
* Wishlist html
*/
public function wishlist_html() {
global $nasa_opt;
$wishlist_items = $this->wishlist_list;
$file = ELESSI_CHILD_PATH . '/includes/nasa-sidebar-wishlist_html.php';
include is_file($file) ? $file : ELESSI_THEME_PATH . '/includes/nasa-sidebar-wishlist_html.php';
}
}
/**
* Init NasaTheme Wishlist
*/
add_action('init', 'elessi_woo_wishlist');
if (!function_exists('elessi_woo_wishlist')) :
function elessi_woo_wishlist() {
return ELESSI_WOO_WISHLIST::init();
}
endif;
endif;