/** * We save the data of the user here. * * @param SS_HTTPRequest $data contains the frameworks form data * @param Form $form not used * @param array $formData contains the modules form data * * @return void * * @author Sascha Koehler <*****@*****.**> * @since 22.03.2011 */ protected function submitSuccess($data, $form, $formData) { $member = SilvercartCustomer::currentRegisteredCustomer(); if ($member) { $formData['Salutation'] = $member->Salutation; $formData['FirstName'] = $member->FirstName; $formData['Surname'] = $member->Surname; $formData['Email'] = $member->Email; // ---------------------------------------------------------------- // For registered and logged in customers all we have to do is set // the respective field in the customer object. // ---------------------------------------------------------------- switch ($formData['NewsletterAction']) { case '1': SilvercartNewsletter::subscribeRegisteredCustomer($member); $this->setSessionMessage(sprintf(_t('SilvercartNewsletterStatus.SUBSCRIBED_SUCCESSFULLY'), $formData['Email'])); break; case '2': default: SilvercartNewsletter::unSubscribeRegisteredCustomer($member); $this->setSessionMessage(sprintf(_t('SilvercartNewsletterStatus.UNSUBSCRIBED_SUCCESSFULLY'), $formData['Email'])); } } else { // ---------------------------------------------------------------- // For unregistered customers we have to add / remove them from // the datastore for unregistered newsletter recipients. // // If the given email address belongs to a registered customer we // should not do anything but ask the user to log in first. // ---------------------------------------------------------------- if (SilvercartNewsletter::isEmailAllocatedByRegularCustomer($formData['Email'])) { $this->setSessionMessage(sprintf(_t('SilvercartNewsletterStatus.REGULAR_CUSTOMER_WITH_SAME_EMAIL_EXISTS'), $formData['Email'], '/Security/Login/?BackURL=' . $this->controller->PageByIdentifierCode('SilvercartNewsletterPage')->Link())); } else { if ($formData['NewsletterAction'] == '1') { // -------------------------------------------------------- // Subscribe to newsletter. // If the user is already subscribed we display a // message accordingly. // -------------------------------------------------------- if (SilvercartNewsletter::isEmailAllocatedByAnonymousRecipient($formData['Email'])) { $this->setSessionMessage(sprintf(_t('SilvercartNewsletterStatus.ALREADY_SUBSCRIBED'), $formData['Email'])); } else { SilvercartNewsletter::subscribeAnonymousCustomer($formData['Salutation'], $formData['FirstName'], $formData['Surname'], $formData['Email']); $this->setSessionMessage(sprintf(_t('SilvercartNewsletterStatus.SUBSCRIBED_SUCCESSFULLY_FOR_OPT_IN'), $formData['Email'])); } } else { // -------------------------------------------------------- // Unsubscribe from newsletter. // If no email address exists we display a message // accordingly. // -------------------------------------------------------- if (SilvercartNewsletter::isEmailAllocatedByAnonymousRecipient($formData['Email'])) { SilvercartNewsletter::unSubscribeAnonymousCustomer($formData['Email']); $this->setSessionMessage(sprintf(_t('SilvercartNewsletterStatus.UNSUBSCRIBED_SUCCESSFULLY'), $formData['Email'])); } else { $this->setSessionMessage(sprintf(_t('SilvercartNewsletterStatus.NO_EMAIL_FOUND'), $formData['Email'])); } } } } $redirectLink = '/'; $responsePage = SilvercartPage_Controller::PageByIdentifierCode("SilvercartNewsletterResponsePage"); if ($responsePage) { $redirectLink = $responsePage->RelativeLink(); } $this->controller->redirect($redirectLink); }
/** * No validation errors occured, so we register the customer and send * mails with further instructions for the double opt-in procedure. * * @param SS_HTTPRequest $data SS session data * @param Form $form the form object * @param array $formData CustomHTMLForms session data * @param bool $doRedirect Set to true to redirect after submitSuccess * * @return void * * @author Sebastian Diel <*****@*****.**>, * Roland Lehmann <*****@*****.**>, * Sascha Koehler <*****@*****.**> * @since 28.01.2015 */ protected function submitSuccess($data, $form, $formData, $doRedirect = true) { $anonymousCustomer = false; /* * Logout anonymous users and save their shoppingcart temporarily. */ if (SilvercartCustomer::currentUser()) { $anonymousCustomer = SilvercartCustomer::currentUser(); SilvercartCustomer::currentUser()->logOut(); } // Aggregate Data and set defaults $formData['MemberID'] = Member::currentUserID(); $formData['Locale'] = Translatable::get_current_locale(); if ($this->demandBirthdayDate()) { $formData['Birthday'] = $formData['BirthdayYear'] . '-' . $formData['BirthdayMonth'] . '-' . $formData['BirthdayDay']; if ($this->UseMinimumAgeToOrder()) { if (!SilvercartConfig::CheckMinimumAgeToOrder($formData['Birthday'])) { $this->errorMessages['BirthdayDay'] = array('message' => SilvercartConfig::MinimumAgeToOrderError(), 'fieldname' => _t('SilvercartPage.BIRTHDAY'), 'BirthdayDay' => array('message' => SilvercartConfig::MinimumAgeToOrderError())); $this->errorMessages['BirthdayMonth'] = array('message' => SilvercartConfig::MinimumAgeToOrderError(), 'fieldname' => _t('SilvercartPage.BIRTHDAY'), 'BirthdayMonth' => array('message' => SilvercartConfig::MinimumAgeToOrderError())); $this->errorMessages['BirthdayYear'] = array('message' => SilvercartConfig::MinimumAgeToOrderError(), 'fieldname' => _t('SilvercartPage.BIRTHDAY'), 'BirthdayYear' => array('message' => SilvercartConfig::MinimumAgeToOrderError())); $this->setSubmitSuccess(false); return $this->submitFailure($data, $form); } } } // Create new regular customer and perform a log in $customer = new Member(); // Pass shoppingcart to registered customer and delete the anonymous // customer. if ($anonymousCustomer) { $newShoppingCart = $anonymousCustomer->getCart()->duplicate(true); foreach ($anonymousCustomer->getCart()->SilvercartShoppingCartPositions() as $shoppingCartPosition) { $newShoppingCartPosition = $shoppingCartPosition->duplicate(false); $newShoppingCartPosition->SilvercartShoppingCartID = $newShoppingCart->ID; $newShoppingCartPosition->write(); $shoppingCartPosition->transferToNewPosition($newShoppingCartPosition); } $customer->SilvercartShoppingCartID = $newShoppingCart->ID; $anonymousCustomer->delete(); } $customer->castedUpdate($formData); $customer->write(); $customer->logIn(); $customer->changePassword($formData['Password']); $customerGroup = $this->getTargetCustomerGroup($formData); if ($customerGroup) { $customer->Groups()->add($customerGroup); } // Create ShippingAddress for customer and populate it with registration data $address = new SilvercartAddress(); $address->castedUpdate($formData); $country = DataObject::get_by_id('SilvercartCountry', (int) $formData['Country']); if ($country) { $address->SilvercartCountryID = $country->ID; } $address->write(); $this->extend('updateRegisteredAddress', $address, $data, $form, $formData); //connect the ShippingAddress and the InvoiceAddress to the customer $customer->SilvercartShippingAddressID = $address->ID; $customer->SilvercartInvoiceAddressID = $address->ID; $customer->SilvercartAddresses()->add($address); $customer->write(); // Remove from the anonymous newsletter recipients list if (SilvercartAnonymousNewsletterRecipient::doesExist($customer->Email)) { $recipient = SilvercartAnonymousNewsletterRecipient::getByEmailAddress($customer->Email); if ($recipient->NewsletterOptInStatus) { $customer->NewsletterOptInStatus = 1; $customer->NewsletterConfirmationHash = $recipient->NewsletterOptInConfirmationHash; $customer->write(); } SilvercartAnonymousNewsletterRecipient::removeByEmailAddress($customer->Email); } if ($customer->SubscribedToNewsletter && !$customer->NewsletterOptInStatus) { SilvercartNewsletter::subscribeRegisteredCustomer($customer); } $this->extend('updateRegisteredCustomer', $customer, $data, $form, $formData); if ($doRedirect) { // Redirect to welcome page if (array_key_exists('backlink', $formData) && !empty($formData['backlink'])) { $this->controller->redirect($formData['backlink']); } else { $this->controller->redirect($this->controller->PageByIdentifierCode('SilvercartRegisterConfirmationPage')->Link()); } } }