Ubercart 4.x
------------
* All classes and tests comply with PSR-0.
* Orders, order products and cart items are fully classed entities.
* Removed TAPIR, use Form API #table instead.
* Removed hook_uc_cart_pane(), use the standard cart form and blocks instead.
* Removed uc_store_get_icon().
* Removed uc_weight_sort(), use \Drupal\Component\Utility\SortArray::sortByWeightElement() instead.
* Removed uc_get_message(), use YAML configuration files instead.
* Invoice templates are now named 'uc_order_invoice' to avoid theming conflicts.
* Order objects now have an interface (OrderInterface) and a set of methods:
    * $order->order_id => $order->id()
    * $order->uid => $order->getOwner(), $order->setOwner(), $order->getOwnerId() and $order->setOwnerId()
    * $order->order_status => $order->getStatusId() and $order->setStatusId()
    * uc_order_status_data($order, 'state') => $order->getStateId()
    * $order->primary_email => $order->getEmail() and $order->setEmail()
    * $order->order_total and uc_order_get_total() => $order->getTotal() and $order->getSubtotal()
    * $order->product_count and uc_order_get_product_count() => $order->getProductCount()
    * $order address properties => $order->getAddress() and $order->setAddress()
    * $order->currency => $order->getCurrency()
    * $order->payment_method => $order->getPaymentMethodId() and $order->setPaymentMethodId()
    * uc_order_new() => Order::create()->save()
    * uc_order_load() => Order::load()
    * uc_order_load_line_items() => $order->getLineItems()
    * uc_order_load_line_items_display() => $order->getDisplayLineItems()
    * uc_order_is_shippable() => $order->isShippable()
    * uc_order_log_changes($order_id, $changes) => $order->logChanges($changes)
    * uc_order_can_view_order() => $order->access('view')
    * uc_order_save() => $order->save()
    * uc_order_can_delete() => $order->access('delete')
    * uc_order_delete() => $order->delete()
    * uc_order_product_delete[_multiple]() => entity_delete_multiple('uc_order_product', ...)
* hook_uc_order() has been split up into entity hooks:
    * hook_uc_order('new') => hook_uc_order_create()
    * hook_uc_order('load') => hook_uc_order_load()
    * hook_uc_order('save') => hook_uc_order_insert() and hook_uc_order_update()
    * hook_uc_order('can_delete') => hook_uc_order_can_delete()
    * hook_uc_order('delete') => hook_uc_order_delete()
* Cart items are entities and old APIs have been removed:
    * uc_cart_update_item() => $item->save()
    * uc_cart_remove_item() => $item->delete()
    * uc_cart_update_item_object() removed
    * uc_cart_get_total_qty() removed
* Order statuses are configuration entities
    * uc_order_update_status() => $order->setStatusId()->save()
    * uc_order_status_list() => OrderStatus::loadMultiple()
    * uc_order_status_data() removed
    * uc_order_status_options_list() converted to OrderStatus::getOptionsList()
    * uc_order_state_list() converted to uc_order_state_options_list()
    * Order state scopes removed, replaced with order status weights.
* Payment methods are plugins
    * hook_uc_payment_method() is still supported but can be converted to PaymentMethodPluginInterface plugins
    * plugin.manager.uc_payment.method service (PaymentMethodManager) manages the available plugins
    * _uc_payment_method_list() => uc_payment_method_list()
    * _uc_payment_method_data() removed
* Checkout panes are plugins
    * plugin.manager.uc_cart.checkout_pane service (CheckoutPaneManager) manages the available plugins
    * hook_uc_checkout_pane() removed, hook_uc_checkout_pane_alter() is still supported
    * _uc_checkout_pane_list() and _uc_checkout_pane_data() removed
* Shipping quote methods are plugins
    * Shipping quote plugins use the @UbercartShippingQuote annotation and extend ShippingQuotePluginBase
    * plugin.manager.uc_quote.method service (ShippingQuotePluginManager) manages the available plugins
    * hook_uc_shipping_method() removed, hook_uc_quote_method_alter() is still supported


Ubercart 3.0-rc4, 2012-1-23
---------------------------
- API:
    * Added hook_uc_payment_method_alter().
    * Added hook_uc_product_alter().
    * Added theme_uc_attribute_option() for the add to cart forms.
    * Added theme_uc_qty().
    * Node shipping addresses are always arrays.
    * uc_line_item_tax() removed.
    * uc_cybersource_uc_calculate_tax() returns an associative array.
    * Removed theme_uc_payment_method_select().
    * Removed 'load' op from hook_uc_cart_item().
    * Removed $op from uc_cart_remove_item().
    * Removed uc_country_select().
    * Remvoed uc_country_ajax_zone().
    * Replaced 'can_ship' op of hook_uc_cart_item() with
      hook_uc_order_product_can_ship().
    * Replaced uc_cart_item_is_shippable() with uc_order_product_is_shippable().
    * Order pane op 'show-title' removed. Use the 'edit title' property in
      hook_uc_order_pane().
    * Order pane op 'edit-ops' removed. Use #ajax for the same functionality.
- Database:
    * {uc_product_adjustments}.combination has 'serialize' => TRUE.
- Entity:
    * Order products and cart items are now handled by the Entity API.
        - Add 'cart' view mode for order products.
- Orders:
    * Added 'Abandoned' status. 'In Checkout' orders are moved to 'Abandoned'
      after a configurable period of time.
- Rules:
    * Added event 'uc_order_delete'.
    * Added event 'uc_product_load'. Occurs before hook_uc_product_alter().
    * Allow payment methods to have configurable conditions, like shipping
      quotes.
- UI:
    * Converted admin/store/customers page to a View.
- Misc:
    * Added tests.
    * Removed inline CSS and deprecated HTML attributes.
    * Removed 'uc_catalog_name' variable.
    * Removed 'uc_minimum_subtotal_text' variable.

Ubercart 3.0-rc3, 2011-12-5
---------------------------
- API:
    * Added 'prepare' op to checkout pane callbacks. This step runs before
      'view'.
    * Added uc_store_email().
    * Added 'operations' key to hook_uc_shipping_method() to list configuration
      pages.
    * Improved UcAddress. Made comparison of addresses more robust.
    * Moved admin/store/customers code from uc_store to uc_order.
    * Removed deprecated code that supported uc_recurring.
    * Removed deprecated uc_add_js().
    * Removed uc_cart_exit() and cache safe cart block.
- Database:
    * Added {uc_shipments}.changed.
    * Removed {uc_order_products}.manufacturer, finally.
- Forms:
    * Added form element types:
        - 'uc_price'
        - 'uc_quantity'
- Theme:
    * Hide weight and dimensions fields if their values are zero.
    * Indicate that Google Checkout and Paypal Express Checkout are different
      from Ubercart Checkout.
    * Use invisible form labels in tables and abbreviation tags for
      accessibility.
- UI:
    * Added 'Create an order for this customer' link to
      admin/store/customers/orders/%uid.
    * Converted admin/store/orders/search page to a View.
    * Moved form for administering a user's file downloads from user/%/edit to
      user/%/purchased-files.
    * Reconfigured shipping quotes settings.
        - Main configuration page is at admin/store/settings/quotes.
        - Settings for individual quote methods (implemented by uc_flatrate and
          uc_weightquote) go under admin/store/settings/quotes/methods (the
          default local task).
        - Settings for modules (implemented by uc_ups and uc_usps) go under
          admin/store/settings/quotes/settings.
    * Replaced fieldsets with vertical tabs for USPS and UPS admin settings.
- Views:
    * Added Views integration for uc_product_kit.
    * Added alternative grid view to catalog.
    * Made {uc_order_products} a possible base table.
    * Renamed uc_stock_views_handler_filter_below_threshold to
      uc_stock_handler_filter_below_threshold.
    * Removed sort and filter from 'full_name' on uc_orders.
- Misc:
    * Add option to include authorization only transactions in order balance
      condition.
    * Removed credit card debug mode.

Ubercart 3.0-rc2, 2011-10-7
---------------------------
- Views:
    * Orders must use a relationship to get product data.

Ubercart 3.0-rc1, 2011-10-4
---------------------------
- API:
    * uc_order_load_line_items() returns stored and calculated line items together.
    * Product nodes have display_price and display_price_suffix, which show
      price changes that are ultimately calculated during checkout (e.g., VAT).
    * Added currency field to orders.
    * Added default values to uc_payment_enter().
    * Removed uc_strip_form().
-Database:
    * Increased size of {uc_payment_receipts}.comment.
- Theme:
    * Invoice templates can use $shippable variable.
    * Added theme_uc_checkout_pane_cart_review().
    * Removed theme_uc_cart_view_price().
    * Removed theme_uc_address_pane().
- UI:
    * Converted "View orders" page to a View.
    * Address field settings moved from checkout settings to country settings.
- Misc:
    * Added dependence on Views to Orders.
    * Restored dependence on Rules.
    * Product tokens are [node:product:...] instead of [product:...].
    * Removed [store:url] token. Duplicate of [site:url].
    * Use the permission 'view reports' instead of 'view store reports'.

Ubercart 3.0-beta4, 2011-7-25
-----------------------------
- API:
    * Removed ability to disable order logging.
    * Removed the ability to disable payment logging or tracking.
    * Off-site payment methods can specify simpler redirect forms.
    * Payment gateways are now only used and supported by uc_credit.
    * Ordered product titles increased from 128 to 255 characters.
    * The following hooks are now keyed by ID, though backwards compatibility is kept:
      * hook_uc_cart_pane()
      * hook_uc_checkout_pane()
      * hook_uc_line_item()
      * hook_uc_payment_gateway()
      * hook_uc_payment_method()
      * hook_uc_order_pane()
      * hook_uc_order_state()
    * Added hook_uc_order_pane_alter().
    * Removed settings form summaries.
- Theme:
    * Improved theming of printable invoices.
    * Shipping options theme functions for UPS and USPS include number of packages being sent.
    * Added CSS classes for payment methods.
- UI:
    * Converted 'create order' page to Ajax.
    * Many settings pages overhauled and simplified.
    * Converted cart, checkout and order pane admin to use drag and drop ordering.
    * Converted payment method and shipping quotes to use drag and drop ordering.
    * Country names are fully translatable.
- Misc:
    * Product field ordering is handled by standard field display management.
    * Added option to allow anonymous checkouts to use an existing email address.
    * Automatic deletion of generated shipping labels.
    * Product tokens are [product: ... ] instead of [node: ... ].
    * Added additional "value" tokens for numeric prices.
    * Changed [uc_order:number] token to [uc_order:order-number].
    * Added some SimpleTests.
    * Numerous documentation fixes and improvements.
    * A multitude of bug fixes.

Ubercart 3.0-beta3, 2011-5-26
-----------------------------
- API:
    * Add Ajax-enabled "uc_address" form element for full or partial address entry.
    * Handle temporary cart items with quantity of zero.
    * $item->data is consistently unserialized in hook_uc_cart_item().
    * 'Default quantity to add to cart' is respected when quantity field is hidden.
    * Add hook_uc_payment_gateway_alter().
    * Add hook_uc_checkout_pane_alter().
- Theme:
    * Pass order object to theme_uc_cart_complete_sale().
    * Default product image size increased from 100x100 to 250x250.
- UI:
    * Converted all address forms to Ajax.
    * Date formatting is now handled by Drupal core settings.
- Misc:
    * Purchased files with unlimited downloads cannot be purchased twice.
    * Added some SimpleTests.
    * Removed hard dependency on Rules.
    * Numerous documentation fixes and improvements.
    * A multitude of bug fixes.

Ubercart 3.0-beta2, 2011-3-11
-----------------------------
- API:
    * Add support for HTML emails.
    * Google Checkout integration:
        - Updated to API v2.5.
        - Notifications require "Serial Number Content" setting in the Merchant
          Center
        - Merchant-calculated shipping quotes use Ubercart shipping quotes. Set
          a default shipping address to get a fallback rate before actual rates
          are calculated.
        - With google_analytics.module enabled, Google Analytics data is
          recorded for Google Checkout orders.
    * Removed deprecated uc_stock_decrement_product_stock().
    * Removed unused uc_store_tables().
    * USPS integration updated to RateV4 and IntlRateV2 APIs.
- Fields:
    * Product, product classes, and product kits have body fields after D7
      upgrade like they should.
- Theme:
    * Credit card icons have specific CSS classes.
- UI:
    * Added setting to show or hide credit card form on PayPal Express Checkout
      landing page.
    * Changed "Remove" checkbox on cart page to a button.
    * Hide options and adjustments tab on product edit page if the product does
      not have attributes.
    * Improved country settings pages.
    * Removed cart block title setting from cart settings page. Set it through
      the block administration page.
- Misc:
    * All 248 countries in ISO 3166 have .cif files.

Ubercart 3.0-beta1, 2010-12-09
------------------------------
- API:
    * Implemented entity features for orders:
        - Added $reset parameter to uc_order_load().
        - Added uc_order_load_multiple().
        - Fields saved and loaded.
    * Order pane callbacks also changed signatures:
      uc_order_pane_PANE_ID($op, $order, &$form = NULL, &$form_state = NULL)
        - This signature applies to all ops, including those defined in
          'edit-ops'.
    * Quote method callbacks no longer need to return formatted rates.
    * uc_currency_format() changed signature:
      uc_currency_format($value, $sign = NULL, $thou = NULL, $dec = NULL)
    * Removed uc_price().
    * Removed hook_uc_price_handler().
    * theme_uc_price() takes one parameter: 'price', a float.
    * theme_uc_product_price() expects a render element with a #value and
      optional #title and #attributes. Element children may be used to display
      text after the price.
    * 'view' $op added to hook_uc_cart_item()
        - Allows modules to modify items before they are shown on the cart page.
- Database:
    * Dropped {cache_uc_price}.
    * Added {uc_taxed_product_types}.
    * Added {uc_taxed_line_items}.
- Forms:
    * Submit buttons wrapped in a #type = 'actions' container.
    * Edit order form now contains field widgets.
- Menu:
    * Customers may view their orders at user/%user/orders/%uc_order to match
      the parent item user/%user/orders.
- Taxes:
    * Tax rates may be set to be included in product prices. Their associated
      conditions are not checked until the checkout page, where they are shown
      as separate line items and not part of product prices.

Ubercart 3.0-alpha3, 2010-07-16
-------------------------------
- API:
    * Dropped Conditional Actions.
    * Integrated with Rules.
    * Product features:
        - Added uc_product_feature_load_multiple().
        - Added uc_product_feature_load().
        - Added uc_product_feature_delete().
- Theme:
    * Ported order invoice templates to new token names.

Ubercart 3.0-alpha2, 2010-06-11
-------------------------------
- API:
    * Changed payment method callback signature:
      uc_payment_method_METHOD($op, &$order, $form = NULL, &$form_state = NULL)
    * Changed checkout pane callback signature:
      uc_checkout_pane_PANE_ID($op, &$order, $form = NULL, &$form_state = NULL)
    * Use $form_state['values']['panes'][PANE_ID] instead of $arg2 during the
      'process' $op.
    * New UcAddress class to initialize address data.
    * New UcOrder class to initialize order data.
    * Most of uc_order.js, uc_payment.js, uc_quote.js, and uc_taxes.js removed
      in favor of Form API AJAX integration.
    * Removed uc_order_edit_products_form() in favor of AJAX processing.
    * uc_payment_get_totals() is now an AJAX callback.
    * _uc_quote_assemble_quotes() renamed to uc_quote_assemble_quotes()
    * Removed uc_quote_request_quotes().
    * uc_product_feature_save() now takes $data as a reference.
    * Editing and adding products to orders now use AJAX, so nearly all
      functions in that process have been replaced, removed, or reused.
        - hook_uc_order_product_alter() has not changed.
- Database:
    * Dropped fields:
        - {uc_order_quotes}.quote_form

Ubercart 3.0-alpha1, 2010-04-14
-------------------------------
- API:
    * Changed Ubercart hooks use the form hook_uc_hookname().
    * uc_payment_process() changed to uc_payment_process_payment().
- Database:
    * Dropped the following tables:
        - {uc_catalog_images}
    * Added fields:
        - {uc_attributes}.format
    * Changes were made to the following fields:
        - {uc_packages}.label_image is an int referring to {file}.file_id.
- Fields:
    * The default product image moved from field_image_cache to uc_product_image.
    * The catalog term image is an actual field, located at uc_catalog_image.
- Files:
    * Shipment labels are now managed files.
    * Catalog term images are now managed files in the {file} table.
