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]);
         }
     }
 }
Esempio n. 3
0
 /**
  * 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;
 }