View source
<?php
function commerce_cp_menu() {
$items['admin/commerce/config/cart'] = array(
'title' => 'Cart settings',
'description' => 'Customize the cart form.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'commerce_cp_builder_form',
),
'access arguments' => array(
'administer cart',
),
'type' => MENU_NORMAL_ITEM,
'file' => 'commerce_cp.admin.inc',
);
$items['admin/commerce/config/cart/form'] = array(
'title' => 'Cart form',
'description' => 'Build your cart form.',
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => 0,
'file' => 'commerce_cp.admin.inc',
);
$settings_form_path = variable_get('commerce_cp_settings_form_path', 'admin/commerce/config/cart/form/pane');
$items[$settings_form_path . '/%'] = array(
'title callback' => 'commerce_cp_settings_title',
'title arguments' => array(
6,
),
'description' => 'Configure the settings for a cart pane.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'commerce_cp_settings_form',
6,
),
'access arguments' => array(
'administer cart',
),
'file' => 'commerce_cp.admin.inc',
);
return $items;
}
function commerce_cp_permission() {
$permissions = array(
'administer cart' => array(
'title' => t('Administer cart'),
'description' => t('Configure cart settings.'),
'restrict access' => TRUE,
),
);
return $permissions;
}
function commerce_cp_theme() {
return array(
'commerce_cp_builder_form' => array(
'render element' => 'form',
'file' => 'commerce_cp.admin.inc',
),
);
}
function commerce_cp_commerce_cp_info() {
$cart_panes = commerce_cp_get_system_panes();
return $cart_panes;
}
function commerce_cp_summary_settings_form() {
$form = array();
$cart_view = views_get_view('commerce_cart_form', TRUE);
$footer_items = $cart_view->display['default']->display_options['footer'];
$is_activated = FALSE;
$order_total_key = '';
$line_item_summary_key = '';
foreach ($footer_items as $footer_item_key => $footer_item) {
if ($footer_item['field'] == 'order_total') {
$is_activated = TRUE;
$order_total_key = $footer_item_key;
}
elseif ($footer_item['field'] == 'line_item_summary') {
$is_activated = FALSE;
$line_item_summary_key = $footer_item_key;
}
}
$form['line_item_summary_key'] = array(
'#type' => 'value',
'#value' => $line_item_summary_key,
);
$form['order_total_key'] = array(
'#type' => 'value',
'#value' => $order_total_key,
);
$form['cart_view'] = array(
'#type' => 'value',
'#value' => $cart_view,
);
$form['is_order_total_table_prev'] = array(
'#type' => 'value',
'#value' => $is_activated,
);
$form['is_order_total_table'] = array(
'#type' => 'checkbox',
'#default_value' => $is_activated,
'#title' => t('Order total table'),
'#description' => t('Activate order total table. Also it can be edited manually by updating a footer of the !cart_view', array(
'!cart_view' => l(t('cart view'), 'admin/structure/views/view/commerce_cart_form'),
)),
);
$form['#submit'][] = 'commerce_cp_summary_order_total_table_submit';
return $form;
}
function commerce_cp_summary_order_total_table_submit($form, $form_state) {
$values = $form_state['values'];
$cart_view = views_get_view('commerce_cart_form', TRUE);
$footer_items = $cart_view->display['default']->display_options['footer'];
if ($values['is_order_total_table'] != $values['is_order_total_table_prev']) {
if ($values['is_order_total_table']) {
if (isset($cart_view->display['default']->display_options['footer'][$values['line_item_summary_key']])) {
unset($cart_view->display['default']->display_options['footer'][$values['line_item_summary_key']]);
}
$cart_view->display['default']->display_options['footer']['order_total'] = array(
'id' => 'order_total',
'table' => 'commerce_order',
'field' => 'order_total',
'relationship' => 'none',
'group_type' => 'group',
'ui_name' => '',
'label' => '',
'empty' => FALSE,
);
}
else {
if (isset($cart_view->display['default']->display_options['footer'][$values['order_total_key']])) {
unset($cart_view->display['default']->display_options['footer'][$values['order_total_key']]);
}
$cart_view->display['default']->display_options['footer']['line_item_summary'] = array(
'id' => 'line_item_summary',
'table' => 'commerce_line_item',
'field' => 'line_item_summary',
'label' => t('Cart summary'),
'info' => array(
'quantity' => 0,
'total' => 'total',
),
);
}
views_save_view($cart_view);
$cache = $cart_view->name . ':block:results:';
cache_clear_all($cache, 'cache_views_data', TRUE);
}
}
function commerce_cp_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'views_form_commerce_cart_form_default') {
global $user;
$cart_order = commerce_cart_order_load($user->uid);
$summary_default_value = 99;
$summary_weight = 0;
$cart_panes = variable_get('commerce_cp_panes_weight', array());
if (isset($cart_panes['summary'])) {
$summary_weight = $cart_panes['summary'];
}
$custom_panes = module_invoke_all('commerce_cp_info');
$system_panes = commerce_cp_get_system_panes(TRUE);
$hidden_system_panes = array_diff($system_panes, array_keys($cart_panes));
foreach ($hidden_system_panes as $pane_id) {
if (isset($form[$pane_id])) {
$form[$pane_id]['#access'] = FALSE;
}
}
foreach ($cart_panes as $pane_id => $weight) {
if ($pane_id != 'summary') {
$pane_weight = $summary_default_value + $weight - $summary_weight;
if (isset($form[$pane_id])) {
$form[$pane_id]['#weight'] = $pane_weight;
}
else {
if (isset($custom_panes[$pane_id])) {
$callback = $custom_panes[$pane_id]['pane callback'];
if (function_exists($callback)) {
$form += $callback($form, $form_state, $cart_order, $pane_weight);
}
}
}
}
}
}
}
function commerce_cp_get_system_panes($only_keys = FALSE) {
$cart_panes = array();
$cart_panes['output'] = array(
'page' => 'cart',
'weight' => 0,
'name' => t('Line items table'),
'system' => TRUE,
);
$cart_panes['summary'] = array(
'page' => 'cart',
'weight' => 1,
'warning message' => t('(cannot be disabled)'),
'name' => t('Summary'),
'settings form' => 'commerce_cp_summary_settings_form',
'system' => TRUE,
);
$cart_panes['actions'] = array(
'page' => 'cart',
'weight' => 2,
'name' => t('Submit buttons'),
'system' => TRUE,
);
if ($only_keys) {
return array_keys($cart_panes);
}
return $cart_panes;
}