Gravity Wiz // WooCommerce Gravity Forms Product Add-ons // Process Feeds & Send Notifications
<?php
/**
* Gravity Wiz // WooCommerce Gravity Forms Product Add-ons // Process Feeds & Send Notifications
*
* Process Gravity Forms feeds on checkout for any GF-powered product in the cart. Currently supports GF Mailchimp add-on.
*
* @version 1.0
* @author David Smith <david@gravitywiz.com>
* @license GPL-2.0+
* @link http://gravitywiz.com/...
*
* Plugin Name: WooCommerce - Gravity Forms Product Add-Ons - Process Feeds & Notifications
* Plugin URI: http://gravitywiz.com
* Description: Process Gravity Forms feeds on checkout for any GF-powered product in the cart. Currently supports GF Mailchimp add-on.
* Author: David Smith
* Version: 1.0
* Author URI: http://gravitywiz.com
*/
class GW_WCGFPA_Process_Feeds {
private static $instance = null;
public static function get_instance() {
if( null == self::$instance )
self::$instance = new self;
return self::$instance;
}
private function __construct() {
add_action( 'init', array( $this, 'init' ), 11 );
}
function init() {
add_filter( 'woocommerce_add_cart_item_data', array( $this, 'add_cart_item_data' ), 10, 2 );
add_filter( 'woocommerce_get_cart_item_from_session', array( $this, 'get_cart_item_from_session' ), 10, 2 );
add_action( 'woocommerce_add_order_item_meta', array( $this, 'add_order_item_meta' ), 10, 2 );
add_action( 'woocommerce_checkout_order_processed', array( $this, 'maybe_process_feeds' ) );
remove_filter( 'gform_entry_post_save', array( GFMailChimp::get_instance(), 'maybe_process_feed' ), 10, 2 );
}
public function add_cart_item_data( $cart_item_meta, $product_id ) {
// only add entry ID meta if WCGFPA plugin has added entry data for this product
if( ! isset( $cart_item_meta['_gravity_form_lead'] ) ) {
return $cart_item_meta;
}
$gravity_form_data = get_post_meta( $product_id, '_gravity_form_data', true );
$form_id = $gravity_form_data['id'];
$entry = GFFormDisplay::$submission[ $form_id ]['lead'];
$cart_item_meta['_gf_entry_id'] = $entry['id'];
return $cart_item_meta;
}
public function get_cart_item_from_session( $cart_item, $values ) {
if ( isset( $values['_gf_entry_id'] ) ) {
$cart_item['_gf_entry_id'] = $values['_gf_entry_id'];
}
return $cart_item;
}
public function add_order_item_meta( $item_id, $values ) {
if( isset( $values['_gf_entry_id'] ) ) {
wc_add_order_item_meta( $item_id, '_gf_entry_id', $values['_gf_entry_id'], true );
}
}
public function maybe_process_feeds( $order_id ) {
$order = wc_get_order( $order_id );
$line_items = $order->get_items( 'line_item' );
foreach( $line_items as $item_id => $item ) {
$entry_id = wc_get_order_item_meta( $item_id, '_gf_entry_id', true );
if( ! $entry_id ) {
continue;
}
$entry = GFAPI::get_entry( $entry_id );
if( is_wp_error( $entry ) ) {
continue;
}
$form = GFAPI::get_form( $entry['form_id'] );
$this->process_feeds( $entry, $form );
$this->send_notifications( $entry, $form );
}
}
public function process_feeds( $entry, $form ) {
$mailchimp = GFMailChimp::get_instance();
$mailchimp->maybe_process_feed( $entry, $form );
}
public function send_notifications( $entry, $form ) {
GFAPI::send_notifications( $form, $entry );
}
}
function gw_wc_process_feeds() {
return GW_WCGFPA_Process_Feeds::get_instance();
}
gw_wc_process_feeds();