Пример #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);
     }
 }
Пример #2
0
 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;
 }