# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: lyle@phosphor-20090711190432-7vbgisp84fc8tbf9
# target_branch: bzr+ssh://lyle.mantooth@bazaar.ubercart.org/bzr\
#   /drupal6/ubercart
# testament_sha1: 19831ca3904cb16e243249ba40f23d384369713d
# timestamp: 2009-07-11 15:05:08 -0400
# source_branch: bzr://bazaar.ubercart.org/bzr/drupal6/ubercart
# base_revision_id: lyle@phosphor-20090710172852-53dsq5irbv4lfb2f
# 
# Begin patch
=== modified file 'payment/uc_2checkout/uc_2checkout.module'
--- payment/uc_2checkout/uc_2checkout.module	2009-05-09 17:44:11 +0000
+++ payment/uc_2checkout/uc_2checkout.module	2009-07-11 19:04:32 +0000
@@ -181,7 +181,10 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => '2checkout-form',
+    'type' => 'order_total',
+    'subject' => array(
+      'order' => $order,
+    ),
   );
   $options = array(
     'sign' => FALSE,
@@ -212,6 +215,7 @@
   );
 
   $i = 0;
+  $context['type'] = 'order_product';
   foreach ($order->products as $product) {
     $i++;
     $data['c_prod_'. $i] = $product->model .','. $product->qty;

=== modified file 'payment/uc_authorizenet/uc_authorizenet.module'
--- payment/uc_authorizenet/uc_authorizenet.module	2009-07-08 02:49:18 +0000
+++ payment/uc_authorizenet/uc_authorizenet.module	2009-07-11 19:04:32 +0000
@@ -343,7 +343,7 @@
       $types = uc_credit_transaction_types();
       $context = array(
         'revision' => 'formatted-original',
-        'location' => 'cim-profile-charge',
+        'type' => 'amount',
       );
       $comment[] = t('<b>@type:</b> @amount', array('@type' => $types[$data['txn_type']], '@amount' => uc_price($amount, $context)));
 
@@ -436,7 +436,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'authorize.net-charge',
+    'type' => 'amount',
   );
   $options = array(
     'sign' => FALSE,
@@ -610,7 +610,7 @@
   // Build an admin order comment.
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'authorize.net-charge-comment',
+    'type' => 'amount',
   );
   $comment = t('<b>@type</b><br /><b>@status:</b> @message<br />Amount: @amount<br />AVS response: @avs',
     array('@type' => _uc_authorizenet_txn_type($response[11]), '@status' => $result['success'] ? t('ACCEPTED') : t('REJECTED'), '@message' => $response[3], '@amount' => uc_price($response[9], $context), '@avs' => _uc_authorizenet_avs($response[5])));

=== modified file 'payment/uc_credit/test_gateway.module'
--- payment/uc_credit/test_gateway.module	2009-04-18 01:03:01 +0000
+++ payment/uc_credit/test_gateway.module	2009-07-11 19:04:32 +0000
@@ -47,7 +47,7 @@
   if ($success) {
     $context = array(
       'revision' => 'formatted-original',
-      'location' => 'test-gateway-charge-comment',
+      'type' => 'amount',
     );
     $message = t('Credit card charged: !amount', array('!amount' => uc_price($amount, $context)));
     uc_order_comment_save($order_id, $user->uid, $message, 'admin');

=== modified file 'payment/uc_credit/uc_credit.admin.inc'
--- payment/uc_credit/uc_credit.admin.inc	2009-04-28 16:54:42 +0000
+++ payment/uc_credit/uc_credit.admin.inc	2009-07-11 19:04:32 +0000
@@ -19,7 +19,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'credit-card-terminal',
+    'type' => 'order_total',
     'subject' => array(
       'order' => $order,
     ),
@@ -47,7 +47,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'credit-card-form',
+    'type' => 'amount',
   );
   $options = array(
     'sign' => FALSE,

=== modified file 'payment/uc_cybersource/uc_cybersource.module'
--- payment/uc_cybersource/uc_cybersource.module	2009-06-29 19:07:54 +0000
+++ payment/uc_cybersource/uc_cybersource.module	2009-07-11 19:04:32 +0000
@@ -220,7 +220,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'cybersource-charge',
+    'type' => 'amount',
   );
   $options = array(
     'sign' => FALSE,
@@ -382,7 +382,7 @@
     // Create the order and payment ledger comments.
     $context = array(
       'revision' => 'formatted-original',
-      'location' => 'cybersource-post-charge',
+      'type' => 'amount',
     );
     $o_comment = t('<b>Credit card !type:</b> !amount<br /><b>Decision: @decision</b><br /><b>Reason:</b> !reason', array('!type' => variable_get('uc_cybersource_transaction_type', 'sale'), '!amount' => uc_price($nvp['orderAmount'], $context), '@decision' => $nvp['decision'], '!reason' => _parse_cs_reason_code($nvp['reasonCode'])));
     $p_comment = t('!id<br />!decision, Reason: !reason', array('!id' => $nvp['orderPage_serialNumber'], '!decision' => $nvp['decision'], '!reason' => $nvp['reasonCode']));
@@ -609,7 +609,7 @@
     // Create the order and payment ledger comments.
     $context = array(
       'revision' => 'formatted-original',
-      'location' => 'cybersource-soap-charge',
+      'type' => 'amount',
     );
     $o_comment = t('<b>@type:</b> @amount<br /><b>Decision: @decision</b><br /><b>Reason:</b> !reason', array('@type' => $types[$data['txn_type']], '@amount' => uc_price($amount, $context), '@decision' => $reply->decision, '!reason' => _parse_cs_reason_code($reply->reasonCode)));
     $p_comment = t('<b>@type:</b><br />@id<br />@decision, Reason: !reason', array('@type' => $types[$data['txn_type']], '@id' => $reply->requestID, '@decision' => $reply->decision, '!reason' => $reply->reasonCode));
@@ -694,7 +694,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'cybersource-tax-test',
+    'type' => 'line_item',
   );
 
   // Build an item list for the taxes.
@@ -913,7 +913,7 @@
       if ($total != floatval($reply->taxReply->totalTaxAmount)) {
         $context = array(
           'revision' => 'formatted-original',
-          'location' => 'cybersource-calculate-tax',
+          'type' => 'amount',
         );
         watchdog('uc_cybersource', 'Tax calculation produced uneven results. Expected a total of @total, received the following: @dump', array('@total' => uc_price($reply->taxReply->totalTaxAmount, $context), '@dump' => '<pre>'. print_r($result, TRUE) .'</pre>'), WATCHDOG_ERROR);
 

=== modified file 'payment/uc_google_checkout/uc_google_checkout.admin.inc'
--- payment/uc_google_checkout/uc_google_checkout.admin.inc	2009-06-15 19:18:41 +0000
+++ payment/uc_google_checkout/uc_google_checkout.admin.inc	2009-07-11 19:04:32 +0000
@@ -314,7 +314,10 @@
   $balance = uc_payment_balance($order);
   $context = array(
     'revision' => 'themed-original',
-    'location' => 'google-checkout-terminal',
+    'type' => 'order_total',
+    'subject' => array(
+      'order' => $order,
+    ),
   );
   $output .= '<p>'. t('Use this terminal to process credit card payments:') .'</p>'
             .'<table style="width: auto;"><tbody style="border-top: 0px;"><tr>'
@@ -367,7 +370,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'google-checkout-terminal-form',
+    'type' => 'amount',
   );
   $options = array(
     'sign' => FALSE,

=== modified file 'payment/uc_google_checkout/uc_google_checkout.module'
--- payment/uc_google_checkout/uc_google_checkout.module	2009-06-22 18:24:47 +0000
+++ payment/uc_google_checkout/uc_google_checkout.module	2009-07-11 19:04:32 +0000
@@ -499,7 +499,7 @@
           if ($settings['fixed_charge']) {
             $context = array(
               'revision' => 'formatted-original',
-              'location' => 'google-checkout-cart-request',
+              'type' => 'amount',
             );
             $options = array(
               'sign' => FALSE,
@@ -937,7 +937,7 @@
                      '', t('Payment received by Google Checkout'));
     $context = array(
       'revision' => 'formatted-original',
-      'location' => 'google-checkout-charge-comment',
+      'type' => 'amount',
     );
     uc_order_comment_save($order_id, 0, t('Payment of %amount received by Google Checkout.', array('%amount' => uc_price($charge->{'latest-charge-amount'}, $context))), 'admin', 'chargeable');
     uc_google_checkout_notification_acknowledgement($charge['serial-number']);
@@ -972,7 +972,7 @@
                      0, '', t('Refund received by Google Checkout'));
     $context = array(
       'revision' => 'formatted-original',
-      'location' => 'google-checkout-refund-comment',
+      'type' => 'amount',
     );
     uc_order_comment_save($order_id, 0, t('Refund of %amount received by Google Checkout.', array('%amount' => uc_price($refund->{'latest-refund-amount'}, $context))),
                           'admin', 'processing');

=== modified file 'payment/uc_payment/uc_payment.admin.inc'
--- payment/uc_payment/uc_payment.admin.inc	2009-05-06 18:27:07 +0000
+++ payment/uc_payment/uc_payment.admin.inc	2009-07-11 19:04:32 +0000
@@ -299,9 +299,8 @@
 
   $context = array(
     'revision' => 'themed-original',
-    'location' => 'order-payments-admin',
-    'subject' => array(),
-    'extras' => array(
+    'type' => 'order_total',
+    'subject' => array(
       'order' => $order,
     ),
   );
@@ -310,6 +309,7 @@
 
   if ($payments !== FALSE) {
     foreach ($payments as $payment) {
+      $context['type'] = 'payment';
       $context['subject']['payment'] = $payment;
       $form['payments'][$payment->receipt_id]['#attributes'] = array('valign' => 'top');
       $form['payments'][$payment->receipt_id]['received'] = array(
@@ -326,6 +326,7 @@
       );
       $total -= $payment->amount;
       unset($context['subject']['payment']);
+      $context['type'] = 'amount';
       $context['subject']['total'] = $total;
       $form['payments'][$payment->receipt_id]['balance'] = array(
         '#value' => uc_price($total, $context, array('cache' => FALSE)),
@@ -426,7 +427,7 @@
 
   $context = array(
     'revision' => 'formatted',
-    'location' => 'payment-delete',
+    'type' => 'payment',
     'subject' => array(
       'payment' => $payment,
     ),

=== modified file 'payment/uc_payment/uc_payment.ca.inc'
--- payment/uc_payment/uc_payment.ca.inc	2009-04-18 01:05:58 +0000
+++ payment/uc_payment/uc_payment.ca.inc	2009-07-11 19:04:32 +0000
@@ -178,7 +178,7 @@
 function uc_payment_condition_order_balance_form($form_state, $settings = array()) {
   $context = array(
     'revision' => 'formatted',
-    'location' => 'zero-balance',
+    'type' => 'amount',
   );
   $zero = array('!zero' => uc_price(0, $context));
   $options = array(

=== modified file 'payment/uc_payment/uc_payment.module'
--- payment/uc_payment/uc_payment.module	2009-04-18 01:18:43 +0000
+++ payment/uc_payment/uc_payment.module	2009-07-11 19:04:32 +0000
@@ -144,7 +144,7 @@
 
       $context = array(
         'revision' => 'formatted',
-        'location' => 'payment-balance-token',
+        'type' => 'amount',
       );
       $values['order-payment-balance'] = uc_price(uc_payment_balance($order), $context);
       break;
@@ -332,7 +332,8 @@
     $grand_total = 0;
 
     $context = array(
-      'location' => 'checkout-order-total-preview',
+      'revision' => 'themed',
+      'type' => 'line_item',
     );
 
     foreach ($totals as $line) {
@@ -348,6 +349,7 @@
       }
     }
 
+    $context['type'] = 'amount';
     $context['subject'] = array(
       'grand_total' => $grand_total,
     );
@@ -583,7 +585,7 @@
     global $user;
     $context = array(
       'revision' => 'formatted',
-      'location' => 'payment-log',
+      'type' => 'amount',
     );
     $log_message = t('@method payment for @amount entered by @user.', array('@method' => $method_name, '@amount' => uc_price($amount, $context), '@user' => uc_get_initials($user->uid)));
     uc_order_log_changes($order_id, array($log_message));
@@ -608,7 +610,7 @@
     $payment = uc_payment_load($receipt_id);
     $context = array(
       'revision' => 'formatted',
-      'location' => 'payment-delete-log',
+      'type' => 'payment',
       'subject' => array(
         'payment' => $payment,
       ),

=== modified file 'payment/uc_payment/uc_payment_checkout_pane.inc'
--- payment/uc_payment/uc_payment_checkout_pane.inc	2009-04-24 15:49:55 +0000
+++ payment/uc_payment/uc_payment_checkout_pane.inc	2009-07-11 19:04:32 +0000
@@ -102,7 +102,8 @@
       usort($line_items, 'uc_weight_sort');
 
       $context = array(
-        'location' => 'checkout-review-line-item',
+        'revision' => 'themed',
+        'type' => 'line_item',
       );
       foreach ($line_items as $line_item) {
         $context['subject'] = array('line_item' => $line_item);

=== modified file 'payment/uc_payment/uc_payment_order_pane.inc'
--- payment/uc_payment/uc_payment_order_pane.inc	2009-04-18 01:03:01 +0000
+++ payment/uc_payment/uc_payment_order_pane.inc	2009-07-11 19:04:32 +0000
@@ -20,10 +20,7 @@
       if (variable_get('uc_payment_tracking', TRUE)) {
         $context = array(
           'revision' => 'formatted-original',
-          'location' => 'payment-balance',
-          'subject' => array(
-            'order' => $arg1,
-          ),
+          'type' => 'amount',
         );
         $output = t('Balance: @balance', array('@balance' => uc_price(uc_payment_balance($arg1), $context)));
         $output .= ' ('. l(t('View'), 'admin/store/orders/'. $arg1->order_id .'/payments') .')<br />';

=== modified file 'payment/uc_payment_pack/uc_payment_pack.admin.inc'
--- payment/uc_payment_pack/uc_payment_pack.admin.inc	2009-04-18 01:03:01 +0000
+++ payment/uc_payment_pack/uc_payment_pack.admin.inc	2009-07-11 19:04:32 +0000
@@ -14,7 +14,7 @@
   $balance = uc_payment_balance($order);
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'receive-check-form',
+    'type' => 'amount',
   );
   $options = array(
     'sign' => FALSE,

=== modified file 'payment/uc_payment_pack/uc_payment_pack.module'
--- payment/uc_payment_pack/uc_payment_pack.module	2009-07-10 17:28:52 +0000
+++ payment/uc_payment_pack/uc_payment_pack.module	2009-07-11 19:04:32 +0000
@@ -137,7 +137,7 @@
       if (($max = variable_get('uc_cod_max_order', 0)) > 0 && is_numeric($max)) {
         $context = array(
           'revision' => 'formatted-original',
-          'location' => 'cod-cart-details',
+          'type' => 'amount',
         );
         $details .= '<p>'. t('Orders totalling more than !number are <b>not eligible</b> for COD.', array('!number' => uc_price($max, $context))) .'</p>';
       }

=== modified file 'payment/uc_paypal/uc_paypal.module'
--- payment/uc_paypal/uc_paypal.module	2009-07-03 19:35:36 +0000
+++ payment/uc_paypal/uc_paypal.module	2009-07-11 19:04:32 +0000
@@ -281,7 +281,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'paypal-wpp-charge',
+    'type' => 'amount',
   );
   $options = array(
     'sign' => FALSE,
@@ -601,7 +601,10 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'paypal-ec-checkout',
+    'type' => 'order_total',
+    'subject' => array(
+      'order' => $order,
+    ),
   );
   $options = array(
     'sign' => FALSE,
@@ -690,7 +693,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'paypal-ec-form-submit',
+    'type' => 'amount',
   );
   $options = array(
     'sign' => FALSE,
@@ -758,7 +761,10 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'paypal-ec-submit-form-submit',
+    'type' => 'order_total',
+    'subject' => array(
+      'order' => $order,
+    ),
   );
   $options = array(
     'sign' => FALSE,
@@ -837,7 +843,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'paypal-wps-form',
+    'type' => 'amount',
   );
   $options = array(
     'sign' => FALSE,
@@ -898,11 +904,18 @@
     $data['paymentaction'] = 'authorization';
   }
 
+  $context['subject'] = array(
+    'order' => $order,
+  );
   if (variable_get('uc_paypal_wps_submit_method', 'single') == 'itemized') {
     // List individual items
+    $context['type'] = 'order_product';
+
     $i = 0;
     foreach ($order->products as $item) {
       $i++;
+      $context['subject']['product'] = $item;
+      $context['subject']['node'] = node_load($item->nid);
       $data['amount_'. $i] = uc_price($item->price, $context, $options);
       $data['item_name_'. $i] = $item->title;
       $data['item_number_'. $i] = $item->model;
@@ -921,6 +934,8 @@
   }
   else {
     // List the whole cart as a single item to account for fees/discounts
+    $context['type'] = 'order_total';
+
     $data['amount_1'] = uc_price($order->order_total - $shipping - $tax, $context, $options);
     $data['item_name_1'] = t('Order @order_id at !store', array('@order_id' => $order->order_id, '!store' => variable_get('uc_store_name', url('<front>', array('absolute' => TRUE)))));
     $data['on0_1'] = t('Product count');

=== modified file 'payment/uc_paypal/uc_paypal.pages.inc'
--- payment/uc_paypal/uc_paypal.pages.inc	2009-04-18 01:03:01 +0000
+++ payment/uc_paypal/uc_paypal.pages.inc	2009-07-11 19:04:32 +0000
@@ -80,7 +80,7 @@
 
     $context = array(
       'revision' => 'formatted-original',
-      'location' => 'paypal-ipn',
+      'type' => 'amount',
     );
     $options = array(
       'sign' => FALSE,

=== modified file 'shipping/uc_flatrate/uc_flatrate.admin.inc'
--- shipping/uc_flatrate/uc_flatrate.admin.inc	2009-05-06 18:27:07 +0000
+++ shipping/uc_flatrate/uc_flatrate.admin.inc	2009-07-11 19:04:32 +0000
@@ -14,8 +14,8 @@
   $output = '';
 
   $context = array(
-    'location' => 'shipping-flatrate-method-admin',
-    'subject' => array(),
+    'revision' => 'themed',
+    'type' => 'amount',
   );
 
   $rows = array();
@@ -23,8 +23,6 @@
   $weight = variable_get('uc_quote_method_weight', array());
   $result = db_query("SELECT mid, title, label, base_rate, product_rate FROM {uc_flatrate_methods}");
   while ($method = db_fetch_object($result)) {
-    $context['subject']['flatrate_method'] = $method;
-
     $row = array();
     $row[] = check_plain($method->title);
     $row[] = check_plain($method->label);

=== modified file 'shipping/uc_flatrate/uc_flatrate.module'
--- shipping/uc_flatrate/uc_flatrate.module	2009-05-06 18:27:07 +0000
+++ shipping/uc_flatrate/uc_flatrate.module	2009-07-11 19:04:32 +0000
@@ -57,11 +57,9 @@
     $result = db_query("SELECT mid, title, product_rate FROM {uc_flatrate_methods}");
     $context = array(
       'revision' => 'formatted',
-      'location' => 'shipping-flatrate-method-node-form',
-      'subject' => array(),
+      'type' => 'amount',
     );
     while ($method = db_fetch_object($result)) {
-      $context['subject']['flatrate_method'] = $method;
       if (!isset($form['shipping']['flatrate'])) {
         $form['shipping']['flatrate'] = array(
           '#type' => 'fieldset',
@@ -77,7 +75,7 @@
         '#type' => 'textfield',
         '#title' => $method->title,
         '#default_value' => $form['#node']->flatrate[$method->mid],
-          '#description' => t('Default rate: %price', array('%price' => uc_price($method->product_rate, $context))),
+        '#description' => t('Default rate: %price', array('%price' => uc_price($method->product_rate, $context))),
         '#size' => 16,
         '#field_prefix' => $sign_flag ? '' : $currency_sign,
         '#field_suffix' => $sign_flag ? $currency_sign : '',
@@ -209,18 +207,14 @@
   $mid = $method[1];
   $context = array(
     'revision' => 'altered',
-    'location' => 'shipping-flatrate-method-json',
-    'subject' => array(),
-    'extras' => array(),
+    'type' => 'amount',
   );
 
   if ($method = db_fetch_object(db_query("SELECT * FROM {uc_flatrate_methods} WHERE mid = %d", $mid))) {
-    $context['extras']['flatrate_method'] = $method;
     // Start at the base rate.
     $rate = $method->base_rate;
 
     foreach ($products as $product) {
-      $context['subject']['order_product'] = $product;
       if (empty($product->flatrate) || is_null($product->flatrate[$mid])) {
         $price_info = array(
           'price' => $method->product_rate,
@@ -239,7 +233,6 @@
       }
     }
 
-    unset($context['subject']['order_product']);
     $altered = uc_price($rate, $context);
     $context['revision'] = 'formatted';
     $formatted = uc_price($rate, $context);

=== modified file 'shipping/uc_quote/uc_quote.module'
--- shipping/uc_quote/uc_quote.module	2009-07-02 18:50:17 +0000
+++ shipping/uc_quote/uc_quote.module	2009-07-11 19:04:32 +0000
@@ -867,8 +867,9 @@
 
     case 'review':
       $context = array(
-        'location' => 'shipping-quote-checkout-pane-review',
-        'subject' => array(),
+        'revision' => 'themed',
+        'type' => 'line_item',
+        'subject' => array('order' => $arg1),
       );
       $result = db_query("SELECT * FROM {uc_order_line_items} WHERE order_id = %d AND type = '%s'", $arg1->order_id, 'shipping');
       if ($line_item = db_fetch_object($result)) {

=== modified file 'shipping/uc_shipping/uc_shipping.admin.inc'
--- shipping/uc_shipping/uc_shipping.admin.inc	2009-06-04 13:49:23 +0000
+++ shipping/uc_shipping/uc_shipping.admin.inc	2009-07-11 19:04:32 +0000
@@ -588,14 +588,8 @@
     $rows[] = array(t('Services:'), $shipment->accessorials);
   }
   $context = array(
-    'location' => 'shipping-order-view',
-    'class' => array(
-      'cost',
-    ),
-    'subject' => array(
-      'shipment' => $shipment,
-      'field' => 'cost',
-    ),
+    'revision' => 'themed',
+    'type' => 'amount',
   );
   $rows[] = array(t('Cost:'), uc_price($shipment->cost, $context, array('label' => FALSE)));
   $output .= theme('table', array(), $rows, array('style' => 'width:auto'));

=== modified file 'shipping/uc_shipping/uc_shipping.module'
--- shipping/uc_shipping/uc_shipping.module	2009-04-28 16:54:42 +0000
+++ shipping/uc_shipping/uc_shipping.module	2009-07-11 19:04:32 +0000
@@ -237,11 +237,8 @@
     $rows[] = array(t('Dimensions:'), t('!l x !w x !h', array('!l' => uc_length_format($package->length), '!w' => uc_length_format($package->width), '!h' => uc_length_format($package->height))));
   }
   $context = array(
-    'location' => 'shipping-package-view',
-    'subject' => array(
-      'package' => $package,
-      'field' => 'value',
-    ),
+    'revision' => 'themed',
+    'type' => 'amount',
   );
   $rows[] = array(t('Insured value:'), uc_price($package->value, $context));
   if ($package->tracking_number) {

=== modified file 'shipping/uc_ups/uc_ups.admin.inc'
--- shipping/uc_ups/uc_ups.admin.inc	2009-04-24 15:49:55 +0000
+++ shipping/uc_ups/uc_ups.admin.inc	2009-07-11 19:04:32 +0000
@@ -207,11 +207,8 @@
   $method = uc_ups_shipping_method();
   $output .= '<b>'. $method['ups']['quote']['accessorials'][$_SESSION['ups']['service']] .'</b><br />';
   $context = array(
-    'location' => 'shipping-ups-confirm',
-    'subject' => array(
-      'ups_info' => $_SESSION['ups'],
-      'field' => 'amount',
-    ),
+    'revision' => 'themed',
+    'type' => 'amount',
   );
   $output .= '<i>'. check_plain($_SESSION['ups']['rate']['type']) .'</i>: '. uc_price($_SESSION['ups']['rate']['amount'], $context) .' ('. check_plain($_SESSION['ups']['rate']['currency']) .')<br />';
   $ship_date = $_SESSION['ups']['ship_date'];

=== modified file 'shipping/uc_ups/uc_ups.module'
--- shipping/uc_ups/uc_ups.module	2009-05-06 18:27:07 +0000
+++ shipping/uc_ups/uc_ups.module	2009-07-11 19:04:32 +0000
@@ -835,8 +835,8 @@
   }
   uasort($quotes, 'uc_quote_price_sort');
   $context = array(
-    'location' => 'shipping-quote',
-    'subject' => array(),
+    'revision' => 'themed',
+    'type' => 'amount',
   );
   foreach ($quotes as $key => $quote) {
     if (isset($quote['rate'])) {

=== modified file 'shipping/uc_usps/uc_usps.module'
--- shipping/uc_usps/uc_usps.module	2009-06-22 15:13:26 +0000
+++ shipping/uc_usps/uc_usps.module	2009-07-11 19:04:32 +0000
@@ -400,8 +400,8 @@
     }
   }
   $context = array(
-    'location' => 'shipping-usps-quote',
-    'subject' => array(),
+    'revision' => 'themed',
+    'type' => 'amount',
   );
   foreach ($services as $key => $quote) {
     if (isset($quote['rate'])) {

=== modified file 'shipping/uc_weightquote/uc_weightquote.module'
--- shipping/uc_weightquote/uc_weightquote.module	2009-05-06 18:27:07 +0000
+++ shipping/uc_weightquote/uc_weightquote.module	2009-07-11 19:04:32 +0000
@@ -177,17 +177,12 @@
 
   $context = array(
     'revision' => 'altered',
-    'location' => 'shipping-weightquote-quote',
-    'subject' => array(),
-    'extras' => array(
-      'method' => $method,
-    ),
+    'type' => 'amount',
   );
 
   $rate = 0;
   foreach ($products as $product) {
     $node = node_load($product->nid);
-    $context['subject']['order_product'] = $product;
     $price_info = array(
       'price' => $node->weightquote,
       'qty' => $product->qty,
@@ -196,7 +191,6 @@
   }
   $rate += variable_get('uc_weightquote_base_rate', 0);
 
-  unset($context['subject']['order_product']);
   $altered = uc_price($rate, $context);
   $context['revision'] = 'formatted';
   $formatted = uc_price($rate, $context);

=== modified file 'uc_attribute/uc_attribute.admin.inc'
--- uc_attribute/uc_attribute.admin.inc	2009-07-08 03:05:39 +0000
+++ uc_attribute/uc_attribute.admin.inc	2009-07-11 19:04:32 +0000
@@ -199,8 +199,9 @@
   );
 
   $context = array(
-    'location' => 'attribute-options-form',
-    'extras' => array(
+    'revision' => 'themed',
+    'type' => 'attribute_option',
+    'subject' => array(
       'attribute' => $attribute,
     ),
   );
@@ -231,13 +232,11 @@
       ),
     );
 
-    $context['subject'] = array(
-      'option' => $option,
-      'field' => 'cost',
-    );
+    $context['subject']['option'] = $data;
+    $context['field'] = 'cost';
     $form['options'][$key]['cost']['#value'] = uc_price($data->cost, $context);
 
-    $context['subject']['field'] = 'price';
+    $context['field'] = 'price';
     $form['options'][$key]['price']['#value'] = uc_price($data->price, $context);
   }
 
@@ -485,17 +484,16 @@
     $form['#tree'] = TRUE;
 
     $context = array(
-      'location' => 'attribute-form-default-option',
+      'revision' => 'themed',
+      'type' => 'attribute_option',
     );
     if (count($attributes) > 0) {
       foreach ($attributes as $attribute) {
         $option = $attribute->options[$attribute->default_option];
         $context['subject'] = array(
+          'attribute' => $attribute,
           'option' => $option,
         );
-        $context['extras'] = array(
-          'attribute' => $attribute,
-        );
 
         $form['attributes'][$attribute->aid] = array(
           'remove' => array(
@@ -873,7 +871,7 @@
 
 /**
  * Returns a themed set of attribute options for use in order displays.
- * 
+ *
  * @param $product Product
  * @return Themed set of attribute options.
  */
@@ -882,7 +880,7 @@
   foreach ((array)$product->data['attributes'] as $attribute => $option) {
     $option_rows[] = t('@attribute: @option', array('@attribute' => $attribute, '@option' => implode(', ', (array)$option)));
   }
-  
+
   return theme('item_list', $option_rows, NULL, 'ul', array('class' => 'product-description'));
 }
 

=== modified file 'uc_attribute/uc_attribute.module'
--- uc_attribute/uc_attribute.module	2009-07-08 03:05:39 +0000
+++ uc_attribute/uc_attribute.module	2009-07-11 19:04:32 +0000
@@ -622,20 +622,19 @@
 
   $context = array(
     'revision' => 'formatted',
-    'location' => 'product-attribute-form-element',
-    'subject' => array(),
-    'extras' => array(),
   );
 
   // Loop through each product attribute and generate its form element.
   foreach ($attributes as $attribute) {
-    $context['extras']['attribute'] = $attribute;
+    $context['subject']['attribute'] = $attribute;
     // Build the attribute's options array.
     $options = array();
     foreach ($attribute->options as $option) {
       $context['subject']['option'] = $option;
       switch (variable_get('uc_attribute_option_price_format', 'adjustment')) {
         case 'total':
+          $context['type'] = 'product';
+          $context['subject']['node'] = $product;
           $price_info = array(
             'price' => $product->sell_price + $option->price,
             'qty' => $qty,
@@ -645,6 +644,7 @@
             break;
           }
         case 'adjustment':
+          $context['type'] = 'attribute_option';
           $price_info = array(
             'price' => $option->price,
             'qty' => $qty,

=== modified file 'uc_cart/uc_cart.admin.inc'
--- uc_cart/uc_cart.admin.inc	2009-05-09 17:41:42 +0000
+++ uc_cart/uc_cart.admin.inc	2009-07-11 19:04:32 +0000
@@ -53,7 +53,7 @@
 
   $context = array(
     'revision' => 'formatted',
-    'location' => 'minimum-subtotal-summary'
+    'type' => 'amount',
   );
   $form['general']['uc_minimum_subtotal'] = array(
     '#type' => 'textfield',

=== modified file 'uc_cart/uc_cart.module'
--- uc_cart/uc_cart.module	2009-07-02 14:10:43 +0000
+++ uc_cart/uc_cart.module	2009-07-11 19:04:32 +0000
@@ -670,14 +670,15 @@
     $row_class = 'odd';
 
     $context = array(
-      'location' => 'cart-block-item',
+      'revision' => 'themed',
+      'field' => 'price',
     );
 
     // Loop through each item.
     foreach ($items as $item) {
       $context['subject'] = array(
         'cart_item' => $item,
-        'field' => 'price',
+        'node' => node_load($item->nid);
       );
       // Add the basic row with quantity, title, and price.
       $output .= '<tr class="'. $row_class .'"><td class="cart-block-item-qty">'. $item['qty'] .'</td>'
@@ -719,7 +720,7 @@
 function theme_uc_cart_block_summary($item_count, $item_text, $total, $summary_links) {
   $context = array(
     'revision' => 'themed-original',
-    'location' => 'cart-block-total',
+    'type' => 'amount',
   );
   // Build the basic table with the number of items in the cart and total.
   $output = '<table class="cart-block-summary"><tbody><tr>'
@@ -880,7 +881,7 @@
 
   $context = array(
     'revision' => 'themed-original',
-    'location' => 'cart-subtotal',
+    'type' => 'amount',
   );
   $i = 0;
   foreach ($items as $item) {
@@ -1060,7 +1061,7 @@
 
   $context = array(
     'revision' => 'themed-original',
-    'location' => 'cart-table-subtotal',
+    'type' => 'amount',
   );
   $table[] = array(
     'total' => array(

=== modified file 'uc_cart/uc_cart.pages.inc'
--- uc_cart/uc_cart.pages.inc	2009-07-08 03:44:40 +0000
+++ uc_cart/uc_cart.pages.inc	2009-07-11 19:04:32 +0000
@@ -59,7 +59,7 @@
 
   $context = array(
     'revision' => 'altered',
-    'location' => 'minimum-subtotal',
+    'type' => 'amount',
   );
 
   if (($min = uc_price(variable_get('uc_minimum_subtotal', 0), $context)) > 0) {
@@ -75,7 +75,7 @@
     if ($subtotal < $min) {
       $context = array(
         'revision' => 'formatted-original',
-        'location' => 'minimum-subtotal-message',
+        'type' => 'amount',
       );
       drupal_set_message(variable_get('uc_minimum_subtotal_text', t('The minimum order subtotal for checkout is !min.', array('!min' => uc_price($min, $context)))), 'error');
       drupal_goto('cart');
@@ -203,7 +203,7 @@
 
   $context = array(
     'revision' => 'altered',
-    'location' => 'cart-checkout-item',
+    'type' => 'cart_item',
   );
   $contents = uc_cart_get_contents();
   foreach ($contents as $key => $item) {
@@ -212,9 +212,8 @@
       'qty' => $item->qty,
     );
     $context['subject'] = array(
+      'cart' => $contents,
       'cart_item' => $item,
-    );
-    $context['extras'] = array(
       'node' => node_load($item->nid),
     );
 

=== modified file 'uc_cart/uc_cart_checkout_pane.inc'
--- uc_cart/uc_cart_checkout_pane.inc	2009-07-01 18:12:26 +0000
+++ uc_cart/uc_cart_checkout_pane.inc	2009-07-11 19:04:32 +0000
@@ -28,9 +28,9 @@
       $items = uc_cart_get_contents();
       $output = '<table>';
       $context = array(
-        'location' => 'cart-review-item',
+        'revision' => 'themed',
+        'type' => 'cart_item',
         'subject' => array(),
-        'extras' => array(),
       );
       foreach ($items as $item) {
         $desc = check_plain($item->title);
@@ -43,9 +43,8 @@
           'qty' => $item->qty,
         );
         $context['subject'] = array(
+          'cart' => $items,
           'cart_item' => $item,
-        );
-        $context['extras'] = array(
           'node' => node_load($item->nid),
         );
         $output .= '<tr valign="top"><td>'. $item->qty .'&times;</td><td width="100%">'. $desc
@@ -573,23 +572,23 @@
     array('data' => t('Price'), 'class' => 'price'),
   );
 
-  $context = array(
-    'location' => 'cart-checkout-item',
-  );
+  $context = array();
 
   // Set up table rows.
-  foreach (uc_cart_get_contents() as $item) {
+  $contents = uc_cart_get_contents();
+  foreach ($contents as $item) {
     $price_info = array(
       'price' => $item->price,
       'qty' => $item->qty,
     );
+
+    $context['revision'] = 'altered';
+    $context['type'] = 'cart_item';
     $context['subject'] = array(
+      'cart' => $contents,
       'cart_item' => $item,
-    );
-    $context['extras'] = array(
       'node' => node_load($item->nid),
     );
-    $context['revision'] = 'altered';
 
     $total = uc_price($price_info, $context);
     $subtotal += $total;
@@ -600,8 +599,9 @@
     }
 
     // Remove node from context to prevent the price from being altered.
+    $context['revision'] = 'themed-original';
+    $context['type'] = 'amount';
     unset($context['subject']);
-    $context['revision'] = 'themed-original';
     $rows[] = array(
       array('data' => t('@qty&times;', array('@qty' => $item->qty)), 'class' => 'qty'),
       array('data' => $description, 'class' => 'products'),
@@ -613,7 +613,7 @@
   if ($show_subtotal) {
     $context = array(
       'revision' => 'themed-original',
-      'location' => 'cart-checkout-subtotal',
+      'type' => 'amount',
     );
     $rows[] = array(
       'data' => array(array('data' => '<span id="subtotal-title">' . t('Subtotal:') . '</span> ' . uc_price($subtotal, $context), 'colspan' => 4, 'class' => 'subtotal')),

=== modified file 'uc_catalog/uc_catalog.module'
--- uc_catalog/uc_catalog.module	2009-07-01 19:46:54 +0000
+++ uc_catalog/uc_catalog.module	2009-07-11 19:04:32 +0000
@@ -684,7 +684,8 @@
   $product_table = '<div class="category-grid-products"><table>';
   $count = 0;
   $context = array(
-    'location' => 'catalog-grid-product',
+    'revision' => 'themed',
+    'type' => 'product',
   );
   foreach ($products as $nid) {
     $product = node_load($nid);

=== modified file 'uc_order/templates/admin.itpl.php'
--- uc_order/templates/admin.itpl.php	2009-06-17 19:43:20 +0000
+++ uc_order/templates/admin.itpl.php	2009-07-11 19:04:32 +0000
@@ -17,7 +17,8 @@
 <?php echo t('Products:'); ?><br />
 <?php
 $context = array(
-  'location' => 'order-invoice-admin',
+  'revision' => 'themed',
+  'type' => 'order_product',
 );
 foreach ($products as $product) {
   $price_info = array(

=== modified file 'uc_order/templates/customer.itpl.php'
--- uc_order/templates/customer.itpl.php	2009-06-17 19:43:20 +0000
+++ uc_order/templates/customer.itpl.php	2009-07-11 19:04:32 +0000
@@ -156,7 +156,7 @@
 
                     <?php
                     $context = array(
-                      'location' => 'order-invoice-line-item',
+                      'revision' => 'themed',
                       'subject' => array(
                         'order' => $order,
                       ),
@@ -213,7 +213,6 @@
                                 'qty' => $product->qty,
                               );
                               $context['subject']['order_product'] = $product;
-                              $context['location'] = 'order-invoice-product';
                               ?>
                           <tr>
                             <td valign="top" nowrap="nowrap">
@@ -222,7 +221,6 @@
                             <td width="98%">
                               <b><?php echo $product->title .' - '. uc_price($price_info, $context); ?></b>
                               <?php if ($product->qty > 1) {
-                                $context['location'] = 'order-invoice-product-each';
                                 $price_info['qty'] = 1;
                                 echo t('(!price each)', array('!price' => uc_price($price_info, $context)));
                               } ?>

=== modified file 'uc_order/uc_order.admin.inc'
--- uc_order/uc_order.admin.inc	2009-07-03 18:09:33 +0000
+++ uc_order/uc_order.admin.inc	2009-07-11 19:04:32 +0000
@@ -450,10 +450,7 @@
 
   $context = array(
     'revision' => 'themed-original',
-    'location' => 'orders-admin',
-    'subject' => array(
-      'field' => 'order_total',
-    ),
+    'type' => 'amount',
   );
 
   $result = pager_query($sql, variable_get('uc_order_number_displayed', 30), 0, NULL, $args);
@@ -476,7 +473,6 @@
       }
     }
 
-    $context['subject']['order'] = $order;
     $rows[] = array(
       'data' => array(
         array('data' => uc_order_actions($order, TRUE), 'nowrap' => 'nowrap'),
@@ -954,7 +950,7 @@
   $result = pager_query("SELECT o.order_id, o.created, os.title, SUM(op.qty) AS products, o.order_total AS total FROM {uc_orders} AS o LEFT JOIN {uc_order_statuses} AS os ON o.order_status = os.order_status_id LEFT JOIN {uc_order_products} AS op ON o.order_id = op.order_id WHERE o.uid = %d AND o.order_status IN ". uc_order_status_list('general', TRUE) ." GROUP BY o.order_id, o.created, os.title, o.order_total". tablesort_sql($header), 20, 0, "SELECT COUNT(*) FROM {uc_orders} WHERE uid = %d AND order_status NOT IN ". uc_order_status_list('specific', TRUE), $user->uid);
   $context = array(
     'revision' => 'themed-original',
-    'location' => 'order-history',
+    'type' => 'amount',
   );
   // Build a table based on the customer's orders.
   while ($order = db_fetch_object($result)) {
@@ -1195,13 +1191,11 @@
         'qty' => 1,
       );
       $context = array(
-        'location' => 'order-product-add',
         'revision' => 'altered',
+        'type' => 'order_product',
         'subject' => array(
-          'cart_item' => $product,
-          'field' => 'price',
-        ),
-        'extras' => array(
+          'order' => $order,
+          'product' => $product,
           'node' => clone $product,
         ),
       );

=== modified file 'uc_order/uc_order.line_item.inc'
--- uc_order/uc_order.line_item.inc	2009-05-06 18:27:07 +0000
+++ uc_order/uc_order.line_item.inc	2009-07-11 19:04:32 +0000
@@ -26,7 +26,7 @@
     case 'cart-preview':
       $context = array(
         'revision' => 'altered',
-        'location' => 'cart-preview-subtotal-item',
+        'type' => 'order_product',
       );
       $subtotal = 0;
       foreach ($arg1 as $item) {
@@ -35,9 +35,8 @@
           'qty' => ($item->qty) ? $item->qty : 1,
         );
         $context['subject'] = array(
-          'cart_item' => $item,
-        );
-        $context['extras'] = array(
+          'order' => $arg1,
+          'product' => $item,
           'node' => node_load($item->nid),
         );
         $total = uc_price($price_info, $context);

=== modified file 'uc_order/uc_order.module'
--- uc_order/uc_order.module	2009-07-08 02:45:06 +0000
+++ uc_order/uc_order.module	2009-07-11 19:04:32 +0000
@@ -371,13 +371,11 @@
           if ($value['type'] == 'subtotal') {
             $context = array(
               'revision' => 'formatted',
-              'location' => 'order-subtotal-token',
+              'type' => 'line_item',
               'subject' => array(
+                'order' => $order,
                 'line_item' => $order->line_items[$key],
               ),
-              'extras' => array(
-                'order' => $order,
-              ),
             );
             $subtotal = uc_price($order->line_items[$key]['amount'], $context);
           }
@@ -389,11 +387,8 @@
       $values['order-subtotal'] = $subtotal;
       $context = array(
         'revision' => 'formatted-original',
-        'location' => 'order-total-token',
+        'type' => 'order_total',
         'subject' => array(
-          'field' => 'order_total',
-        ),
-        'extras' => array(
           'order' => $order,
         ),
       );

=== modified file 'uc_order/uc_order.order_pane.inc'
--- uc_order/uc_order.order_pane.inc	2009-07-08 03:05:39 +0000
+++ uc_order/uc_order.order_pane.inc	2009-07-11 19:04:32 +0000
@@ -268,10 +268,10 @@
 function uc_order_pane_products($op, $arg1) {
   switch ($op) {
     case 'view':
-      return drupal_render(tapir_get_table('op_products_view_table', $arg1->products));
+      return drupal_render(tapir_get_table('op_products_view_table', $arg1));
 
     case 'customer':
-      return drupal_render(tapir_get_table('op_products_customer_table', $arg1->products));
+      return drupal_render(tapir_get_table('op_products_customer_table', $arg1));
 
     case 'edit-theme':
       drupal_add_js('uc_order_load_product_edit_div('. $arg1['order_id']['#value'] .');', 'inline');
@@ -332,9 +332,9 @@
       usort($line_items, 'uc_weight_sort');
 
       $context = array(
-        'location' => 'order-line-items',
-        'subject' => array(),
-        'extras' => array(
+        'revision' => 'themed',
+        'type' => 'line_item',
+        'subject' => array(
           'order' => $arg1,
         ),
       );
@@ -404,9 +404,9 @@
       );
 
       $context = array(
-        'location' => 'order-edit-line-items',
-        'subject' => array(),
-        'extras' => array(
+        'revision' => 'themed',
+        'type' => 'line_item',
+        'subject' => array(
           'order' => $arg1,
         ),
       );
@@ -689,7 +689,7 @@
 /**
  * Build the order view products table.
  */
-function op_products_view_table($products) {
+function op_products_view_table($order) {
   $table = array(
     '#type' => 'tapir_table',
     '#attributes' => array('class' => 'order-pane-table'),
@@ -742,11 +742,15 @@
   );
 
   $context = array(
-    'location' => 'order-view-products',
+    'revision' => 'themed',
+    'type' => 'order_product',
+    'subject' => array(
+      'order' => $order,
+    ),
   );
 
-  if (is_array($products)) {
-    foreach ($products as $product) {
+  if (is_array($order->products)) {
+    foreach ($order->products as $product) {
       $data = array();
       $data['qty'] = array(
         '#value' => $product->qty .'&times;',
@@ -767,18 +771,18 @@
         '#cell_attributes' => array('align' => 'center', 'nowrap' => 'nowrap'),
       );
 
-      $context['subject'] = array(
-        'order_product' => $product,
-        'field' => 'cost',
-      );
+      $context['subject']['product'] = $product;
+      $context['subject']['node'] = node_load($product->nid);
       if (user_access('administer products')) {
+        $context['field'] = 'cost';
+
         $data['cost'] = array(
           '#value' => uc_price($product->cost, $context),
           '#cell_attributes' => array('align' => 'right', 'nowrap' => 'nowrap'),
         );
       }
 
-      $context['subject']['field'] = 'price';
+      $context['field'] = 'price';
       $price_info = array(
         'price' => $product->price,
         'qty' => $product->qty,
@@ -858,11 +862,15 @@
   );
 
   $context = array(
-    'location' => 'order-customer-products',
+    'revision' => 'themed',
+    'type' => 'order_product',
+    'subject' => array(
+      'order' => $order,
+    ),
   );
 
-  if (is_array($products)) {
-    foreach ($products as $product) {
+  if (is_array($order->products)) {
+    foreach ($order->products as $product) {
       $data = array();
       $data['qty'] = array(
         '#value' => $product->qty .'&times;',
@@ -876,18 +884,17 @@
         '#cell_attributes' => array('align' => 'center', 'nowrap' => 'nowrap'),
       );
 
-      $context['subject'] = array(
-        'order_product' => $product,
-        'field' => 'cost',
-      );
+      $context['subject']['product'] = $product;
+      $context['subject']['node'] = node_load($product->nid);
       if (user_access('administer products')) {
+        $context['field'] = 'cost';
         $data['cost'] = array(
           '#value' => uc_price($product->cost, $context),
           '#cell_attributes' => array('align' => 'right', 'nowrap' => 'nowrap'),
         );
       }
 
-      $context['subject']['field'] = 'price';
+      $context['field'] = 'price';
       $price_info = array(
         'price' => $product->price,
         'qty' => $product->qty,

=== modified file 'uc_product/uc_product.module'
--- uc_product/uc_product.module	2009-07-10 17:14:55 +0000
+++ uc_product/uc_product.module	2009-07-11 19:04:32 +0000
@@ -699,7 +699,8 @@
   ));
 
   $context = array(
-    'location' => 'product-view',
+    'revision' => 'themed',
+    'type' => 'product',
     'class' => array(
       'product',
     ),
@@ -716,7 +717,7 @@
   }
 
   $context['class'][1] = 'display';
-  $context['subject']['field'] = 'sell_price';
+  $context['field'] = 'sell_price';
   $node->content['display_price'] = array('#value' => theme('uc_product_price', $node->sell_price, $context),
     '#access' => $enabled['display_price'],
     '#weight' => $weight['display_price'],
@@ -731,14 +732,14 @@
     $node->content['body']['#weight'] = 1;
 
     $context['class'][1] = 'list';
-    $context['subject']['field'] = 'list_price';
+    $context['field'] = 'list_price';
     $node->content['list_price'] = array('#value' => theme('uc_product_price', $node->list_price, $context),
       '#access' => $enabled['list_price'],
       '#weight' => $weight['list_price'],
     );
 
     $context['class'][1] = 'cost';
-    $context['subject']['field'] = 'cost';
+    $context['field'] = 'cost';
     $node->content['cost'] = array('#value' => theme('uc_product_price', $node->cost, $context),
       '#access' => $enabled['cost'] && user_access('administer products'),
       '#weight' => $weight['cost'],
@@ -750,7 +751,7 @@
   }
 
   $context['class'][1] = 'sell';
-  $context['subject']['field'] = 'sell_price';
+  $context['field'] = 'sell_price';
   $node->content['sell_price'] = array('#value' => theme('uc_product_price', $node->sell_price, $context, array('label' => !$teaser)),
     '#access' => $enabled['sell_price'],
     '#weight' => $weight['sell_price'],
@@ -1107,11 +1108,9 @@
 
   $context = array(
     'revision' => 'altered',
-    'location' => 'cart-item',
+    'type' => 'cart_item',
     'subject' => array(
       'cart_item' => $item,
-    ),
-    'extras' => array(
       'node' => $node,
     ),
   );
@@ -1249,7 +1248,8 @@
   );
 
   $context = array(
-    'location' => 'product-tapir-table',
+    'revision' => 'themed',
+    'type' => 'product',
     'class' => array('product'),
   );
   $options = array('label' => FALSE);
@@ -1276,12 +1276,12 @@
     $context['subject'] = array('node' => $node);
     if ($enabled['list_price']) {
       $context['class'][1] = 'list';
-      $context['subject']['field'] = 'list_price';
+      $context['field'] = 'list_price';
       $data['list_price'] = array('#value' => uc_price($node->list_price, $context, $options), '#cell_attributes' => array('nowrap' => 'nowrap'));
     }
     if ($enabled['sell_price']) {
       $context['class'][1] = 'sell';
-      $context['subject']['field'] = 'sell_price';
+      $context['field'] = 'sell_price';
       $data['price'] = array('#value' => uc_price($node->sell_price, $context, $options), '#cell_attributes' => array('nowrap' => 'nowrap'));
     }
 

=== modified file 'uc_product/views/uc_product_handler_field_price.inc'
--- uc_product/views/uc_product_handler_field_price.inc	2009-06-22 14:28:18 +0000
+++ uc_product/views/uc_product_handler_field_price.inc	2009-07-11 19:04:32 +0000
@@ -12,14 +12,15 @@
 class uc_product_handler_field_price extends views_handler_field {
   function render($values) {
     $context = array(
-      'location' => 'views-price-handler',
+      'revision' => 'themed',
+      'type' => 'product',
       'class' => array(
         'product',
         $this->field,
       ),
+      'field' => $this->real_field,
       'subject' => array(
         'node' => $values,
-        'field' => $this->real_field,
       ),
     );
     $options = array('label' => FALSE);

=== modified file 'uc_product_kit/uc_product_kit.module'
--- uc_product_kit/uc_product_kit.module	2009-05-29 14:42:03 +0000
+++ uc_product_kit/uc_product_kit.module	2009-07-11 19:04:32 +0000
@@ -462,7 +462,7 @@
   $form['base']['items'] = array('#tree' => TRUE, '#weight' => 1);
   $context = array(
     'revision' => 'formatted',
-    'location' => 'product-kit-form-item-discount',
+    'type' => 'product',
   );
   if (isset($node->products)) {
     foreach ($node->products as $i => $product) {
@@ -481,9 +481,10 @@
         '#title' => t('List position'),
         '#default_value' => isset($product->ordering) ? $product->ordering : 0,
       );
+
+      $context['field'] = 'sell_price';
       $context['subject'] = array(
         'node' => $product,
-        'field' => 'sell_price',
       );
       $form['base']['items'][$i]['discount'] = array('#type' => 'textfield',
         '#title' => t('Discount'),
@@ -510,7 +511,7 @@
     }
     $context = array(
       'revision' => 'formatted-original',
-      'location' => 'product-kit-form-total',
+      'type' => 'amount',
     );
     $form['base']['kit_total'] = array(
       '#type' => 'textfield',
@@ -572,7 +573,8 @@
   ));
 
   $context = array(
-    'location' => 'product-kit-view',
+    'revision' => 'themed',
+    'type' => 'product',
     'class' => array(
       'product-kit',
     ),
@@ -588,7 +590,7 @@
     );
   }
   $context['class'][1] = 'display';
-  $context['subject']['field'] = 'sell_price';
+  $context['field'] = 'sell_price';
   $node->content['display_price'] = array('#value' => uc_price($node->sell_price, $context),
     '#access' => $enabled['display_price'],
     '#weight' => $weight['display_price'],
@@ -601,14 +603,14 @@
     $node->content['body']['#weight'] = 1;
 
     $context['class'][1] = 'list';
-    $context['subject']['field'] = 'list_price';
+    $context['field'] = 'list_price';
     $node->content['list_price'] = array('#value' => uc_price($node->list_price, $context),
       '#access' => $enabled['list_price'],
       '#weight' => $weight['list_price'],
     );
 
     $context['class'][1] = 'cost';
-    $context['subject']['field'] = 'cost';
+    $context['field'] = 'cost';
     $node->content['cost'] = array('#value' => uc_price($node->cost, $context),
       '#access' => $enabled['cost'] && user_access('administer products'),
       '#weight' => $weight['cost'],
@@ -619,7 +621,7 @@
   }
 
   $context['class'][1] = 'sell';
-  $context['subject']['field'] = 'sell_price';
+  $context['field'] = 'sell_price';
   $node->content['sell_price'] = array('#value' => uc_price($node->sell_price, $context, array('label' => !$teaser)),
     '#access' => $enabled['sell_price'],
     '#weight' => $weight['sell_price'],
@@ -907,14 +909,12 @@
 
     $context = array(
       'revision' => 'altered',
-      'location' => 'cart-item',
+      'type' => 'cart_item',
+      'field' => 'price',
       'subject' => array(
         'cart_item' => $item,
-        'field' => 'price',
-      ),
-      'extras' => array(
+        'node' => $kit->products[$item->nid],
         'kit' => $kit,
-        'node' => $kit->products[$item->nid],
       ),
     );
     $price_info = array(

=== modified file 'uc_reports/uc_reports.admin.inc'
--- uc_reports/uc_reports.admin.inc	2009-06-24 15:37:14 +0000
+++ uc_reports/uc_reports.admin.inc	2009-07-11 19:04:32 +0000
@@ -73,7 +73,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'customer-report',
+    'type' => 'amount',
   );
 
   $customers = pager_query($sql . tablesort_sql($header), $page_size, 0, $sql_count);
@@ -180,7 +180,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'products-report',
+    'type' => 'amount',
   );
 
   $products = pager_query("SELECT $sql_vars FROM $sql_tables WHERE $sql_conditions GROUP BY n.nid, n.title" . tablesort_sql($header), $page_size, 0, $sql_count);
@@ -216,7 +216,6 @@
     $csv_rows[] = $csv_row;
 
     if (module_exists('uc_attribute')) {
-      $context['location'] = 'product-attribute-report';
       // Get the SKUs from this product.
       $models = _uc_reports_product_get_skus($product['nid']);
       // Add the product breakdown rows
@@ -415,7 +414,7 @@
 
   $context = array(
     'revision' => 'themed-original',
-    'location' => 'sales-report-summary',
+    'type' => 'amount',
   );
 
   $rows[] = array(
@@ -549,7 +548,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'sales-year-report',
+    'type' => 'amount',
   );
 
   // For each month of the year...
@@ -699,7 +698,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'sales-custom-report',
+    'type' => 'amount',
   );
 
   // Loop through the subreports and build the report table.

=== modified file 'uc_store/includes/uc_price.inc'
--- uc_store/includes/uc_price.inc	2009-05-08 19:14:30 +0000
+++ uc_store/includes/uc_price.inc	2009-07-01 15:50:51 +0000
@@ -85,7 +85,8 @@
   );
 
   $context += array(
-    'revision' => 'themed'
+    'revision' => 'themed',
+    'type' => 'amount',
   );
 
   // Clamp to allowed revisions.

=== modified file 'uc_store/uc_store.admin.inc'
--- uc_store/uc_store.admin.inc	2009-07-08 03:41:15 +0000
+++ uc_store/uc_store.admin.inc	2009-07-11 19:04:32 +0000
@@ -695,7 +695,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'currency-format-form',
+    'type' => 'amount',
   );
   $form['currency']['example'] = array(
     '#type' => 'textfield',
@@ -902,7 +902,10 @@
 
   $context = array(
     'revision' => 'themed-original',
-    'location' => 'customer-orders',
+    'type' => 'order_total',
+    'subject' => array(
+      'order' => $order,
+    ),
   );
   $totals = array('orders' => 0, 'items' => 0, 'total' => 0);
   while ($order = db_fetch_object($result)) {
@@ -932,7 +935,6 @@
     $totals['items'] += $item_count['COUNT(*)'];
     $totals['total'] += $order->order_total;
 
-    $context['subject'] = array('order' => $order);
     $rows[] = array(
       'data' => array(
         array('data' => $icons),
@@ -955,7 +957,7 @@
 
   $context = array(
     'revision' => 'formatted-original',
-    'location' => 'customer-orders-total',
+    'type' => 'amount',
   );
   $output = '<p>'. l(t('Create an order for this customer.'),
                      'admin/store/orders/create/'. $uid) .'</p>';

=== modified file 'uc_store/uc_store.module'
--- uc_store/uc_store.module	2009-07-03 18:06:53 +0000
+++ uc_store/uc_store.module	2009-07-11 19:04:32 +0000
@@ -778,7 +778,6 @@
     case 'currency_format':
       $context = array(
         'revision' => 'formatted-original',
-        'location' => 'js-util-currency-format',
       );
       $amount = is_numeric($_POST['amount']) ? $_POST['amount'] : 0;
       $output = uc_price($amount, $context);

=== modified file 'uc_tax_report/uc_tax_report.module'
--- uc_tax_report/uc_tax_report.module	2009-04-24 15:49:55 +0000
+++ uc_tax_report/uc_tax_report.module	2009-07-11 19:04:32 +0000
@@ -122,7 +122,7 @@
 
   $context = array(
     'revision' => 'themed-original',
-    'location' => 'tax-report',
+    'type' => 'amount',
   );
   foreach($totals as $line) {
     $row = array(

=== modified file 'uc_taxes/uc_taxes.module'
--- uc_taxes/uc_taxes.module	2009-06-17 15:27:58 +0000
+++ uc_taxes/uc_taxes.module	2009-07-11 19:04:32 +0000
@@ -147,9 +147,8 @@
       //$arg1->line_items = uc_order_load_line_items($arg1, TRUE);
       $context = array(
         'revision' => 'formatted',
-        'location' => 'tax-changes-log',
-        'subject' => array(),
-        'extras' => array(
+        'type' => 'line_item',
+        'subject' => array(
           'order' => $arg1,
         ),
       );

# Begin bundle
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
