View source
<?php
class CommerceShippingExample extends CommerceShippingQuote {
public function settings_form(&$form, $rules_settings) {
$form['shipping_price'] = array(
'#type' => 'textfield',
'#title' => t('Shipping price'),
'#description' => t('Configure what the shipping price per order should be.'),
'#default_value' => is_array($rules_settings) && isset($rules_settings['shipping_price']) ? $rules_settings['shipping_price'] : 42,
'#element_validate' => array(
'rules_ui_element_decimal_validate',
),
);
}
public function submit_form($pane_values, $checkout_pane, $order = NULL) {
$form = parent::submit_form($pane_values, $checkout_pane, $order);
if (empty($order)) {
$order = $this->order;
}
if (!empty($order->data['commerce_shipping_example'])) {
$pane_values += $order->data['commerce_shipping_example'];
}
$pane_values += array(
'express' => 0,
'name' => '',
);
$form['express'] = array(
'#type' => 'checkbox',
'#title' => t('Express delivery'),
'#description' => t('Express delivery costs twice the normal amount.'),
'#default_value' => $pane_values['express'],
);
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#description' => t('This is a demonstration field coded to fail validation for single character values.'),
'#default_value' => $pane_values['name'],
'#required' => TRUE,
);
return $form;
}
public function submit_form_validate($pane_form, $pane_values, $form_parents = array(), $order = NULL) {
if (strlen($pane_values['name']) < 2) {
form_set_error(implode('][', array_merge($form_parents, array(
'name',
))), t('You must enter a name two or more characters long.'));
return FALSE;
}
}
public function calculate_quote($currency_code, $form_values = array(), $order = NULL, $pane_form = NULL, $pane_values = NULL) {
if (empty($order)) {
$order = $this->order;
}
$settings = $this->settings;
$shipping_line_items = array();
$shipping_line_items[] = array(
'amount' => commerce_currency_decimal_to_amount($settings['shipping_price'], $currency_code),
'currency_code' => $currency_code,
'label' => t('Normal shipping'),
);
if (!empty($form_values['express'])) {
$shipping_line_items[] = array(
'amount' => commerce_currency_decimal_to_amount($settings['shipping_price'], $currency_code),
'currency_code' => $currency_code,
'label' => t('Express fee'),
);
}
return $shipping_line_items;
}
}