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); } }
public function save($con = null) { if ($this->getObject()->isNew()) { $signup = true; } else { $signup = false; } $object = parent::save(); // update profile $values = $this->getValues(); $profile = $object->getProfile(); // save and remove photo from values $photo = $values["profile"]["photo"]; unset($values["profile"]["photo"]); // update profile object $profile->fromArray($values["profile"], BasePeer::TYPE_FIELDNAME); $profile->setUser($object); // new photo?? if ($photo) { $fileName = $profile->getPhoto(false); if (!$fileName) { $fileName = $profile->generateAvatarName() . '.jpg'; } $photo->save(sfConfig::get('sf_userimage_dir') . DIRECTORY_SEPARATOR . $fileName); $profile->setPhoto($fileName); } if ($values["profile"]["remove_photo"]) { $fileName = $profile->getPhoto(false); if ($fileName) { $profile->setPhoto(null); $profile->save(); // remove from filesystem unlink(sfConfig::get('sf_userimage_dir') . DIRECTORY_SEPARATOR . $fileName); } else { $profile->save(); } } else { $profile->save(); } // if creating, setup email and permanent jotag if ($signup) { // setup email $email = new Email(); $email->setEmail($this->getValue('email')); $email->setIsConfirmed(true); $email->setIsPrimary(true); $email->setType(ContactPeer::TP_PERSONAL); $email->setUser($object); $email->save(); // generate JOTAG. $tag = new Tag(); $tag->setJotag($object->generateRandomJOTAG()); $tag->setIsPrimary(true); $tag->setStatus(TagPeer::ST_ACTIVE); $tag->setUser($object); // link primary email to tag $tm = new TagEmail(); $tm->setEmail($email); $tag->addTagEmail($tm); // save new tag $tag->save(); } return $object; }