<?php
namespace JF\JuridicusBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Process\Process;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use JF\JuridicusBundle\Entity\Kunde;
use JF\JuridicusBundle\Entity\KundePruefung;
use JF\JuridicusBundle\Entity\PrueferEmail;
use JF\JuridicusBundle\Entity\Pruefer;
use JF\JuridicusBundle\Entity\PrueferUser;
use JF\JuridicusBundle\Entity\Dienststellung;
use JF\JuridicusBundle\Entity\Titel;
use JF\JuridicusBundle\Entity\User;
use JF\JuridicusBundle\Entity\Pruefung;
use JF\JuridicusBundle\Entity\PdfProtokollmappePruefer;
use JF\JuridicusBundle\Entity\ProtokollInfothekPruefer;
use JF\JuridicusBundle\Entity\PdfProtokollInfothekPruefer;
use JF\JuridicusBundle\Entity\ProtokollInfothekPruefung;
use JF\JuridicusBundle\Entity\Download;
use JF\JuridicusBundle\Entity\Pruefungsamt;
use JF\JuridicusBundle\Entity\Bundesland;
use JF\JuridicusBundle\Form\PrueferType;
use JF\JuridicusBundle\Form\PrueferUserType;
use JF\JuridicusBundle\Form\PruefungsamtPreSelectType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Swift_Mailer;
use Swift_Message;
use Doctrine\ORM\EntityManagerInterface;
use JF\JuridicusBundle\Services\Sms;
use JF\JuridicusBundle\Entity\MailTemplate;
/**
* Pruefer controller.
*/
class PrueferController extends AbstractController
{
/**
* Lists all Pruefungsamt entities.
*
* @Route("/pruefungsprotokolle-{examNr}-staatsexamen", name="pruefer")
*/
public function indexAction($examNr = 1)
{
$em = $this->getDoctrine()->getManager();
if ($examNr == 1) {
$examType = Pruefung::TYP_EXAMEN_1;
} else {
$examType = Pruefung::TYP_EXAMEN_2;
}
$pip_repo = $em->getRepository(ProtokollInfothekPruefer::class);
$statistik = $pip_repo->filterParagraphsByExamen($examType);
$bundeslaender = $em->getRepository(Bundesland::class)->findAll();
$entities = $em->getRepository(Pruefung::class)->findNewest(8, $examType);
$entities_indexed1 = array();
$entities_indexed2 = array();
$index = 0;
foreach ($entities as $entity) {
$datum = $entity->getDatum()->format('d.m.Y');
if ($index%2 == 0) {
$entities_indexed1[$datum][] = $entity;
} else {
$entities_indexed2[$datum][] = $entity;
}
$index++;
}
$filter_form = $this->createParagraphFilterForm($examNr);
return $this->render('@JFJuridicusBundle/Pruefer/pruefungsamt_index.html.twig', array(
'statistik' => $statistik,
'filter_form' => $filter_form->createView(),
'entities_indexed1' => $entities_indexed1,
'entities_indexed2' => $entities_indexed2,
'examType' => $examType,
'entities' => $bundeslaender,
));
}
/**
*
* @param array $data
* @return \Symfony\Component\Form\Form
*/
private function createParagraphFilterForm($examNr)
{
$data = array('examen'=>$examNr);
return $this->createFormBuilder($data)
->add('bundesland', EntityType::class, array(
'label' => false,
'class' => 'JF\JuridicusBundle\Entity\Bundesland',
'placeholder' => 'Bundesland wählen...',
'required' => false,
))
->add('fach', ChoiceType::class, array(
'label' => false,
'placeholder' => 'Fach auswählen...',
'choices' => array(
'Strafrecht' => 'Strafrecht',
'Öffentliches Recht' => 'Öffentliches Recht',
'Zivilrecht' => 'Zivilrecht',
'Arbeitsrecht' => 'Arbeitsrecht',
'Verwaltungsrecht' => 'Verwaltungsrecht',
),
'required' => false,
))
->add('startdatum', DateType::class, array(
'label' => false,
'placeholder' => 'Zeitraum von',
'widget' => 'single_text',
//'format' => 'dd.MM.yyyy',
'required' => false,
'attr' => ['class' => 'js-datepicker', 'placeholder' => 'Zeitraum von ...',],
))
->add('endedatum', DateType::class, array(
'label' => false,
'placeholder' => 'bis ...',
'widget' => 'single_text',
//'format' => 'dd.MM.yyyy',
'placeholder' => '',
'required' => false,
'attr' => ['class' => 'js-datepicker', 'placeholder' => 'bis',],
))
->add('examen', HiddenType::class, array(
'label' => false,
'required' => false,
))
->getForm();
}
/**
* Finds and displays Pruefer entities for a given Prüfungsamt
*
* @Route("/pruefungsprotokolle-{examen}-staatsexamen/{bslug}",
* name="pruefer_index_pruefungsamt",
* requirements={"examen"="[12]"}
* )
*/
public function showPruefungsamtAction($bslug, $examen)
{
$em = $this->getDoctrine()->getManager();
$pruefungsamt = $em->getRepository(Pruefungsamt::class)->findByExamenAndBSlug($examen, $bslug);
if (!$pruefungsamt) {
throw $this->createNotFoundException('Prüfungsamt wurde nicht gefunden.');
}
$pruefer_liste = $em->getRepository(Pruefer::class)
->findByPruefungsamt($pruefungsamt->getId(), $pruefungsamt->hasVollbestand());
$statistik = $em->getRepository(ProtokollInfothekPruefer::class)->filterParagraphsByPruefungsamt($pruefungsamt);
return $this->render('@JFJuridicusBundle/Pruefer/index.html.twig', array(
'pruefungsamt' => $pruefungsamt,
'pruefer_liste' => $pruefer_liste,
'typ_options' => Pruefung::getTypOptions(),
'statistik' => $statistik,
));
}
/**
* Finds and displays a Pruefer entity.
*
* @Route("/pruefungsprotokolle-{examen}-staatsexamen/{bslug}/{pslug}_pruefer_protokolle_pruefung_jura",
* name="pruefer_show",
* requirements={"examen"="[12]"}
* )
*/
public function showAction($examen, $bslug, $pslug)
{
$em = $this->getDoctrine()->getManager();
$bundesland = $em->getRepository(Bundesland::class)->findOneBySlug($bslug);
if (!$bundesland) {
throw $this->createNotFoundException('Bundesland wurde nicht gefunden.');
}
$pruefungsamt = $em->getRepository(Pruefungsamt::class)->findByExamenAndBSlug($examen, $bslug);
if (!$pruefungsamt) {
throw $this->createNotFoundException('Prüfungsamt wurde nicht gefunden.');
}
// Bei Vollbestand werden Prüfer ohne Protokolle umgeleitet - eventuell ändern?
$pruefer = $em->getRepository(Pruefer::class)
->findByPruefungsamtAndSlug($pruefungsamt->getId(), $pslug, $pruefungsamt->hasVollbestand());
if (!$pruefer) {
return $this->redirect($this->generateUrl('pruefer_index_pruefungsamt', array(
'examen' => $examen, 'bslug' => $bslug,
)));
}
$kunde = new Kunde();
$kunde->setBundesland($bundesland);
$kunde->setExamen($examen);
$form = $this->createForm(PruefungsamtPreSelectType::class, $kunde);
return $this->render('@JFJuridicusBundle/Pruefer/show.html.twig', array(
'bundesland' => $bundesland,
'examen' => $examen,
'pruefungsamt' => $pruefungsamt,
'pruefer' => $pruefer,
'form' => $form->createView(),
'typ_options' => Pruefung::getTypOptions(),
));
}
/**
* Finds and displays a Pruefer and shows download text
*
* @Route("/pruefer/download/success", name="pruefer_download_success")
* @Method({"POST"})
*/
public function downloadSuccessAction(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_KUNDE');
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$kunde = $user->getKunde();
/* @var $kunde \JF\JuridicusBundle\Entity\Kunde */
$pruefer_id = $request->request->getInt('pruefer_id');
$pruefung_id = $request->request->getInt('pruefung_id');
$examen = $request->request->getInt('examen');
if (!$pruefer_id or !$examen or !$pruefung_id) {
throw new AccessDeniedException();
}
$pruefer = $em->getRepository(Pruefer::class)->find($pruefer_id);
if (!$pruefer) {
throw $this->createNotFoundException('Prüfer nicht gefunden');
}
if ($pruefer->getAliasFor()) {
$pruefer = $pruefer->getAliasFor();
}
// Berechtigung checken
$buchung = $em->getRepository(KundePruefung::class)->getDownloadPermission($kunde->getId(), $pruefer->getId());
/* @var $buchung \JF\JuridicusBundle\Entity\KundePruefung */
if (!$buchung) {
// Donwload nicht erlaubt
throw new AccessDeniedException();
} else if ($buchung->needsFacebookPost()) {
// umleiten
return $this->redirect($this->generateUrl('facebook_write_post', array(
'id' => $buchung->getId(),
'pruefer_id' => $pruefer_id,
'pruefung_id' => $pruefung_id,
'examen' => $examen
)));
} else if ($buchung->needsKlausurprotokoll()) {
// umleiten
return $this->redirect($this->generateUrl('protokoll_klausur_edit', array('id' => $buchung->getId())));
} else {
// Download erlaubt
$pdf = $em->getRepository(PdfProtokollmappePruefer::class)->findOneByPrueferAndExamen($pruefer->getId(), $examen);
if (!$pdf) {
throw $this->createNotFoundException('Protokolldatei nicht gefunden');
}
}
return $this->render("@JFJuridicusBundle/Pruefer/download_success.html.twig", array(
'pruefer' => $pruefer,
'examen' => $examen,
'pdf_id' => $pdf->getId()
));
}
/**
* shows download error text
*
* @Route("/pruefer/download/error", name="pruefer_download_error")
*/
public function downloadErrorAction(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_KUNDE');
return $this->render('@JFJuridicusBundle/Pruefer/download_error.html.twig', array());
}
/**
* @Route("/pruefer/download/success/protokollmappe-{id}.pdf", name="pruefer_download")
*/
public function downloadAction(PdfProtokollmappePruefer $pdf)
{
$this->denyAccessUnlessGranted('ROLE_KUNDE');
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$kunde = $user->getKunde();
/* @var $kunde \JF\JuridicusBundle\Entity\Kunde */
$pruefer = $pdf->getPruefer();
// Berechtigung checken
$buchung = $em->getRepository(KundePruefung::class)->getDownloadPermission($kunde->getId(), $pruefer->getId());
/* @var $buchung \JF\JuridicusBundle\Entity\KundePruefung */
if (!$buchung || $buchung->needsKlausurprotokoll()) {
throw new AccessDeniedException();
}
// Dateiname für private Kopie
$dir = $pdf->getDir();
$stamped_path = tempnam($dir, 'protokoll_stamped_');
//print_r($kunde->getPdfStempel()->getPath());
//exit();
// Protokoll stempeln
$process = new Process([
'pdftk',
$pdf->getPath(),
'stamp',
$kunde->getPdfStempel()->getPath(),
'output',
$stamped_path,
'owner_pw',
'stucha5Ac3ep', // später: $bag->get('tcpdf_owner_pw')
'allow',
'printing',
]);
$process->run();
if (!$process->isSuccessful()) {
var_dump($process->getErrorOutput());
exit();
return $this->redirect($this->generateUrl('pruefer_download_error'));
}
$download = $em->getRepository(Download::class)->findOneBy(array(
'kunde' => $kunde->getId(), 'pruefer' => $pruefer->getId(), 'examen' => $pdf->getExamen()
));
/* @var $download \JF\JuridicusBundle\Entity\Download */
if (!$download) {
$download = new Download();
$download->setKunde($kunde)->setPruefer($pruefer)->setExamen($pdf->getExamen());
}
$download->setBuchung($buchung);
$download->setAnzahlProtokolle($pdf->getAnzahlProtokolle());
$em->persist($download);
$em->flush();
$filename = sprintf('%s-%d-examen.pdf', $pruefer->getSlug(), $pdf->getExamen());
$response = new Response();
$disposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename);
$response->headers->set('Content-Disposition', $disposition);
$response->headers->set('Content-Type', $pdf->getMimeType());
$response->setContent(@file_get_contents($stamped_path));
unlink($stamped_path);
return $response;
}
/**
* Displays a form to create a new Pruefer entity.
*
* @Route("/create/pruefer/ajax/new", name="pruefer_ajax_new")
*/
public function newAjaxAction()
{
$this->denyAccessUnlessGranted('ROLE_KUNDE');
$em = $this->getDoctrine()->getManager();
$dienststellung_typeaheads = $em->getRepository(Dienststellung::class)->getTypeaheads();
$titel_typeaheads = $em->getRepository(Titel::class)->getTypeaheads();
$entity = new Pruefer();
$form = $this->createForm(PrueferType::class, $entity);
return $this->render("@JFJuridicusBundle/Pruefer/new.html.twig", array(
'entity' => $entity,
'form' => $form->createView(),
'dienststellungNames' => array_keys($dienststellung_typeaheads),
'titelNames' => array_keys($titel_typeaheads),
));
}
/**
* Creates a new Pruefer entity per ajax
*
* @Route("/create/pruefer/ajax/create", name="pruefer_ajax_create")
* @Method({"POST"})
*/
public function createAjaxAction(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_KUNDE');
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$kunde = $user->getKunde();
$pruefungsamt = $em->getRepository(Pruefungsamt::class)->findOneByUser($user->getId());
$entity = new Pruefer();
$entity->setQuelle('man');
$entity->setCreator($user);
$pruefungsamt_candidates = $kunde->getBundesland()->getPruefungsaemter();
foreach ($pruefungsamt_candidates as $candidate) {
$entity->addPruefungsaemter($candidate);
}
$form = $this->createForm(PrueferType::class, $entity);
$form->handleRequest($request); //changedFrom bind
if ($form->isValid()) {
// Prüfungsämter abgleichen
$existing_pruefer = $em->getRepository(Pruefer::class)->findExisting($entity, $pruefungsamt);
if (empty($existing_pruefer)) {
$entity->setAliasFor(
$em->getRepository(Pruefer::class)->findAlias($entity, null, $pruefungsamt)
);
if (!$entity->getSlug()) {
$entity->setSlug($this->slugify($entity->getVorname().' '.$entity->getNachname()));
}
$em->persist($entity);
$em->flush();
} else {
foreach ($pruefungsamt_candidates as $candidate) {
$candidate->removePruefer($entity);
}
foreach ($existing_pruefer as $p) {
/* @var $p \JF\JuridicusBundle\Entity\Pruefer */
foreach ($pruefungsamt_candidates as $candidate) {
if (!$p->getPruefungsaemter()->contains($candidate)) {
$p->addPruefungsaemter($candidate);
}
}
$em->persist($p);
}
$em->flush();
$entity = $existing_pruefer[0];
}
return new JsonResponse(array(
'success' => true,
'objectId' => $entity->getId(),
'objectName' => $entity->getFullTextWithOrt()
));
}
$dienststellung_typeaheads = $em->getRepository(Dienststellung::class)->getTypeaheads();
$titel_typeaheads = $em->getRepository(Titel::class)->getTypeaheads();
$html = $this->get('templating')->render("@JFJuridicusBundle/Pruefer/new.html.twig", array(
'entity' => $entity,
'form' => $form->createView(),
'dienststellungNames' => array_keys($dienststellung_typeaheads),
'titelNames' => array_keys($titel_typeaheads),
));
return new JsonResponse(array(
'success' => false,
'html' => $html
));
}
/**
*
* @param string $text
* @param string $style 'lower'|'upper'
* @return string
*/
public static function slugify($text, $style = NULL)
{
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
if ($style == 'lower') {
// lowercase
$text = strtolower($text);
} elseif ($style == 'upper') {
// uppercase
$text = strtoupper($text);
}
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
if (empty($text)) {
return 'n-a';
}
return $text;
}
/**
* Lists all Pruefungsamt entities.
* @Method({"GET"})
* @Route("/pruefer/protokolle", name="pruefer_protokolle")
*/
public function prueferBereichAction()
{
$this->denyAccessUnlessGranted('ROLE_PRUEFER');
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$prueferUser = $em->getRepository(PrueferUser::class)->findOneByUser($user);
if (!$prueferUser) {
return $this->render('@JFJuridicusBundle/PrueferBereich/not_yet_verified.html.twig', array(
));
}
$pruefer = $prueferUser->getPruefer();
if (!$pruefer) {
return $this->render('@JFJuridicusBundle/PrueferBereich/not_yet_verified.html.twig', array(
));
}
$lastDate = new \DateTime("01-01-2011");
//$output->writeln("Prüfer: ".$pruefer->getId()." Pruefungen: ".count($pruefer->getPrueferPruefungen()));
foreach($pruefer->getPrueferPruefungen() as $prueferPruefung) {
if ($lastDate < $prueferPruefung->getPruefung()->getDatum()) {
//prüfe ob dazu auch ein Protokoll gibt
$infothekPruefung = $em->getRepository(ProtokollInfothekPruefung::class)->findBy(['pruefung'=>$prueferPruefung->getPruefung()]);
if($infothekPruefung) {
$lastDate = $prueferPruefung->getPruefung()->getDatum();
}
}
}
foreach($pruefer->getAliases() as $allias) {
//$output->writeln("Alias: ".$allias->getId()." Pruefungen: ".count($allias->getPrueferPruefungen()));
foreach($allias->getPrueferPruefungen() as $prueferPruefung) {
if ($lastDate < $prueferPruefung->getPruefung()->getDatum()) {
$infothekPruefung = $em->getRepository(ProtokollInfothekPruefung::class)->findBy(['pruefung'=>$prueferPruefung->getPruefung()]);
if($infothekPruefung) {
$lastDate = $prueferPruefung->getPruefung()->getDatum();
}
}
}
}
//Letztes Protokoll
//$lastProtocol = $em->getRepository('JFJuridicusBundle:Pruefer')->findLastProtocol($pruefer);
$pdf1Exam = $em->getRepository(PdfProtokollmappePruefer::class)->findOneByPrueferAndExamen($pruefer->getId(), 1);
$pdf2Exam = $em->getRepository(PdfProtokollmappePruefer::class)->findOneByPrueferAndExamen($pruefer->getId(), 2);
return $this->render('@JFJuridicusBundle/PrueferBereich/index.html.twig', array(
"lastProtocol" => $lastDate,
"pruererUser" => $prueferUser,
"pruefer" => $pruefer,
"pdf1Exam" => $pdf1Exam,
"pdf2Exam" => $pdf2Exam
));
}
/**
* @Method({"GET"})
* @Route("/pruefer/protokolle/download/{exam}", name="pruefer_protokolle_download")
*/
public function prueferBereichDownloadAction($exam) {
$this->denyAccessUnlessGranted('ROLE_PRUEFER');
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$prueferUser = $em->getRepository(PrueferUser::class)->findOneByUser($user);
$pruefer = $prueferUser->getPruefer();
if (!$pruefer) {
throw $this->createNotFoundException('Pruefer noch nicht verifiziert');
}
// Download erlaubt
$pdf = $em->getRepository(PdfProtokollmappePruefer::class)->findOneByPrueferAndExamen($pruefer->getId(), $exam);
return $pdf->createResponse();
}
/**
* @Method({"GET"})
* @Route("/pruefer/registration", name="pruefer_registration")
*/
public function prueferRegistrationAction()
{
$form = $this->createForm(PrueferUserType::class, new PrueferUser());
return $this->render('@JFJuridicusBundle/PrueferBereich/registration.html.twig', array(
"form" => $form->createView()
));
}
/**
* @Method({"POST"})
* @Route("/pruefer/registration/save", name="pruefer_registration_save")
*/
public function prueferRegistrationSaveAction(Request $request)
{
$form = $this->createForm(PrueferUserType::class, new PrueferUser()); //changedFrom
$form->handleRequest($request); //changedFrom bind
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$prueferUser = $form->getData();
//dump($prueferUser);
//früher fos_user - nicht sicher ob es jetzt user ist Hier [TODO] - wie war unterschied fos_user und prueferUser?
$user = $em->getRepository(User::class)->findOneBy(['email'=>$prueferUser->getEmail()]);
$prueferUserOld = $em->getRepository(PrueferUser::class)->findOneByEmail($prueferUser->getEmail());
if ($prueferUserOld) {
return $this->render('@JFJuridicusBundle/PrueferBereich/email_in_use.html.twig', array(
));
//throw $this->createNotFoundException('Die von Ihnen genutzte E-Mail-Adresse ist bei juridicus bereits registriert. Bitte nutzen Sie die „Passwort vergessen“- Funktion. Sollte Ihnen wider Erwarten kein neues Passwort zugestellt werden, nehmen Sie bitte über info@juridicus.de Kontakt mit uns auf.');
}
// alten User ggfs. umbiegen
if ($user) {
$kunde_old = $user->getKunde();
if ($kunde_old) {
$kunde_old->setUser(null);
$em->persist($kunde_old);
$em->flush();
} else {
$user->addRole("ROLE_PRUEFER");
}
} else {
// entsprechenden User neu erstellen
$user = new User();
$user->addRole("ROLE_PRUEFER");
$user->setUsername($prueferUser->getEmail());
$user->setEmail($prueferUser->getEmail());
$user->setPlainPassword(substr(uniqid(md5(rand())), 8, 8));
}
$token = uniqid(md5(rand()));
$user->setConfirmationToken($token);
$user->setEnabled(false);
$em->persist($user);
$prueferUser->setUser($user);
$em->persist($prueferUser);
$em->flush();
// finde neuestes Template
$template = $em->getRepository(MailTemplate::class)->findCurrentByTyp(PrueferEmail::PRUEFER_BEREICH_REGISTRIERUNG);
$link = $this->generateUrl('pruefer_registration_activate', array('token' => $token), UrlGeneratorInterface::ABSOLUTE_URL); //chagngedFrom true
$replacements = array(
'vorname' => $prueferUser->getVorname(),
'nachname' => $prueferUser->getNachname(),
'titel' => $prueferUser->getTitel(),
'email' => $prueferUser->getEmail(),
// 'handynummer' => $prueferUser->getHandynummer(),
'link' => $link
);
$this->logger->info(sprintf('Link: %s ', $link));
$mailerBcc = $this->getParameter('mailer_bcc');
$mailUser = $this->getParameter('mailer_user');
$message = (new Swift_Message($template->getBetreff()))
->setFrom(array($mailUser => 'Juridicus'))
->setReplyTo('info@juridicus.de')
->setTo($prueferUser->getEmail())
->setBcc('info@juridicus.de')
->setBody($template->replace($replacements), 'text/html')
;
if (isset($mailerBcc)) {
$message->setBcc(array($mailerBcc));
}
if ($this->mailer->send($message)) {
// Versand speichern
$email = new PrueferEmail();
$email
->setTyp(PrueferEmail::PRUEFER_BEREICH_REGISTRIERUNG)
->setPrueferUser($prueferUser)
;
$em->persist($email);
$em->flush();
$this->get('session')->set('registration_email_success', $prueferUser->getEmail());
return $this->redirect($this->generateUrl('pruefer_registration_email_success'));
} else {
$this->get('session')->set('registration_email_error', $prueferUser->getEmail());
return $this->redirect($this->generateUrl('pruefer_registration_email_error'));
}
}
return $this->render('@JFJuridicusBundle/PrueferBereich/registration.html.twig', array(
"form" => $form->createView()
));
}
/**
* Tell the user to check his email provider
*
* @Route("/pruefer/email/success", name="pruefer_registration_email_success")
*/
public function prueferEmailSuccessAction()
{
$user_manager = $this->container->get('fos_user.user_manager');
$session = $this->container->get('session');
$email = $session->get('registration_email_success');
$session->remove('registration_email_success');
if (empty($email)) {
// the user does not come from the sendEmail action
return $this->redirect($this->generateUrl('homepage'));
}
return $this->render('@JFJuridicusBundle/PrueferBereich/email_success.html.twig', array(
'email' => $email
));
}
/**
* Tell the prueferUser that email sending failed
*
* @Route("/pruefer/email/error", name="pruefer_registration_email_error")
*/
public function prueferEmailErrorAction()
{
$user_manager = $this->container->get('fos_user.user_manager');
$session = $this->container->get('session');
$email = $session->get('registration_email_error');
$session->remove('registration_email_error');
if (empty($email)) {
// the user does not come from the sendEmail action
return $this->redirect($this->generateUrl('homepage'));
}
return $this->render('@JFJuridicusBundle/PrueferBereich/email_error.html.twig', array(
'email' => $email
));
}
/**
* Tell the user to check his sms
*
* @Route("/pruefer/sms/success", name="pruefer_registration_sms_success")
*/
public function prueferSmsSuccessAction()
{
$user_manager = $this->get('fos_user.user_manager');
$session = $this->get('session');
$email = $session->get('registration_email_success');
$session->remove('registration_email_success');
$em = $this->getDoctrine()->getManager();
if (empty($email)) {
// the user does not come from the sendEmail action
return $this->redirect($this->generateUrl('homepage'));
}
$prueferUser = $em->getRepository(PrueferUser::class)->findOneByEmail($email);
return $this->render('@JFJuridicusBundle/PrueferBereich/sms_success.html.twig', array(
'prueferUser' => $prueferUser
));
}
/**
* Tell the user that email is checked
*
* @Route("/pruefer/email/check/success", name="pruefer_registration_email_check_success")
*/
public function prueferEmailCheckSuccessAction()
{
$session = $this->container->get('session');
$email = $session->get('registration_email_success');
$session->remove('registration_email_success');
$em = $this->getDoctrine()->getManager();
if (empty($email)) {
// the user does not come from the sendSms action
return $this->redirect($this->generateUrl('homepage'));
}
$prueferUser = $em->getRepository(PrueferUser::class)->findOneByEmail($email);
return $this->render('@JFJuridicusBundle/PrueferBereich/email_checked.html.twig', array(
'email' => $email
));
}
/**
* Tell the user that sms sending failed
*
* @Route("/pruefer/sms/error", name="pruefer_registration_sms_error")
*/
public function prueferSmsErrorAction()
{
$user_manager = $this->container->get('fos_user.user_manager');
$session = $this->container->get('session');
$email = $session->get('registration_sms_error');
$code = $session->get('registration_sms_code');
$message = $session->get('registration_sms_message');
$session->remove('registration_sms_error');
$session->remove('registration_sms_code');
$session->remove('registration_sms_message');
$em = $this->getDoctrine()->getManager();
if (empty($email) || empty($code) || empty($message)) {
// the user does not come from the sendSms action
return $this->redirect($this->generateUrl('homepage'));
}
$prueferUser = $em->getRepository(PrueferUser::class)->findOneByEmail($email);
return $this->render('@JFJuridicusBundle/PrueferBereich/sms_error.html.twig', array(
'prueferUser' => $prueferUser,
'code' => $code,
'message' => $message,
));
}
/**
* Receive the confirmation token and send SMS with password
*
* @Route("pruefer/activate/{token}", name="pruefer_registration_activate")
*/
public function prueferActivateAction($token)
{
$em = $this->getDoctrine()->getManager();
$user_manager = $this->container->get('fos_user.user_manager');
/* @var $user_manager \FOS\UserBundle\Model\UserManager */
$sms_service = $this->container->get('jf_juridicus.sms');
/* @var $sms_service \JF\JuridicusBundle\Services\Sms */
$user = $user_manager->findUserByConfirmationToken($token);
if (null === $user) {
throw $this->createNotFoundException('Der Aktivierungscode ist ungültig oder wurde schon verwendet.');
}
$prueferUser = $em->getRepository(PrueferUser::class)->findOneByUser($user);
if (null === $prueferUser) {
throw $this->createNotFoundException('Der Benutzer zu diesem Aktivierungscode ist nicht mehr vorhanden.');
}
/* Hier wurde die E-Mail mit dem Passwort versendet, jetzt wird diese E-Mail erst nach verifizierung versendet */
$password_plain = substr(uniqid(md5(rand())), 8, 8);
$user->setConfirmationToken(null);
$user->setPlainPassword($password_plain);
$user->setEnabled(true);
$em->persist($user);
$this->get('logger')->info(sprintf('User: %s PW: %s', $user->getEmail(), $password_plain));
// Senden des Passwords per SMS
$template = $em->getRepository(MailTemplate::class)->findCurrentByTyp(PrueferEmail::PRUEFER_BEREICH_REGISTRIERUNG_PASSWORT);
$replacements = array(
'titel' => $prueferUser->getTitel(),
'vorname' => $prueferUser->getVorname(),
'nachname' => $prueferUser->getNachname(),
'email' => $prueferUser->getEmail(),
'link' => 'https://juridicus.de/pruefer/login',
'password' => $password_plain
);
// NEW send E-Mail with PW
$mailer_user = $this->container->getParameter('mailer_user');
$mailer_bcc = $this->container->getParameter('mailer_bcc');
$mailer = $this->get('mailer');
$message = \Swift_Message::newInstance()
->setSubject($template->getBetreff())
->setFrom(array($mailer_user => 'Juridicus'))
->setReplyTo('info@juridicus.de')
->setTo($prueferUser->getEmail())
->setBcc('info@juridicus.de')
->setBody($template->replace($replacements), 'text/html')
;
if ($mailer->send($message)) {
// Versand speichern
$email = new PrueferEmail();
$email
->setTyp(PrueferEmail::PRUEFER_BEREICH_REGISTRIERUNG_PASSWORT)
->setPrueferUser($prueferUser)
;
$em->persist($email);
$em->flush();
$this->get('session')->set('registration_email_success', $prueferUser->getEmail());
return $this->redirect($this->generateUrl('pruefer_registration_sms_success'));
} else {
$this->get('session')->set('registration_email_error', $prueferUser->getEmail());
return $this->redirect($this->generateUrl('pruefer_registration_sms_error'));
}
/*$this->get('session')->set('registration_email_success', $prueferUser->getEmail());
return $this->redirect($this->generateUrl('pruefer_registration_email_check_success'));
*/
}
}