public function getRequiredFields(Order $order) { return GatewayInfo::required_fields(Checkout::get($order)->getSelectedPaymentMethod()); }
protected function cullForGateway(&$fields, $defaults = array()) { $selected = array_merge($defaults, GatewayInfo::required_fields($this->gateway)); foreach ($fields as $name => $field) { if (!in_array($name, $selected)) { unset($fields[$name]); } } }
/** * Form for collecting gateway data. */ public function GatewayDataForm() { $payment = $this->getCurrentPayment(); if (!$payment) { //redirect if there is no payment object available return $this->redirect($this->Link()); } $factory = new GatewayFieldsFactory($payment->Gateway); $fields = $factory->getFields(); //TODO: never let CC details be stored in session (e.g. validation) //TODO: force requirement of SSL on live sites $actions = new FieldList($cancelaction = new FormAction("cancel", _t("PaymentController.DIFFERENTMETHOD", "Choose Different Method")), $payaction = new FormAction("pay", _t("PaymentController.DIFFERENTMETHOD", "Make Payment"))); $cancelaction->setAttribute("formnovalidate", "formnovalidate"); $validator = new RequiredFields(GatewayInfo::required_fields($payment->Gateway)); $form = new Form($this, "GatewayDataForm", $fields, $actions, $validator); $this->extend('updateGatewayDataForm', $form); //allow cancel action to run without validation if (!empty($_REQUEST['action_cancel'])) { $form->unsetValidator(); } return $form; }