public function executeSignup($request) { // check invite id $this->invite = InvitePeer::getFromField(InvitePeer::ID, $request->getParameter('invite_id')); if (!$this->invite) { $this->invite = InvitePeer::getFromField(InvitePeer::ID, $this->getUser()->getInviteId()); } if ($request->isMethod('post')) { $this->form = new SignupForm(); // process signup $this->form->bind($request->getParameter('signup')); if ($this->form->isValid()) { $user = new User(); $profile = new Profile(); $email = new Email(); $tag = new Tag(); // setup profile $profile->setFirstName($this->form->getValue('first_name')); $profile->setLastName($this->form->getValue('last_name')); // set prefered language $current_language = LanguagePeer::retrieveByCulture($this->getUser()->getCulture()); if (!$current_language) { $current_language = LanguagePeer::getDefaultLanguage(); } $profile->setLanguage($current_language); // set email $email->setEmail($this->form->getValue('email')); $email->setIsConfirmed(false); $email->setIsPrimary(true); $email->setConfirmCode($email->generateConfirmCode()); $email->setType(ContactPeer::TP_PERSONAL); // setup new user $user->setPasswd($this->form->getValue('password')); // add profile and contact to user $user->addProfile($profile); $user->addEmail($email); if ($this->invite) { $user->setUserRelatedByInvitedBy($this->invite->getUser()); // add jotags to bookmark if ($this->invite->getInviteTagsJoinTag()) { foreach ($this->invite->getInviteTagsJoinTag() as $tagbm) { // add to bookmark $b = new Bookmark(); $b->setTag($tagbm->getTag()); $user->addBookmark($b); } } // delete invite from db $this->invite->delete(); // add initial credit to the user $user->setCredits(OptionPeer::retrieveOption('BONUS_INVITE_CREDIT')); } else { $user->setCredits(OptionPeer::retrieveOption('BONUS_INIT_CREDIT')); } // save $user->save(); $this->getUser()->clearInviteId(); // generate JOTAG. We must do it after save because we use ID in the algorithm $tag->setJotag($user->generateRandomJOTAG()); $tag->setIsPrimary(true); $tag->setStatus(TagPeer::ST_NEW); $tag->setBadge(BadgePeer::getDefaultBadge()); $tag->setUser($user); // link primary email to tag $tm = new TagEmail(); $tm->setEmail($email); $tag->addTagEmail($tm); // save new tag $tag->save(); // send confirmation email Mailer::sendEmail($email->getEmail(), 'signupConfirmation', array('user' => $user, 'email' => $email), $user->getPreferedLanguage()); $this->setMessage("SIGNUP", "SUCCESS", array($email->getEmail())); if (!$this->isWebserviceCall()) { $this->redirect('@homepage'); } } } else { $first = $last = $email = ""; if ($this->invite) { // pre-populate first/last name, if available from invite $first = $this->invite->getFirstName(); $last = $this->invite->getLastName(); $email = $this->invite->getEmail(); } $this->form = new SignupForm(array('first_name' => $first, 'last_name' => $last, 'email' => $email)); // set invite id, if available $this->getUser()->setInviteId($this->invite ? $this->invite->getId() : null); } }