public function onBeforeInit() { $controller = $this->owner->request->param("Controller"); $action = $this->owner->request->param("Action"); if ($controller != "DevelopmentAdmin" && $action != "build") { $config = SiteConfig::current_site_config(); // Set the default currency symbol for this site Currency::config()->currency_symbol = Checkout::config()->currency_symbol; // Auto inject the order prefix to the orders module if it exists if (class_exists("Order") && class_exists("SiteConfig") && $config) { Order::config()->order_prefix = $config->PaymentNumberPrefix; } } }
public function index($request) { $this->extend('onBeforeIndex'); $site = SiteConfig::current_site_config(); $order = $this->getOrderData(); $cart = ShoppingCart::get(); // Setup the paypal gateway URL if (Director::isDev()) { $gateway_url = "https://www.sandbox.paypal.com/cgi-bin/webscr"; } else { $gateway_url = "https://www.paypal.com/cgi-bin/webscr"; } $callback_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, "callback", $this->payment_gateway->ID); $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete'); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); $back_url = Controller::join_links(Director::absoluteBaseURL(), Checkout_Controller::config()->url_segment, "finish"); $fields = new FieldList(HiddenField::create('business', null, $this->payment_gateway->BusinessID), HiddenField::create('item_name', null, $site->Title), HiddenField::create('cmd', null, "_cart"), HiddenField::create('paymentaction', null, "sale"), HiddenField::create('invoice', null, $order->OrderNumber), HiddenField::create('custom', null, $order->OrderNumber), HiddenField::create('upload', null, 1), HiddenField::create('discount_amount_cart', null, number_format($cart->DiscountAmount, 2)), HiddenField::create('currency_code', null, Checkout::config()->currency_code), HiddenField::create('first_name', null, $order->FirstName), HiddenField::create('last_name', null, $order->Surname), HiddenField::create('address1', null, $order->Address1), HiddenField::create('address2', null, $order->Address2), HiddenField::create('city', null, $order->City), HiddenField::create('zip', null, $order->PostCode), HiddenField::create('country', null, $order->Country), HiddenField::create('email', null, $order->Email), HiddenField::create('return', null, $success_url), HiddenField::create('notify_url', null, $callback_url), HiddenField::create('cancel_return', null, $error_url)); if (!Checkout::config()->simple_checkout && !$cart->isCollection()) { // Shipping Details $fields->add(HiddenField::create('shipping_addressee_name', null, $order->DeliveryFirstnames . " " . $order->DeliverySurname)); $fields->add(HiddenField::create('shipping_address1', null, $order->DeliveryAddress1)); $fields->add(HiddenField::create('shipping_address2', null, $order->DeliveryAddress2)); $fields->add(HiddenField::create('shipping_city', null, $order->DeliveryCity)); $fields->add(HiddenField::create('shipping_zip', null, $order->DeliveryPostCode)); $fields->add(HiddenField::create('shipping_country', null, $order->DeliveryCountry)); } $i = 1; foreach ($cart->getItems() as $item) { $fields->add(HiddenField::create('item_name_' . $i, null, $item->Title)); $fields->add(HiddenField::create('amount_' . $i, null, number_format($item->Price, 2))); $fields->add(HiddenField::create('quantity_' . $i, null, $item->Quantity)); $i++; } if (!Checkout::config()->simple_checkout && !$cart->isCollection()) { // Add shipping as an extra product $fields->add(HiddenField::create('item_name_' . $i, null, $order->PostageType)); $fields->add(HiddenField::create('amount_' . $i, null, number_format($cart->PostageCost, 2))); $fields->add(HiddenField::create('quantity_' . $i, null, "1")); } // Add tax (if needed) else just total if ($cart->TaxCost) { $fields->add(HiddenField::create('tax_cart', null, number_format($cart->TaxCost, 2))); } $actions = FieldList::create(LiteralField::create('BackButton', '<a href="' . $back_url . '" class="btn btn-red checkout-action-back">' . _t('Checkout.Back', 'Back') . '</a>'), FormAction::create('Submit', _t('Checkout.ConfirmPay', 'Confirm and Pay'))->addExtraClass('btn')->addExtraClass('btn-green')); $form = Form::create($this, 'Form', $fields, $actions)->addExtraClass('forms')->setFormMethod('POST')->setFormAction($gateway_url); $this->customise(array("Title" => _t('Checkout.Summary', "Summary"), "MetaTitle" => _t('Checkout.Summary', "Summary"), "Form" => $form, "Order" => $order)); $this->extend('onAfterIndex'); return $this->renderWith(array("PayPal", "Payment", "Checkout", "Page")); }
/** * Process the callback data from the payment provider */ public function callback($request) { if (Director::isDev()) { $secret_key = StripePayment::config()->test_secret_key; $publish_key = StripePayment::config()->test_publish_key; } else { $secret_key = StripePayment::config()->live_secret_key; $publish_key = StripePayment::config()->live_publish_key; } Stripe::setApiKey($secret_key); $site = SiteConfig::current_site_config(); $order = $this->getOrderData(); $cart = ShoppingCart::get(); $this->extend('onBeforeCallback'); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); $data = $this->request->postVars(); $status = "error"; // Get the credit card details submitted by the form $token = $data['stripeToken']; $order_no = Session::get("StripePayment.OrderNumber"); $order = Estimate::get()->filter("OrderNumber", $order_no)->first(); if ($order_no && $order) { // Create the charge on Stripe's servers - this will charge // the user's card try { $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', $order_no); $charge = StripeCharge::create(array("amount" => round($order->Total->Value * 100), "currency" => strtolower(Checkout::config()->currency_code), "source" => $token, "metadata" => array("Order" => $order_no))); $order->convertToOrder(); $order->write(); $order = Order::get()->byID($order->ID); $order->Status = "paid"; $order->PaymentProvider = "Stripe"; $order->PaymentNo = $charge->id; $order->write(); return $this->redirect($success_url); } catch (Exception $e) { $order->Status = "failed"; $order->write(); return $this->redirect($error_url); } } else { return $this->redirect($error_url); } }
public function index($request) { $this->extend('onBeforeIndex'); // Setup payment gateway form $order = $this->getOrderData(); $cart = ShoppingCart::get(); // Setup the gateway URL if (Director::isDev()) { $gateway_url = "https://secure-test.worldpay.com/wcc/purchase"; } else { $gateway_url = "https://secure.worldpay.com/wcc/purchase "; } $callback_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, "callback", $this->payment_gateway->ID); $back_url = Controller::join_links(Director::absoluteBaseURL(), Checkout_Controller::config()->url_segment, "finish"); $fields = FieldList::create(HiddenField::create('instId', null, $this->payment_gateway->InstallID), HiddenField::create('cartId', null, $order->OrderNumber), HiddenField::create('MC_callback', null, $callback_url), HiddenField::create('amount', null, number_format($cart->TotalCost, 2)), HiddenField::create('currency', null, Checkout::config()->currency_code), HiddenField::create('name', null, $order->FirstName . " " . $order->Surname), HiddenField::create('address1', null, $order->Address1), HiddenField::create('address2', null, $order->Address2), HiddenField::create('town', null, $order->City), HiddenField::create('region', null, $order->Country), HiddenField::create('postcode', null, $order->PostCode), HiddenField::create('country', null, $order->Country), HiddenField::create('email', null, $order->Email), HiddenField::create('tel', null, $order->PhoneNumber)); // Create a string of items ordered (to manage the order via WorldPay) $desc_string = ""; foreach ($cart->getItems() as $item) { $desc_string .= $item->Title . ' x ' . $item->Quantity . ', '; } if (!Checkout::config()->simple_checkout && !$cart->isCollection()) { // Add postage type to description $desc_string .= _t("Checkout.Postage", "Postage") . ': ' . $order->PostageType . '; '; // Add postage address to description $desc_string .= _t("Checkout.PostTo", "Post to") . ': '; $desc_string .= $order->DeliveryFirstnames . " " . $order->DeliverySurname . ', '; $desc_string .= $order->DeliveryAddress1 . ', '; $desc_string .= $order->DeliveryAddress2 ? $order->DeliveryAddress2 . ', ' : ''; $desc_string .= $order->DeliveryCity . ', '; $desc_string .= $order->DeliveryCountry ? $order->DeliveryCountry . ', ' : ''; $desc_string .= $order->DeliveryPostCode . ', '; $desc_string .= $order->DeliveryCountry; } $fields->add(HiddenField::create('desc', null, $desc_string)); if (Director::isDev()) { $fields->add(HiddenField::create('testMode', null, '100')); } $actions = FieldList::create(LiteralField::create('BackButton', '<a href="' . $back_url . '" class="btn btn-red checkout-action-back">' . _t('Checkout.Back', 'Back') . '</a>'), FormAction::create('Submit', _t('Checkout.ConfirmPay', 'Confirm and Pay'))->addExtraClass('btn')->addExtraClass('btn-green')); $form = Form::create($this, 'Form', $fields, $actions)->addExtraClass('forms')->setFormMethod('POST')->setFormAction($gateway_url); $this->customise(array("Title" => _t('Checkout.Summary', "Summary"), "MetaTitle" => _t('Checkout.Summary', "Summary"), "Form" => $form, "Order" => $order)); $this->extend("onAfterIndex"); return $this->renderWith(array("Worldpay", "Payment", "Checkout", "Page")); }
public function index($request) { $this->extend('onBeforeIndex'); // Setup payment gateway form $site = SiteConfig::current_site_config(); $order = $this->getOrderData(); $cart = ShoppingCart::get(); $pw = $this->payment_gateway->SHA; $sha_data = ""; // Setup the gateway URL if (Director::isDev()) { $gateway_url = "https://mdepayments.epdq.co.uk/ncol/test/orderstandard.asp"; } else { $gateway_url = "https://payments.epdq.co.uk/ncol/prod/orderstandard.asp"; } $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete'); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); $back_url = Controller::join_links(Director::absoluteBaseURL(), Checkout_Controller::config()->url_segment, "finish"); $template_url = Controller::join_links(Director::absoluteBaseURL(), "BarclaycardEpdqDynamicTemplate"); // Get an array of details, so we can generate a hash and convert // to hidden fields $data = array("PSPID" => $this->payment_gateway->PSPID, "ORDERID" => $order->OrderNumber, "AMOUNT" => round($cart->TotalCost * 100), "CURRENCY" => Checkout::config()->currency_code, "LANGUAGE" => i18n::get_locale(), "CN" => $order->FirstName . " " . $order->Surname, "EMAIL" => $order->Email, "OWNERADDRESS" => $order->Address1, "OWNERTOWN" => $order->City, "OWNERZIP" => $order->PostCode, "OWNERCTY" => $order->Country, "TITLE" => $site->Title, "BGCOLOR" => $this->payment_gateway->Background, "TXTCOLOR" => $this->payment_gateway->Text, "TBLBGCOLOR" => $this->payment_gateway->TableBackground, "TBLTXTCOLOR" => $this->payment_gateway->TableText, "BUTTONBGCOLOR" => $this->payment_gateway->ButtonBackground, "BUTTONTXTCOLOR" => $this->payment_gateway->ButtonText, "ACCEPTURL" => $success_url, "DECLINEURL" => $error_url, "EXCEPTIONURL" => $error_url, "CANCELURL" => $error_url, "TP" => $template_url); // Account for the fact the phone number might not be set if ($order->PhoneNumber) { $data["OWNERTELNO"] = $order->PhoneNumber; } $fields = FieldList::create(); ksort($data); // Generate our SHA Key and add fields foreach ($data as $k => $v) { $fields->push(HiddenField::create($k, null, $v)); $sha_data .= sprintf("%s=%s%s", $k, $v, $pw); } $hashed_data = strtoupper(hash("sha1", $sha_data)); // Finally add out hashed data $fields->push(HiddenField::create("SHASign", null, $hashed_data)); $actions = FieldList::create(LiteralField::create('BackButton', '<a href="' . $back_url . '" class="btn btn-red checkout-action-back">' . _t('Checkout.Back', 'Back') . '</a>'), FormAction::create('Submit', _t('Checkout.ConfirmPay', 'Confirm and Pay'))->addExtraClass('btn')->addExtraClass('btn-green')); $form = Form::create($this, 'Form', $fields, $actions)->addExtraClass('forms')->setFormMethod('POST')->setFormAction($gateway_url); $this->customise(array("Title" => _t('Checkout.Summary', "Summary"), "MetaTitle" => _t('Checkout.Summary', "Summary"), "Form" => $form, "Order" => $order)); $this->extend("onAfterIndex"); return $this->renderWith(array("BarclaysEpqd", "Payment", "Checkout", "Page")); }
public function index($request) { $this->extend("onBeforeIndex"); $site = SiteConfig::current_site_config(); $order = $this->getOrderData(); $cart = ShoppingCart::get(); $key = $this->payment_gateway->ConfigKey; $merchant_id = Director::isDev() ? "TEST" : $this->payment_gateway->MerchantID; $callback_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, "callback", $this->payment_gateway->ID); $return_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete'); $back_url = Controller::join_links(Director::absoluteBaseURL(), Checkout_Controller::config()->url_segment, "finish"); $payment_details = array('username' => $this->payment_gateway->Username, 'password' => $this->payment_gateway->Password, 'biller_code' => $this->payment_gateway->BillerCode, 'merchant_id' => $merchant_id, 'receipt_address' => $order->Email, 'payment_amount' => number_format($cart->TotalCost, 2), 'payment_reference' => $order->OrderNumber, 'payment_reference_minimum_length' => 10, 'payment_reference_maximum_length' => 20, 'payment_reference_text' => _t("PayWay.PaymentReferenceText", "Order Number"), 'return_link_url' => $return_url, 'reply_link_url' => $callback_url, 'reply_link_email' => $this->payment_gateway->PaymentReplyEmail, 'reply_link_post_type' => 'extended'); foreach ($cart->getItems() as $item) { $payment_details[$item->Title] = $item->Quantity . ',' . number_format($item->Price, 2); } if (!Checkout::config()->simple_checkout) { $payment_details[$order->PostageType] = number_format($cart->PostageCost, 2); } // Add tax (if needed) else just total if ($cart->TaxCost) { $payment_details[_t("PayWay.Tax", 'Tax')] = number_format($cart->TaxCost, 2); } // If we cannot get payway's token, generate a friendly error try { $token = $this->get_token($payment_details); } catch (Exception $e) { error_log("Exception caught: " . $e->getMessage()); $content = "<p>"; $content = _t("PayWay.UnableToPayContent", "Please return to the previous page and try again"); $content = "</p>"; $content = '<p><a href="' . $back_url . '" class="btn">Back</a></p>'; $this->customise(array("Title" => _t("PayWay.UnableToPay", "Unable to take payment"), "MetaTitle" => _t("PayWay.UnableToPay", "Unable to take payment"), "Content" => $content)); return $this->renderWith(array("Page")); } $hand_off_url = Controller::join_links($this->config()->gateway_url, "MakePayment"); $hand_off_url .= "?biller_code=" . $this->payment_gateway->BillerCode; $hand_off_url .= "&token=" . urlencode($token); $this->extend('onAfterIndex'); return $this->redirect($hand_off_url); }
public function index($request) { $this->extend('onBeforeIndex'); $site = SiteConfig::current_site_config(); $order = $this->getOrderData(); $cart = ShoppingCart::get(); $key = $this->payment_gateway->ConfigKey; $sofort = new SofortMultipayPayment($key); $sofort->setAmount(number_format($cart->TotalCost, 2)); $sofort->setCurrencyCode(Checkout::config()->currency_code); $callback_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, "callback", $this->payment_gateway->ID); $success_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', $order->OrderNumber); $error_url = Controller::join_links(Director::absoluteBaseURL(), Payment_Controller::config()->url_segment, 'complete', 'error'); $back_url = Controller::join_links(Director::absoluteBaseURL(), Checkout_Controller::config()->url_segment, "finish"); $sofort->setSuccessUrl($success_url, true); $sofort->setAbortUrl($error_url); $sofort->setNotificationUrl($callback_url); $desc_string = ""; foreach ($cart->getItems() as $item) { $desc_string .= $item->Title . ' x ' . $item->Quantity . ', '; } $sofort->setReason($desc_string); $sofort->sendRequest(); $fields = new FieldList(); $i = 1; $actions = FieldList::create(LiteralField::create('BackButton', '<a href="' . $back_url . '" class="btn btn-red checkout-action-back">' . _t('Checkout.Back', 'Back') . '</a>')); $form = Form::create($this, 'Form', $fields, $actions)->addExtraClass('forms')->setFormMethod('GET'); if ($sofort->getPaymentUrl()) { $actions->add(FormAction::create('Submit', _t('Checkout.ConfirmPay', 'Confirm and Pay'))->addExtraClass('btn')->addExtraClass('btn-green')); $form->setFormAction($sofort->getPaymentUrl()); // Set the Payment No to our order data (accessable by // onAfterIndex) $order->PaymentID = $sofort->getTransactionId(); } else { $actions->add(LiteralField::create('BackButton', '<strong class="error">' . _t('Sofort.TransactionError', 'Error with transaction') . '</strong>')); } $this->customise(array("Title" => _t('Checkout.Summary', "Summary"), "MetaTitle" => _t('Checkout.Summary', "Summary"), "Form" => $form, "Order" => $order)); $this->extend("onAfterIndex"); return $this->renderWith(array("Sofort", "Payment", "Checkout", "Page")); }
/** * Action that gets called before we interface with our payment * method. * * This action is responsible for setting up an order and * saving it into the database (as well as a session) and then hands * the current request over to the relevent payment handler * for final processing. * * @param $request Current request object */ public function index($request) { $cart = ShoppingCart::get(); $data = array(); $payment_data = array(); $handler = $this->payment_handler; // If shopping cart doesn't exist, redirect to base if (!$cart->getItems()->exists() || $this->getPaymentHandler() === null) { return $this->redirect($cart->Link()); } // Get billing and delivery details and merge into an array $billing_data = Session::get("Checkout.BillingDetailsForm.data"); $delivery_data = Session::get("Checkout.DeliveryDetailsForm.data"); // If we have applied free shipping, set that up, else get if (Session::get('Checkout.PostageID') == -1) { $postage = Checkout::CreateFreePostageObject(); } else { $postage = PostageArea::get()->byID(Session::get('Checkout.PostageID')); } // If we are using a complex checkout and do not have correct // details redirect if (!Checkout::config()->simple_checkout && !$cart->isCollection() && (!$postage || !$billing_data || !$delivery_data)) { return $this->redirect(Checkout_Controller::create()->Link()); } if ($cart->isCollection() && !$billing_data) { return $this->redirect(Checkout_Controller::create()->Link()); } // Create an order number $data["OrderNumber"] = substr(chunk_split(Checkout::getRandomNumber(), 4, '-'), 0, -1); // Setup holder for Payment ID $data["PaymentID"] = 0; // Set status $data['Status'] = 'incomplete'; // Assign billing, delivery and postage data if (!Checkout::config()->simple_checkout) { $data = array_merge($data, $billing_data); $data = is_array($delivery_data) ? array_merge($data, $delivery_data) : $data; $checkout_data = Checkout::config()->checkout_data; if (!$cart->isCollection()) { $data['PostageType'] = $postage->Title; $data['PostageCost'] = $postage->Cost; $data['PostageTax'] = $postage->Tax ? $postage->Cost / 100 * $postage->Tax : 0; } if ($cart->getDiscount()) { $data['Discount'] = $cart->getDiscount()->Title; $data['DiscountAmount'] = $cart->DiscountAmount; } // Add full country names if needed if (in_array("CountryFull", $checkout_data)) { $data['CountryFull'] = Checkout::country_name_from_code($data["Country"]); } if (in_array("DeliveryCountryFull", $checkout_data) && array_key_exists("DeliveryCountry", $data)) { $data['DeliveryCountryFull'] = Checkout::country_name_from_code($data["DeliveryCountry"]); } foreach ($checkout_data as $key) { if (array_key_exists($key, $data)) { $payment_data[$key] = $data[$key]; } } } // Set our order data as a generic object $handler->setOrderData(ArrayData::array_to_object($payment_data)); return $handler->handleRequest($request, $this->model); }
/** * Final step, allowing user to select postage and payment method * * @return array */ public function finish() { // Check the users details are set, if not, send them to the cart $billing_data = Session::get("Checkout.BillingDetailsForm.data"); $delivery_data = Session::get("Checkout.DeliveryDetailsForm.data"); if (!Checkout::config()->simple_checkout && !is_array($billing_data) && !is_array($delivery_data)) { return $this->redirect($this->Link('index')); } // Check permissions for guest checkout if (!Member::currentUserID() && !Checkout::config()->guest_checkout) { return $this->redirect($this->Link('index')); } if (Checkout::config()->simple_checkout) { $title = _t('Checkout.SelectPaymentMethod', "Select Payment Method"); } else { $title = _t('Checkout.SeelctPostagePayment', "Select Postage and Payment Method"); } $this->customise(array('Title' => $title, 'Form' => $this->PostagePaymentForm())); $this->extend("onBeforeFinish"); return $this->renderWith(array('Checkout_finish', 'Checkout', 'Page')); }
/** * Form responsible for estimating shipping based on location and * postal code * * @return Form */ public function PostageForm() { if (!Checkout::config()->simple_checkout) { $available_postage = Session::get("Checkout.AvailablePostage"); // Setup form $form = Form::create($this, 'PostageForm', $fields = new FieldList(CountryDropdownField::create('Country', _t('Checkout.Country', 'Country')), TextField::create("ZipCode", _t('Checkout.ZipCode', "Zip/Postal Code"))), $actions = new FieldList(FormAction::create("doSetPostage", _t('Checkout.Search', "Search"))->addExtraClass('btn')->addExtraClass('btn btn-green btn-success')), $required = RequiredFields::create(array("Country", "ZipCode")))->addExtraClass('forms')->addExtraClass('forms-inline')->setLegend(_t("Checkout.EstimateShipping", "Estimate Shipping")); // If we have stipulated a search, then see if we have any results // otherwise load empty fieldsets if ($available_postage && $available_postage->exists()) { // Loop through all postage areas and generate a new list $postage_array = array(); foreach ($available_postage as $area) { $area_currency = new Currency("Cost"); $area_currency->setValue($area->Cost); $postage_array[$area->ID] = $area->Title . " (" . $area_currency->Nice() . ")"; } $fields->add(OptionsetField::create("PostageID", _t('Checkout.SelectPostage', "Select Postage"), $postage_array)); $actions->dataFieldByName("action_doSetPostage")->setTitle(_t('Checkout.Update', "Update")); } // Check if the form has been re-posted and load data $data = Session::get("Form.{$form->FormName()}.data"); if (is_array($data)) { $form->loadDataFrom($data); } // Check if the postage area has been set, if so, Set Postage ID $data = array(); $data["PostageID"] = Session::get("Checkout.PostageID"); if (is_array($data)) { $form->loadDataFrom($data); } // Extension call $this->extend("updatePostageForm", $form); return $form; } }
public function __construct($controller, $name = "PostagePaymentForm") { if (!Checkout::config()->simple_checkout && !ShoppingCart::get()->isCollection()) { // Get delivery data and postage areas from session $delivery_data = Session::get("Checkout.DeliveryDetailsForm.data"); $country = $delivery_data['DeliveryCountry']; $postcode = $delivery_data['DeliveryPostCode']; $cart = ShoppingCart::get(); $postage_areas = new ShippingCalculator($postcode, $country); $postage_areas->setCost($cart->SubTotalCost)->setWeight($cart->TotalWeight)->setItems($cart->TotalItems); $postage_areas = $postage_areas->getPostageAreas(); // Loop through all postage areas and generate a new list $postage_array = array(); foreach ($postage_areas as $area) { $area_currency = new Currency("Cost"); $area_currency->setValue($area->Cost); $postage_array[$area->ID] = $area->Title . " (" . $area_currency->Nice() . ")"; } if (Session::get('Checkout.PostageID')) { $postage_id = Session::get('Checkout.PostageID'); } elseif ($postage_areas->exists()) { $postage_id = $postage_areas->first()->ID; } else { $postage_id = 0; } if (count($postage_array)) { $select_postage_field = OptionsetField::create("PostageID", _t('Checkout.PostageSelection', 'Please select your preferred postage'), $postage_array)->setValue($postage_id); } else { $select_postage_field = ReadonlyField::create("NoPostage", "", _t('Checkout.NoPostageSelection', 'Unfortunately we cannot deliver to your address'))->addExtraClass("label")->addExtraClass("label-red"); } // Setup postage fields $postage_field = CompositeField::create(HeaderField::create("PostageHeader", _t('Checkout.Postage', "Postage")), $select_postage_field)->setName("PostageFields")->addExtraClass("unit")->addExtraClass("size1of2")->addExtraClass("unit-50"); } elseif (ShoppingCart::get()->isCollection()) { $postage_field = CompositeField::create(HeaderField::create("PostageHeader", _t('Checkout.CollectionOnly', "Collection Only")), ReadonlyField::create("CollectionText", "", _t("Checkout.ItemsReservedInstore", "Your items will be held instore until you collect them")))->setName("CollectionFields")->addExtraClass("unit")->addExtraClass("size1of2")->addExtraClass("unit-50"); } else { $postage_field = null; } // Get available payment methods and setup payment $payment_methods = ArrayList::create(); foreach (SiteConfig::current_site_config()->PaymentMethods() as $payment_method) { if ($payment_method->canView()) { $payment_methods->add($payment_method); } } // Deal with payment methods if ($payment_methods->exists()) { $payment_field = OptionsetField::create('PaymentMethodID', _t('Checkout.PaymentSelection', 'Please choose how you would like to pay'), $payment_methods->map('ID', 'Label'), $payment_methods->filter('Default', 1)->first()->ID); } else { $payment_field = ReadonlyField::create("PaymentMethodID", _t('Checkout.PaymentSelection', 'Please choose how you would like to pay'), _t('Checkout.NoPaymentMethods', 'You cannot pay at this time, if you feel there has been an error please contact us.')); } $payment_field = CompositeField::create(HeaderField::create('PaymentHeading', _t('Checkout.Payment', 'Payment'), 2), $payment_field)->setName("PaymentFields")->addExtraClass("unit")->addExtraClass("size1of2")->addExtraClass("unit-50"); $fields = FieldList::create(CompositeField::create($postage_field, $payment_field)->setName("PostagePaymentFields")->addExtraClass("units-row")->addExtraClass("line")); $back_url = $controller->Link("billing"); if ($payment_methods->exists()) { $actions = FieldList::create(LiteralField::create('BackButton', '<a href="' . $back_url . '" class="btn btn-red checkout-action-back">' . _t('Checkout.Back', 'Back') . '</a>'), FormAction::create('doContinue', _t('Checkout.PaymentDetails', 'Enter Payment Details'))->addExtraClass('btn')->addExtraClass('checkout-action-next')->addExtraClass('btn-green')); } else { $actions = FieldList::create(); } $validator = RequiredFields::create(array("PostageID", "PaymentMethod")); parent::__construct($controller, $name, $fields, $actions, $validator); }