Your IP : 216.73.217.143


Current Path : /home/ereika83/public_html/wp-content/plugins/segmentio/integrations/ecommerce/
Upload File :
Current File : /home/ereika83/public_html/wp-content/plugins/segmentio/integrations/ecommerce/wp-e-commerce.php

<?php

class Segment_Commerce_WPSC extends Segment_Commerce {

	/**
	 * Init method registers two types of hooks: Standard hooks, and those fired in-between page loads.
	 *
	 * For all our events, we hook into either `segment_get_current_page` or `segment_get_current_page_track`
	 * depending on the API we want to use.
	 *
	 * For events that occur between page loads, we hook into the appropriate action and set a Segment_Cookie
	 * instance to check on the next page load.
	 *
	 * @access public
	 * @since  1.0.0
	 *
	 */
	public function init() {

		$this->register_hook( 'segment_get_current_page'      , 'viewed_category'  , 1, $this );
		$this->register_hook( 'segment_get_current_page_track', 'viewed_product'   , 1, $this );
		$this->register_hook( 'segment_get_current_page_track', 'completed_order'  , 1, $this );
		$this->register_hook( 'segment_get_current_page_track', 'added_to_cart'    , 2, $this );
		$this->register_hook( 'segment_get_current_page_track', 'removed_from_cart', 2, $this );

		/* HTTP actions */
		add_action( 'wpsc_add_to_cart', array( $this, 'add_to_cart' ), 10, 2 );

		/* When WPeC 3.9 is the min. version for this plugin, we'll use `wpsc_remove_item` */
		add_action( 'wpsc_refresh_item', array( $this, 'remove_from_cart' ), 10 );

	}

	/**
	 * Adds category name to analytics.page()
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @uses  func_get_args() Because our abstract class doesn't know how many parameters are passed to each hook
	 *                        for each different platform, we use func_get_args().
	 *
	 * @return array Filtered array of name and properties for analytics.page().
	 */
	public function viewed_category() {

		$args = func_get_args();
		$page = $args[0];

		if ( is_tax( 'wpsc_product_category' ) ) {
				$page = array(
					'page'       => single_term_title( '', false ),
					'properties' => array()
				);
		}

		return $page;
	}
	/**
	 * Adds product information to a Segment_Cookie when item is added to cart.
	 *
	 * @param string $key      Key name for item in cart.  A hash.
	 * @param int    $id       Product ID
	 * @param int    $quantity Item quantity
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @uses  func_get_args() Because our abstract class doesn't know how many parameters are passed to each hook
	 *                        for each different platform, we use func_get_args().
	 */
	/**
	 * Adds product properties to analytics.track() when product is viewed.
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @uses  func_get_args() Because our abstract class doesn't know how many parameters are passed to each hook
	 *                        for each different platform, we use func_get_args().
	 *
	 * @return array Filtered array of name and properties for analytics.track().
	 */
	public function viewed_product() {

		$args  = func_get_args();
		$track = $args[0];

		if ( is_singular( 'wpsc-product' ) ) {
				$track = array(
					'event'      => __( 'Viewed Product', 'segment' ),
					'properties' => array(
						'id'       => get_the_ID(),
						'sku'      => wpsc_product_sku(),
						'name'     => wpsc_the_product_title(),
						'price'    => wpsc_string_to_float( wpsc_the_product_price() ),
						'category' => implode( ', ', wp_list_pluck( wpsc_get_product_terms( get_the_ID(), 'wpsc_product_category' ), 'name' ) ),
					)
				);
		}

		return $track;
	}

	/**
	 * Adds product information to a Segment_Cookie when item is added to cart.
	 *
	 * @param string $key      Key name for item in cart.  A hash.
	 * @param int    $id       Product ID
	 * @param int    $quantity Item quantity
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @uses  func_get_args() Because our abstract class doesn't know how many parameters are passed to each hook
	 *                        for each different platform, we use func_get_args().
	 */
	public function add_to_cart( $product, $cart_item ) {

		Segment_Cookie::set_cookie( 'added_to_cart', json_encode(
				array(
					'ID'       => $product->ID,
					'quantity' => $cart_item->quantity,
					'name'     => $product->post_title,
					'price'    => $cart_item->unit_price
				)
			)
		);
	}

	/**
	 * Adds product properties to analytics.track() when product added to cart.
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @uses  func_get_args() Because our abstract class doesn't know how many parameters are passed to each hook
	 *                        for each different platform, we use func_get_args().
	 *
	 * @return array Filtered array of name and properties for analytics.track().
	 */
	public function added_to_cart() {
		$args = func_get_args();

		$track = $args[0];

		if ( false !== ( $product = Segment_Cookie::get_cookie( 'added_to_cart' ) ) ) {

			$product = json_decode( $product );

			$item = array(
				'id'       => $product->ID,
				'sku'      => wpsc_product_sku( $product->ID ),
				'name'     => $product->name,
				'price'    => $product->price,
				'quantity' => $product->quantity,
				'category' => implode( ', ', wp_list_pluck( wpsc_get_product_terms( $product->ID, 'wpsc_product_category' ), 'name' ) ),
			);

			$track = array(
				'event'      => __( 'Added Product', 'segment' ),
				'properties' => $item,
				'http_event' => 'added_to_cart'
			);

		}

		return $track;
	}

	/**
	 * Adds product information to a Segment_Cookie when item is removed from cart.
	 *
	 * @param string $key      Key name for item in cart.  A hash.
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @uses  func_get_args() Because our abstract class doesn't know how many parameters are passed to each hook
	 *                        for each different platform, we use func_get_args().
	 */
	public function remove_from_cart( $cart_item ) {
		if ( 0 == $cart_item->quantity ) {
			Segment_Cookie::set_cookie( 'removed_from_cart', json_encode(
					array(
						'ID'       => $cart_item->product_id,
						'quantity' => 0,
						'name'     => $cart_item->product_title,
						'price'    => $cart_item->unit_price
					)
				)
			);
		}

	}

	/**
	 * Adds product properties to analytics.track() when product is removed from cart.
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @uses  func_get_args() Because our abstract class doesn't know how many parameters are passed to each hook
	 *                        for each different platform, we use func_get_args().
	 *
	 * @return array Filtered array of name and properties for analytics.track().
	 */
	public function removed_from_cart() {
		$args = func_get_args();

		$track = $args[0];

		if ( false !== ( $product = Segment_Cookie::get_cookie( 'removed_from_cart' ) ) ) {

			$product = json_decode( $product );

			$item = array(
				'id'       => $product->ID,
				'sku'      => wpsc_product_sku( $product->ID ),
				'name'     => $product->name,
				'price'    => $product->price,
				'quantity' => 0,
				'category' => implode( ', ', wp_list_pluck( wpsc_get_product_terms( $product->ID, 'wpsc_product_category' ), 'name' ) ),
			);

			$track = array(
				'event'      => __( 'Removed Product', 'segment' ),
				'properties' => $item,
				'http_event' => 'removed_from_cart'
			);

		}

		return $track;
	}

	/**
	 * Adds product properties to analytics.track() when the order is completed successfully.
	 *
	 * @since  1.0.0
	 * @access public
	 *
	 * @uses  func_get_args() Because our abstract class doesn't know how many parameters are passed to each hook
	 *                        for each different platform, we use func_get_args().
	 *
	 * @return array Filtered array of name and properties for analytics.track().
	 */
	public function completed_order() {
		$args  = func_get_args();
		$track = $args[0];

		if ( did_action( 'wpsc_transaction_results_shutdown' ) && isset( $_GET['sessionid'] ) ) {

			$log = new WPSC_Purchase_Log( $_GET['sessionid'], 'sessionid' );

			/* We like checking is_order_received(), as that's what the manual payment gateway uses. */
			if ( $log->is_transaction_completed() || $log->is_order_received() ) {

				$gateway_data = $log->get_gateway_data();
				$items        = $log->get_cart_contents();
				$products     = array();

				foreach ( $items as $item ) {

					$product = array(
						'id'       => $item->prodid,
						'sku'      => wpsc_product_sku( $item->prodid ),
						'name'     => $item->name,
						'price'    => $item->price,
						'quantity' => $item->quantity,
						'category' => implode( ', ', wp_list_pluck( wpsc_get_product_terms( $item->prodid, 'wpsc_product_category' ), 'name' ) ),
					);

					$products[] = $product;

				}

				$track = array(
					'event'      => __( 'Completed Order', 'segment' ),
					'properties' => array(
						'id'       => $log->get( 'id' )        ,
						'total'    => $log->get( 'totalprice' ),
						'revenue'  => $gateway_data['subtotal'],
						'shipping' => $gateway_data['shipping'],
						'tax'      => $gateway_data['tax'],
						'products' => $products
					)
				);

			}
		}

		return $track;
	}

}
/**
 * Bootstrapper for the Segment_Commerce_WPSC class.
 *
 * @since  1.0.0
 */

function segment_commerce_wpsc() {
	$commerce = new Segment_Commerce_WPSC();

	return $commerce->init();
}

add_action( 'plugins_loaded', 'segment_commerce_wpsc', 100 );