PageRenderTime 25ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/venne/cms-module/CmsModule/Content/Presenters/RegistrationPresenter.php

https://bitbucket.org/iiic/iszp
PHP | 204 lines | 133 code | 44 blank | 27 comment | 15 complexity | d404716560ba8795be0a91a15b8a630e MD5 | raw file
  1. <?php
  2. /**
  3. * This file is part of the Venne:CMS (https://github.com/Venne)
  4. *
  5. * Copyright (c) 2011, 2012 Josef Kříž (http://www.josef-kriz.cz)
  6. *
  7. * For the full copyright and license information, please view
  8. * the file license.txt that was distributed with this source code.
  9. */
  10. namespace CmsModule\Content\Presenters;
  11. use Venne;
  12. use CmsModule\Security\SecurityManager;
  13. use Doctrine\ORM\EntityManager;
  14. use CmsModule\Content\Entities\RegistrationPageEntity;
  15. /**
  16. * @author Josef Kříž <pepakriz@gmail.com>
  17. */
  18. class RegistrationPresenter extends PagePresenter
  19. {
  20. /** @persistent */
  21. public $key;
  22. /** @var SecurityManager */
  23. protected $securityManager;
  24. /** @var EntityManager */
  25. protected $entityManager;
  26. public function startup()
  27. {
  28. parent::startup();
  29. if (!$this->page->userType) {
  30. $this->template->hideForm = true;
  31. $this->flashMessage('Userform has not been set', 'warning', false);
  32. }
  33. if ($this->key) {
  34. $this->setView('confirm');
  35. }
  36. }
  37. /**
  38. * @param SecurityManager $securityManager
  39. */
  40. public function injectSecurityManager(SecurityManager $securityManager)
  41. {
  42. $this->securityManager = $securityManager;
  43. }
  44. /**
  45. * @param EntityManager $entityManager
  46. */
  47. public function injectEntityManager(EntityManager $entityManager)
  48. {
  49. $this->entityManager = $entityManager;
  50. }
  51. /**
  52. * @return \Doctrine\ORM\EntityRepository
  53. */
  54. protected function getUserRepository()
  55. {
  56. return $this->entityManager->getRepository('\CmsModule\Security\Entities\UserEntity');
  57. }
  58. public function handleLoad($name)
  59. {
  60. /** @var $socialLogin \CmsModule\Security\ISocialLogin */
  61. $socialLogin = $this->securityManager->getSocialLoginByName($name);
  62. $identity = $socialLogin->authenticate(array());
  63. if ($identity) {
  64. $this->user->login($identity);
  65. $this->flashMessage('User is already registered');
  66. $this->redirect('this');
  67. }
  68. $formFactory = $this->securityManager->getFormFactoryByEntity($this->page->userType);
  69. if (!$formFactory instanceof \CmsModule\Content\IRegistrationFormFactory) {
  70. throw new \Nette\InvalidArgumentException("Form factory '" . get_class($formFactory) . "' is not istance of \CmsModule\Content\IRegistrationFormFactory");
  71. }
  72. $formFactory->setSocialData($this['form'], $socialLogin);
  73. if (!$socialLogin->getData()) {
  74. $this->redirectUrl($socialLogin->getLoginUrl());
  75. }
  76. if ($this->page->getSocialMode() === RegistrationPageEntity::SOCIAL_MODE_LOAD_AND_SAVE) {
  77. /** @var $form \Venne\Forms\Form */
  78. $form = $this['form'];
  79. $form->onSuccess = NULL;
  80. $form->setSubmittedBy($form->getSaveButton());
  81. $form->fireEvents();
  82. if ($form->isValid()) {
  83. $socialLogin->connectWithUser($form->getData());
  84. $identity = $socialLogin->authenticate(array());
  85. if ($identity) {
  86. $this->user->login($identity);
  87. $this->redirect('this');
  88. }
  89. }
  90. }
  91. }
  92. protected function createComponentForm()
  93. {
  94. $repository = $this->entityManager->getRepository($this->page->userType);
  95. $formFactory = $this->securityManager->getFormFactoryByEntity($this->page->userType);
  96. /** @var $entity \CmsModule\Security\Entities\UserEntity */
  97. $entity = $repository->createNew();
  98. if ($this->page->mode === RegistrationPageEntity::MODE_BASIC) {
  99. $entity->setEnable(true);
  100. } elseif ($this->page->mode === RegistrationPageEntity::MODE_MAIL) {
  101. $entity->setEnable(true);
  102. $entity->disableByKey();
  103. } elseif ($this->page->mode === RegistrationPageEntity::MODE_MAIL_CHECKUP) {
  104. $entity->disableByKey();
  105. }
  106. foreach ($this->page->roles as $role) {
  107. $entity->roleEntities[] = $role;
  108. }
  109. $form = $formFactory->invoke($entity);
  110. $form->onSuccess[] = $this->processSuccess;
  111. return $form;
  112. }
  113. public function processSuccess($form)
  114. {
  115. $this->flashMessage('Your registration is complete', 'success');
  116. // email
  117. if ($this->page->mode === RegistrationPageEntity::MODE_MAIL || $this->page->mode === RegistrationPageEntity::MODE_MAIL_CHECKUP) {
  118. $this->sendEmail($form);
  119. }
  120. $this->redirect('this');
  121. }
  122. public function sendEmail($form)
  123. {
  124. $user = $form->data;
  125. $absoluteUrls = $this->absoluteUrls;
  126. $this->absoluteUrls = true;
  127. $link = $this->link("this", array("key" => $user->key));
  128. $this->absoluteUrls = $absoluteUrls;
  129. $text = $this->page->email;
  130. $text = strtr($text, array(
  131. '{$email}' => $user->email,
  132. '{$password}' => $form["password"]->value,
  133. '{$link}' => '<a href="' . $link . '">' . $link . '</a>'
  134. ));
  135. $mail = $this->context->nette->createMail();
  136. $mail->setFrom("{$this->page->sender} <{$this->page->mailFrom}>")
  137. ->addTo($user->email)
  138. ->setSubject($this->page->subject)
  139. ->setHTMLBody($text)
  140. ->send();
  141. }
  142. public function renderDefault()
  143. {
  144. $this->template->socialLogins = $this->securityManager->getSocialLogins();
  145. }
  146. public function renderConfirm()
  147. {
  148. if ($this->page->mode === RegistrationPageEntity::MODE_MAIL || $this->page->mode === RegistrationPageEntity::MODE_MAIL_CHECKUP) {
  149. $repository = $this->entityManager->getRepository($this->page->userType);
  150. $user = $repository->findOneByKey($this->key);
  151. if (!$user) {
  152. throw new \Nette\Application\BadRequestException;
  153. } else {
  154. $user->enableByKey($this->key);
  155. $repository->save($user);
  156. $this->template->user = $user;
  157. }
  158. }
  159. }
  160. }