/** * * @param Controller * @param String */ function __construct(Controller $controller, $name) { //set basics $requiredFields = array(); //requirements Requirements::javascript('ecommerce/javascript/EcomOrderFormAddress.js'); // LEAVE HERE - NOT EASY TO INCLUDE VIA TEMPLATE if (EcommerceConfig::get("OrderAddress", "use_separate_shipping_address")) { Requirements::javascript('ecommerce/javascript/EcomOrderFormShipping.js'); // LEAVE HERE - NOT EASY TO INCLUDE VIA TEMPLATE } // ________________ 1) Order + Member + Address fields //find member $this->order = ShoppingCart::current_order(); $this->orderMember = $this->order->CreateOrReturnExistingMember(false); $this->loggedInMember = Member::currentUser(); //strange security situation... if ($this->orderMember->exists() && $this->loggedInMember) { if ($this->orderMember->ID != $this->loggedInMember->ID) { if (!$this->loggedInMember->IsShopAdmin()) { $this->loggedInMember->logOut(); } } } $addressFieldsBilling = new FieldList(); //member fields if ($this->orderMember) { $memberFields = $this->orderMember->getEcommerceFields(); $requiredFields = array_merge($requiredFields, $this->orderMember->getEcommerceRequiredFields()); $addressFieldsBilling->merge($memberFields); } //billing address field $billingAddress = $this->order->CreateOrReturnExistingAddress("BillingAddress"); $billingAddressFields = $billingAddress->getFields($this->orderMember); $requiredFields = array_merge($requiredFields, $billingAddress->getRequiredFields()); $addressFieldsBilling->merge($billingAddressFields); //shipping address field $addressFieldsShipping = null; if (EcommerceConfig::get("OrderAddress", "use_separate_shipping_address")) { $addressFieldsShipping = new FieldList(); //add the important CHECKBOX $useShippingAddressField = new FieldList(new CheckboxField("UseShippingAddress", _t("OrderForm.USESHIPPINGADDRESS", "Use an alternative shipping address"))); $addressFieldsShipping->merge($useShippingAddressField); //now we can add the shipping fields $shippingAddress = $this->order->CreateOrReturnExistingAddress("ShippingAddress"); $shippingAddressFields = $shippingAddress->getFields($this->orderMember); //we have left this out for now as it was giving a lot of grief... //$requiredFields = array_merge($requiredFields, $shippingAddress->getRequiredFields()); //finalise left fields $addressFieldsShipping->merge($shippingAddressFields); } $leftFields = new CompositeField($addressFieldsBilling); $leftFields->addExtraClass('leftOrderBilling'); $allLeftFields = new CompositeField($leftFields); $allLeftFields->addExtraClass('leftOrder'); if ($addressFieldsShipping) { $leftFieldsShipping = new CompositeField($addressFieldsShipping); $leftFieldsShipping->addExtraClass('leftOrderShipping'); $allLeftFields->push($leftFieldsShipping); } // ________________ 2) Log in / vs Create Account fields - RIGHT-HAND-SIDE fields $rightFields = new CompositeField(); $rightFields->addExtraClass('rightOrder'); //to do: simplify if (EcommerceConfig::get("EcommerceRole", "allow_customers_to_setup_accounts")) { if ($this->orderDoesNotHaveFullyOperationalMember()) { //general header if (!$this->loggedInMember) { $rightFields->push(new LiteralField('MemberInfo', '<p class="message good">' . _t('OrderForm.MEMBERINFO', 'If you already have an account then please') . " <a href=\"Security/login/?BackURL=/" . urlencode(implode("/", $controller->getURLParams())) . "\">" . _t('OrderForm.LOGIN', 'log in') . '</a>.</p>')); } } else { if ($this->loggedInMember) { $rightFields->push(new LiteralField('LoginNote', "<p class=\"message good\">" . _t("Account.LOGGEDIN", "You are logged in as ") . Convert::raw2xml($this->loggedInMember->FirstName) . ' ' . Convert::raw2xml($this->loggedInMember->Surname) . ' (' . Convert::raw2xml($this->loggedInMember->Email) . ').' . ' <a href="/Security/logout/">' . _t("Account.LOGOUTNOW", "Log out?") . '</a>' . '</p>')); } } if ($this->orderMember->exists()) { if ($this->loggedInMember) { if ($this->loggedInMember->ID != $this->orderMember->ID) { $rightFields->push(new LiteralField('OrderAddedTo', "<p class=\"message good\">" . _t("Account.ORDERADDEDTO", "Order will be added to ") . Convert::raw2xml($this->orderMember->FirstName) . ' ' . Convert::raw2xml($this->orderMember->Surname) . ' (' . Convert::raw2xml($this->orderMember->Email) . ').</p>')); } } } } // ________________ 5) Put all the fields in one FieldList $fields = new FieldList($rightFields, $allLeftFields); // ________________ 6) Actions and required fields creation + Final Form construction $nextButton = new FormAction('saveAddress', _t('OrderForm.NEXT', 'Next')); $nextButton->addExtraClass("next"); $actions = new FieldList($nextButton); $validator = OrderFormAddress_Validator::create($requiredFields); parent::__construct($controller, $name, $fields, $actions, $validator); $this->setAttribute("autocomplete", "off"); //extensions need to be set after __construct //extension point $this->extend('updateFields', $fields); $this->setFields($fields); $this->extend('updateActions', $actions); $this->setActions($actions); $this->extend('updateValidator', $validator); $this->setValidator($validator); //this needs to come after the extension calls foreach ($validator->getRequired() as $requiredField) { $field = $fields->dataFieldByName($requiredField); if ($field) { $field->addExtraClass("required"); } } // ________________ 7) Load saved data //we do this first so that Billing and Shipping Address can override this... if ($this->orderMember) { $this->loadDataFrom($this->orderMember); } if ($this->order) { $this->loadDataFrom($this->order); if ($billingAddress) { $this->loadDataFrom($billingAddress); } if (EcommerceConfig::get("OrderAddress", "use_separate_shipping_address")) { if ($shippingAddress) { $this->loadDataFrom($shippingAddress); } } } //allow updating via decoration $oldData = Session::get("FormInfo.{$this->FormName()}.data"); if ($oldData && (is_array($oldData) || is_object($oldData))) { $this->loadDataFrom($oldData); } $this->extend('updateOrderFormAddress', $this); }
/** * * @param Controller $controller * @param String $name, Name of the form */ function __construct($controller, $name) { $member = Member::currentUser(); $requiredFields = null; if ($member && $member->exists()) { $fields = $member->getEcommerceFields(true); $clearCartAndLogoutLink = ShoppingCart_Controller::clear_cart_and_logout_link(); $loginMessage = "<span class=\"customerName\">" . Convert::raw2xml($member->FirstName) . ' ' . Convert::raw2xml($member->Surname) . '</span>, ' . '<a href="' . $clearCartAndLogoutLink . '">' . _t('Account.LOGOUT', 'Log out now?') . '</a>'; if ($loginMessage) { $loginField = new ReadonlyField('LoggedInAsNote', _t("Account.LOGGEDIN", "You are currently logged in as "), $loginMessage); $loginField->dontEscape = true; $fields->push($loginField); } $actions = new FieldList(new FormAction('submit', _t('Account.SAVE', 'Save Changes'))); if ($order = ShoppingCart::current_order()) { if ($order->getTotalItems()) { $actions->push(new FormAction('proceed', _t('Account.SAVE_AND_PROCEED', 'Save changes and proceed to checkout'))); } } } else { if (!$member) { $member = new Member(); } $fields = new FieldList(); $urlParams = $controller->getURLParams(); $backURLLink = Director::baseURL(); if ($urlParams) { foreach ($urlParams as $urlParam) { if ($urlParam) { $backURLLink = Controller::join_links($backURLLink, $urlParam); } } } $backURLLink = urlencode($backURLLink); $fields->push(new LiteralField('MemberInfo', '<p class="message good">' . _t('OrderForm.MEMBERINFO', 'If you already have an account then please') . " <a href=\"Security/login?BackURL=" . $backURLLink . "\">" . _t('OrderForm.LOGIN', 'log in') . '</a>.</p>')); $memberFields = $member->getEcommerceFields(); if ($memberFields) { foreach ($memberFields as $memberField) { $fields->push($memberField); } } $passwordField = new PasswordField('PasswordCheck1', _t('Account.PASSWORD', 'Password')); $passwordFieldCheck = new PasswordField('PasswordCheck2', _t('Account.PASSWORDCHECK', 'Password (repeat)')); $fields->push($passwordField); $fields->push($passwordFieldCheck); $actions = new FieldList(new FormAction('creatememberandaddtoorder', _t('Account.SAVE', 'Create Account'))); } $requiredFields = ShopAccountForm_Validator::create($member->getEcommerceRequiredFields()); parent::__construct($controller, $name, $fields, $actions, $requiredFields); $this->setAttribute("autocomplete", "off"); //extensions need to be set after __construct //extension point $this->extend('updateFields', $fields); $this->setFields($fields); $this->extend('updateActions', $actions); $this->setActions($actions); $this->extend('updateValidator', $requiredFields); $this->setValidator($requiredFields); if ($member) { $this->loadDataFrom($member); } $oldData = Session::get("FormInfo.{$this->FormName()}.data"); if ($oldData && (is_array($oldData) || is_object($oldData))) { $this->loadDataFrom($oldData); } $this->extend('updateShopAccountForm', $this); }