'uc_payment_method_table', ); foreach ($methods as $id => $method) { $form['pmtable'][$id]['uc_payment_method_' . $id . '_checkout'] = array( '#type' => 'checkbox', '#title' => check_plain($method['name']), '#default_value' => variable_get('uc_payment_method_' . $id . '_checkout', $method['checkout']), ); $form['pmtable'][$id]['uc_payment_method_' . $id . '_weight'] = array( '#type' => 'weight', '#default_value' => variable_get('uc_payment_method_' . $id . '_weight', $method['weight']), '#attributes' => array('class' => array('uc-payment-method-weight')), ); if (empty($method['no_gateway'])) { $gateways = _uc_payment_gateway_list($id, TRUE); $options = array(); foreach ($gateways as $gateway_id => $gateway) { $options[$gateway_id] = $gateway['title']; } if ($options) { $form['pmtable'][$id]['uc_payment_method_' . $id . '_checkout']['#title'] .= ' (' . t('includes %gateways', array('%gateways' => implode(', ', $options))) . ')'; } } $links = array(); $null = NULL; $method_settings = $method['callback']('settings', $null, array(), $form_state); if (is_array($method_settings)) { $links['settings'] = array( 'title' => t('settings'), 'href' => 'admin/store/settings/payment/method/' . $id, ); } $links['conditions'] = array( 'title' => t('conditions'), 'href' => 'admin/store/settings/payment/manage/uc_payment_method_' . $id, ); $form['pmtable'][$id]['settings'] = array( '#theme' => 'links', '#links' => $links, '#attributes' => array('class' => array('links', 'inline')), ); } return system_settings_form($form); } /** * Themes the table that displays available payment methods. * * @see uc_payment_methods_form() * @ingroup themeable */ function theme_uc_payment_method_table($variables) { $form = $variables['form']; drupal_add_tabledrag('uc-payment-methods', 'order', 'sibling', 'uc-payment-method-weight'); $header = array(t('Payment method'), t('List position'), t('Operations')); $rows = array(); foreach (element_children($form) as $method) { $row = array( drupal_render($form[$method]['uc_payment_method_' . $method . '_checkout']), drupal_render($form[$method]['uc_payment_method_' . $method . '_weight']), drupal_render($form[$method]['settings']), ); $rows[] = array( 'data' => $row, 'class' => array('draggable'), ); } return theme('table', array( 'header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'uc-payment-methods'), 'empty' => t('No payment methods are available. Modules providing payment methods must first be enabled on the !modules administration page under the "Ubercart - payment" fieldset.', array('!modules' => l(t('Modules'), 'admin/modules'))), )); } /** * Displays settings for a single payment method. */ function uc_payment_method_settings_form($form, &$form_state, $method_id) { $callback = _uc_payment_method_data($method_id, 'callback'); $null = NULL; if (function_exists($callback)) { $form = $callback('settings', $null, array(), $form_state); } else { drupal_not_found(); drupal_exit(); } return system_settings_form($form); } /** * Displays a list of payments attached to an order. * * @see uc_payment_by_order_form_validate() * @see uc_payment_by_order_form_submit() * @ingroup forms */ function uc_payment_by_order_form($form, &$form_state, $order) { $form['#attached']['css'][] = drupal_get_path('module', 'uc_payment') . '/uc_payment.css'; $total = $order->order_total; $payments = uc_payment_load_payments($order->order_id); $form['order_total'] = array( '#type' => 'item', '#title' => t('Order total'), '#theme' => 'uc_price', '#price' => $total, ); $form['payments'] = tapir_get_table('uc_payments_table'); $form['payments']['#weight'] = 10; if ($payments !== FALSE) { foreach ($payments as $payment) { $form['payments'][$payment->receipt_id]['received'] = array( '#markup' => format_date($payment->received, 'custom', variable_get('date_format_uc_store', 'm/d/Y') . 'H:i:s'), ); $form['payments'][$payment->receipt_id]['user'] = array( '#markup' => theme('uc_uid', array('uid' => $payment->uid)), ); $form['payments'][$payment->receipt_id]['method'] = array( '#markup' => ($payment->method == '') ? t('Unknown') : $payment->method, ); $form['payments'][$payment->receipt_id]['amount'] = array( '#theme' => 'uc_price', '#price' => $payment->amount, ); $total -= $payment->amount; $form['payments'][$payment->receipt_id]['balance'] = array( '#theme' => 'uc_price', '#price' => $total, ); $form['payments'][$payment->receipt_id]['comment'] = array( '#markup' => ($payment->comment == '') ? '-' : filter_xss_admin($payment->comment), ); if (user_access('delete payments')) { $action_value = l(t('Delete'), 'admin/store/orders/' . $order->order_id . '/payments/' . $payment->receipt_id . '/delete'); } else { $action_value = '-'; } $form['payments'][$payment->receipt_id]['action'] = array( '#markup' => $action_value, ); } } $form['balance'] = array( '#type' => 'item', '#title' => t('Current balance'), '#theme' => 'uc_price', '#price' => $total, ); $form['order_id'] = array( '#type' => 'hidden', '#value' => $order->order_id, ); if (user_access('manual payments')) { $form['payments']['new']['received'] = array( '#type' => 'date', '#default_value' => array( 'month' => format_date(REQUEST_TIME, 'custom', 'n'), 'day' => format_date(REQUEST_TIME, 'custom', 'j'), 'year' => format_date(REQUEST_TIME, 'custom', 'Y'), ), ); $form['payments']['new']['user'] = array( '#markup' => '-', ); $methods = _uc_payment_method_list(); foreach ($methods as $id => $method) { $options[$id] = $method['name']; } $form['payments']['new']['method'] = array( '#type' => 'select', '#title' => t('Method'), '#title_display' => 'invisible', '#options' => $options, ); $form['payments']['new']['amount'] = array( '#type' => 'textfield', '#title' => t('Amount'), '#title_display' => 'invisible', '#size' => 6, ); $form['payments']['new']['balance'] = array( '#markup' => '-', ); $form['payments']['new']['comment'] = array( '#type' => 'textfield', '#title' => t('Comment'), '#title_display' => 'invisible', '#size' => 32, '#maxlength' => 256, ); $form['payments']['new']['action'] = array('#type' => 'actions'); $form['payments']['new']['action']['action'] = array( '#type' => 'submit', '#value' => t('Enter'), ); } return $form; } /** * Form validation for uc_payment_by_order_form(). * * @see uc_payment_by_order_form() * @see uc_payment_by_order_form_submit() */ function uc_payment_by_order_form_validate($form, &$form_state) { if (!is_numeric($form_state['values']['payments']['new']['amount'])) { form_set_error('payments][new][amount', t('You must enter a number for the amount.')); } return TRUE; } /** * Form submission handler for uc_payment_by_order_form(). * * @see uc_payment_by_order_form() * @see uc_payment_by_order_form_validate() */ function uc_payment_by_order_form_submit($form, &$form_state) { global $user; $payment = $form_state['values']['payments']['new']; $received = strtotime($payment['received']['year'] . '-' . $payment['received']['month'] . '-' . $payment['received']['day'] . ' 00:00:00'); // If the value entered is today, use the exact timestamp instead $startofday = mktime(0, 0, 0); if ($received == $startofday) { $received = REQUEST_TIME; } uc_payment_enter($form_state['values']['order_id'], $payment['method'], $payment['amount'], $user->uid, '', $payment['comment'], $received); drupal_set_message(t('Payment entered.')); } /** * Confirmation form to delete a payment from an order. * * @see uc_payment_delete_confirm_form_submit() * @ingroup forms */ function uc_payment_delete_confirm_form($form, &$form_state, $order, $payment) { // Make sure the payment is for the specified order. if ($payment->order_id != $order->order_id) { drupal_set_message(t('An error loading the payment information occurred.')); drupal_goto('admin/store/orders/' . $order->order_id . '/payments'); } $desc = '' . t('Payment information:') . ' ' . t('@method payment of @amount received on @date.', array('@method' => $payment->method, '@amount' => uc_currency_format($payment->amount), '@date' => format_date($payment->received, 'short'))); $form['order_id'] = array( '#type' => 'value', '#value' => $order->order_id ); $form['receipt_id'] = array( '#type' => 'value', '#value' => $payment->receipt_id, ); return confirm_form($form, t('Are you sure you want to delete this payment?'), 'admin/store/orders/' . $order->order_id . '/payments', $desc, t('Delete')); } /** * Form submission handler for uc_payment_delete_confirm_form(). * * @see uc_payment_delete_confirm_form() */ function uc_payment_delete_confirm_form_submit($form, &$form_state) { uc_payment_delete($form_state['values']['receipt_id']); drupal_set_message(t('Payment deleted.')); $form_state['redirect'] = 'admin/store/orders/' . $form_state['values']['order_id'] . '/payments'; }