/** * Process the items in the shopping cart from session, * creating a new {@link Order} record, and updating the * customer's details {@link Member} record. * * {@link Payment} instance is created, linked to the order, * and payment is processed {@link Payment::processPayment()} * * @param array $data Form request data submitted from OrderForm * @param Form $form Form object for this action * @param HTTPRequest $request Request object for this action */ function saveAddress(array $data, Form $form, SS_HTTPRequest $request) { Session::set("BillingEcommerceGeocodingFieldValue", empty($data["BillingEcommerceGeocodingField"]) ? null : $data["BillingEcommerceGeocodingField"]); Session::set("ShippingEcommerceGeocodingFieldValue", empty($data["ShippingEcommerceGeocodingField"]) ? null : $data["ShippingEcommerceGeocodingField"]); $data = Convert::raw2sql($data); //check for cart items if (!$this->order) { $form->sessionMessage(_t('OrderForm.ORDERNOTFOUND', 'Your order could not be found.'), 'bad'); $this->controller->redirectBack(); return false; } if ($this->order && $this->order->TotalItems($recalculate = true) < 1) { // WE DO NOT NEED THE THING BELOW BECAUSE IT IS ALREADY IN THE TEMPLATE AND IT CAN LEAD TO SHOWING ORDER WITH ITEMS AND MESSAGE $form->sessionMessage(_t('OrderForm.NOITEMSINCART', 'Please add some items to your cart.'), 'bad'); $this->controller->redirectBack(); return false; } //----------- START BY SAVING INTO ORDER $form->saveInto($this->order); //----------- -------------------------------- //MEMBER $this->orderMember = $this->createOrFindMember($data); if ($this->orderMember && is_object($this->orderMember)) { if ($this->memberShouldBeSaved($data)) { $form->saveInto($this->orderMember); $password = $this->validPasswordHasBeenEntered($data); if ($password) { $this->orderMember->changePassword($password); } $this->orderMember->write(); } if ($this->memberShouldBeLoggedIn($data)) { $this->orderMember->LogIn(); } //this causes ERRORS .... //$this->order->MemberID = $this->orderMember->ID; Session::set("Ecommerce_Member_For_Order", $this->orderMember->ID); } //BILLING ADDRESS if ($billingAddress = $this->order->CreateOrReturnExistingAddress("BillingAddress")) { $form->saveInto($billingAddress); // NOTE: write should return the new ID of the object $this->order->BillingAddressID = $billingAddress->write(); } // SHIPPING ADDRESS if (isset($data['UseShippingAddress'])) { if ($data['UseShippingAddress']) { if ($shippingAddress = $this->order->CreateOrReturnExistingAddress("ShippingAddress")) { $form->saveInto($shippingAddress); // NOTE: write should return the new ID of the object $this->order->ShippingAddressID = $shippingAddress->write(); } } } $this->extend("saveAddressExtension", $data, $form, $order, $this->orderMember); //SAVE ORDER $this->order->write(); //----------------- CLEAR OLD DATA ------------------------------ $this->clearSessionData(); //clears the stored session form data that might have been needed if validation failed //----------------------------------------------- $nextStepLink = CheckoutPage::find_next_step_link("orderformaddress"); $this->controller->redirect($nextStepLink); return true; }
/** * Process the items in the shopping cart from session, * creating a new {@link Order} record, and updating the * customer's details {@link Member} record. * * {@link Payment} instance is created, linked to the order, * and payment is processed {@link Payment::processPayment()} * * @param array $data Form request data submitted from OrderForm * @param Form $form Form object for this action * @param HTTPRequest $request Request object for this action */ function saveAddress($data, $form, $request) { $this->saveDataToSession($data); //save for later if necessary $order = ShoppingCart::current_order(); //check for cart items if (!$order) { $form->sessionMessage(_t('OrderForm.ORDERNOTFOUND', 'Your order could not be found.'), 'bad'); Director::redirectBack(); return false; } if ($order && $order->TotalItems($recalculate = true) < 1) { // WE DO NOT NEED THE THING BELOW BECAUSE IT IS ALREADY IN THE TEMPLATE AND IT CAN LEAD TO SHOWING ORDER WITH ITEMS AND MESSAGE $form->sessionMessage(_t('OrderForm.NOITEMSINCART', 'Please add some items to your cart.'), 'bad'); Director::redirectBack(); return false; } //PASSWORD HACK ... TO DO: test that you can actually update a password as the method below //does NOT change the FORM only DATA, but we save to the new details using $form->saveInto($member) //and NOT $data->saveInto($member) $password = $this->validPassword($data); //----------- START BY SAVING INTO ORDER $form->saveInto($order); //----------- -------------------------------- //MEMBER $member = $this->createOrFindMember($data); if ($member && is_object($member)) { if ($this->memberShouldBeSaved($data)) { $form->saveInto($member); if ($password) { $member->changePassword($password); } $member->write(); } if ($this->memberShouldBeLoggedIn($data)) { $member->logIn(); } } //BILLING ADDRESS if ($billingAddress = $order->CreateOrReturnExistingAddress("BillingAddress")) { $form->saveInto($billingAddress); // NOTE: write should return the new ID of the object $order->BillingAddressID = $billingAddress->write(); } // SHIPPING ADDRESS if (isset($data['UseShippingAddress'])) { if ($data['UseShippingAddress']) { if ($shippingAddress = $order->CreateOrReturnExistingAddress("ShippingAddress")) { $form->saveInto($shippingAddress); // NOTE: write should return the new ID of the object $order->ShippingAddressID = $shippingAddress->write(); } } } //SAVE ORDER $order->write(); //----------------- CLEAR OLD DATA ------------------------------ $this->clearSessionData(); //clears the stored session form data that might have been needed if validation failed //----------------------------------------------- $nextStepLink = CheckoutPage::find_next_step_link("orderformaddress"); Director::redirect($nextStepLink); return true; }