Example #1
0
 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);
     }
 }