2019-02-21 22:45:43 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* WooCommerce Import Tracking
|
|
|
|
*
|
|
|
|
* @package WooCommerce\Tracks
|
|
|
|
*/
|
|
|
|
|
2020-01-29 05:21:29 +00:00
|
|
|
use Automattic\Jetpack\Constants;
|
|
|
|
|
2019-02-21 22:45:43 +00:00
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This class adds actions to track usage of WooCommerce Products.
|
|
|
|
*/
|
|
|
|
class WC_Products_Tracking {
|
|
|
|
/**
|
|
|
|
* Init tracking.
|
|
|
|
*/
|
2019-03-05 00:30:01 +00:00
|
|
|
public function init() {
|
|
|
|
add_action( 'edit_post', array( $this, 'track_product_updated' ), 10, 2 );
|
|
|
|
add_action( 'transition_post_status', array( $this, 'track_product_published' ), 10, 3 );
|
|
|
|
add_action( 'created_product_cat', array( $this, 'track_product_category_created' ) );
|
2020-03-24 02:03:36 +00:00
|
|
|
add_action( 'woocommerce_variation_set_stock', array( $this, 'track_product_stock_level_set' ), 10, 1 );
|
|
|
|
add_action( 'woocommerce_product_set_stock', array( $this, 'track_product_stock_level_set' ), 10, 1 );
|
2019-02-21 22:45:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-03-17 01:27:57 +00:00
|
|
|
* Send some Tracks events when a product is updated.
|
2019-02-21 22:45:43 +00:00
|
|
|
*
|
2019-03-05 00:30:01 +00:00
|
|
|
* @param int $product_id Product id.
|
2019-02-22 01:34:06 +00:00
|
|
|
* @param object $post WordPress post.
|
2019-02-21 22:45:43 +00:00
|
|
|
*/
|
2019-03-05 00:30:01 +00:00
|
|
|
public function track_product_updated( $product_id, $post ) {
|
2019-02-21 22:45:43 +00:00
|
|
|
if ( 'product' !== $post->post_type ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$properties = array(
|
|
|
|
'product_id' => $product_id,
|
|
|
|
);
|
|
|
|
|
2019-04-08 03:37:36 +00:00
|
|
|
WC_Tracks::record_event( 'product_edit', $properties );
|
2020-03-17 01:27:57 +00:00
|
|
|
|
2020-03-18 05:10:14 +00:00
|
|
|
$product_factory = new WC_Product_Factory();
|
|
|
|
$product = $product_factory->get_product( $product_id );
|
2020-03-17 01:27:57 +00:00
|
|
|
$update_properties = array(
|
|
|
|
'product_id' => $product_id,
|
2020-03-18 05:10:14 +00:00
|
|
|
'product_type' => $product->get_type(),
|
|
|
|
'is_virtual' => $product->get_virtual(),
|
|
|
|
'is_downloadable' => $product->get_downloadable(),
|
2020-03-17 01:27:57 +00:00
|
|
|
'manage_stock' => 0 == $product->get_manage_stock() ? 'N' : 'Y',
|
|
|
|
);
|
|
|
|
|
|
|
|
WC_Tracks::record_event( 'product_update', $update_properties );
|
2019-02-21 22:45:43 +00:00
|
|
|
}
|
2019-02-22 01:34:06 +00:00
|
|
|
|
2020-03-24 02:03:36 +00:00
|
|
|
/**
|
|
|
|
* Send a Tracks event when a product's stock level is adjusted.
|
|
|
|
*
|
|
|
|
* @param WC_Product $product Product.
|
|
|
|
*/
|
|
|
|
public function track_product_stock_level_set( $product ) {
|
|
|
|
$properties = array(
|
|
|
|
'product_id' => $product->get_id(),
|
|
|
|
);
|
|
|
|
|
|
|
|
WC_Tracks::record_event( 'product_stock_level_set', $properties );
|
|
|
|
}
|
|
|
|
|
2019-02-22 01:34:06 +00:00
|
|
|
/**
|
|
|
|
* Send a Tracks event when a product is published.
|
|
|
|
*
|
|
|
|
* @param string $new_status New post_status.
|
|
|
|
* @param string $old_status Previous post_status.
|
|
|
|
* @param object $post WordPress post.
|
|
|
|
*/
|
2019-03-05 00:30:01 +00:00
|
|
|
public function track_product_published( $new_status, $old_status, $post ) {
|
2019-02-22 01:34:06 +00:00
|
|
|
if (
|
|
|
|
'product' !== $post->post_type ||
|
|
|
|
'publish' !== $new_status ||
|
|
|
|
'publish' === $old_status
|
|
|
|
) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$properties = array(
|
|
|
|
'product_id' => $post->ID,
|
|
|
|
);
|
|
|
|
|
|
|
|
WC_Tracks::record_event( 'product_add_publish', $properties );
|
|
|
|
}
|
2019-02-22 01:38:50 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Send a Tracks event when a product category is created.
|
|
|
|
*
|
|
|
|
* @param int $category_id Category ID.
|
|
|
|
*/
|
2019-03-05 00:30:01 +00:00
|
|
|
public function track_product_category_created( $category_id ) {
|
2019-12-13 19:58:14 +00:00
|
|
|
// phpcs:disable WordPress.Security.NonceVerification.Missing
|
2019-02-22 01:38:50 +00:00
|
|
|
// Only track category creation from the edit product screen or the
|
|
|
|
// category management screen (which both occur via AJAX).
|
|
|
|
if (
|
2020-01-29 05:21:29 +00:00
|
|
|
! Constants::is_defined( 'DOING_AJAX' ) ||
|
2019-02-22 01:38:50 +00:00
|
|
|
empty( $_POST['action'] ) ||
|
|
|
|
(
|
|
|
|
// Product Categories screen.
|
|
|
|
'add-tag' !== $_POST['action'] &&
|
|
|
|
// Edit Product screen.
|
|
|
|
'add-product_cat' !== $_POST['action']
|
|
|
|
)
|
|
|
|
) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$category = get_term( $category_id, 'product_cat' );
|
|
|
|
$properties = array(
|
|
|
|
'category_id' => $category_id,
|
|
|
|
'parent_id' => $category->parent,
|
|
|
|
'page' => ( 'add-tag' === $_POST['action'] ) ? 'categories' : 'product',
|
|
|
|
);
|
|
|
|
// phpcs:enable
|
|
|
|
|
|
|
|
WC_Tracks::record_event( 'product_category_add', $properties );
|
|
|
|
}
|
2019-02-21 22:45:43 +00:00
|
|
|
}
|