<?php
namespace App\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class UserController extends AbstractController {
/**
* @Route("/profile", name="user_profile")
* @IsGranted("ROLE_USER")
* @return Response
*/
public function userProfile(): Response {
return $this->render("profile.html.twig");
}
/**
* @Route("/transfers", name="user_transfers")
* @IsGranted("ROLE_USER")
* @return Response
*/
public function userTransfers(): Response {
return $this->render("transfers.html.twig");
}
/**
* @Route("/documents", name="user_documents")
* @IsGranted("ROLE_USER")
* @return Response
*/
public function userDocuments(): Response {
return $this->render("documents.html.twig");
}
/**
* @Route("/domains", name="user_domains")
* @IsGranted("ROLE_USER")
* @return Response
*/
public function userDomains(): Response {
return $this->render("domains.html.twig");
}
/**
* @Route("/orders", name="user_orders")
* @IsGranted("ROLE_USER")
* @return Response
*/
public function userOrders(): Response {
return $this->render("orders.html.twig");
}
/**
* Zasób wyświetla formularz rozpoczynający procedurę resetu hasła.
* @Route ("/reset1", name="reset-password-stage-1")
* @param \Doctrine\ORM\EntityManagerInterface $EM
* @param \Symfony\Component\HttpFoundation\Request $zadanie
* @param \App\Service\Cezar $C
* @return Response
*/
public function resetPasswordStage1 (\Doctrine\ORM\EntityManagerInterface $EM, \Symfony\Component\HttpFoundation\Request $zadanie, \App\Service\Cezar $C): Response {
if ($zadanie->getMethod() == "POST") {
$email = $zadanie->get ("email", null);
if ($email) {
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return $this->render ("reset1.html.twig", [
"alerts" => [ "Podany adres e-mail nie wygląda prawidlowo." ],
"email" => $email
]);
}
} else {
return $this->render ("reset1.html.twig", [
"alerts" => [ "Proszę podać adres e-mail." ],
"email" => $email
]);
}
$U = $EM->getRepository (\App\Entity\Klient::class)->findOneBy ([ "email" => $email]);
if ($U) {
// Create the Transport
$transport = new \Swift_SmtpTransport(
$EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, serwer", "mail.ndc.pl"),
intval ($EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, port", "465")),
intval ($EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, szyfrowanie", "TLS"))
);
$transport->setUsername($EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, skrzynka", "info@ndc.pl"));
$transport->setPassword($EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, hasło", ""));
// Create the Mailer using your created Transport
$mailer = new \Swift_Mailer($transport);
// Create a message
$message = new \Swift_Message($EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Temat maila resetującego hasło", "RESET hasła"));
$message->setFrom([
$EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, adres", "info@ndc.pl") => $EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, nazwa", "InforPol NET")
]);
$message->setTo([$U->getEmail() => $U->getNazwa()]);
$timeout = date ("Y-m-d H:i:s", time() + intval ($EM->getRepository(\App\Entity\Konfiguracja::class)->peek ("Czas na reset hasła [s]", "900")));
$message->setBody(
$this->renderView("email/reset_hasla.html.twig", [
"linkId" => $C->match($timeout . " " . strval($U->getId()) . " " . md5(strval($U->getId()))),
"timeout" => $timeout
]),
'text/html'
);
try {
$result = $mailer->send($message);
} catch (\Exception $e) {
$error = $e->getMessage();
}
}
if (isset ($error)) {
return $this->render ("reset2.html.twig", [
"email" => $email,
"timeout" => $timeout,
"error" => $error
]);
} else {
return $this->render ("reset2.html.twig", [
"email" => $email,
"timeout" => $timeout
]);
}
}
return $this->render ("reset1.html.twig");
}
/**
* Zasób obsługuje link do formularza ustawiania nowego hasła
* @Route ("/reset2/{link}", name="set_new_pass")
* @param \Doctrine\ORM\EntityManagerInterface $EM
* @param \App\Service\Cezar $C
* @param \App\Service\PasswordVerify $PV
* @param string $link
* @return Response
*/
public function setNewPasswordLink (\Doctrine\ORM\EntityManagerInterface $EM, \App\Service\Cezar $C, \App\Service\PasswordVerify $PV, string $link): Response {
$links = explode (" ", $C->demath($link));
if (count ($links) != 4) {
return $this->render ("reset-bad-link.html.twig", [ "link" => $link ], new Response ("", 404));
//Nieprawidłowy link
} else {
if (md5($links [2]) != $links [3]) {
//Nieprawidłowy link
return $this->render("reset-bad-link.html.twig", [ "link" => $link ], new Response ("", 404));
} else {
$czas = strtotime ($links [0] . " " . $links [1]);
if ($czas < time()) {
//Timeout
return $this->render("reset-expired-link.html.twig", [ "link" => $link, "timeout" => $links [0] . " " . $links [1] ]);
} else {
//RESET OK
$U = $EM->getRepository(\App\Entity\Klient::class)->find (intval ($links [2]));
if ($U) {
return $this->redirectToRoute("set-new-pass-form", [ "link" => $link ]);
} else {
return $this->render("reset-expired-link.html.twig", [ "link" => $link, "timeout" => $links [0] . " " . $links [1] ]);
}
}
}
}
}
/**
* Zasób obsługuje formularz ustawiania hasła
* @Route("/set-new-pass/{link}", name="set-new-pass-form")
* @param \Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface $UPHI
* @param \Symfony\Component\HttpFoundation\Request $zadanie
* @param \Doctrine\ORM\EntityManagerInterface $EM
* @param \App\Service\Cezar $C
* @param \App\Service\PasswordVerify $PV
* @param string $link
* @return Response
*/
public function setNewPassword (\Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface $UPHI, \Symfony\Component\HttpFoundation\Request $zadanie, \Doctrine\ORM\EntityManagerInterface $EM, \App\Service\Cezar $C, \App\Service\PasswordVerify $PV, string $link): Response {
$links = explode (" ", $C->demath($link));
$U = $EM->getRepository(\App\Entity\Klient::class)->find (intval ($links [2]));
if ($zadanie->getMethod() == "POST") {
$error = "";
$pass = [ 1 => $zadanie->get ("pass1", ""), 2 => $zadanie->get ("pass2", "") ];
if ($pass [1] != $pass [2]) {
$error .= "Podane hasła są różne.\n";
}
if (($pass [1] == "") || ($pass [2] == "")) {
$error .= "Hasło nie może być puste.\n";
}
if (!$PV->check($pass [1], $EM->getRepository(\App\Entity\Konfiguracja::class))) {
$error .= "Hasło jest niezgodne z podanymi zasadami.\n";
}
if ($error != "") {
$error = nl2br(trim ($error));
return $this->render ("reset-2.html.twig", [ "link" => $link, "user" => $U, "pass_help" => $PV->helper($EM->getRepository(\App\Entity\Konfiguracja::class)), "error" => $error ]);
} else {
$EM->persist ($U);
$U->setPassword($UPHI->hashPassword($U, $pass [1]));
$EM->flush ();
return $this->render ("reset-success.html.twig", [ "user" => $U ]);
}
}
return $this->render ("reset-2.html.twig", [ "link" => $link, "user" => $U, "pass_help" => $PV->helper($EM->getRepository(\App\Entity\Konfiguracja::class)) ]);
}
/**
* Zasób generuje formularz rejestracyjny
* @Route("registration-form", name="registration-form", methods={"GET"})
* @param \App\Repository\KonfiguracjaRepository $KREPO
* @param \App\Repository\SlownikRodzajKlientaRepository $SRKRepo
* @param \App\Repository\SlownikKrajISORepository $SKIRepo
* @param \App\Service\PasswordVerify $PASSV
* @return Response
*/
public function registrationForm(\App\Repository\KonfiguracjaRepository $KREPO, \App\Repository\SlownikRodzajKlientaRepository $SRKRepo, \App\Repository\SlownikKrajISORepository $SKIRepo, \App\Service\PasswordVerify $PASSV): Response {
return $this->render("registration_form.html.twig", [
"rodzaje_klientow" => $SRKRepo->findBy([], ["nazwa" => "asc"]),
"kraje" => $SKIRepo->findBy([], ["nazwa" => "asc"]),
"pass_help" => nl2br($PASSV->helper($KREPO))
]);
}
/**
* Funkcja sprawdza poprawność wypełnienia pól formularza rejestracyjnego
* @param \Doctrine\ORM\EntityManagerInterface $EM
* @param \Symfony\Component\HttpFoundation\Request $zadanie
* @param \App\Service\phoneVerify $PHONEV
* @param \App\Service\NIPVerify $NV
* @param \App\Service\PESELVerify $PV
* @param \App\Service\PasswordVerify $PASV
* @return array
*/
public function checkFieldsInRegistrationForm(\Doctrine\ORM\EntityManagerInterface $EM, \Symfony\Component\HttpFoundation\Request $zadanie, \App\Service\phoneVerify $PHONEV, \App\Service\NIPVerify $NV, \App\Service\PESELVerify $PV, \App\Service\PasswordVerify $PASV): Array {
$wynik = ["items" => [], "alerts" => []];
$person = false;
$company = false;
$rodzaje_klientow = $EM->getRepository(\App\Entity\SlownikRodzajKlienta::class)->findAll();
$rodzaj_klienta = null;
foreach ($rodzaje_klientow as $rk) {
if (strtolower($zadanie->get("rodzaj_klienta_" . $rk->getId())) == "true") {
$rodzaj_klienta = $rk;
break;
}
}
$wynik ['input'] = [];
$wynik ['input']['rodzaj_klienta'] = $rodzaj_klienta;
$wynik ['input']["login"] = trim($zadanie->get("login", ""));
$wynik ['input']["pass1"] = trim($zadanie->get("pass1", ""));
$wynik ['input']["pass2"] = trim($zadanie->get("pass2", ""));
$wynik ['input']["miasto"] = trim($zadanie->get("miasto", ""));
$wynik ['input']["kod_pocztowy"] = trim($zadanie->get("kod_pocztowy", ""));
$wynik ['input']["ulica"] = trim($zadanie->get("ulica", ""));
$wynik ['input']["kraj"] = trim($zadanie->get("kraj", ""));
$wynik ['input']['adres_koresp'] = (strtolower(trim($zadanie->get("adres_koresp", ""))) == "true");
$wynik ['input']["telefon"] = trim($zadanie->get("telefon", ""));
$wynik ['input']["telefon_komorkowy"] = trim($zadanie->get("telefon_komorkowy", ""));
$wynik ['input']["email"] = trim($zadanie->get("email", ""));
if ($rodzaj_klienta) {
if (strtolower($rodzaj_klienta->getNazwa()) == "osoba prywatna") {
$wynik ['input']["imie_i_nazwisko"] = trim($zadanie->get("imie_i_nazwisko", ""));
$wynik ['input']['whois'] = (strtolower(trim($zadanie->get("whois", ""))) == "true");
$wynik ['input']["pesel"] = trim($zadanie->get("pesel", ""));
} elseif (strtolower($rodzaj_klienta->getNazwa()) == "firma") {
$wynik ['input']["nip"] = trim($zadanie->get("nip", ""));
$wynik ['input']["nazwa"] = trim($zadanie->get("nazwa", ""));
$wynik ['input']["osoba_kontaktowa"] = trim($zadanie->get("osoba_kontaktowa", ""));
}
}
if ($wynik ['input']['adres_koresp']) {
$wynik ['input']["kores_miasto"] = trim($zadanie->get("kores_miasto", ""));
$wynik ['input']["kores_kod_pocztowy"] = trim($zadanie->get("kores_kod_pocztowy", ""));
$wynik ['input']["kores_ulica"] = trim($zadanie->get("kores_ulica", ""));
$wynik ['input']["kores_kraj"] = trim($zadanie->get("kores_kraj", ""));
}
//Sprawdzanie poprawności danych wejściowych
if ($wynik ['input']["login"] == "") {
$wynik ['items'][] = "login";
$wynik ['alerts'][] = "Login nie może być pusty.";
} else {
$test = $EM->getRepository(\App\Entity\Klient::class)->findOneBy(["login" => $wynik ['input']['login']]);
if ($test) {
if (!$test->isCzyAktywowany()) {
if ((time () - $test->getCrDate()->getTimestamp()) > intval ($EM->getRepository(\App\Entity\Konfiguracja::class)->peek ("Czas na aktywację konta [s]", "900"))) {
$EM->remove($test);
$EM->flush();
} else {
$wynik ['items'][] = "login";
$wynik ['alerts'][] = "Podany login jest już zajęty.";
}
} else {
$wynik ['items'][] = "login";
$wynik ['alerts'][] = "Podany login jest już zajęty.";
}
}
}
if ($wynik ['input']['pass1'] != $wynik ['input']['pass2']) {
$wynik ['items'][] = "pass1";
$wynik ['items'][] = "pass2";
$wynik ['alerts'][] = "podane hasla są różne.";
} else {
if ($wynik ['input']['pass1'] == "") {
$wynik ['items'][] = "pass1";
$wynik ['items'][] = "pass2";
$wynik ['alerts'][] = "Hasło nie może być puste.";
} else {
if (!$PASV->check($wynik ['input']['pass1'], $EM->getRepository(\App\Entity\Konfiguracja::class))) {
$wynik ['items'][] = "pass1";
$wynik ['items'][] = "pass2";
$wynik ['alerts'][] = "Hasło nie zgodne z regułami.";
}
}
}
if ($wynik ['input']["miasto"] == "") {
$wynik ['items'][] = "miasto";
$wynik ['alerts'][] = "Nazwa miejscowości nie może być pusta.";
}
if ($wynik ['input']["kod_pocztowy"] == "") {
$wynik ['items'][] = "kod_pocztowy";
$wynik ['alerts'][] = "kod pocztowy nie może być pusty.";
}
if ($wynik ['input']["ulica"] == "") {
$wynik ['items'][] = "ulica";
$wynik ['alerts'][] = "Nazwa ulicy nie może być pusta.";
}
if ($wynik ['input']['adres_koresp']) {
if ($wynik ['input']["kores_miasto"] == "") {
$wynik ['items'][] = "kores_miasto";
$wynik ['alerts'][] = "Nazwa miejscowości adresu korespondencyjnego nie może być pusta.";
}
if ($wynik ['input']["kores_kod_pocztowy"] == "") {
$wynik ['items'][] = "kores_kod_pocztowy";
$wynik ['alerts'][] = "kod pocztowy adresu korespondencyjnego nie może być pusty.";
}
if ($wynik ['input']["kores_ulica"] == "") {
$wynik ['items'][] = "kores_ulica";
$wynik ['alerts'][] = "Nazwa ulicy adresu korespondencyjnego nie może być pusta.";
}
}
if (($wynik ['input']['telefon'] == "") && ($wynik ['input']['telefon_komorkowy'] == "")) {
$wynik ['items'][] = "telefon";
$wynik ['items'][] = "telefon_komorkowy";
$wynik ['alerts'][] = "Proszę podac przynajmniej jeden numer telefonu.";
} else {
if ($wynik ['input']['telefon'] != "") {
if (!$PHONEV->check($wynik ['input']['telefon'])) {
$wynik ['items'][] = 'mask_telefon';
$wynik ['alerts'][] = "Numer telefonu wyglada na nieprawidłowy.";
}
}
if ($wynik ['input']['telefon_komorkowy'] != "") {
if (!$PHONEV->check($wynik ['input']['telefon_komorkowy'])) {
$wynik ['items'][] = 'mask_telefon_komorkowy';
$wynik ['alerts'][] = "Numer telefonu komórkowego wyglada na nieprawidłowy.";
}
}
}
if ($wynik ['input']["email"] == "") {
$wynik ['items'][] = "email";
$wynik ['alerts'][] = "Adres e-mail nie może być pusty.";
} else {
if (!filter_var($wynik ['input']['email'], FILTER_VALIDATE_EMAIL)) {
$wynik ['items'][] = "email";
$wynik ['alerts'][] = "podany adres e-mail (\"" . $wynik ['input']['email'] . "\") jest nieprawidłowy.";
}
}
if ($rodzaj_klienta) {
if (strtolower($rodzaj_klienta->getNazwa()) == "osoba prywatna") {
if ($wynik ['input']["imie_i_nazwisko"] == "") {
$wynik ['items'][] = "imie_i_nazwisko";
$wynik ['alerts'][] = "Prosze podać imię i nazwisko.";
}
if ($wynik ['input']["pesel"] == "") {
$wynik ['items'][] = "pesel";
$wynik ['alerts'][] = "Numer PESEL nie może być pusty.";
} else {
if (!$PV->check($wynik ['input']['pesel'])) {
$wynik ['items'][] = "pesel";
$wynik ['alerts'][] = "Podany numer PESEL nie jest prawidlowy.";
}
}
} elseif (strtolower($rodzaj_klienta->getNazwa()) == "firma") {
if ($wynik ['input']["nip"] == "") {
$wynik ['items'][] = "nip";
$wynik ['alerts'][] = "numer NIP nie może być pusty.";
} else {
if (!$NV->check($wynik ['input']['nip'])) {
$wynik ['items'][] = "nip";
$wynik ['alerts'][] = "Podany numer NIP nie jest prawidlowy.";
}
}
if ($wynik ['input']["nazwa"] == "") {
$wynik ['items'][] = "nazwa";
$wynik ['alerts'][] = "Prosze podać nazwe firmy.";
}
if ($wynik ['input']["osoba_kontaktowa"] == "") {
$wynik ['items'][] = "osoba_kontaktowa";
$wynik ['alerts'][] = "Prosze wskazac osobe do kontaktu.";
}
}
}
return $wynik;
}
/**
* Zasób sprawdza, czy można zarejestrować klienta na podstawie wypełnionego formularza.
* @Route ("/check-registration-form", name="check-form-registration", methods={"POST"})
* @param \Doctrine\ORM\EntityManagerInterface $EM
* @param \Symfony\Component\HttpFoundation\Request $zadanie
* @param \App\Service\phoneVerify $PHONEV
* @param \App\Service\NIPVerify $NV
* #param \App\Service\PESELVerify $PV
* @param \App\Service\PasswordVerify $PASV
* @return \Symfony\Component\HttpFoundation\JsonResponse Zwraca status TRUE, gdy wszystko OK
*/
public function checkRegistrationForm(\Doctrine\ORM\EntityManagerInterface $EM, \Symfony\Component\HttpFoundation\Request $zadanie, \App\Service\phoneVerify $PHONEV, \App\Service\NIPVerify $NV, \App\Service\PESELVerify $PV, \App\Service\PasswordVerify $PASV): \Symfony\Component\HttpFoundation\JsonResponse {
$wynik = $this->checkFieldsInRegistrationForm($EM, $zadanie, $PHONEV, $NV, $PV, $PASV);
$wynik ['post'] = $_POST;
$wynik ['status'] = (count($wynik ['alerts']) == 0);
return new \Symfony\Component\HttpFoundation\JsonResponse($wynik);
}
/**
* Zasób rejestruje nowego klienta.
* @Route ("/tregistrationNewUser", name="register-new-user", methods={"POST"})
* @param \Doctrine\ORM\EntityManagerInterface $EM
* @param \Symfony\Component\HttpFoundation\Request $zadanie
* @param \App\Service\NIPVerify $NV
* @param \App\Service\PESELVerify $PV
* @param \App\Service\PasswordVerify $PASV
* @param \App\Service\Cezar $CEZAR
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function registerNewUser(\Doctrine\ORM\EntityManagerInterface $EM, \Symfony\Component\HttpFoundation\Request $zadanie, \App\Service\phoneVerify $PHONEV, \App\Service\NIPVerify $NV, \App\Service\PESELVerify $PV, \App\Service\PasswordVerify $PASV, \App\Service\Cezar $CEZAR): \Symfony\Component\HttpFoundation\JsonResponse {
$wynik = $this->checkFieldsInRegistrationForm($EM, $zadanie, $PHONEV, $NV, $PV, $PASV);
$wynik ['status'] = (count($wynik ['alerts']) == 0);
if ($wynik ['status']) {
$U = new \App\Entity\Klient ();
$EM->persist($U);
$U->setCrDate(new \DateTime());
$U->setCzyAdresKoresp($wynik ['input']['adres_koresp']);
$U->setCzyFakturaNaEmail(true);
$U->setCzyFakturaPoczta(false);
$U->setCzyHrd(false);
$U->setCzyZWww(true);
$U->setDelDate(null);
$U->setEmail($wynik ['input']['email']);
$U->setEmailFaktura($wynik ['input']['email']);
$U->setKod($wynik ['input']['kod_pocztowy']);
if ($wynik ['input']['adres_koresp']) {
$U->setKorespKod($wynik ['input']['kores_kod_pocztowy']);
$U->setKorespKraj($EM->getRepository(\App\Entity\SlownikKrajISO::class)->find(intval($wynik ['input']['kores_kraj'])));
$U->setKorespMiasto($wynik ['input']['kores_miasto']);
$U->setKorespUlica($wynik ['input']['kores_ulica']);
}
$U->setKraj($EM->getRepository(\App\Entity\SlownikKrajISO::class)->find(intval($wynik ['input']['kraj'])));
$U->setLogin($wynik ['input']['login']);
$U->setMiasto($wynik ['input']['miasto']);
$U->setRodzajKlientaHrd($wynik ['input']['rodzaj_klienta']);
if ($wynik ['input']['rodzaj_klienta']->getNazwa() == "firma") {
$U->setNazwa($wynik ['input']['nazwa']);
$U->setNip($wynik ['input']['nip']);
$CLEAN = "";
for ($n = 0; $n < strlen($wynik ['input']['nip']); $n++) {
if (($wynik ['input']['nip'][$n] >= "0") && ($wynik ['input']['nip'][$n] <= "9"))
$CLEAN .= $wynik ['input']['nip'][$n];
}
$U->setNipCzysty($CLEAN);
$U->setWlasciciel($wynik ['input']['osoba_kontaktowa']);
} else {
$U->setNazwa($wynik ['input']['imie_i_nazwisko']);
$U->setPesel($wynik ['input']['pesel']);
$U->setZgodaNaPokazanieDanychWhois($wynik ['input']['whois']);
}
$U->setPassword($wynik ['input']['pass1']);
$U->setRoles(["ROLE_USER"]);
$U->setSRCID(0);
if ($wynik ['input']['telefon'] != "")
$U->setTelefon($wynik ['input']['telefon']);
if ($wynik ['input']['telefon_komorkowy']) {
$U->setTelefonKom($wynik ['input']['telefon_komorkowy']);
$U->setTelefonPowiadomieniaSms($wynik ['input']['telefon_komorkowy']);
}
$U->setUlica($wynik ['input']['ulica']);
$U->setUpDate(new \DateTime());
$U->setCzyAktywowany(false);
$EM->persist($U);
$EM->flush ();
$wynik ['klientId'] = $U->getId ();
// Create the Transport
$transport = new \Swift_SmtpTransport(
$EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, serwer", "mail.ndc.pl"),
intval ($EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, port", "465")),
intval ($EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, szyfrowanie", "TLS"))
);
$transport->setUsername($EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, skrzynka", "info@ndc.pl"));
$transport->setPassword($EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, hasło", ""));
// Create the Mailer using your created Transport
$mailer = new \Swift_Mailer($transport);
// Create a message
$message = new \Swift_Message($EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Temat maila aktywacyjnego konto", "Aktywacja konta w systemie InforpolNet"));
$message->setFrom([
$EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, adres", "info@ndc.pl") => $EM->getRepository (\App\Entity\Konfiguracja::class)->peek ("Skrzynka pocztowa, nazwa", "InforPol NET")
]);
$message->setTo([$U->getEmail() => $U->getNazwa()]);
$message->setBody(
$this->renderView("email/aktywacja.html.twig", [
"linkId" => $CEZAR->match(md5(date ("Y-m-d")) . " " . strval($U->getId()) . " " . md5(strval($U->getId()))),
"timeout" => date ("Y-m-d H:i:s", $U->getCrDate()->getTimestamp() + intval ($EM->getRepository(\App\Entity\Konfiguracja::class)->peek ("Czas na aktywację konta [s]", "900")))
]),
'text/html'
);
try {
$result = $mailer->send($message);
} catch (\Exception $e) {
$wynik ['status'] = false;
$wynik ['alerts'] = [$e->getMessage()];
}
}
return new \Symfony\Component\HttpFoundation\JsonResponse($wynik);
}
/**
* Zasób dokonuje aktywacji konta
* @Route ("/activate/{link}", name="activate_account", methods={"GET"})
* @param \Doctrine\ORM\EntityManagerInterface $EM
* @param \Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface $PHI
* @param \App\Service\Cezar $CEZAR
* @param \App\Service\phoneVerify $PV
* @param string $link
* @return Response
*/
public function activateAccount (\Doctrine\ORM\EntityManagerInterface $EM, \Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface $PHI, \App\Service\Cezar $CEZAR, \App\Service\phoneVerify $PV, string $link): Response {
$l = $CEZAR->demath($link);
$l = explode (" ", $l);
if (count ($l) != 3) {
//Zły link
return $this->render ("activationNotFound.html.twig", [ "linkId" => $link ]);
} else {
if (md5($l[1]) != $l [2]) {
//Zły link
return $this->render ("activationNotFound.html.twig", [ "linkId" => $link ]);
} else {
$klient = $EM->getRepository(\App\Entity\Klient::class)->find (intval ($l [1]));
if ($klient) {
//jest klient
if ($klient->isCzyAktywowany()) {
//Konto jest już aktywne
return $this->render("alreadyActivation.html.twig", [ "klient" => $klient ]);
} else {
if ((time () - $klient->getCrDate()->getTimestamp()) > intval ($EM->getRepository(\App\Entity\Konfiguracja::class)->peek ("Czas na aktywację konta [s]", "900"))) {
$EM->remove($klient);
$EM->flush ();
//Link się zdeaktywował, konieczność ponownego zarejestrowania
return $this->render("activationLinkIsDeprecated.html.twig", [ "linkId" => $link ]);
} else {
//Wszystko OK, konto zostało aktywowane
$EM->persist($klient);
$klient->setCzyAktywowany(true);
$klient->setPassword($PHI->hashPassword ($klient, $klient->getPassword ()));
$klient->setUpDate(new \DateTime ());
$EM->flush ();
//Tworzenie CSA dla klienta
$telefon1 = $klient->getTelefonKom();
$telefon2 = $klient->getTelefon();
if ($telefon2 == null) $telefon2 = $klient->getTelefonKom ();
if ($telefon1 != null) $telefon1 = $PV->convertPhoneToHRDFormat($telefon1);
if ($telefon2 != null) $telefon2 = $PV->convertPhoneToHRDFormat($telefon2);
try {
$HRD = \HRDBase\Api\HRDApi::getInstance([
"apiHash" => $EM->getRepository(\App\Entity\Konfiguracja::class)->peek("HRD API HASH"),
"apiLogin" => $EM->getRepository(\App\Entity\Konfiguracja::class)->peek("HRD API LOGIN"),
"apiPass" => $EM->getRepository(\App\Entity\Konfiguracja::class)->peek("HRD API PASS")
]);
} catch (\HRDBase\Api\Exceptions\HRDApiIncorrectDataException $e) {
return new \Symfony\Component\HttpFoundation\JsonResponse ([ "SUCCESS" => false, "MESSAGE" => "HRDBase\Api\Exceptions\HRDApiIncorrectDataException: " . $e->getMessage ()]);
}
$HRDTOKEN = $HRD->getToken();
if ($HRDTOKEN) {
$error = false;
if (strtolower ($klient->getRodzajKlientaHrd()->getNazwa()) == "firma") {
//CSA FIRMOWE
try {
$CSANUM = $HRD->userCreate(
"company",
$klient->getNipCzysty(),
$klient->getEmail(),
$telefon1,
$telefon2,
null,
$klient->getNazwa(),
$klient->getUlica(),
$klient->getKod(),
$klient->getMiasto(),
$klient->getKraj()->getSkrot2(),
$klient->getWlasciciel()
);
} catch (\Exception $e) {
$error = true;
}
} else {
//CSA OSOBY FIZYCZNEJ
try {
$CSANUM = $HRD->userCreate(
"person",
$klient->getPesel(),
$klient->getEmail(),
$telefon1,
$telefon2,
null,
$klient->getNazwa(),
$klient->getUlica(),
$klient->getKod(),
$klient->getMiasto(),
$klient->getKraj()->getSkrot2()
);
} catch (\Exception $e) {
$error = true;
}
}
if (!$error) {
$CSA = new \App\Entity\KlientCSA ();
$EM->persist($CSA);
$CSA->setCrDate(new \DateTime ());
$CSA->setHrdCsa($CSANUM);
$CSA->setKlient($klient);
$CSA->setSRCID(0);
$CSA->setUpDate(new \DateTime ());
$EM->flush();
$TASK = new \App\Entity\Task ();
$EM->persist($TASK);
$TASK->setArgs([ $CSA->getId() ]);
$TASK->setCrDate(new \DateTime ());
$TASK->setIloscprob(3);
$TASK->setOpcode(\App\Entity\Task::opUPDATE_CSA_INFO);
$TASK->setProba(0);
$TASK->setStatus(\App\Entity\Task::stWAIT);
$TASK->setTermin(new \DateTime (date ("Y-m-d H:i:s", time () + 60)));
$TASK->setUpDate($TASK->getCrDate());
$EM->flush ();
}
}
return $this->render("activationOK.html.twig", [ "klient" => $klient ]);
}
}
} else {
//Klient nie odnaleziony
return $this->render ("activationNotFound.html.twig", [ "linkId" => $link ]);
}
}
}
}
/**
* Zasób wyświetla informację o konieczności aktywowania konta.
* @Route ("/must-activation/{klientId}", name="register-new-user-activation-info", methods={"GET"})
* @param \Doctrine\ORM\EntityManagerInterface $EM
* @param int $klientId
* @return Response
*/
public function registerNewUserActivationInfo (\Doctrine\ORM\EntityManagerInterface $EM, int $klientId): Response {
$k = $EM->getRepository (\App\Entity\Klient::class)->find ($klientId);
$timeout_val = intval ($EM->getRepository(\App\Entity\Konfiguracja::class)->peek ("Czas na aktywację konta [s]", "900"));
$timeout = date ("Y-m-d H:i:s", $k->getCrDate()->getTimestamp () + $timeout_val);
return $this->render ("mustActivationInfo.html.twig", [
"klient" => $k,
"timeout" => $timeout
]);
}
}