Files
old-new-wiaas/backend/wp-content/plugins/mailchimp-for-woocommerce/includes/processes/class-mailchimp-woocommerce-process-orders.php

105 lines
3.7 KiB
PHP
Raw Normal View History

2018-06-14 16:49:28 +02:00
<?php
/**
* Created by Vextras.
*
* Name: Ryan Hungate
* Email: ryan@vextras.com
* Date: 7/14/16
* Time: 10:57 AM
*/
class MailChimp_WooCommerce_Process_Orders extends MailChimp_WooCommerce_Abstract_Sync
{
/**
* @var string
*/
protected $action = 'mailchimp_woocommerce_process_orders';
public $items = array();
/**
* @return string
*/
public function getResourceType()
{
return 'orders';
}
/**
* @param MailChimp_WooCommerce_Order $item
*
* @return mixed
*/
protected function iterate($item)
{
if ($item instanceof MailChimp_WooCommerce_Order) {
// since we're syncing the customer for the first time, this is where we need to add the override
// for subscriber status. We don't get the checkbox until this plugin is actually installed and working!
if (!($status = $item->getCustomer()->getOptInStatus())) {
try {
$subscriber = $this->mailchimp()->member(mailchimp_get_list_id(), $item->getCustomer()->getEmailAddress());
$status = !in_array($subscriber['status'], array('unsubscribed', 'transactional'));
} catch (\Exception $e) {
$status = (bool) $this->getOption('mailchimp_auto_subscribe', true);
}
$item->getCustomer()->setOptInStatus($status);
}
mailchimp_debug('order_sync', "#{$item->getId()}", $item->toArray());
$type = $this->mailchimp()->getStoreOrder($this->store_id, $item->getId()) ? 'update' : 'create';
$call = $type === 'create' ? 'addStoreOrder' : 'updateStoreOrder';
try {
// if the order is in failed or cancelled status - and it's brand new, we shouldn't submit it.
if ($call === 'addStoreOrder' && in_array($item->getFinancialStatus(), array('failed', 'cancelled'))) {
return false;
}
// make the call
$response = $this->mailchimp()->$call($this->store_id, $item, false);
if (empty($response)) {
mailchimp_error('order_submit.failure', "$call :: #{$item->getId()} :: email: {$item->getCustomer()->getEmailAddress()} produced a blank response from MailChimp");
return $response;
}
mailchimp_log('order_submit.success', "$call :: #{$item->getId()} :: email: {$item->getCustomer()->getEmailAddress()}");
$this->items[] = array('response' => $response, 'item' => $item);
return $response;
} catch (MailChimp_WooCommerce_ServerError $e) {
mailchimp_error('order_submit.error', mailchimp_error_trace($e, "$call :: {$item->getId()}"));
return false;
} catch (MailChimp_WooCommerce_Error $e) {
mailchimp_error('order_submit.error', mailchimp_error_trace($e, "$call :: {$item->getId()}"));
return false;
} catch (Exception $e) {
mailchimp_error('order_submit.error', mailchimp_error_trace($e, "$call :: {$item->getId()}"));
return false;
}
}
mailchimp_debug('order_submit', 'no order found', $item);
return false;
}
/**
* After the resources have been loaded and pushed
*/
protected function complete()
{
mailchimp_log('order_submit.completed', 'Done with the order sync.');
// add a timestamp for the orders sync completion
$this->setResourceCompleteTime();
// this is the last thing we're doing so it's complete as of now.
$this->flagStopSync();
}
}