/** * Handle new WooCommerce orders * * @access public * @param int $order_id * @param array $posted * @return void */ public function new_order_placed($order_id, $posted) { $order = new WC_Order($order_id); $order_items = $order->get_items(); $order_meta = Subscriptio::unwrap_post_meta(get_post_meta($order->id)); // Iterate over all items and look for subscription products purchased foreach ($order_items as $order_item_key => $order_item) { // Get appropriate product and variation IDs $variation_id = (isset($order_item['variation_id']) && !empty($order_item['variation_id'])) ? $order_item['variation_id'] : null; $product_id = $variation_id ? $order_item['variation_id'] : $order_item['product_id']; $product = new WC_Product($product_id); $product_post_meta = Subscriptio::unwrap_post_meta(get_post_meta($product_id)); // Proceed only if this product is a subscription if (!isset($product_post_meta['_subscriptio']) || $product_post_meta['_subscriptio'] != 'yes') { continue; } // Start logging transaction $transaction = new Subscriptio_Transaction(null, 'new_order', null, $order_id, $order_item['product_id'], $variation_id); // Check if this subscription product looks ok if (!Subscriptio_Subscription_Product::is_ok($product_post_meta)) { $transaction->update_result('error'); $transaction->update_note(__('Invalid subscription product configuration.', 'subscriptio')); continue; } // Check if we have renewal order properties if (!isset($this->renewal_orders['by_line_item_id'][$order_item_key])) { $transaction->update_result('error'); $transaction->update_note(__('Failed saving subscription properties for renewal orders.', 'subscriptio')); continue; } // Everything seems to be ok, lets create a new subscription try { $subscription = new Subscriptio_Subscription(); $subscription_id = $subscription->create_from_order_item($order, $order_meta, $order_item_key, $order_item, $product, $product_post_meta, $this->renewal_orders['by_line_item_id'][$order_item_key]); $transaction->update_result('success'); $transaction->add_subscription_id($subscription_id); $transaction->update_note(__('Subscription successfully created.', 'subscriptio')); } catch (Exception $e) { $transaction->update_result('error'); $transaction->update_note($e->getMessage()); } } // Reset temporary storage $this->renewal_orders = array( 'by_cart_item_key' => array(), 'by_line_item_id' => array(), ); }