/** * @param object $controller Controller instance * @param string $name The form name */ public function __construct($controller, $name) { $member = Member::currentUserID() ? Member::currentUser() : new Member(); $order = singleton('Order'); $fields = new FieldSet($billingFields = $member->billingDetailsFields(), $shippingFields = $order->shippingDetailsFields()); $fields->merge(Payment::combined_form_fields($order->Total())); $actions = new FieldSet(new FormAction('doProcess', _t('OrderForm.PLACEORDER', 'Place order and make payment'))); parent::__construct($controller, $name, $fields, $actions); if ($member->exists()) { $this->loadDataFrom($member); } }
public function getFields() { if (!class_exists('Payment')) { throw new Exception('Please install the Payment module to accept event payments.'); } $datetime = $this->getForm()->getController()->getDateTime(); $session = $this->getForm()->getSession(); $tickets = $this->getForm()->getSavedStepByClass('EventRegisterTicketsStep'); $total = $tickets->getTotal(); $table = new EventRegistrationTicketsTableField('Tickets', $datetime); $table->setReadonly(true); $table->setExcludedRegistrationId($session->RegistrationID); $table->setShowUnavailableTickets(false); $table->setShowUnselectedTickets(false); $table->setTotal($total); Requirements::customScript(Payment::combined_form_requirements()); $payment = Payment::combined_form_fields($total->Nice()); $fields = new FieldSet(new LiteralField('ConfirmTicketsNote', '<p>Please confirm the tickets you wish to purchase:</p>'), $table, new FieldGroup($payment)); $this->extend('updateFields', $fields); return $fields; }
function __construct($controller, $name, $order, $returnToLink = '') { $fields = new FieldSet(new HiddenField('OrderID', '', $order->ID)); if ($returnToLink) { $fields->push(new HiddenField("returntolink", "", convert::raw2att($returnToLink))); } $totalAsCurrencyObject = $order->TotalAsCurrencyObject(); $totalOutstandingAsMoneyObject = $order->TotalOutstandingAsMoneyObject(); $paymentFields = Payment::combined_form_fields($totalOutstandingAsMoneyObject->Nice()); foreach ($paymentFields as $paymentField) { if ($paymentField->class == "HeaderField") { $paymentField->setTitle(_t("OrderForm.MAKEPAYMENT", "Make Payment")); } $fields->push($paymentField); } $requiredFields = array(); if ($paymentRequiredFields = Payment::combined_form_requirements()) { $requiredFields = array_merge($requiredFields, $paymentRequiredFields); } $actions = new FieldSet(new FormAction('dopayment', _t('OrderForm.PAYORDER', 'Pay balance'))); $form = parent::__construct($controller, $name, $fields, $actions, $requiredFields); if ($this->extend('updateFields', $fields) !== null) { $this->setFields($fields); } if ($this->extend('updateActions', $actions) !== null) { $this->setActions($actions); } if ($this->extend('updateValidator', $validator) !== null) { $this->setValidator($validator); } $this->setFormAction($controller->Link($name)); $this->extend('updateOrderFormPayment', $this); }
/** * Add pament fields for the current payment method. Also adds payment method as a required field. * * @param Array $fields Array of fields * @param OrderFormValidator $validator Checkout form validator * @param Order $order The current order */ private function addPaymentFields(&$fields, &$validator, $order) { $paymentFields = new CompositeField(); foreach (Payment::combined_form_fields($order->Total->getAmount()) as $field) { //Bit of a nasty hack to customize validation error message if ($field->Name() == 'PaymentMethod') { $field->setCustomValidationMessage(_t('CheckoutPage.SELECT_PAYMENT_METHOD', "Please select a payment method.")); } $paymentFields->push($field); } $paymentFields->setID('PaymentFields'); $fields['Payment'][] = $paymentFields; //TODO need to check required payment fields //$requiredPaymentFields = Payment::combined_form_requirements(); $validator->addRequiredField('PaymentMethod'); }
function __construct($controller, $name) { Requirements::themedCSS('OrderForm'); // 1) Member and shipping fields $member = Member::currentUser() ? Member::currentUser() : singleton('Member'); $memberFields = new CompositeField($member->getEcommerceFields()); $requiredFields = $member->getEcommerceRequiredFields(); if (ShoppingCart::uses_different_shipping_address()) { $countryField = new DropdownField('ShippingCountry', 'Country', Geoip::getCountryDropDown(), EcommerceRole::findCountry()); $shippingFields = new CompositeField(new HeaderField('Send goods to different address', 3), new LiteralField('ShippingNote', '<p class="warningMessage"><em>Your goods will be sent to the address below.</em></p>'), new LiteralField('Help', '<p>You can use this for gift giving. No billing information will be disclosed to this address.</p>'), new TextField('ShippingName', 'Name'), new TextField('ShippingAddress', 'Address'), new TextField('ShippingAddress2', ''), new TextField('ShippingCity', 'City'), $countryField, new HiddenField('UseShippingAddress', '', true), new FormAction_WithoutLabel('useMemberShippingAddress', 'Use Billing Address for Shipping')); $requiredFields[] = 'ShippingName'; $requiredFields[] = 'ShippingAddress'; $requiredFields[] = 'ShippingCity'; $requiredFields[] = 'ShippingCountry'; } else { $countryField = $memberFields->fieldByName('Country'); $shippingFields = new FormAction_WithoutLabel('useDifferentShippingAddress', 'Use Different Shipping Address'); } $countryField->addExtraClass('ajaxCountryField'); $setCountryLinkID = $countryField->id() . '_SetCountryLink'; $setContryLink = ShoppingCart_Controller::set_country_link(); $memberFields->push(new HiddenField($setCountryLinkID, '', $setContryLink)); $leftFields = new CompositeField($memberFields, $shippingFields); $leftFields->setID('LeftOrder'); $rightFields = new CompositeField(); $rightFields->setID('RightOrder'); if (!$member->ID || $member->Password == '') { $rightFields->push(new HeaderField('Membership Details', 3)); $rightFields->push(new LiteralField('MemberInfo', "<p class=\"message good\">If you are already a member, please <a href=\"Security/login?BackURL=" . CheckoutPage::find_link(true) . "/\">log in</a>.</p>")); $rightFields->push(new LiteralField('AccountInfo', "<p>Please choose a password, so you can login and check your order history in the future.</p><br/>")); $rightFields->push(new FieldGroup(new ConfirmedPasswordField('Password', 'Password'))); $requiredFields[] = 'Password[_Password]'; $requiredFields[] = 'Password[_ConfirmPassword]'; } // 2) Payment fields $currentOrder = ShoppingCart::current_order(); $total = '$' . number_format($currentOrder->Total(), 2); $paymentFields = Payment::combined_form_fields("{$total} " . $currentOrder->Currency(), $currentOrder->Total()); foreach ($paymentFields as $field) { $rightFields->push($field); } if ($paymentRequiredFields = Payment::combined_form_requirements()) { $requiredFields = array_merge($requiredFields, $paymentRequiredFields); } // 3) Put all the fields in one FieldSet $fields = new FieldSet($leftFields, $rightFields); // 4) Terms and conditions field // If a terms and conditions page exists, we need to create a field to confirm the user has read it if ($controller->TermsPageID && ($termsPage = DataObject::get_by_id('Page', $controller->TermsPageID))) { $bottomFields = new CompositeField(new CheckboxField('ReadTermsAndConditions', "I agree to the terms and conditions stated on the <a href=\"{$termsPage->URLSegment}\" title=\"Read the shop terms and conditions for this site\">terms and conditions</a> page")); $bottomFields->setID('BottomOrder'); $fields->push($bottomFields); $requiredFields[] = 'ReadTermsAndConditions'; } // 5) Actions and required fields creation $actions = new FieldSet(new FormAction('processOrder', 'Place order and make payment')); $requiredFields = new CustomRequiredFields($requiredFields); // 6) Form construction parent::__construct($controller, $name, $fields, $actions, $requiredFields); // 7) Member details loading if ($member->ID) { $this->loadDataFrom($member); } // 8) Country field value update $currentOrder = ShoppingCart::current_order(); $currentOrderCountry = $currentOrder->findShippingCountry(true); $countryField->setValue($currentOrderCountry); }
function __construct($controller, $name, $order) { $fields = new FieldSet(new HiddenField('OrderID', '', $order->ID)); $totalAsCurrencyObject = DBField::create('Currency', $order->TotalOutstanding()); //This should really be handled by the payment module $paymentFields = Payment::combined_form_fields($totalAsCurrencyObject->Nice()); foreach ($paymentFields as $paymentField) { if ($paymentField->class == "HeaderField") { $paymentField->setTitle(_t("OrderForm.MAKEPAYMENT", "Make Payment")); } $fields->push($paymentField); } $requiredFields = array(); if ($paymentRequiredFields = Payment::combined_form_requirements()) { $requiredFields = array_merge($requiredFields, $paymentRequiredFields); } $actions = new FieldSet(new FormAction('dopayment', _t('OrderForm.PAYORDER', 'Pay outstanding balance'))); parent::__construct($controller, $name, $fields, $actions, $requiredFields); }
function __construct($controller, $name) { //Requirements::themedCSS('OrderForm'); // 1) Member and shipping fields $member = Member::currentUser(); $memberFields = new CompositeField(singleton('Member')->getEcommerceFields()); $requiredFields = singleton('Member')->getEcommerceRequiredFields(); if (ShoppingCart::uses_different_shipping_address()) { $countryField = new DropdownField('ShippingCountry', _t('OrderForm.Country', 'Country'), Geoip::getCountryDropDown(), EcommerceRole::find_country()); $shippingFields = new CompositeField(new HeaderField(_t('OrderForm.SendGoodsToDifferentAddress', 'Send goods to different address'), 3), new LiteralField('ShippingNote', '<p class="message warning">' . _t('OrderForm.ShippingNote', 'Your goods will be sent to the address below.') . '</p>'), new LiteralField('Help', '<p>' . _t('OrderForm.Help', 'You can use this for gift giving. No billing information will be disclosed to this address.') . '</p>'), new TextField('ShippingName', _t('OrderForm.Name', 'Name')), new TextField('ShippingAddress', _t('OrderForm.Address', 'Address')), new TextField('ShippingAddress2', _t('OrderForm.Address2', '')), new TextField('ShippingCity', _t('OrderForm.City', 'City')), $countryField, new HiddenField('UseShippingAddress', '', true), $changeshippingbutton = new FormAction_WithoutLabel('useMemberShippingAddress', _t('OrderForm.UseBillingAddress', 'Use Billing Address for Shipping'))); //Need to to this because 'FormAction_WithoutLabel' has no text on the actual button $changeshippingbutton->setButtonContent(_t('OrderForm.UseBillingAddress', 'Use Billing Address for Shipping')); $changeshippingbutton->useButtonTag = true; $requiredFields[] = 'ShippingName'; $requiredFields[] = 'ShippingAddress'; $requiredFields[] = 'ShippingCity'; $requiredFields[] = 'ShippingCountry'; } else { $countryField = $memberFields->fieldByName('Country'); $shippingFields = new FormAction_WithoutLabel('useDifferentShippingAddress', _t('OrderForm.useDifferentShippingAddress', 'Use Different Shipping Address')); //Need to to this because 'FormAction_WithoutLabel' has no text on the actual button $shippingFields->setButtonContent(_t('OrderForm.useDifferentShippingAddress', 'Use Different Shipping Address')); $shippingFields->useButtonTag = true; } if ($countryField) { $countryField->addExtraClass('ajaxCountryField'); $setCountryLinkID = $countryField->id() . '_SetCountryLink'; $setContryLink = ShoppingCart::set_country_link(); $memberFields->push(new HiddenField($setCountryLinkID, '', $setContryLink)); } $leftFields = new CompositeField($memberFields, $shippingFields); $leftFields->setID('LeftOrder'); $rightFields = new CompositeField(); $rightFields->setID('RightOrder'); if (!$member) { $rightFields->push(new HeaderField(_t('OrderForm.MembershipDetails', 'Membership Details'), 3)); $rightFields->push(new LiteralField('MemberInfo', '<p class="message warning">' . _t('OrderForm.MemberInfo', 'If you are already a member please') . " <a href=\"Security/login?BackURL=" . CheckoutPage::find_link(true) . "/\">" . _t('OrderForm.LogIn', 'log in') . '</a>.</p>')); $rightFields->push(new LiteralField('AccountInfo', '<p>' . _t('OrderForm.AccountInfo', 'Please choose a password, so you can login and check your order history in the future') . '</p><br/>')); $rightFields->push(new FieldGroup($pwf = new ConfirmedPasswordField('Password', _t('OrderForm.Password', 'Password')))); //if user doesn't fill out password, we assume they don't want to become a member //TODO: allow different ways of specifying that you want to become a member if (self::$user_membership_optional) { $pwf->setCanBeEmpty(true); } if (self::$force_membership || !self::$user_membership_optional) { $requiredFields[] = 'Password[_Password]'; $requiredFields[] = 'Password[_ConfirmPassword]'; //TODO: allow extending this to provide other ways of indicating that you want to become a member } } else { $rightFields->push(new LiteralField('MemberInfo', '<p class="message good">' . sprintf(_t('OrderForm.LoggedInAs', 'You are logged in as %s.'), $member->getName()) . " <a href=\"Security/logout?BackURL=" . CheckoutPage::find_link(true) . "/\">" . _t('OrderForm.LogOut', 'log out') . '</a>.</p>')); } // 2) Payment fields $currentOrder = ShoppingCart::current_order(); $totalobj = DBField::create('Currency', $currentOrder->Total()); //should instead be $totalobj = $currentOrder->dbObject('Total'); $paymentFields = Payment::combined_form_fields($totalobj->Nice()); foreach ($paymentFields as $field) { $rightFields->push($field); } if ($paymentRequiredFields = Payment::combined_form_requirements()) { $requiredFields = array_merge($requiredFields, $paymentRequiredFields); } // 3) Put all the fields in one FieldSet $fields = new FieldSet($leftFields, $rightFields); // 4) Terms and conditions field // If a terms and conditions page exists, we need to create a field to confirm the user has read it if ($controller->TermsPageID && ($termsPage = $controller->TermsPage())) { $bottomFields = new CompositeField(new CheckboxField('ReadTermsAndConditions', sprintf(_t('OrderForm.TERMSANDCONDITIONS', "I agree to the terms and conditions stated on the <a href=\"%s\" title=\"Read the shop terms and conditions for this site\">terms and conditions</a> page"), $termsPage->Link()))); $bottomFields->setID('BottomOrder'); $fields->push($bottomFields); $requiredFields[] = 'ReadTermsAndConditions'; //TODO: this doesn't work for check-boxes } // 5) Actions and required fields creation $actions = new FieldSet(new FormAction('processOrder', _t('OrderForm.processOrder', 'Place order and make payment'))); $requiredFields = new CustomRequiredFields($requiredFields); $this->extend('updateValidator', $requiredFields); $this->extend('updateFields', $fields); // 6) Form construction parent::__construct($controller, $name, $fields, $actions, $requiredFields); // 7) Member details loading if ($member && $member->ID) { $this->loadDataFrom($member); } // 8) Country field value update if ($countryField) { $currentOrder = ShoppingCart::current_order(); $currentOrderCountry = $currentOrder->findShippingCountry(true); $countryField->setValue($currentOrderCountry); } //allow updating via decoration $this->extend('updateForm', $this); }