* @version SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $ */ class usersActions extends sfActions { public function executeRegistrationAgency(sfWebRequest $request) { $this->userForm = new FrontendUserForm(); $this->profileForm = new FrontendAgencyProfileForm(); $this->processForms($request); $this->setTemplate('agencyRegistration'); } public function executeRegistrationPerson(sfWebRequest $request) { $this->userForm = new FrontendUserForm(); $this->profileForm = new FrontendPersonProfileForm(); $this->jobForm = new DemandJobForm(); $this->processForms($request); $this->setTemplate('personRegistration'); } protected function processForms(sfWebRequest $request) { if($request->isMethod('post') || $request->isMethod('put')) { $userData = $request->getParameter($this->userForm->getName()); $profileData = $request->getParameter($this->profileForm->getName()); // var_dump($profileData); $userData['email_address'] = $profileData['mail']; $this->userForm->bind($userData, $request->getFiles($this->userForm->getName())); $this->profileForm->bind($profileData, $request->getFiles($this->profileForm->getName())); if(isset($this->jobForm)) { $jobData = $request->getParameter($this->jobForm->getName()); $this->jobForm->bind($jobData); } if($this->userForm->isValid() && $this->profileForm->isValid() && (!isset($this->jobForm) || $this->jobForm->isValid())) { $this->user = $this->userForm->save(); $profileData['user_id'] = $this->user->getId(); $this->profileForm->bind($profileData, $request->getFiles($this->profileForm->getName())); $this->profile = $this->profileForm->save(); if(isset($this->jobForm)) { $jobData['profile_id'] = $this->profile->getId(); $this->jobForm->bind($jobData); $this->job = $this->jobForm->save(); // Mail adminovi $this->getMailer()->composeAndSend( array(sfConfig::get('app_mail_from_address') => sfConfig::get('app_mail_from_name')), sfConfig::get('app_mail_to_address'), 'Vytvoření nového inzerátu | '.sfConfig::get('app_title'), $this->getPartial('jobs/newJobMailBody', array('job' => $this->job)) ); } if($this->getActionName() == 'update') { $this->getUser()->addMessage(__('Změny uloženy.')); $this->redirect($this->generateUrl('user_update')); } else { $this->getMailer()->composeAndSend( array(sfConfig::get('app_mail_from_address') => sfConfig::get('app_mail_from_name')), $this->profile->getMail(), 'Potvrzení registrace | '.sfConfig::get('app_title'), $this->getComponent($this->getModuleName(), 'registrationMailBody', array('username' => $userData['username'], 'password' => $userData['password'], 'profile' => $this->profile)) ); if($this->profile->isAgency()) { $this->user->setIsActive(true); $this->user->save(); $this->getUser()->addMessage(__('Registrace proběhla v pořádku, na email Vám byly odeslány přihlašovací údaje. Nyní jste přihlášen/a.')); $this->getUser()->signIn($this->user); $this->profile->setPrepaymentActive(true); $this->profile->save(); // Automatické nastavení tarifu if(saSettings::get('auto_tarif', false)) { $dates = saSettings::get('auto_tarif_daterange'); $this->profile->setPrepaymentTypeId(PrepaymentType::TYPE_DATE); $this->profile->setPrepaymentFrom($dates['from']); $this->profile->setPrepaymentTo($dates['to']); $this->profile->setPrepaymentActive(true); $this->profile->save(); } $this->getMailer()->composeAndSend( array(sfConfig::get('app_mail_from_address') => sfConfig::get('app_mail_from_name')), sfConfig::get('app_mail_to_address'), 'Registrace nové instituce | '.sfConfig::get('app_title'), $this->getPartial($this->getModuleName().'/newAgencyMailBody', array('profile' => $this->profile)) ); $this->redirect($this->generateUrl('user_my_jobs')); } else { $this->user->setIsActive(false); $this->user->save(); $this->job->setIsActive(false); $this->job->save(); $this->getUser()->addMessage(__('Děkujeme, registraci nyní musíte potvrdit kliknutím na odkaz který jsme Vám odeslali na e-mail.')); $this->redirect($this->generateUrl('homepage')); } } } } } /** * Vytvoří fakturu pro uživatele zadajici o predplatne * * @param Profile $profile */ protected function createPrepaymentRequestCountInvoice(Profile $profile) { if($profile->isPrepaymentCountRequester() || $profile->isPrepaymentRowsRequester()) { $count = 0; foreach($profile->getPrepaymentCounts() as $pc) { if($profile->isPrepaymentCountRequester()) { $count += $pc->getRequestCount(); } elseif($profile->isPrepaymentRowsRequester()) { $count += $pc->getRequestRows(); } } if($count == 0) { return; } $invoice = new Invoice(); $invoice->setDefaultValues(); $invoice->setSubscriber($profile); $invoice->save(); $country = $profile->getCountry(); foreach($profile->getPrepaymentCounts() as $pc) { if($profile->isPrepaymentCountRequester()) { $count = $pc->getRequestCount(); } elseif($profile->isPrepaymentRowsRequester()) { $count = $pc->getRequestRows(); } $style = $pc->getJobStyle(); $price = PrepaymentCountTable::getPrice($style, $country, $count); if($price == 0) { continue; } $item = new InvoiceItem(); $item->setDefaultValues(); $item->setInvoiceId($invoice->getId()); $item->setProfileId($profile->getId()); if($profile->isPrepaymentCountRequester()) { $item->setText('Předplacené inzeráty typu: '.$style->getName()); } elseif($profile->isPrepaymentRowsRequester()) { $item->setText('Předplacené řádky inzerátu typu: '.$style->getName()); } $item->setAmount($count); $item->setPriceOne($price / $count); $item->setCurrency($style->getPriceRelation($country)->getCurrency()); $item->save(); } $this->getMailer()->composeAndSend( array(sfConfig::get('app_mail_from_address') => sfConfig::get('app_mail_from_name')), $profile->getMail(), 'Objednání předplatného | '.sfConfig::get('app_title'), $this->getPartial($this->getModuleName().'/prepaymentCountInvoiceMailBody', array('profile' => $profile, 'invoice' => $invoice)) ); } } public function executeValidate(sfWebRequest $request) { $this->forward404Unless($this->user = $this->getRoute()->getObject()); if($this->user->getToken() == $request->getParameter('token')) { $this->user->setIsActive(true); if($this->user->hasProfile() && $this->user->getProfile()->isPerson()) { $this->user->getProfile()->activateAllJobs(); } $this->user->save(); $this->getMailer()->composeAndSend( array(sfConfig::get('app_mail_from_address') => sfConfig::get('app_mail_from_name')), sfConfig::get('app_mail_to_address'), 'Registrace nového uživatele | '.sfConfig::get('app_title'), $this->getPartial($this->getModuleName().'/newUserMailBody', array('profile' => $this->user->getProfile())) ); $this->getUser()->addMessage(__('Váš účet je nyní aktivní.')); $this->getUser()->signIn($this->user); $this->redirect($this->generateUrl('user_my_jobs')); } $this->getUser()->addMessage('Nesprávný token.'); $this->redirect($this->generateUrl('homepage')); } public function executeMyJobs(sfWebRequest $request) { $this->pager = new sfDoctrinePager('Job'); $this->pager->setMaxPerPage($request->getParameter('pagesize', sfConfig::get('app_default_pagesize'))); $this->pager->setPage($this->getRequest()->getParameter('page', 1)); $this->profile = $this->getUser()->getProfile(); $query = Doctrine::getTable('Job')->getJobsByProfileQuery($this->profile); $this->pager->setQuery($query); $this->pager->init(); $this->setTemplate('list', 'jobs'); } public function executeUpdate(sfWebRequest $request) { $this->profile = $this->getUser()->getProfile(); if($this->profile->isPerson()) { $this->profileForm = new FrontendPersonProfileForm($this->profile); } elseif($this->profile->isAgency()) { $this->profileForm = new FrontendAgencyProfileForm($this->profile); } $this->userForm = new FrontendUserForm($this->profile->getUser()); unset($this->profileForm['agree']); $this->processForms($request); } public function executeRequestPassword(sfWebRequest $request) { $this->form = new RequestPasswordForm(); if($request->isMethod('post')) { $this->form->bind($request->getParameter($this->form->getName())); if($this->form->isValid()) { $user = $this->form->getUser(); $this->processNewPassword($user); $this->redirect($this->generateUrl('homepage')); } } } protected function processNewPassword(sfGuardUser $user) { $new_pass = substr(md5(uniqid()), 0, 6); $user->setPassword($new_pass); $user->save(); $this->getMailer()->composeAndSend( array(sfConfig::get('app_mail_from_address') => sfConfig::get('app_mail_from_name')), $user->getEmailAddress(), 'Nové heslo | '.sfConfig::get('app_title'), $this->getComponent($this->getModuleName(), 'requestPasswordMailBody', array('username' => $user->getUsername(), 'password' => $new_pass)) ); $this->getUser()->addMessage(__('Na e-mail Vám bylo zasláno nové heslo.')); } public function executeGetCountPricesJSON(sfWebRequest $request) { $prices = array(); $counts = $request->getParameter('counts', array()); // var_dump($counts); // die(); $country = Doctrine::getTable('Country')->findOneById($request->getParameter('country')); $style_table = Doctrine::getTable('JobStyle'); $all = 0; for($i=1;$i<=3;$i++) { $style = $style_table->findOneById($i); $prices[$style->getId()] = PrepaymentCountTable::getPrice($style, $country, $counts[$i]); $all += $prices[$style->getId()]; } $result = array('prices' => $prices, 'prices_all' => $all); echo json_encode($result); return sfView::NONE; } public function executePrepaymentRequest(sfWebRequest $request) { $this->profile = $this->getUser()->getProfile(); $this->forward404If($this->profile->isPrepaymentCountRequester()); $this->form = new PrepayRequestProfileForm($this->profile); if($request->isMethod('put')) { $this->form->bind($request->getParameter($this->form->getName())); if($this->form->isValid()) { $this->form->save(); $this->createPrepaymentRequestCountInvoice($this->profile); $this->getUser()->addMessage(__('Objednávka předplatného byla přijata.')); $this->redirect($this->generateUrl('homepage')); } } } }