Submit
Path:
~
/
home
/
getwphos
/
public_html
/
ppine
/
wp-content
/
plugins
/
ti-woocommerce-wishlist
/
public
/
wishlist
/
File Content:
view.class.php
<?php /** * Wishlist shortcode * * @since 1.0.0 * @package TInvWishlist\Public */ // If this file is called directly, abort. if ( ! defined( 'ABSPATH' ) ) { die; } /** * Wishlist shortcode */ class TInvWL_Public_Wishlist_View { /** * Plugin name * * @var string */ private $_name; /** * List per page * * @var integer */ private $lists_per_page; /** * Current page * * @var integer */ private $paged; /** * Current wishlist * * @var array */ private $current_wishlist; /** * Current products * * @var array */ private $current_products_query; /** * Social image * * @var string */ public $social_image; /** * Total pages * * @var int */ public $pages; /** * Wishlist full URL * * @var string */ public $wishlist_url; /** * Wishlist product helper * * @var TInvWL_Product */ public $wishlist_products_helper; /** * This class * * @var \TInvWL_Public_Wishlist_View */ protected static $_instance = null; /** * Get this class object * * @param string $plugin_name Plugin name. * * @return \TInvWL_Public_Wishlist_View */ public static function instance( $plugin_name = TINVWL_PREFIX ) { if ( is_null( self::$_instance ) ) { self::$_instance = new self( $plugin_name ); } return self::$_instance; } /** * Constructor * * @param string $plugin_name Plugin name. */ function __construct( $plugin_name ) { $this->_name = $plugin_name; $this->define_hooks(); } /** * Defined shortcode and hooks */ function define_hooks() { add_action( 'template_redirect', array( $this, 'login_redirect' ) ); add_action( 'wp_loaded', array( $this, 'login_post_redirect' ), 19 ); add_action( 'wp_head', array( $this, 'add_meta_tags' ), 1 ); add_action( 'tinvwl_before_wishlist', array( $this, 'wishlist_header' ) ); if ( ! tinv_get_option( 'general', 'my_account_endpoint' ) ) { add_action( 'tinvwl_after_wishlist', array( 'TInvWL_Public_Wishlist_Social', 'init' ) ); } add_filter( 'tinvwl_wishlist_item_url', array( $this, 'add_argument' ), 10, 3 ); add_filter( 'tinvwl_wishlist_item_action_add_to_cart', array( $this, 'product_allow_add_to_cart' ), 10, 3 ); add_filter( 'tinvwl_wishlist_item_add_to_cart', array( $this, 'external_text' ), 10, 3 ); add_filter( 'tinvwl_wishlist_item_add_to_cart', array( $this, 'variable_text' ), 10, 3 ); add_action( 'tinvwl_after_wishlist_table', array( $this, 'get_per_page' ) ); add_action( 'init', array( 'TInvWL_Public_Wishlist_Buttons', 'init' ) ); add_action( 'tinvwl_before_wishlist_template', array( $this, 'refresh_wishlist_after_action' ) ); } /** * Redirect back after successful login. */ public function login_post_redirect() { $nonce_value = isset( $_REQUEST['woocommerce-login-nonce'] ) ? $_REQUEST['woocommerce-login-nonce'] : ( isset( $_REQUEST['_wpnonce'] ) ? $_REQUEST['_wpnonce'] : '' ); if ( ! empty( $_POST['login'] ) && wp_verify_nonce( $nonce_value, 'woocommerce-login' ) && ! empty( $_GET['tinvwl_redirect'] ) ) { $_POST['redirect'] = $_GET['tinvwl_redirect']; // Force WC Login form handler to do redirect. } } /** * Redirect guests to login page. */ public function login_redirect() { if ( ! is_page( wc_get_page_id( 'myaccount' ) ) && is_page( apply_filters( 'wpml_object_id', tinv_get_option( 'page', 'wishlist' ), 'page', true ) ) && ! is_user_logged_in() && tinv_get_option( 'general', 'require_login' ) ) { $full_link = get_permalink(); $share_key = get_query_var( 'tinvwlID', null ); if ( ! empty( $share_key ) ) { if ( get_option( 'permalink_structure' ) ) { if ( ! preg_match( '/\/$/', $full_link ) ) { $full_link .= '/'; } $full_link .= $share_key . '/'; } else { $full_link = add_query_arg( 'tinvwlID', $share_key, $full_link ); } } wp_safe_redirect( add_query_arg( 'tinvwl_redirect', rawurlencode( $full_link ), wc_get_page_permalink( 'myaccount' ) ) ); exit; } } /** * Change Text for external product * * @param string $text Text for button add to cart. * @param array $wl_product Wishlist Product. * @param WC_Product $_product Product. * * @return string */ function external_text( $text, $wl_product, $_product ) { global $product; // store global product data. $_product_tmp = $product; // override global product data. $product = $_product; if ( 'external' === $product->get_type() ) { $text = $product->single_add_to_cart_text(); // restore global product data. $product = $_product_tmp; } return $text; } /** * Change Text for variable product that requires to select some variations. * * @param string $text Text for button add to cart. * @param array $wl_product Wishlist Product. * @param WC_Product $_product Product. * * @return string */ function variable_text( $text, $wl_product, $_product ) { global $product; // store global product data. $_product_tmp = $product; // override global product data. $product = $_product; if ( apply_filters( 'tinvwl_product_add_to_cart_need_redirect', false, $product, $product->get_permalink(), $wl_product ) && in_array( $product->get_type(), array( 'variable', 'variable-subscription', ) ) ) { $text = $product->add_to_cart_text(); // restore global product data. $product = $_product_tmp; } return $text; } /** * Add analytics argument for url * * @param string $url Product url. * @param array $wl_product Wishlist product. * @param object $product Product. * * @return string */ function add_argument( $url, $wl_product, $product ) { return add_query_arg( 'tiwp', $wl_product['ID'], $url ); } /** * Get current wishlist * * @return array */ function get_current_wishlist() { if ( empty( $this->current_wishlist ) ) { $this->current_wishlist = apply_filters( 'tinvwl_get_current_wishlist', tinv_wishlist_get() ); } return $this->current_wishlist; } /** * Get current products query * * @return array */ function get_current_products_query() { if ( ! is_array( $this->current_products_query ) ) { return false; } return $this->current_products_query; } /** * Get current products from wishlist * * @param array $wishlist Wishlist object. * @param boolean $external Get woocommerce product info. * @param integer $lists_per_page Count per page. * * @return array */ function get_current_products( $wishlist = null, $external = true, $lists_per_page = null, $paged = 1 ) { if ( empty( $wishlist ) || $wishlist === $this->get_current_wishlist() ) { $wishlist = $this->get_current_wishlist(); if ( ! $this->wishlist_products_helper ) { $wlp = null; if ( isset( $wishlist['ID'] ) && 0 === $wishlist['ID'] ) { $wlp = TInvWL_Product_Local::instance(); } else { $wlp = new TInvWL_Product( $wishlist ); } $this->wishlist_products_helper = $wlp; } else { $wlp = $this->wishlist_products_helper; } } else { $wlp = null; if ( isset( $wishlist['ID'] ) && 0 === $wishlist['ID'] ) { $wlp = TInvWL_Product_Local::instance(); } else { $wlp = new TInvWL_Product( $wishlist ); } } if ( empty( $wlp ) ) { return array(); } if ( ! $lists_per_page ) { $lists_per_page = tinv_get_option( 'table', 'per_page' ); } $paged = absint( get_query_var( 'wl_paged' ) ? get_query_var( 'wl_paged' ) : $paged ); $this->pages = ceil( absint( $wlp->get_wishlist( array( 'count' => 9999999, 'external' => false, ), true ) ) / absint( $lists_per_page ) ); $this->paged = $this->pages < $paged ? $this->pages : $paged; $product_data = array( 'count' => absint( $lists_per_page ), 'offset' => absint( $lists_per_page ) * ( absint( $this->paged ) - 1 ), 'external' => $external, 'order_by' => 'date', 'order' => 'DESC', ); $product_data = apply_filters( 'tinvwl_before_get_current_product', $product_data ); $products = $wlp->get_wishlist( $product_data ); $products = apply_filters( 'tinvwl_after_get_current_product', $products ); if ( tinv_get_option( 'table', 'per_page' ) === absint( $lists_per_page ) ) { $this->current_products_query = $products; } return $products; } /** * Allow show button add to cart * * @param boolean $allow Settings flag. * @param array $wlproduct Wishlist Product. * @param WC_Product $product Product. * * @return boolean */ function product_allow_add_to_cart( $allow, $wlproduct, $product ) { if ( ! $allow || 'variable' === $product->get_type() ) { return false; } return ( $product->is_purchasable() || 'external' === $product->get_type() ) && ( $product->is_in_stock() || $product->backorders_allowed() ); } /** * Create social meta tags */ function add_meta_tags() { if ( is_page( apply_filters( 'wpml_object_id', tinv_get_option( 'page', 'wishlist' ), 'page', true ) ) ) { $wishlist = $this->get_current_wishlist(); if ( $wishlist && 0 < $wishlist['ID'] ) { if ( 'private' !== $wishlist['status'] && tinv_get_option( 'social', 'facebook' ) ) { if ( is_user_logged_in() ) { $user = get_user_by( 'id', $wishlist['author'] ); if ( $user && $user->exists() ) { $user_name = trim( sprintf( '%s %s', $user->user_firstname, $user->user_lastname ) ); $user = @$user->display_name; // @codingStandardsIgnoreLine Generic.PHP.NoSilencedErrors.Discouraged } else { $user_name = ''; $user = ''; } } else { $user_name = ''; $user = ''; } if ( is_array( $this->get_current_products_query() ) ) { $products = $this->current_products_query; } else { $products = $this->get_current_products( $wishlist, true ); } $products_title = array(); foreach ( $products as $product ) { if ( ! empty( $product ) && ! empty( $product['data'] ) ) { $title = is_callable( array( $product['data'], 'get_name' ) ) ? $product['data']->get_name() : $product['data']->get_title(); if ( ! in_array( $title, $products_title ) ) { $products_title[] = $title; } } } $product = array_shift( $products ); $image = ''; if ( ! empty( $product ) && ! empty( $product['data'] ) ) { list( $image ) = wp_get_attachment_image_src( $product['data']->get_image_id(), 'full' ); } $this->social_image = $image; $meta = apply_filters( 'tinvwl_social_header_meta', array( 'url' => $this->wishlist_url, 'type' => 'product.group', 'title' => sprintf( __( '%1$s by %2$s', 'ti-woocommerce-wishlist' ), $wishlist['title'], ( empty( $user_name ) ? $user : $user_name ) ), 'description' => implode( ', ', $products_title ), 'image' => $image, ) ); foreach ( $meta as $name => $content ) { echo sprintf( '<meta property="og:%s" content="%s" />', esc_attr( $name ), esc_attr( $content ) ); } echo "\n"; } } // End if(). } // End if(). } /** * Output page * * @param array $atts Array parameter for shortcode. * * @return mixed */ function htmloutput( $atts ) { if ( $atts['sharekey'] ) { $wl = new TInvWL_Wishlist( $this->_name ); $wishlist = $wl->get_by_share_key( $atts['sharekey'] ); $this->current_wishlist = $wishlist; } else { $wishlist = $this->get_current_wishlist(); } if ( empty( $wishlist ) ) { $id = get_query_var( 'tinvwlID', null ); if ( empty( $id ) && ( is_user_logged_in() || ! tinv_get_option( 'general', 'require_login' ) ) ) { return $this->wishlist_empty( array(), array( 'ID' => '', 'author' => get_current_user_id(), 'title' => apply_filters( 'tinvwl_default_wishlist_title', tinv_get_option( 'general', 'default_title' ) ), 'status' => 'private', 'type' => 'default', 'share_key' => '', ) ); } return $this->wishlist_null(); } if ( 'private' === $wishlist['status'] && ! $wishlist['is_owner'] ) { return $this->wishlist_null(); } $this->wishlist_url = tinv_url_wishlist( $wishlist['share_key'] ); if ( 'default' !== $wishlist['type'] && ! tinv_get_option( 'general', 'multi' ) ) { if ( $wishlist['is_owner'] ) { printf( '<p><a href="%s">%s</p><script type="text/javascript">window.location.href="%s"</script>', esc_attr( tinv_url_wishlist_default() ), esc_html__( 'Return to Wishlist', 'ti-woocommerce-wishlist' ), esc_attr( tinv_url_wishlist_default() ) ); return false; } else { return $this->wishlist_null(); } } $this->lists_per_page = absint( $atts['lists_per_page'] ); $paged = absint( get_query_var( 'wl_paged' ) ? get_query_var( 'wl_paged' ) : $atts['paged'] ); if ( tinv_get_option( 'table', 'per_page' ) === $this->lists_per_page && is_array( $this->get_current_products_query() ) && ! $atts['sharekey'] ) { $products = $this->current_products_query; } else { $products = $this->get_current_products( $wishlist, true, $this->lists_per_page, $paged ); } $wla = new TInvWL_Analytics( $wishlist, $this->_name ); $wla->view_products( $wishlist, $wishlist['is_owner'] ); foreach ( $products as $key => $product ) { if ( ! isset( $product['data'] ) ) { unset( $products[ $key ] ); } } if ( ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) { do_action( 'tinvwl_before_wishlist_template', $wishlist ); } if ( empty( $products ) ) { $this->pages = 0; return $this->wishlist_empty( $products, $wishlist ); } $wishlist_table_row = tinv_get_option( 'product_table' ); $wishlist_table_row['text_add_to_cart'] = apply_filters( 'tinvwl_add_to_cart_text', tinv_get_option( 'product_table', 'text_add_to_cart' ) ); $data = array( 'products' => $products, 'wishlist' => $wishlist, 'wishlist_table' => tinv_get_option( 'table' ), 'wishlist_table_row' => $wishlist_table_row, 'wl_paged' => $this->paged, 'wl_per_page' => $this->lists_per_page, ); if ( 1 < $this->paged ) { add_action( 'tinvwl_pagenation_wishlist', array( $this, 'page_prev' ) ); } if ( 1 < $this->pages ) { add_action( 'tinvwl_pagenation_wishlist', array( $this, 'pages' ) ); } if ( $this->pages > $this->paged ) { add_action( 'tinvwl_pagenation_wishlist', array( $this, 'page_next' ) ); } if ( $wishlist['is_owner'] ) { tinv_wishlist_template( 'ti-wishlist.php', $data ); } else { if ( class_exists( 'WC_Catalog_Visibility_Options' ) ) { global $wc_cvo; if ( 'secured' === $wc_cvo->setting( 'wc_cvo_atc' && isset( $data['wishlist_table_row']['add_to_cart'] ) ) ) { unset( $data['wishlist_table_row']['add_to_cart'] ); } if ( 'secured' === $wc_cvo->setting( 'wc_cvo_prices' && isset( $data['wishlist_table_row']['colm_price'] ) ) ) { unset( $data['wishlist_table_row']['colm_price'] ); } } tinv_wishlist_template( 'ti-wishlist-user.php', $data ); } } /** * Not Found Wishlist * * @param array $wishlist Wishlist object. */ function wishlist_null( $wishlist = array() ) { $data = array( 'wishlist' => $wishlist, ); tinv_wishlist_template( 'ti-wishlist-null.php', $data ); } /** * Empty Wishlist * * @param array $products Products wishlist. * @param array $wishlist Wishlist object. */ function wishlist_empty( $products = array(), $wishlist = array() ) { $data = array( 'products' => $products, 'wishlist' => $wishlist, 'wishlist_table' => tinv_get_option( 'table' ), ); tinv_wishlist_template( 'ti-wishlist-empty.php', $data ); } /** * Header Wishlist * * @param array $wishlist Wishlist object. */ function wishlist_header( $wishlist ) { $data = array( 'wishlist' => $wishlist, ); tinv_wishlist_template( 'ti-wishlist-header.php', $data ); } /** * Prev page button */ function page_prev() { $paged = $this->paged; $paged = $this->pages < $paged ? $this->pages : $paged; $paged = 1 < $paged ? $paged - 1 : 0; $this->page( $paged, sprintf( '<i class="ftinvwl ftinvwl-chevron-left"></i><span>%s</span>', __( 'Previous Page', 'ti-woocommerce-wishlist' ) ), array( 'class' => 'button tinv-prev' ) ); } /** * Pages */ function pages() { $paged = $this->paged; $paged = $this->pages < $paged ? $this->pages : $paged; if ( 1 === (int) $paged ) { echo '<span></span>'; } echo '<span>' . $paged . '/' . $this->pages . '</span>'; if ( (int) $this->pages === (int) $paged ) { echo '<span></span>'; } } /** * Next page button */ function page_next() { $paged = $this->paged; $paged = $this->pages < $paged ? $this->pages : $paged; $paged = 1 < $paged ? $paged + 1 : 2; $this->page( $paged, sprintf( '<span>%s</span><i class="ftinvwl ftinvwl-chevron-right"></i>', __( 'Next Page', 'ti-woocommerce-wishlist' ) ), array( 'class' => 'button tinv-next' ) ); } /** * Page button * * @param integer $paged Index page. * @param string $text Text button. * @param string $style Style attribute. */ function page( $paged, $text, $style = array() ) { $paged = absint( $paged ); $wishlist = $this->get_current_wishlist(); $link = tinv_url_wishlist( $wishlist['share_key'], $paged, true ); if ( is_array( $style ) ) { $style = TInvWL_Form::__atrtostr( $style ); } printf( '<a href="%s" %s>%s</a>', esc_url( $link ), $style, $text ); // WPCS: xss ok. } /** * Shortcode basic function * * @param array $atts Array parameter from shortcode. * * @return string */ function shortcode( $atts = array() ) { $default = array( 'lists_per_page' => tinv_get_option( 'table', 'per_page' ), 'paged' => 1, 'sharekey' => false, ); $atts = shortcode_atts( $default, $atts ); ob_start(); $this->htmloutput( $atts ); return ob_get_clean(); } /** * Get per page items for buttons */ function get_per_page() { if ( ! empty( $this->lists_per_page ) ) { echo TInvWL_Form::_text( array( // WPCS: xss ok. 'type' => 'hidden', 'name' => 'lists_per_page', ), $this->lists_per_page ); } } /** * Outputs the script for refreshing wishlist. */ public function refresh_wishlist_after_action( $wishlist ) { if ( ! $wishlist['is_owner'] ) { return false; } ?> <script type="text/javascript"> jQuery(document).ready(function ($) { // Generate a unique hash key for localStorage var hash_key = tinvwl_add_to_wishlist.hash_key + '_refresh'; if (localStorage.getItem(hash_key) && '<?php echo $wishlist['share_key'] ?>' === localStorage.getItem(hash_key)) { localStorage.setItem(hash_key, ''); } // Refresh the wishlist when storage changes in another tab $(window).on('storage', function (e) { if ( e.originalEvent.key === hash_key && '<?php echo $wishlist['share_key'] ?>' === e.originalEvent.newValue ) { // Call the function to refresh the wishlist data $.fn.tinvwl_get_wishlist_data('refresh'); } }); }); </script> <?php } }
Edit
Rename
Chmod
Delete
FILE
FOLDER
Name
Size
Permission
Action
ajax.class.php
17010 bytes
0644
buttons.class.php
7621 bytes
0644
index.php
59 bytes
0644
social.class.php
4456 bytes
0644
view.class.php
19930 bytes
0644
N4ST4R_ID | Naxtarrr