src/Controller/LoginController.php line 38
<?php
namespace App\Controller;
use App\Controller\WebserviceController;
use App\Entity\Auswahllisten;
use App\Entity\Mailtexte;
use App\Entity\Portaleinstellungen;
use App\Entity\Portalsettings;
use App\Entity\Settings;
use App\Entity\Texte;
use App\Entity\User;
use Doctrine\ORM\EntityManager;
use Symfony\Bridge\Twig\Mime\BodyRenderer;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\Email;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Signature\SignatureHasher;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
class LoginController extends AbstractController
{
#[Route('/', name: 'login')]
public function index(AuthenticationUtils $authenticationUtils, Request $request, ManagerRegistry $doctrine, EntityManagerInterface $entityManager): Response
{
// Settings
$o2FA = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "2fa"]);
$oWartung = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "wartungsarbeiten"]);
$oOffline = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "portalonline"]);
$oAuth = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "authentifizierung"]);
$oAuthZ = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "authentifizierungz"]);
$oOutput = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "output"]);
$oLinkWiderruf = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "widerruf"]);
$oLinkImpressum = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "impressum"]);
$oLinkDatenschutz = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "datenschutz"]);
$oLinkSatzung = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "satzung"]);
$oLinkBarrierefreiheit = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "barrierefreiheit"]);
$oZeigeBarrierefreiheit = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "barrierefreiheitanzeigen"]);
$oZaehlerstandMelden = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "zaehlerstandmelden_abgemeldet"]);
// Portalsettings
$oZSMeldenAktivText = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "zaehlerstandsmeldung_aktiv_text"]);
$oZSMeldenAktivStart = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "zaehlerstandsmeldung_aktiv_startdatum"]);
$oZSMeldenAktivEnde = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "zaehlerstandsmeldung_aktiv_enddatum"]);
$oLogo = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo"]);
$oLogoGraustufen = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-graustufen"]);
$oLogoSchwarzWeiss = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-schwarzweiss"]);
$oLogoDruckenDialog = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-print"]);
$oLogoPositionStartseite = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-position-startseite"]);
$oAnzahlLogosStartseite = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "anzahl-logos-startseite"]);
// Texte
$aTexte = $doctrine->getRepository(Texte::class)->findAll();
$oDatenschutzText = $doctrine->getRepository(Texte::class)->findOneBy(["metakey" => "datenschutz_text"]);
$oDatenschutzMail = $doctrine->getRepository(Texte::class)->findOneBy(["metakey" => "datenschutz_mail"]);
// Auswahllisten
$aAuswahllisten = $doctrine->getRepository(Auswahllisten::class)->findBy(["type" => "abschlagsaenderung"]);
// Zustellarten
$aZustellarten = array("Abruf im Kundenportal","Zustellung per E-Mail");
$session = new Session();
$oWebservice = new WebserviceController();
$oClient = null;
if($oWebservice->checkWsConnection($doctrine))
{
$oClient = $oWebservice->getClient($doctrine);
}
$aAbrufarten = array();
if($oClient)
{
$aResult = $oClient->GetInitialData(array(
"v_InitialData" => 1
));
if($aResult->return_value)
{
if(property_exists($aResult->v_InitialData, "OutputCategoriesOM"))
{
if(property_exists($aResult->v_InitialData->OutputCategoriesOM, "OutputCategoryOM"))
{
$aAbrufarten = $aResult->v_InitialData->OutputCategoriesOM->OutputCategoryOM;
if($aAbrufarten && !is_array($aAbrufarten))
{
$aAbrufarten= array($aAbrufarten);
}
}
}
}
}
// Impressum
$sImpressum = "";
if($oLinkImpressum)
{
$sImpressum = $oLinkImpressum->getMetavalue();
}
$session->set('impressum',$sImpressum);
// Datenschutz
$sDatenschutz = "";
if($oLinkDatenschutz)
{
$sDatenschutz = $oLinkDatenschutz->getMetavalue();
}
$session->set('datenschutz',$sDatenschutz);
// Satzung
$sSatzung = "";
if($oLinkSatzung)
{
$sSatzung = $oLinkSatzung->getMetavalue();
}
$session->set('satzung',$sSatzung);
// Barrierefreiheit
$sBarrierefreiheit = "";
if($oLinkBarrierefreiheit)
{
$sBarrierefreiheit = $oLinkBarrierefreiheit->getMetavalue();
}
$session->set('barrierefreiheit',$sBarrierefreiheit);
// Status Barrierefreiheit anzeigen / nicht anzeigen
$sZeigeBarrierefreiheit = "on";
if($oZeigeBarrierefreiheit)
{
$sZeigeBarrierefreiheit = $oZeigeBarrierefreiheit->getMetavalue();
}
$session->set('barrierefreiheitanzeigen', $sZeigeBarrierefreiheit);
if(!$request->getSession())
{
$session->start();
}
// Laden des Kundenlogos, wenn vorhanden
if ($oLogo)
{
$session->set('logo', $oLogo->getMetavalue());
}
else
{
$session->set('logo', '');
}
if($oLogoGraustufen)
{
$session->set('logo-graustufen', $oLogoGraustufen->getMetavalue());
}
else{
$session->set('logo-graustufen', '');
}
if($oLogoSchwarzWeiss)
{
$session->set('logo-schwarzweiss', $oLogoSchwarzWeiss->getMetavalue());
}
else
{
$session->set('logo-schwarzweiss', '');
}
if($oLogoDruckenDialog)
{
$session->set('logo-print', $oLogoDruckenDialog->getMetavalue());
}
else
{
$session->set('logo-print', '');
}
// Anzahl der Logos auf Startseite ermitteln
$iAnzahlLogosStartseite = 1;
if($oAnzahlLogosStartseite && $oAnzahlLogosStartseite->getMetavalue())
{
$iAnzahlLogosStartseite = $oAnzahlLogosStartseite->getMetavalue();
}
// Logos & Satzungen
$aLogos = array();
$aSatzungen = array();
// Verzeichnis der Logos
$sVerzeichnis = "/customerdata/";
for($i = 0; $i < $iAnzahlLogosStartseite; $i++)
{
$sKeyname = "";
if($i > 0)
{
$sKeyname = "-" . $i;
}
// Logos & Satzung ermitteln
$oLogo = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo".$sKeyname]);
$oLogoGraustufen = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-graustufen".$sKeyname]);
$oLogoSchwarzWeiss = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-schwarzweiss".$sKeyname]);
$oLogoDruckenDialog = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-print".$sKeyname]);
$oSatzung = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "satzung".$sKeyname]);
// Logo Graustufen
$sLogoGraustufen = "";
if($oLogoGraustufen && $oLogoGraustufen->getMetavalue())
{
$sLogoGraustufen = $sVerzeichnis . $oLogoGraustufen->getMetavalue();
}
// Logo Schwarz-Weiss
$sLogoSchwarzWeiss = "";
if($oLogoSchwarzWeiss && $oLogoSchwarzWeiss->getMetavalue())
{
$sLogoSchwarzWeiss = $sVerzeichnis . $oLogoSchwarzWeiss->getMetavalue();
}
// Logo Drucken-Dialog
$sLogoDruckenDialog = "";
if($oLogoDruckenDialog && $oLogoDruckenDialog->getMetavalue())
{
$sLogoDruckenDialog = $sVerzeichnis . $oLogoDruckenDialog->getMetavalue();
}
// Logo Farbe
$sLogo = "";
if($oLogo && $oLogo->getMetavalue())
{
$sLogo = $sVerzeichnis . $oLogo->getMetavalue();
// Fallbacks wenn Logos nicht vorhanden
if(!$sLogoGraustufen)
{
$sLogoGraustufen = $sLogo;
}
if(!$sLogoSchwarzWeiss)
{
$sLogoSchwarzWeiss = $sLogo;
}
if(!$sLogoDruckenDialog)
{
$sLogoDruckenDialog = $sLogo;
}
}
// Satzung
$sSatzung = "";
if($oSatzung && $oSatzung->getMetavalue())
{
$sSatzung = $oSatzung->getMetavalue();
}
$aSatzungen[] = $sSatzung;
$aLogos[] = array(
"logo-farbe" => [
'key' => "logo".$sKeyname,
'value' => $sLogo,
],
"logo-graustufen" => [
'key' => "logo-graustufen".$sKeyname,
'value' => $sLogoGraustufen,
],
"logo-schwarzweiss" => [
'key' => "logo-schwarzweiss".$sKeyname,
'value' => $sLogoSchwarzWeiss,
],
"logo-print" => [
'key' => "logo-print".$sKeyname,
'value' => $sLogoDruckenDialog,
],
);
}
$session->set('logos', $aLogos);
$session->set('satzungen', $aSatzungen);
if($oLogoPositionStartseite)
{
$session->set('logo-position-startseite', $oLogoPositionStartseite->getMetavalue());
}
$sZaehlerstandMelden = "on";
if($oZaehlerstandMelden)
{
$sZaehlerstandMelden = $oZaehlerstandMelden->getMetavalue();
}
$session->set('zaehlerstandmelden_abgemeldet', $sZaehlerstandMelden);
// Zählerstand inaktiv Text, Start- und Enddatum
$sZählerstandAktivText = "";
$sZählerstandAktivStart = "";
$sZählerstandAktivEnde = "";
if($oZSMeldenAktivText && trim($oZSMeldenAktivText->getMetavalue()))
{
$sZählerstandAktivText = $oZSMeldenAktivText->getMetavalue();
}
if($oZSMeldenAktivStart && trim($oZSMeldenAktivStart->getMetavalue()))
{
$sZählerstandAktivStart = $oZSMeldenAktivStart->getMetavalue();
$sZählerstandAktivText = str_replace("#startdatum#", $sZählerstandAktivStart, $sZählerstandAktivText);
}
if($oZSMeldenAktivEnde && trim($oZSMeldenAktivEnde->getMetavalue()))
{
$sZählerstandAktivEnde = $oZSMeldenAktivEnde->getMetavalue();
$sZählerstandAktivText = str_replace("#enddatum#", $sZählerstandAktivEnde, $sZählerstandAktivText);
}
// Fallback Text
$sDatenschutzText = "Ich habe die Datenschutzerklärung zur Kenntnis genommen und stimme zu, dass meine personenbezogenen Daten entsprechend der Datenschutzerklärung verarbeitet werden. Hinweis: Sie können Ihre Einwilligung jederzeit für die Zukunft per E-Mail an #datenschutz_mail# widerrufen.";
// Fallback Mail
$sDatenschutzMail = "kundenportal@msu-solutions.de";
// Text für Datenschutzerklärung
if($oDatenschutzText && $oDatenschutzText->getMetavalue())
{
$sDatenschutzText = $oDatenschutzText->getMetavalue();
}
// E-Mail-Adresse für Datenschutzerklärung
if($oDatenschutzMail && $oDatenschutzMail->getMetavalue())
{
$sDatenschutzMail = $oDatenschutzMail->getMetavalue();
}
$sDatenschutzMail = "<a href='mailto:".$sDatenschutzMail."'>".$sDatenschutzMail."</a>";
$sDatenschutzText = str_replace("#datenschutz_mail#", $sDatenschutzMail, $sDatenschutzText);
// Widerruf
if($oLinkWiderruf)
{
$sLinkWiderruf = "";
if($oLinkWiderruf->getMetavalue())
{
$sLinkWiderruf = $oLinkWiderruf->getMetavalue();
}
$sLinkWiderruf = "<a href='".$sLinkWiderruf."' target='_blank' title='Link zum Widerruf'>".$sLinkWiderruf."</a>";
$sDatenschutzText = str_replace("#widerruf#", $sLinkWiderruf, $sDatenschutzText);
}
$sDatenschutzText = str_replace(" ", " ", $sDatenschutzText);
// Wartungsarbeiten
$bWartung = false;
if($oWartung->getMetavalue() && $oWartung->getMetavalue() == "on")
{
$bWartung = true;
}
// Portal online/offline
$bOnline = false;
if($oOffline && $oOffline->getMetavalue() == "on")
{
$bOnline = true;
}
$aTemp = array();
foreach($aTexte as $iKey => $oText)
{
$aTemp[$oText->getMetakey()] = $oText->getMetavalue();
}
$aTexte = $aTemp;
if(!array_key_exists("portalname",$aTexte))
{
$aTexte["portalname"] = "Wasserportal";
}
if(!array_key_exists("bezeichn_kundennummer_AuthwithHash",$aTexte))
{
$aTexte["bezeichn_kundennummer_AuthwithHash"] = "Kundennummer";
}
$session->set('texte',$aTexte);
$sEmail = "";
// prüfen ob webid im request vorhanden ist und wenn ja user über die webid aus der datenbank ermitteln
if($request->get('webid'))
{
$oUser = $doctrine->getRepository(User::class)->findOneBy(["webid" => $request->get('webid')]);
if($oUser)
{
$sEmail = $oUser->getEmail();
}
}
$oUser = null;;
if($this->getUser())
{
$oUser = $doctrine->getRepository(User::class)->find($this->getUser()->getId());
}
if($oUser)
{
if(in_array("ROLE_ADMIN", $oUser->getRoles()))
{
$session->set('nutzername',"AD");
if(!empty($request->get('edit')))
{
$aReturn = array(
'zustellarten' => $aZustellarten,
'impressum' => $sImpressum,
'datenschutz' => $sDatenschutz,
'barrierefreiheit' => $sBarrierefreiheit,
'satzung' => $sSatzung,
'auswahllisten' => $aAuswahllisten,
'error' => '',
'neu' => '',
'twofa' => '',
'auth' => $oAuth,
'authz' => $oAuthZ,
'output' => $oOutput,
'webservice' => $oWebservice->checkWsConnection($doctrine),
'abrufarten' => $aAbrufarten,
'texte' => $aTexte,
'email' => $sEmail,
'datenschutzText' => $sDatenschutzText,
);
return $this->render('login/index.html.twig', $aReturn);
}
$session->set('webservice', true);
$oLogo = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo"]);
$oLogoGraustufen = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-graustufen"]);
$oLogoSchwarzWeiss = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-schwarzweiss"]);
if($oLogo)
{
$session->set('logo', $oLogo->getMetavalue());
}
if($oLogoGraustufen)
{
$session->set('logo-graustufen', $oLogoGraustufen->getMetavalue());
}
if($oLogoSchwarzWeiss)
{
$session->set('logo-schwarzweiss', $oLogoSchwarzWeiss->getMetavalue());
}
return $this->redirectToRoute('dashboard');
}
else
{
$iCustomerId = $oUser->getKundennummer();
if($oClient)
{
$aUserdata = $oClient->GetCustomerInternalsByNo(array('p_No' => $iCustomerId, 'v_ExportCustomerInternals' => array()))->v_ExportCustomerInternals->CustomerInternal;
$sFirst = substr($aUserdata->Name, 0, 1);
$sLast = substr($aUserdata->Name2, 0, 1);
$session->set('nutzername', $sFirst . "" . $sLast);
$session->set('name', $aUserdata->Name . " " . $aUserdata->Name2);
$session->set('webservice', true);
}
else
{
$session->set('webservice', false);
}
return $this->redirectToRoute('vertraege',["code" => $request->get('code')]);
}
}
$oPortalvariante = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "portalvariante"]);
$sPortalvariante = "";
if ($oPortalvariante)
{
if ($oPortalvariante->getMetavalue() == "zaehlerstand")
{
$sTargetAction = 'zaehlerstand_melden';
}
else if ($oPortalvariante->getMetavalue() == "komplett")
{
$sTargetAction = 'komplett';
}
$sPortalvariante = $oPortalvariante->getMetavalue();
}
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
$aReturn = array(
'controller_name' => 'LoginController',
'last_username' => $lastUsername,
'error' => $error,
'zustellarten' => $aZustellarten,
'abrufarten' => $aAbrufarten,
'impressum' => $sImpressum,
'datenschutz' => $sDatenschutz,
'satzung' => $sSatzung,
'target_action' => $request->get('target_action') ? $request->get('target_action') : $sTargetAction,
'texte' => $aTexte,
'zaehlerstandAktivText' => $sZählerstandAktivText,
'zaehlerstandAktivStart' => $sZählerstandAktivStart,
'zaehlerstandAktivEnde' => $sZählerstandAktivEnde,
'barrierefreiheit' => $sBarrierefreiheit,
'portalvariante' => $sPortalvariante,
'auswahllisten' => $aAuswahllisten,
'wartungsarbeiten' => $bWartung,
'online' => $bOnline,
'output' => $oOutput,
'webservice' => $oWebservice->checkWsConnection($doctrine),
'datenschutzText' => $sDatenschutzText,
'email' => $sEmail
);
$b2FA = false;
// 2FA
if($o2FA->getMetavalue() && $o2FA->getMetavalue() == "on")
{
$b2FA = true;
}
$aReturn["twofa"] = $b2FA;
$aReturn["auth"] = $oAuth;
$aReturn["authz"] = $oAuthZ;
// Anzeige drucken Dialog
if($request->get('drucken'))
{
$aReturn["drucken"] = true;
$aReturn["zaehler"] = $request->get('zaehler');
$aReturn["ablesedatum"] = $request->get('ablesedatum');
$aReturn["ablesestand"] = $request->get('ablesestand');
}
return $this->render('login/index.html.twig', $aReturn);
}
#[Route('/passwort-vergessen/', name: 'passwort-vergessen')]
public function passwordForget(Request $request, ManagerRegistry $doctrine, EntityManagerInterface $entityManager, UserPasswordHasherInterface $userPasswordHasher)
{
$session = new Session();
if ($this->getUser())
{
return $this->redirectToRoute('dashboard');
}
$oWebservice = new WebserviceController();
$oMailer = new MailController();
$oMailer = $oMailer->getMailer($doctrine);
// Settings
$oLinkImpressum = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "impressum"]);
$oLinkDatenschutz = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "datenschutz"]);
$oLinkSatzung = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "satzung"]);
$oLinkBarrierefreiheit = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "barrierefreiheit"]);
$oZeigeBarrierefreiheit = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "barrierefreiheitanzeigen"]);
// Portalsettings
$oLogo = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo"]);
$oAbsender = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "standardabsender"]);
// Texte
$aTexte = $doctrine->getRepository(Texte::class)->findAll();
$oClient = null;
if($oWebservice->checkWsConnection($doctrine))
{
$oClient = $oWebservice->getClient($doctrine);
}
$sImpressum = "";
if($oLinkImpressum)
{
$sImpressum = $oLinkImpressum->getMetavalue();
}
$session->set('impressum',$sImpressum);
$sDatenschutz = "";
if($oLinkDatenschutz)
{
$sDatenschutz = $oLinkDatenschutz->getMetavalue();
}
$session->set('datenschutz',$sDatenschutz);
// Satzung
$sSatzung = "";
if($oLinkSatzung)
{
$sSatzung = $oLinkSatzung->getMetavalue();
}
$session->set('satzung',$sSatzung);
$sBarrierefreiheit = "";
if($oLinkBarrierefreiheit)
{
$sBarrierefreiheit = $oLinkBarrierefreiheit->getMetavalue();
}
$session->set('barrierefreiheit',$sBarrierefreiheit);
// Status Barrierefreiheit anzeigen / nicht anzeigen
$sZeigeBarrierefreiheit = "on";
if($oZeigeBarrierefreiheit)
{
$sZeigeBarrierefreiheit = $oZeigeBarrierefreiheit->getMetavalue();
}
$session->set('barrierefreiheitanzeigen', $sZeigeBarrierefreiheit);
$aTemp = array();
foreach($aTexte as $iKey => $oText)
{
$aTemp[$oText->getMetakey()] = $oText->getMetavalue();
}
$aTexte = $aTemp;
if(!array_key_exists("portalname",$aTexte))
{
$aTexte["portalname"] = "Energieportal";
}
if ($oLogo)
{
$session->set('logo', $oLogo->getMetavalue());
}
else
{
$session->set('logo', '');
}
$session->set('texte',$aTexte);
$aReturn = array(
'error' => "",
'impressum' => $sImpressum,
'datenschutz' => $sDatenschutz,
'satzung' => $sSatzung,
'barrierefreiheit' => $sBarrierefreiheit,
'texte' => $aTexte
);
// CSS für Mailvorlage ermitteln
$sStyle = "";
$sFile = "css/email.css";
if(file_exists($sFile))
{
$sStyle = file_get_contents($sFile);
}
$sFile = "css/customer.css";
if(file_exists($sFile))
{
$sStyle .= file_get_contents($sFile);
}
// Absender
$sFrom = 'portal.support@msu-solutions.de';
if($oAbsender)
{
$sFrom = trim($oAbsender->getMetavalue());
}
// Mailsignatur
$oInhalte = new InhalteController();
$sSignatur = $oInhalte->getMailSignatur($doctrine);
if($request->get('email'))
{
$oUser = $doctrine->getRepository(User::class)->findOneBy(["email" => $request->get('email')]);
if(!$oUser)
{
$aReturn['error'] = "Bitte prüfen Sie Ihre Eingabe.";
return $this->render('login/password-lost.html.twig', $aReturn);
}
$sHash = substr(md5(time()), 0, 10);
$sTokenDuration = 3600 / 60;
$sTokenDuration += 120;
$sTokenDuration = date("d.m.Y H:i:s", strtotime("+".$sTokenDuration." minutes", time()));
$oUser->setHash($sHash);
$oUser->setTokenduration($sTokenDuration);
$entityManager->persist($oUser);
$entityManager->flush();
// Empfänger
$sTo = trim($request->get('email'));
// Textvorlage
$oText = $doctrine->getRepository(Mailtexte::class)->findOneBy(["metakey" => "password_reset_request"]);
$sText = "";
// Betreff
$sSubject = "Passwort vergessen";
$sAnrede = "";
if($oClient && $oUser->getKundennummer())
{
$aResult = $oClient->GetCustomerInternalsByNo(array('p_No' => $oUser->getKundennummer(), 'v_ExportCustomerInternals' => array()))->v_ExportCustomerInternals;
if(property_exists($aResult, "CustomerInternal"))
{
$aResult = $aResult->CustomerInternal;
if(is_array($aResult))
{
$sAnrede = $aResult[0]->SalutationFormal;
}
else
{
$sAnrede = $aResult->SalutationFormal;
}
}
}
if(!$sAnrede)
{
// Standardanrede ermitteln
$oAnrede = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "Standardanrede"]);
$sAnrede = "Sehr geehrte Damen und Herren";
if($oAnrede && $oAnrede->getMetavalue())
{
$sAnrede = $oAnrede->getMetavalue();
}
}
if($oText)
{
// Betreff ermitteln
if($oText->getBetreff())
{
$sSubject = $oText->getBetreff();
}
// Inhalt ermitteln
$sText = $oText->getInhalt();
}
// URL
$sUrl = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
// HTML-Link
$sLink = $sUrl."?hash=".$sHash;
$sLink = '<a href="'. $sLink .'" target="_blank" title="Passwort zurücksetzen">' . $sLink . '</a>';
$sText = str_replace("#anrede#", $sAnrede, $sText);
$sText = str_replace("#link#", $sLink, $sText);
$sText = str_replace("#tokenduration#", $sTokenDuration, $sText);
$oMail = (new TemplatedEmail())
->from($sFrom)
->to($sTo)
->subject($sSubject)
// path of the Twig template to render
->htmlTemplate('emails/password.html.twig')
// pass variables (name => value) to the template
->context([
"subject" => $sSubject,
"text" => $sText,
"style" => $sStyle,
"signatur" => $sSignatur
]);
$loader = new FilesystemLoader('../templates/');
$twigEnv = new Environment($loader);
$twigBodyRenderer = new BodyRenderer($twigEnv);
$twigBodyRenderer->render($oMail);
try
{
$oMailer->send($oMail);
$this->addFlash(
'neu',
"Sie erhalten in Kürze eine E-Mail mit Informationen zum Zurücksetzen Ihres Passwortes. Bitte prüfen Sie auch den Posteingang in Ihrem Spam-Ordner"
);
}
catch(\Exception $exception)
{
$this->addFlash(
'error',
"Die Mail konnte leider nicht versendet werden."
);
}
return $this->redirectToRoute('login');
/*
$email = (new TemplatedEmail())
->from('hws@nvii-dev.com')
->to($sTo)
->subject('Passwort vergesssen')
// path of the Twig template to render
->htmlTemplate('emails/password.html.twig')
// pass variables (name => value) to the template
->context([
"link" => $sLink,
"style" => $sStyle,
"signatur" => $sSignatur
])
;
$mailer->send($email);
return $this->render('login/password-lost.html.twig', ['info' => 'Die Mail wurde versendet.', 'error' => "", 'impressum' => $sImpressum,
'datenschutz' => $sDatenschutz, 'barrierefreiheit' => $sBarrierefreiheit]);
*/
}
if($request->get('hash'))
{
$sHash = $request->get('hash');
$oUser = $doctrine->getRepository(User::class)->findOneBy(["hash" => $sHash]);
if($oUser)
{
// Prüfung Token-Laufzeit
$sTokenDuration = $oUser->getTokenduration();
$sTokenDurationTimestamp = strtotime("- 120 minutes", strtotime($sTokenDuration));
if(time() > $sTokenDurationTimestamp)
{
$oUser->setTokenduration(null);
$entityManager->persist($oUser);
$entityManager->flush();
$this->addFlash(
'error',
"Der Link zum Zurücksetzen Ihres Passworts ist abgelaufen."
);
return $this->redirectToRoute('login');
}
$aReturn['newpassword'] = $request->get('hash');
}
return $this->render('login/password-lost.html.twig', $aReturn);
}
if($request->get('password-first') == $request->get('password-second') AND !empty($request->get('password-first')))
{
$oUser = $doctrine->getRepository(User::class)->findOneBy(["hash" => $request->get("newhash")]);
$this->addFlash(
'neu',
'Das Passwort wurde gespeichert. Sie können sich nun anmelden.'
);
$oUser->setPassword(
$userPasswordHasher->hashPassword(
$oUser,
$request->get('password-first')
)
);
$oUser->setTokenduration(null);
$entityManager->persist($oUser);
$entityManager->flush();
// Empfänger
$sTo = $oUser->getEmail();
// Textvorlage
$oText = $doctrine->getRepository(Mailtexte::class)->findOneBy(["metakey" => "password_reset_successfully"]);
$sText = "";
// Betreff
$sSubject = "Passwort geändert";
$sAnrede = "";
if($oClient && $oUser->getKundennummer())
{
$aResult = $oClient->GetCustomerInternalsByNo(array('p_No' => $oUser->getKundennummer(), 'v_ExportCustomerInternals' => array()))->v_ExportCustomerInternals;
if(property_exists($aResult, "CustomerInternal"))
{
$aResult = $aResult->CustomerInternal;
if(is_array($aResult))
{
$sAnrede = $aResult[0]->SalutationFormal;
}
else
{
$sAnrede = $aResult->SalutationFormal;
}
}
}
if(!$sAnrede)
{
// Standardanrede ermitteln
$oAnrede = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "Standardanrede"]);
$sAnrede = "Sehr geehrte Damen und Herren";
if($oAnrede && $oAnrede->getMetavalue())
{
$sAnrede = $oAnrede->getMetavalue();
}
}
if($oText)
{
// Betreff ermitteln
if($oText->getBetreff())
{
$sSubject = $oText->getBetreff();
}
// Inhalt ermitteln
$sText = $oText->getInhalt();
}
// Aktuelles Datum & Uhrzeit
$sDatum = date("d.m.Y", time());
$sUhrzeit = date("H:i:s", time());
$sText = str_replace("#anrede#", $sAnrede, $sText);
$sText = str_replace("#datum#", $sDatum, $sText);
$sText = str_replace("#uhrzeit#", $sUhrzeit, $sText);
$oMail = (new TemplatedEmail())
->from($sFrom)
->to($sTo)
->subject($sSubject)
// path of the Twig template to render
->htmlTemplate('emails/password.html.twig')
// pass variables (name => value) to the template
->context([
"subject" => $sSubject,
"text" => $sText,
"style" => $sStyle,
"signatur" => $sSignatur
]);
$loader = new FilesystemLoader('../templates/');
$twigEnv = new Environment($loader);
$twigBodyRenderer = new BodyRenderer($twigEnv);
$twigBodyRenderer->render($oMail);
try
{
$oMailer->send($oMail);
$this->addFlash(
'neu',
"Sie haben Ihr Passwort erfolgreich geändert und erhalten in Kürze eine Bestätigung per E-Mail. Bitte prüfen Sie auch den Posteingang in Ihrem Spam-Ordner"
);
}
catch(\Exception $exception)
{
$this->addFlash(
'error',
"Sie haben Ihr Passwort erfolgreich geändert. Beim Senden der Bestätigung per E-Mail ist ein Fehler aufgetreten."
);
}
return $this->redirectToRoute('login');
}
return $this->render('login/password-lost.html.twig', $aReturn);
}
#[Route('/zugangbeantragen/', name: 'zugangbeantragen')]
public function addUser(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, ManagerRegistry $doctrine)
{
$oWebservice = new WebserviceController();
$oMailer = new MailController();
$oMailer = $oMailer->getMailer($doctrine);
$aPortalSettings = $doctrine->getRepository(Mailtexte::class)->findAll();
$oClient = null;
$aTemp = array();
foreach($aPortalSettings as $iKey => $oSetting)
{
$aTemp[$oSetting->getMetakey()] = $oSetting;
}
$aPortalSettings = $aTemp;
if($request->get('email') && $request->get('passwort'))
{
// Abruf Webservice zum Prüfen, ob Kundennummer und Leistungsobjektnummer vorhanden sind
$sKundennummer = $request->get('kundennummer');
$sLeistungsobjektnummer = $request->get('leistungsobjektnummer');
// lokales Nutzerobjekt
$oUser = new User();
$oUser->setEmail($request->get('email'));
$oUser->setRoles(array("ROLE_USER"));
$oUser->setZustellart($request->get('zustellart'));
$oUser->setAktiv(0);
$oUser->setKundennummer($sKundennummer);
$oUser->setLeistungsobjektnummer($sLeistungsobjektnummer);
$oUser->setDatenschutz(1);
$sHash = bin2hex(random_bytes(5));
$oUser->setHash($sHash);
$iWebId = null;
$oKeyLength = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "webid_key_length","type" => "konto"]);
if($oKeyLength)
{
$iLength = $oKeyLength->getMetavalue();
}
else
{
$iLength = 6;
}
$iWebId = bin2hex(random_bytes($iLength));
$oUser->setWebid($iWebId);
$sTokenDuration = 3600 / 60;
$sTokenDuration += 120;
$sTokenDuration = date("d.m.Y H:i:s", strtotime("+".$sTokenDuration." minutes", time()));
$oUser->setTokenduration($sTokenDuration);
$oUser->setPassword(
$userPasswordHasher->hashPassword(
$oUser,
$request->get('passwort')
)
);
$entityManager->persist($oUser);
$entityManager->flush();
$sMessage = "Ihr Zugang wurde beantragt! Zur Bestätigung Ihrer E-Mail erhalten Sie einen Link zugesandt. Erst nach der Bestätigung, kann die Registrierung abgeschlossen werden.";
// Mailversand
try
{
$oMail = $doctrine->getRepository(Mailtexte::class)->findOneBy(["metakey" => "zugang_beantrag_an_kunde"]);
$oCompany = $doctrine->getRepository(Texte::class)->findOneBy(["metakey" => "login-0"]);
// CSS für Mailvorlage ermitteln
$sStyle = "";
$sFile = "css/email.css";
if(file_exists($sFile))
{
$sStyle = file_get_contents($sFile);
}
$sFile = "css/customer.css";
if(file_exists($sFile))
{
$sStyle .= file_get_contents($sFile);
}
$sAnrede = "";
$sSubject = "";
$sThema = "";
if($oWebservice->checkWsConnection($doctrine))
{
$oClient = $oWebservice->getClient($doctrine);
}
if($oClient)
{
// Anrede ermitteln
$aResult = $oClient->GetCustomerInternalsByNo(array('p_No' => $sKundennummer, 'v_ExportCustomerInternals' => array()))->v_ExportCustomerInternals;
if(property_exists($aResult, "CustomerInternal"))
{
$aResult = $aResult->CustomerInternal;
if(is_array($aResult))
{
$sAnrede = $aResult[0]->SalutationFormal;
}
else
{
$sAnrede = $aResult->SalutationFormal;
}
}
}
if(!$sAnrede)
{
$sAnrede = "Sehr geehrte Damen und Herren";
$oAnrede = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "Standardanrede"]);
if($oAnrede && $oAnrede->getMetavalue())
{
$sAnrede = $oAnrede->getMetavalue();
}
}
// Betreff ermitteln
$sSubject = $oMail->getBetreff();
$sSubject = str_replace("#company_title#",$oCompany->getMetavalue(), $sSubject);
if(!$sSubject)
{
$sSubject = $request->get('kontaktgrund');
}
// Aktivierungslink
$sLink = $_SERVER['REQUEST_SCHEME'] . '://'. $_SERVER['SERVER_NAME'] .'/zugang/aktivieren/'.$sHash.'/';
// Mailsignatur
$oInhalte = new InhalteController();
$sSignatur = $oInhalte->getMailSignatur($doctrine);
// Nachricht
$sThema = $oMail->getInhalt();
$sThema = str_replace("#anrede#", $sAnrede, $sThema);
$sThema = str_replace("#kundennummer#", $sKundennummer, $sThema);
$sThema = str_replace("#link#", $sLink, $sThema);
$sThema = str_replace("#datum#", $sTokenDuration, $sThema);
$sThema = str_replace("#signatur#", $sSignatur, $sThema);
// Sender & Empfänger ermitteln
$sTo = $request->get('email');
$sFrom = 'portal.support@msu-solutions.de';
$oAbsender = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "standardabsender"]);
if($oAbsender)
{
$sFrom = trim($oAbsender->getMetavalue());
}
$oMail = (new TemplatedEmail())
->from($sFrom)
->to($sTo)
->subject($sSubject)
// path of the Twig template to render
->htmlTemplate('emails/zugang.html.twig')
// pass variables (name => value) to the template
->context([
"context" => $sThema,
"hash" => $sHash,
"code" => $iWebId,
"style" => $sStyle,
"signatur" => $sSignatur
]);
$loader = new FilesystemLoader('../templates/');
$twigEnv = new Environment($loader);
$twigBodyRenderer = new BodyRenderer($twigEnv);
$twigBodyRenderer->render($oMail);
$oMailer->send($oMail);
}
catch (\Throwable $th)
{
$sMessage = "Ihr Zugang wurde beantragt! Beim Senden Ihrer Bestätigung per E-Mail ist ein Fehler aufgetreten. Bitte wenden Sie sich an uns!";
}
$this->addFlash(
'neu',
$sMessage
);
$session = new Session();
$session->set('email', $request->get('email'));
}
$bWebId = false;
if($oUser->getAktiv() == 1)
{
$bWebId = true;
}
return $this->redirectToRoute('login', ["webid" => $bWebId]);
}
#[Route('/admin', name: 'login_admin')]
public function loginAdmin(AuthenticationUtils $authenticationUtils, Request $request, ManagerRegistry $doctrine, EntityManagerInterface $entityManager, Session $session): Response
{
// Settings
$oLinkImpressum = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "impressum"]);
$oLinkDatenschutz = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "datenschutz"]);
$oLinkSatzung = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "satzung"]);
$oLinkBarrierefreiheit = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "barrierefreiheit"]);
$oZeigeBarrierefreiheit = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "barrierefreiheitanzeigen"]);
// Portalsettings
$oLogo = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo"]);
$oLogoGraustufen = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-graustufen"]);
$oLogoSchwarzWeiss = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-schwarzweiss"]);
$oLogoDruckenDialog = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-print"]);
$oLogoPositionStartseite = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "logo-position-startseite"]);
if(!$request->getSession())
{
$session->start();
}
// Texte
$aTexte = $doctrine->getRepository(Texte::class)->findAll();
$aTemp = array();
foreach($aTexte as $iKey => $oText)
{
$aTemp[$oText->getMetakey()] = $oText->getMetavalue();
}
$aTexte = $aTemp;
if(!array_key_exists("portalname",$aTexte))
{
$aTexte["portalname"] = "Wasserportal";
}
$session->get('texte',$aTexte);
$sTitel = "Administratoren-Login";
if(array_key_exists("login-13", $aTexte) && $aTexte["login-13"])
{
$sTitel = $aTexte["login-13"];
}
// Impressum
$sImpressum = "";
if($oLinkImpressum)
{
$sImpressum = $oLinkImpressum->getMetavalue();
}
$session->set('impressum',$sImpressum);
// Datenschutz
$sDatenschutz = "";
if($oLinkDatenschutz)
{
$sDatenschutz = $oLinkDatenschutz->getMetavalue();
}
$session->set('datenschutz',$sDatenschutz);
// Satzung
$sSatzung = "";
if($oLinkSatzung)
{
$sSatzung = $oLinkSatzung->getMetavalue();
}
$session->set('satzung',$sSatzung);
// Barrierefreiheit
$sBarrierefreiheit = "";
if($oLinkBarrierefreiheit)
{
$sBarrierefreiheit = $oLinkBarrierefreiheit->getMetavalue();
}
$session->set('barrierefreiheit',$sBarrierefreiheit);
// Status Barrierefreiheit anzeigen / nicht anzeigen
$sZeigeBarrierefreiheit = "on";
if($oZeigeBarrierefreiheit)
{
$sZeigeBarrierefreiheit = $oZeigeBarrierefreiheit->getMetavalue();
}
$session->set('barrierefreiheitanzeigen', $sZeigeBarrierefreiheit);
// Laden des Kundenlogos, wenn vorhanden
if ($oLogo)
{
$session->set('logo', $oLogo->getMetavalue());
}
else
{
$session->set('logo', '');
}
if($oLogoGraustufen)
{
$session->set('logo-graustufen', $oLogoGraustufen->getMetavalue());
}
else{
$session->set('logo-graustufen', '');
}
if($oLogoSchwarzWeiss)
{
$session->set('logo-schwarzweiss', $oLogoSchwarzWeiss->getMetavalue());
}
else
{
$session->set('logo-schwarzweiss', '');
}
if($oLogoDruckenDialog)
{
$session->set('logo-print', $oLogoDruckenDialog->getMetavalue());
}
else
{
$session->set('logo-print', '');
}
if($oLogoPositionStartseite)
{
$session->set('logo-position-startseite', $oLogoPositionStartseite->getMetavalue());
}
$aReturn = array(
'titel' => $sTitel,
'texte' => $aTexte,
'impressum' => $sImpressum,
'datenschutz' => $sDatenschutz,
'barrierefreiheit' => $sBarrierefreiheit,
'satzung' => $sSatzung,
'error' => ""
);
return $this->render('login/index_admin.html.twig', $aReturn);
}
#[Route('/zaehlerstand/{rahmenvertrag}/{leistungsobjektnr}/', name: 'zaehlerstand_link')]
public function zaehlerstandlink(Request $request, EntityManagerInterface $entityManager, ManagerRegistry $doctrine, $rahmenvertrag, $leistungsobjektnr)
{
$session = new Session();
if($rahmenvertrag and $leistungsobjektnr)
{
$session->set('rahmenvertrag',$rahmenvertrag);
$session->set('leistungsobjektnr',$leistungsobjektnr);
return $this->redirectToRoute('login',["rahmenvertrag" => $rahmenvertrag]);
}
}
#[Route('/zugang/aktivieren/{hash}/', name: 'zugangaktivieren')]
public function activeAccount(Request $request, UserPasswordHasherInterface $userPasswordHasher, MailerInterface $mailer, EntityManagerInterface $entityManager, ManagerRegistry $doctrine, $hash)
{
$session = new Session();
$oUser = $doctrine->getRepository(User::class)->findOneBy(["hash" => $hash]);
if(!$oUser)
{
$this->addFlash(
'error',
'Der Code ist leider falsch.'
);
}
else
{
// Prüfen, ob Tokenduration in der Vergangenheit liegt
$sTokenDuration = $oUser->getTokenduration();
// Mail mit Aktivierungslink wird erneut versendet wenn Token abgelaufen ist
if(time() > strtotime($sTokenDuration))
{
// Mailversand
$sLink = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] .'/zugang/aktivieren/'.$oUser->getHash().'/';
$sStyle = "";
$sFile = "css/email.css";
if(file_exists($sFile))
{
$sStyle = file_get_contents($sFile);
}
$sFile = "css/customer.css";
if(file_exists($sFile))
{
$sStyle .= file_get_contents($sFile);
}
// Mailsignatur
$oInhalte = new InhalteController();
$sSignatur = $oInhalte->getMailSignatur($doctrine);
$oMail = $doctrine->getRepository(Mailtexte::class)->findOneBy(["metakey" => "zugang_beantrag_an_kunde"]);
$oCompany = $doctrine->getRepository(Texte::class)->findOneBy(["metakey" => "login-0"]);
$sThema = "";
$oWebservice = new WebserviceController();
$oClient = null;
if($oWebservice->checkWsConnection($doctrine))
{
$oClient = $oWebservice->getClient($doctrine);
}
$sAnrede = "Sehr geehrte Damen und Herren";
if($oClient)
{
$aResult = $oClient->GetCustomerInternalsByNo(array('p_No' => $oUser->getKundennummer(), 'v_ExportCustomerInternals' => array()))->v_ExportCustomerInternals;
if(property_exists($aResult, "CustomerInternal"))
{
$aResult = $aResult->CustomerInternal;
if(is_array($aResult))
{
$sAnrede = $aResult[0]->SalutationFormal;
}
else
{
$sAnrede = $aResult->SalutationFormal;
}
}
}
if($oMail)
{
$sTokenDuration = 3600 / 60;
$sTokenDuration += 120;
$sTokenDuration = date("d.m.Y H:i:s", strtotime("+".$sTokenDuration." minutes", time()));
$oUser->setTokenduration($sTokenDuration);
$entityManager->persist($oUser);
$entityManager->flush();
$sSubject = $oMail->getBetreff();
$sSubject = str_replace("#company_title#",$oCompany->getMetavalue(), $sSubject);
$sThema = $oMail->getInhalt();
$sThema = str_replace("#anrede#",$sAnrede, $sThema);
$sThema = str_replace("#kundennummer#",$oUser->getKundennummer(), $sThema);
$sThema = str_replace("#link#",$sLink, $sThema);
$sThema = str_replace("#datum#",$sTokenDuration, $sThema);
$sThema = str_replace("#signatur#",$sSignatur, $sThema);
}
if(empty($sSubject))
{
$sSubject = $request->get('kontaktgrund');
}
$oAbsender = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "standardabsender"]);
$sMail = 'portal.support@msu-solutions.de';
if($oAbsender)
{
$sMail = trim($oAbsender->getMetavalue());
}
$email = (new TemplatedEmail())
->from($sMail)
->to($oUser->getEmail())
->subject($sSubject)
// path of the Twig template to render
->htmlTemplate('emails/zugang.html.twig')
// pass variables (name => value) to the template
->context([
"context" => $sThema,
"hash" => $oUser->getHash(),
"code" => $oUser->getWebid(),
"style" => $sStyle,
"signatur" => $sSignatur
]);
$mailer->send($email);
$this->addFlash(
'neu',
'Ihr Zugang wurde beantragt! Zur Bestätigung Ihrer E-Mail erhalten Sie einen Link zugesandt. Erst nach der Bestätigung, kann die Registrierung abgeschlossen werden.'
);
}
else
{
if($oUser->getAktiv() != 1)
{
$oWebservice = new WebserviceController();
$oClient = null;
if($oWebservice->checkWsConnection($doctrine))
{
$oClient = $oWebservice->getClient($doctrine);
}
if($oClient)
{
$sKundennummer = $oUser->getKundennummer();
$iWebId = $oUser->getWebid();
$aResult = $oClient->GetCustomerInternalsByNo(array('p_No' => $sKundennummer, 'v_ExportCustomerInternals' => array()))->v_ExportCustomerInternals;
if(property_exists($aResult, "CustomerInternal"))
{
$aResult = $aResult->CustomerInternal;
if(property_exists($aResult->AccountingContracts, "AccountingContract"))
{
if(is_array($aResult->AccountingContracts->AccountingContract))
{
$sContractNo = $aResult->AccountingContracts->AccountingContract[0]->No;
$sZaehlerNo = $aResult->AccountingContracts->AccountingContract[0]->ServiceObjects->ServiceObject->Code;
}
else
{
$sContractNo = $aResult->AccountingContracts->AccountingContract->No;
$sZaehlerNo = $aResult->AccountingContracts->AccountingContract->ServiceObjects->ServiceObject->Code;
}
// Prüfen, ob in Settings der metavalue auf on steht beim metakey output
$oOutput = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "output"]);
$aTempData = array(
"ZB_ADNUMMER" => $sKundennummer,
"ZB_AVERTRAG" => $sContractNo,
"ZB_ZNUMMER" => $sZaehlerNo,
"ZB_NUTZERNAME" => $oUser->getEmail(),
"ZB_WEBID" => $iWebId,
"ZB_ANMELD_EMAIL" => $oUser->getEmail()
);
if($oOutput->getMetavalue() == "on")
{
$aTempData["ZB_OM_KATEGORIE"] = $oUser->getZustellart();
}
$aResult = $oWebservice->sendData($doctrine, "ZUGANG_BEANT", $sKundennummer, $aTempData);
if($aResult->return_value)
{
$oUser->setAktiv(1);
$entityManager->persist($oUser);
$entityManager->flush();
}
}
else
{
$this->addFlash(
'error',
'Bei der Aktivierung Ihres Zugangs ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.'
);
return $this->redirectToRoute('login');
}
}
}
if($oUser->getWebid() && $oUser->getWebid() != 0)
{
// Verifizierung per Web-Id ausstehend
$this->addFlash(
'neu',
'Ihre E-Mail-Adresse wurde erfolgreich validiert. Bevor Sie sich das erste mal in unseren Kundenportal einloggen können, erhalten Sie postalisch eine spezielle Web-ID. Dies dient zur Sicherheit Ihrer Daten.'
);
return $this->redirectToRoute('login');
}
else
{
$session->set('emailtwofa', "");
$session->set('passwordtwofa', "");
$this->addFlash(
'neu',
'Ihr Zugang wurde erfolgreich aktiviert.'
);
}
}
else
{
if($oUser->getWebid() == 0)
{
// Verifizierung per Web-ID abgeschlossen
$this->addFlash(
'neu',
'Ihr Zugang ist bereits aktiv.'
);
}
else
{
// Verifizierung per Web-ID ausstehend
$this->addFlash(
'neu',
'Ihre E-Mail-Adresse wurde erfolgreich validiert. Bevor Sie sich das erste mal in unseren Kundenportal einloggen können, erhalten Sie postalisch eine spezielle Web-ID. Dies dient zur Sicherheit Ihrer Daten.'
);
}
}
}
}
return $this->redirectToRoute('login');
}
#[Route('/zaehlerstanderfassen/', name: 'zaehlerstanderfassen')]
public function zaehlerstanderfassen(Request $request, MailerInterface $mailer, EntityManagerInterface $entityManager, ManagerRegistry $doctrine)
{
$aZaehlernummern = $request->get('zaehlernr');
$oWebservice = new WebserviceController();
$oClient = null;
if($oWebservice->checkWsConnection($doctrine))
{
$oClient = $oWebservice->getClient($doctrine);
}
$sBusinessPartnerNo = $request->get('kundennummer');
$sBaseContractNo = $request->get('basecontractnr');
$sLeistungsobjektNr = $request->get('leistungsobjektnummerajax');
$oCheckConfig = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "authentifizierungz"]);
if($oCheckConfig->getMetavalue() == "hashz")
{
$aResult = $oClient->AuthenticateWithHash(array('p_ServiceObject' => $sLeistungsobjektNr, 'p_Hash' => $sBusinessPartnerNo,'v_ExportCustomerInternals' => array()));
$sBusinessPartnerNo = $aResult->v_ExportCustomerInternals->CustomerInternal->No;
}
$bDrucken = false;
// Prüfen ob in den settings der metakey fotoupload auf on steht
$oSettingsFoto = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "fotoupload"]);
$sData = "";
$sAnrede = "Sehr geehrte Damen und Herren";
$oAnrede = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "Standardanrede"]);
if($oAnrede)
{
$sAnrede = $oAnrede->getMetavalue();
}
$sEmailkontakt = $request->get('emailkontakt');
$sTelefonKontakt = $request->get('telefonkontakt');
$aResult = array();
$sTempNr = 0;
$sMailText = "";
$aTempData["ZS_EMAIL"] = $sEmailkontakt;
$aTempData["ZS_TEL"] = $sTelefonKontakt;
$aFotos = array();
$iDokument = 1;
foreach($aZaehlernummern as $iKey => $sZaehlerNr)
{
$sData = "";
if(empty($request->get('zaehlerstandneu')[$iKey]))
{
continue;
}
$dAblesedatum = $request->get('ablesedatum')[$iKey];
$dAblesedatum = date_create($dAblesedatum);
$dAblesedatum = date_format($dAblesedatum,"d.m.Y");
$iZaehlerstandNeu = $request->get('zaehlerstandneu')[$iKey];
$iZaehlerstandNeu = str_replace(".",",",$iZaehlerstandNeu);
$iZaehlerNo = $request->get('zaehlernr')[$iKey];
$sAccountNr = $request->get('AccountingContractNo')[$iKey];
if($sTempNr != $sZaehlerNr)
{
$aTempData[$iKey] = array(
"ZS_ZNUMMER" => $iZaehlerNo,
"ZS_ABLDATUM" => $dAblesedatum,
"ZS_ABLSTAND" => $iZaehlerstandNeu,
"ZS_LOBJEKT" => $sLeistungsobjektNr,
"ZS_REASON" => "",
"ZS_METERREGIDX" => $request->get('ZS_METERREGIDX')[$iKey],
);
$sTempNr = $sZaehlerNr;
}
else
{
$iTemp = $iKey;
$iTemp--;
$aTempData[$iTemp]['ZS_METERREGIDX'] = $request->get('ZS_METERREGIDX')[$iKey];
$aTempData[$iTemp]['ZS_ABLSTAND'] = $iZaehlerstandNeu;
}
$sGrund = "";
#if($oSettingsFoto && $oSettingsFoto->getMetavalue() == "on")
if($request->files->get('zaehlerstandfoto'))
{
if(array_key_exists($iKey, $request->files->get('zaehlerstandfoto')))
{
// Prüfen ob im request zaehlerstandfoto mitgesendet wurde
if($request->files->get('zaehlerstandfoto')[$iKey])
{
// Datei aus dem $_FILES request direkt in base64 umwandeln
#$sData = base64_encode(file_get_contents($request->files->get('zaehlerstandfoto')[$iKey]));
$file = $request->files->get('zaehlerstandfoto')[$iKey];
$tempPath = $file->getPathname();
// Lese das Bild in PHP mit GD
$source = imagecreatefromstring(file_get_contents($tempPath));
// Bestimme neue Größe
list($width, $height) = getimagesize($tempPath);
$newWidth = 500;
$newHeight = ($height / $width) * $newWidth;
// Erstelle ein neues Bild mit neuer Größe
$newImage = imagecreatetruecolor($newWidth, $newHeight);
// Skaliere das Original-Bild in das neue Bild
imagecopyresampled($newImage, $source, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
// Speicher das neue Bild als PNG-Datei
imagepng($newImage, 'customerdata/new_image.png');
// Lösche die Bilder aus dem Speicher
imagedestroy($source);
imagedestroy($newImage);
$sData = base64_encode(file_get_contents('customerdata/new_image.png'));
unlink('customerdata/new_image.png');
// Dateiname ermitteln
$sFileName = $request->files->get('zaehlerstandfoto')[$iKey]->getClientOriginalName();
// Dateityp ermitteln
$sFileType = $request->files->get('zaehlerstandfoto')[$iKey]->getClientOriginalExtension();
$aTempData[$iKey]["ZS_DOCUMENT".$iDokument] = $sData;
$aTempData[$iKey]["ZS_FILEFORMAT".$iDokument] = $sFileType;
$aTempData[$iKey]["ZS_FILEDESCRIPTION".$iDokument] = $sFileName;
$aFotos[$sZaehlerNr] = $sData;
$iDokument++;
}
}
// Prüfen ob in den settings der metakey fotoupload auf on steht
$oSettingsFotoPflicht = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "fotouploadpflicht"]);
if($oSettingsFotoPflicht)
{
if($oSettingsFotoPflicht->getMetavalue() == 0)
{
if ($request->get('toleranzart')[$iKey] && $request->get('toleranzart')[$iKey] == 'Anderer Grund')
{
$aTempData[$iKey]["ZS_REASON"] = $request->get('toleranzgrundtext')[$iKey];
$sGrund = $request->get('toleranzgrundtext')[$iKey];
}
if ($request->get('toleranzart')[$iKey] && $request->get('toleranzart')[$iKey] != 'Anderer Grund')
{
$aTempData[$iKey]["ZS_REASON"] = $request->get('toleranzart')[$iKey];
$sGrund = $request->get('toleranzart')[$iKey];
}
}
}
}
else
{
if($request->files->get('toleranzart') && array_key_exists($iKey, $request->files->get('toleranzart')))
{
if ($request->get('toleranzart')[$iKey] && $request->get('toleranzart')[$iKey] == 'Anderer Grund')
{
$aTempData[$iKey]["ZS_REASON"] = $request->get('toleranzgrundtext')[$iKey];
$sGrund = $request->get('toleranzgrundtext')[$iKey];
}
if ($request->get('toleranzart')[$iKey] && $request->get('toleranzart')[$iKey] != 'Anderer Grund')
{
$aTempData[$iKey]["ZS_REASON"] = $request->get('toleranzart')[$iKey];
$sGrund = $request->get('toleranzart')[$iKey];
}
}
}
$iZaehlerstandNeu = str_replace(",",".",$iZaehlerstandNeu);
$sMailText .= "Zählernummer: ".$sZaehlerNr."<br>";
$sMailText .= "Zählerstand: ".number_format($iZaehlerstandNeu,"2",",",".")."<br>";
$sMailText .= "Ablesedatum: ".date("d.m.Y",strtotime($dAblesedatum))."<br>";
if(!empty($sGrund))
{
$sMailText .= "Änderung: ".$sGrund."<br>";
}
if(!empty($sData))
{
$sMailText .= "<img src='data:image/jpeg;base64,".$sData."' alt='Zählerstandfoto'><br>";
}
$sMailText .= "<br><br>";
}
if($oClient)
{
try {
$oResult = $oWebservice->sendData($doctrine, "ZAEHLER_ERFASS", $sBusinessPartnerNo, $aTempData, $sAccountNr);
if($oResult->return_value)
{
if($sEmailkontakt)
{
$sTo = $sEmailkontakt;
$oAbsender = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "standardabsender"]);
$sMail = 'portal.support@msu-solutions.de';
// $sMail = 'msu@nvii-dev.com';
if($oAbsender)
{
$sMail = trim($oAbsender->getMetavalue());
}
$sStyle = "";
$sFile = "css/email.css";
if(file_exists($sFile))
{
$sStyle = file_get_contents($sFile);
}
$sFile = "css/customer.css";
if(file_exists($sFile))
{
$sStyle .= file_get_contents($sFile);
}
$oAbsender = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "standardabsender"]);
$sAnrede = "Sehr geehrte Damen und Herren";
$oAnrede = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "Standardanrede"]);
if($oAnrede)
{
$sAnrede = $oAnrede->getMetavalue();
}
$aResult = $oClient->GetCustomerInternalsByNo(array('p_No' => $sBusinessPartnerNo, 'v_ExportCustomerInternals' => array()))->v_ExportCustomerInternals->CustomerInternal;
if(is_array($aResult))
{
$sAnrede = $aResult[0]->SalutationFormal;
}
else
{
$sAnrede = $aResult->SalutationFormal;
}
$sMail = 'portal.support@msu-solutions.de';
if($oAbsender)
{
$sMail = trim($oAbsender->getMetavalue());
}
$oMail = $doctrine->getRepository(Mailtexte::class)->findOneBy(["metakey" => "zaeherstand_gemeldet_nologin"]);
if($oMail)
{
$sSubject = $oMail->getBetreff();
$sSubject = str_replace("#objectno#",$sLeistungsobjektNr, $sSubject);
$sThema = $oMail->getInhalt();
$sThema = str_replace("#anrede#",$sAnrede, $sThema);
$sThema = str_replace("#objectno#",$sLeistungsobjektNr, $sThema);
$sThema = str_replace("#stand#",$sMailText, $sThema);
}
$sTo = $sEmailkontakt;
// Mailsignatur
$oInhalte = new InhalteController();
$sSignatur = $oInhalte->getMailSignatur($doctrine);
$oMail = (new TemplatedEmail())
->from($sMail)
->to($sTo)
->subject($sSubject)
// path of the Twig template to render
->htmlTemplate('emails/zaehlerstandmelden.html.twig')
// pass variables (name => value) to the template
->context([
"text" => $sThema,
"signatur" => $sSignatur,
"style" => $sStyle
]);
$loader = new FilesystemLoader('../templates/');
$twigEnv = new Environment($loader);
$twigBodyRenderer = new BodyRenderer($twigEnv);
$twigBodyRenderer->render($oMail);
$oCustomMailer = new MailController();
$oCustomMailer = $oCustomMailer->getMailer($doctrine);
try
{
$oCustomMailer->send($oMail);
}
catch(\Exception $exception)
{
$this->addFlash(
'error',
"Die Mail konnte leider nicht versendet werden."
);
}
}
$this->addFlash(
'neu',
'Der Zählerstand wurde gesendet.'
);
$bDrucken = true;
}
else
{
$this->addFlash(
'error',
'Ihr Zählerstand wurde nicht übertragen.'
);
}
} catch (\Throwable $th) {
$this->addFlash(
'error',
'Ihr Zählerstand wurde nicht übertragen. Bitte versuchen Sie es später erneut.'
);
}
$session = new Session();
$session->set('zaehler',$aZaehlernummern);
$session->set('staende',$request->get('zaehlerstandneu'));
$session->set('ablesedatum',$request->get('ablesedatum'));
$session->set('einheit',$request->get('einheit'));
$session->set('fotos',$aFotos);
$session->set('toleranzart',$request->get('toleranzart'));
$session->set('toleranzarttext',$request->get('toleranzgrundtext'));
return $this->redirectToRoute('login',["drucken" => $bDrucken]);
}
else
{
$this->addFlash(
'error',
'Die Übermittlung Ihres Zählerstands ist zur Zeit nicht möglich. Bitte versuchen Sie es später erneut.'
);
return $this->redirectToRoute('login');
}
}
#[Route('/login/twofa/', name: 'login_twofa')]
public function logintwofa(Request $request, MailerInterface $mailer, EntityManagerInterface $entityManager, ManagerRegistry $doctrine)
{
if($request->get('emailtwofa'))
{
$session = new Session();
$session->set('email', $request->get('emailtwofa'));
$session->set('passwordtwofa', $request->get('passwordtwofa'));
$oUser = $doctrine->getRepository(User::class)->findOneBy(["email" => $request->get('emailtwofa')]);
if(!$oUser)
{
return $this->redirectToRoute('login');
}
// Prüfung Token-Laufzeit
$sTokenDuration = $oUser->getTokenduration();
$sTokenDurationTimestamp = strtotime("- 120 minutes", strtotime($sTokenDuration));
if(time() > $sTokenDurationTimestamp)
{
$oWebservice = new WebserviceController();
$oClient = null;
if($oWebservice->checkWsConnection($doctrine))
{
$oClient = $oWebservice->getClient($doctrine);
}
$aTemp = array();
$sTo = $request->get('emailtwofa');
$sAnrede = "Sehr geehrte Damen und Herren";
$oAnrede = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "Standardanrede"]);
if($oAnrede)
{
$sAnrede = $oAnrede->getMetavalue();
}
// Mailsignatur
$oInhalte = new InhalteController();
$sSignatur = $oInhalte->getMailSignatur($doctrine);
$sTokenDuration = 3600;
$sTokenLength = 12;
$oTokenDuration = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "regist_token_duration"]);
$oTokenLength = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "regist_token_length"]);
if ($oTokenDuration)
{
$sTokenDuration = (int) $oTokenDuration->getMetavalue();
}
if ($oTokenLength)
{
$sTokenLength = (int) $oTokenLength->getMetavalue();
}
if(empty($sTokenDuration))
{
$sTokenDuration = 3600;
}
if(empty($sTokenLength))
{
$sTokenLength = 12;
}
$sTokenDuration = $sTokenDuration / 60;
$sTokenDuration += 120;
$sTokenDuration = date("d.m.Y H:i:s", strtotime("+".$sTokenDuration." minutes", time()));
// Mailvorlage
$aMailvorlage = $doctrine->getRepository(Mailtexte::class)->findAll();
$aTemp = array();
foreach ($aMailvorlage as $iKey => $oSetting) {
$aTemp[$oSetting->getMetakey()] = $oSetting;
}
$aMailvorlage = $aTemp;
$sAnrede = "Sehr geehrte Damen und Herrren";
if(in_array("ROLE_ADMIN",$oUser->getRoles()))
{
$oAnrede = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "Standardanrede"]);
if($oAnrede)
{
$sAnrede = $oAnrede->getMetavalue();
}
}
else
{
if($oClient)
{
$aResult = $oClient->GetCustomerInternalsByNo(array('p_No' => $oUser->getKundennummer(), 'v_ExportCustomerInternals' => array()))->v_ExportCustomerInternals->CustomerInternal;
if(is_array($aResult))
{
$sAnrede = $aResult[0]->SalutationFormal;
}
else
{
$sAnrede = $aResult->SalutationFormal;
}
}
}
$sHash = substr(md5(time()), 0, 5);
$oUser->setHash($sHash);
$oUser->setTokenduration($sTokenDuration);
$entityManager->persist($oUser);
$entityManager->flush();
$sSubject = $aMailvorlage["token_sendet"]->getBetreff();
$sMailBody = $aMailvorlage["token_sendet"]->getInhalt();
$sAbsender = $aMailvorlage["token_sendet"]->getAbsender();
if(empty($sAbsender))
{
$oAbsender = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "standardabsender"]);
if($oAbsender)
{
$sAbsender = trim($oAbsender->getMetavalue());
}
}
$sReplacedMailBody = str_replace(array(
"#anrede#", "#code#", "#tokenduration#"
), array(
$sAnrede, $sHash, $sTokenDuration
), $sMailBody);
$sStyle = "";
$sFile = "css/email.css";
if(file_exists($sFile))
{
$sStyle = file_get_contents($sFile);
}
$sFile = "css/customer.css";
if(file_exists($sFile))
{
$sStyle .= file_get_contents($sFile);
}
$oSystem = $doctrine->getRepository(Texte::class)->findOneBy(["metakey" => "login-0"]);
$oMail = (new TemplatedEmail())
->from($sAbsender)
->to($sTo)
->subject($sSubject)
// path of the Twig template to render
->htmlTemplate('emails/twofa.html.twig')
// pass variables (name => value) to the template
->context([
"context" => $sReplacedMailBody,
"betreff" => $sSubject,
"signatur" => $sSignatur,
"style" => $sStyle,
"system" => $oSystem->getMetavalue()
]);
$loader = new FilesystemLoader('../templates/');
$twigEnv = new Environment($loader);
$twigBodyRenderer = new BodyRenderer($twigEnv);
$twigBodyRenderer->render($oMail);
$oMailer = new MailController();
$oMailer = $oMailer->getMailer($doctrine);
$session = new Session();
$session->set("emailtwofa",$request->get('emailtwofa'));
$session->set("pwtwofa",$request->get('pwtwofa'));
try
{
$oMailer->send($oMail);
$this->addFlash(
'neu',
'Wir haben Ihnen einen Logincode per E-Mail zugesendet.'
);
}
catch(\Exception $exception)
{
$this->addFlash(
'error',
"Die Mail konnte leider nicht versendet werden."
);
}
}
}
return $this->redirectToRoute('login',["twofa" => true]);
}
}