uc_extra_fields_pane.views.inc in Extra Fields Checkout Pane 6.2
Same filename and directory in other branches
Provide views data and handlers for Extra Fields Pane
File
views/uc_extra_fields_pane.views.incView source
<?php
/**
* @file
* Provide views data and handlers for Extra Fields Pane
*/
/**
* Implementation of hook_views_data().
*/
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':
case 'custom':
// 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('Ubercart order'),
'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);
// Adjust title
$data[$table_name]['value']['title'] = $field->prefix . ' ' . $data[$table_name]['value']['title'];
}
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;
}
/**
* Get all uc_extra_fields_pane fields
* @return array
*/
function uc_extra_fields_pane_views_get_fields() {
static $fields = NULL;
if (!isset($fields)) {
// Make sure all fields are loaded
$ucxf_fields = UCXF_FieldList::getAllFields();
$fields = array();
$fields_by_pane = array(
'extra_delivery' => UCXF_FieldList::getFieldsFromPane('extra_delivery'),
'extra_billing' => UCXF_FieldList::getFieldsFromPane('extra_billing'),
'custom' => UCXF_FieldList::getAllCustomFields(),
'extra_address' => UCXF_FieldList::getAllAddressFields(),
);
foreach ($fields_by_pane as $pane_type => $fieldlist) {
foreach ($fieldlist as $fieldname => $field) {
$fields[$pane_type][$fieldname] = clone $field;
switch ($pane_type) {
case 'extra_delivery':
$fields[$pane_type][$fieldname]->element_type = UCXF_VALUE_ORDER_DELIVERY;
$fields[$pane_type][$fieldname]->prefix = UC_RECIPIENT_PREFIX;
$fields[$pane_type][$fieldname]->suffix = 'delivery';
break;
case 'extra_billing':
$fields[$pane_type][$fieldname]->element_type = UCXF_VALUE_ORDER_BILLING;
$fields[$pane_type][$fieldname]->prefix = UC_PAYER_PREFIX;
$fields[$pane_type][$fieldname]->suffix = 'billing';
break;
case 'custom':
$fields[$pane_type][$fieldname]->element_type = UCXF_VALUE_ORDER_INFO;
$fields[$pane_type][$fieldname]->prefix = t('Extra info:');
$fields[$pane_type][$fieldname]->suffix = 'info';
break;
case 'extra_address':
$fields[$pane_type][$fieldname]->element_type = UCXF_VALUE_ADDRESS;
break;
}
}
}
}
return $fields;
}
/**
* Add uc_extra_fields_pane fields to view table
* @return array
*/
function uc_extra_fields_pane_views_fetch_field($field) {
$data = array(
'title' => $field
->output('label'),
'help' => $field
->output('description'),
);
// Add fields specific to the uc_extra_fields_pane type.
switch ($field->value_type) {
case UCXF_Field::UCXF_WIDGET_TYPE_CHECKBOX:
if (!$data['help']) {
$data['help'] = t('Extra Fields Pane !fieldtype', array(
'!fieldtype' => t('Checkbox'),
));
}
$data += array(
'field' => array(
'handler' => 'views_handler_field_boolean',
'click sortable' => TRUE,
),
'sort' => array(
'handler' => 'views_handler_sort',
),
'filter' => array(
'handler' => 'views_handler_filter_boolean_operator',
'label' => t('Checked'),
'type' => 'yes-no',
),
);
break;
case UCXF_Field::UCXF_WIDGET_TYPE_SELECT:
case UCXF_Field::UCXF_WIDGET_TYPE_PHP_SELECT:
if (!$data['help']) {
$data['help'] = t('Extra Fields Pane !fieldtype', array(
'!fieldtype' => t('Select list'),
));
}
$data += array(
'field' => array(
'handler' => 'uc_extra_fields_pane_handler_field_selection',
'click sortable' => TRUE,
'field_id' => $field->field_id,
),
'sort' => array(
'handler' => 'views_handler_sort',
),
'filter' => array(
'handler' => 'uc_extra_fields_pane_handler_filter_selection',
'field_id' => $field->field_id,
),
'argument' => array(
'handler' => 'views_handler_argument_string',
),
);
break;
default:
if (!$data['help']) {
$data['help'] = t('Extra Fields Pane !fieldtype', array(
'!fieldtype' => t('Textfield'),
));
}
$data += array(
'field' => array(
'handler' => 'views_handler_field',
'click sortable' => TRUE,
),
'sort' => array(
'handler' => 'views_handler_sort',
),
'filter' => array(
'handler' => 'views_handler_filter_string',
),
'argument' => array(
'handler' => 'views_handler_argument_string',
),
);
break;
}
return $data;
}
/**
* Implementation of hook_views_handlers().
* @return array
*/
function uc_extra_fields_pane_views_handlers() {
return array(
'info' => array(
'path' => drupal_get_path('module', 'uc_extra_fields_pane') . '/views',
),
'handlers' => array(
'uc_extra_fields_pane_handler_field_selection' => array(
'parent' => 'views_handler_field',
),
'uc_extra_fields_pane_handler_filter_selection' => array(
'parent' => 'views_handler_filter_in_operator',
),
),
);
}
Functions
Name![]() |
Description |
---|---|
uc_extra_fields_pane_views_data | Implementation of hook_views_data(). |
uc_extra_fields_pane_views_fetch_field | Add uc_extra_fields_pane fields to view table |
uc_extra_fields_pane_views_get_fields | Get all uc_extra_fields_pane fields |
uc_extra_fields_pane_views_handlers | Implementation of hook_views_handlers(). |