From ad8ede8eb062c28b6558bfe543d5dc6b770325e4 Mon Sep 17 00:00:00 2001
From: Axel Rutz <axel.rutz@clever-systems.net>
Date: Fri, 11 Dec 2015 03:06:46 +0100
Subject: [PATCH] Issue #1895418 by axel.rutz, jantoine, jonne.freebase,
 funkym, discipolo, bisonbleu: Table with line items not included in the
 e-mail sent to regular user

---
 commerce_message.module | 30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/commerce_message.module b/commerce_message.module
index 892bbb5..0e4b552 100644
--- a/commerce_message.module
+++ b/commerce_message.module
@@ -74,11 +74,35 @@ function commerce_message_message_presave($message) {
  *   The Message entity.
  */
 function commerce_message_order_summary(Message $message) {
-  $wrapper = entity_metadata_wrapper('message', $message);
+  // Generate the order summary as order owner to prevent requests generated by
+  // the anonymous user (e.g. payment providers or users not logged in on
+  // checkout) from failing. See http://drupal.org/node/1895418.
+  /** @var EntityDrupalWrapper $message_wrapper */
+  $message_wrapper = entity_metadata_wrapper('message', $message);
+  /** @var EntityDrupalWrapper $order_wrapper */
+  $order_wrapper = $message_wrapper->message_commerce_order;
+  $order_owner = $order_wrapper->owner->value();
+
+  // Assure that the summary view does see the current order and its owner.
+  $order_wrapper->save();
+
+  // Safely impersonate another user.
+  global $user;
+  $original_user = $user;
+  $old_state = drupal_save_session(); drupal_save_session(FALSE);
+  $user = $order_owner;
+
+  // Get the cart summary view.
   $view = views_get_view('commerce_cart_summary');
-  $view->set_arguments(array($wrapper->message_commerce_order->getIdentifier()));
+  $view->set_arguments(array($order_wrapper->getIdentifier()));
   $view->hide_admin_links = TRUE;
-  return $view->preview();
+  $preview = $view->preview();
+
+  // Restore user.
+  $user = $original_user;
+  drupal_save_session($old_state);
+
+  return $preview;
 }
 
 /**
-- 
2.1.4

