You are here

function uc_extra_fields_pane_views_data in Extra Fields Checkout Pane 7

Same name and namespace in other branches
  1. 6.2 views/uc_extra_fields_pane.views.inc \uc_extra_fields_pane_views_data()

Implementation of hook_views_data().

File

views/uc_extra_fields_pane.views.inc, line 10
Provide views data and handlers for Extra Fields Pane

Code

function uc_extra_fields_pane_views_data() {
  $data = array();

  // Define the base group of this table.
  $data['uc_extra_fields_values']['table']['group'] = t('Ubercart order');
  $data['uc_extra_fields_values']['table']['join']['uc_order_products'] = array(
    'left_field' => 'order_id',
    'field' => 'element_id',
  );
  $data['uc_extra_fields_values']['table']['join']['uc_orders'] = array(
    'left_field' => 'order_id',
    'field' => 'element_id',
  );
  $data['uc_extra_fields_values']['table']['join']['uc_addresses'] = array(
    'left_field' => 'aid',
    'field' => 'element_id',
  );
  $panes = uc_extra_fields_pane_views_get_fields();
  foreach ($panes as $pane_type => $fields) {
    switch ($pane_type) {
      case 'extra_delivery':
      case 'extra_billing':

        // Fields for Ubercart order and Ubercart Order Products.
        foreach ($fields as $field) {
          $table_name = 'uc_extra_fields_pane_values_' . $field->db_name . '_' . $field->suffix;
          $data[$table_name] = array(
            'table' => array(
              'group' => t('Order') . ': ' . $field->prefix,
              'join' => array(
                'uc_orders' => array(
                  'table' => 'uc_extra_fields_values',
                  'left_table' => 'uc_orders',
                  'left_field' => 'order_id',
                  'field' => 'element_id',
                  'extra' => array(
                    array(
                      'field' => 'field_id',
                      'value' => $field->field_id,
                    ),
                    array(
                      'field' => 'element_type',
                      'value' => $field->element_type,
                    ),
                  ),
                ),
                'uc_order_products' => array(
                  'table' => 'uc_extra_fields_values',
                  'left_table' => 'uc_order_products',
                  'left_field' => 'order_id',
                  'field' => 'element_id',
                  'extra' => array(
                    array(
                      'field' => 'field_id',
                      'value' => $field->field_id,
                    ),
                    array(
                      'field' => 'element_type',
                      'value' => $field->element_type,
                    ),
                  ),
                ),
              ),
            ),
          );

          // All fields in the table are named 'value'.
          $data[$table_name]['value'] = uc_extra_fields_pane_views_fetch_field($field);
        }
        break;
      case 'extra_address':

        // Fields for Ubercart Addresses
        foreach ($fields as $field) {
          $table_name = 'uc_extra_fields_pane_values_' . $field->db_name;
          $data[$table_name] = array(
            'table' => array(
              'group' => t('Ubercart Addresses'),
              'join' => array(
                'uc_addresses' => array(
                  'table' => 'uc_extra_fields_values',
                  'left_table' => 'uc_addresses',
                  'left_field' => 'aid',
                  'field' => 'element_id',
                  'extra' => array(
                    array(
                      'field' => 'field_id',
                      'value' => $field->field_id,
                    ),
                    array(
                      'field' => 'element_type',
                      'value' => $field->element_type,
                    ),
                  ),
                ),
              ),
            ),
          );

          // All fields in the table are named 'value'.
          $data[$table_name]['value'] = uc_extra_fields_pane_views_fetch_field($field);
        }
        break;
    }
  }
  return $data;
}