You are here

function uc_extra_fields_pane_uc_order in Extra Fields Checkout Pane 7

Implements hook_uc_order().

Parameters

string $op: The action being performed.

object $order: The Ubercart order object.

mixed $arg2: This is variable and is based on the value of $op.

Return value

void

File

./uc_extra_fields_pane.module, line 186
Module: uc_extra_fields_pane.module

Code

function uc_extra_fields_pane_uc_order($op, &$order, $arg2) {
  $aElementTypes = array(
    'delivery' => array(
      'pane_type' => 'extra_delivery',
      'element_type' => UCXF_Value::UCXF_VALUE_ORDER_DELIVERY,
      'prefix' => 'delivery_',
      'uc_addresses_type' => 'shipping',
    ),
    'billing' => array(
      'pane_type' => 'extra_billing',
      'element_type' => UCXF_Value::UCXF_VALUE_ORDER_BILLING,
      'prefix' => 'billing_',
      'uc_addresses_type' => 'billing',
    ),
  );
  switch ($op) {
    case 'save':

      // Save values per element type.
      foreach ($aElementTypes as $element_type => $data) {
        $fields = UCXF_FieldList::getFieldsFromPane($data['pane_type']);
        foreach ($fields as $fieldname => $field) {
          if (isset($order->uc_addresses[$data['uc_addresses_type']])) {
            $address = $order->uc_addresses[$data['uc_addresses_type']];
            try {
              $value = $address
                ->getField($fieldname);
              if (!is_null($value)) {
                uc_extra_fields_pane_value_save(array(
                  'element_id' => $order->order_id,
                  'element_type' => $data['element_type'],
                  'field_id' => $field->field_id,
                  'value' => $value,
                ));
              }
            } catch (UcAddressesException $e) {

              // Log any Ubercart Addresses exceptions.
              watchdog('ucxf', 'An exception occured when trying to save value for field %field when editing order @order_id: @exception', array(
                '%field' => $fieldname,
                '@order_id' => $order->order_id,
                '@exception' => $e
                  ->getMessage(),
              ), WATCHDOG_WARNING);
            }
          }
        }
      }
      break;
    case 'load':

      // Set address field values for Ubercart Addresses.
      // Delivery fields
      if (isset($order->uc_addresses['shipping'])) {
        $value_list = uc_extra_fields_pane_value_list_load($order->order_id, UCXF_Value::UCXF_VALUE_ORDER_DELIVERY);
        foreach ($value_list as $oValue) {
          $order->uc_addresses['shipping']
            ->setField($oValue->db_name, $oValue->value);
          $order->{'delivery_' . $oValue->db_name} = $oValue->value;
        }
        $order->uc_addresses['shipping']->ucxf_pane_type = 'extra_delivery';
      }

      // Billing fields
      if (isset($order->uc_addresses['billing'])) {
        $value_list = uc_extra_fields_pane_value_list_load($order->order_id, UCXF_Value::UCXF_VALUE_ORDER_BILLING);
        foreach ($value_list as $oValue) {
          $order->uc_addresses['billing']
            ->setField($oValue->db_name, $oValue->value);
          $order->{'billing_' . $oValue->db_name} = $oValue->value;
        }
        $order->uc_addresses['billing']->ucxf_pane_type = 'extra_billing';
      }
      break;
    case 'delete':

      // Delete Extra Fields Pane values belonging to order.
      db_delete('uc_extra_fields_values')
        ->condition('element_id', $order->order_id)
        ->condition('element_type', array(
        UCXF_Value::UCXF_VALUE_ORDER_DELIVERY,
        UCXF_Value::UCXF_VALUE_ORDER_BILLING,
      ), 'IN')
        ->execute();
      break;
  }
}