/**
     * 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(),
        );
    }