UCXF_AddressPane.class.php in Extra Fields Checkout Pane 6.2
Contains the UCXF_AddressPane class.
File
class/UCXF_AddressPane.class.phpView source
<?php
/**
* @file
* Contains the UCXF_AddressPane class.
*/
/**
* Class that deals with checkout panes and order panes especially for the address
* fields.
*
* Basically, this class is used to inherit code from the original delivery and
* billing checkout panes and the original ship_to and bill_to order panes defined
* by Ubercart.
*/
class UCXF_AddressPane extends UCXF_Pane {
// -----------------------------------------------------------------------------
// ACTION
// -----------------------------------------------------------------------------
/**
* Executes an operation
* @param string $op
* @return mixed
*/
public function execute($op) {
// Execute operation following the logics of UCXF_Pane first
$result = parent::execute($op);
// Check if operation was succesfull
if (is_null($result)) {
// No result, follow logics of original address panes
return $this
->getOriginalPane($op);
}
return $result;
}
// -----------------------------------------------------------------------------
// CHECKOUT
// -----------------------------------------------------------------------------
/**
* View the pane to the customer
* @access protected
* @return string
*/
protected function checkout_view() {
$extra_pane = parent::checkout_view();
// Get contents from original pane
$original_pane = $this
->getOriginalPane('view');
// Loop through all extra address fields
foreach ($extra_pane['contents'] as $fieldname => $field) {
// Adding default value for every field except for hidden fields (php and constant)
if ($field['#type'] == 'hidden') {
// If the field is a hidden field, the field will be added to the array 'hidden_fields',
// because else it will be displayed as if it was a 'normal' field.
$extra_pane['contents']['hidden_fields'][$fieldname] = $field;
unset($extra_pane['contents'][$fieldname]);
}
if ($field['#type'] == 'item') {
// theme_address_pane() in uc_cart/uc_cart_checkout_pane.inc expects that every field
// has an #id property, so we set a dummy value here to prevent a PHP notice.
$extra_pane['contents'][$fieldname]['#id'] = NULL;
}
}
// Merge contents
$pane = $original_pane;
$pane['contents'] = array_merge($original_pane['contents'], $extra_pane['contents']);
return $pane;
}
/**
* Process values
* @access protected
* @return boolean
*/
protected function checkout_process() {
// Process original pane first
$original_pane = $this
->getOriginalPane('process');
return parent::checkout_process();
}
/**
* Outputs data for the review page
* @access protected
* @return string
*/
protected function checkout_review() {
// Get contents from original pane
$original_pane = $this
->getOriginalPane('review');
// Extra address fields
$review = array();
$fields = $this
->loadFields();
if (count($fields)) {
foreach ($fields as $field) {
// Only display if the field is enabled and if it may be displayed.
if ($field->enabled == 1 && $field
->may_display('review')) {
// Get field name
$order_field_name = $this
->getFieldName($field);
// Initialize field contents
$field_contents = $field
->output_value($this->order->{$order_field_name});
$review[] = array(
'title' => $field
->output('label'),
'data' => $field_contents,
);
}
}
}
// Merge data original pane with data from extra address fields
$review = array_merge($original_pane, $review);
return $review;
}
// -----------------------------------------------------------------------------
// ORDER
// -----------------------------------------------------------------------------
/**
* View the order data for the customer
* @access protected
* @return string
*/
protected function order_customer() {
$output_original_pane = $this
->getOriginalPane('customer');
// If original address pane has no output, don't return output here either.
if (!$output_original_pane) {
return;
}
$output = parent::order_view();
if ($output) {
$output = $output_original_pane . '<br />' . $output;
}
else {
$output = $output_original_pane;
}
return $output;
}
/**
* View the order data
* @access protected
* @return string
*/
protected function order_view() {
$output = parent::order_view();
$output_original_pane = $this
->getOriginalPane('view');
if ($output) {
$output = $output_original_pane . '<br />' . $output;
}
else {
$output = $output_original_pane;
}
return $output;
}
/**
* View the editable form
* @access protected
* @return array
*/
protected function order_edit_form() {
$form = parent::order_edit_form();
$form_original_pane = $this
->getOriginalPane('edit-form');
$pane_name = $this
->getPaneName();
$form = array(
$pane_name => array_merge($form['ucxf_' . $this->pane_id], $form_original_pane[$pane_name]),
);
unset($form[$pane_name]['#tree']);
return $form;
}
/**
* Theme the editable form
* @access protected
* @return string
*/
protected function order_edit_theme() {
$pane_name = $this
->getPaneName();
// Sort fields here, because parent function renders the fields individual.
// Use Drupal function "element_sort" to sort fields
uasort($this->order[$pane_name], "element_sort");
return $this
->getOriginalPane('edit-theme');
}
/**
* Process order data
* @access protected
* @return array
*/
protected function order_edit_process() {
$changes = parent::order_edit_process();
$changes_original_pane = $this
->getOriginalPane('edit-process');
$changes = array_merge($changes, $changes_original_pane);
return $changes;
}
// -----------------------------------------------------------------------------
// UTIL
// -----------------------------------------------------------------------------
/**
* Loads data from original address panes
* @param string $op
* @access private
* @return mixed
*/
private function getOriginalPane($op) {
$pane_name = $this
->getPaneName();
switch ($this->uc_pane_type) {
case self::PANE_CHECKOUT:
$function = 'uc_checkout_pane_' . $pane_name;
return $function($op, $this->order, $this->values);
case self::PANE_ORDER:
$function = 'uc_order_pane_' . $pane_name;
return $function($op, $this->order);
}
}
/**
* Returns name of original pane
* @access protected
* @return string
*/
protected function getPaneName() {
switch ($this->uc_pane_type) {
case self::PANE_CHECKOUT:
return $this->pane_id;
case self::PANE_ORDER:
switch ($this->pane_id) {
case 'delivery':
return 'ship_to';
case 'billing':
return 'bill_to';
}
break;
}
}
}
Classes
Name![]() |
Description |
---|---|
UCXF_AddressPane | Class that deals with checkout panes and order panes especially for the address fields. |