src/Controller/LoginController.php line 38
<?phpnamespace App\Controller;use App\Controller\WebserviceController;use App\Entity\Auswahllisten;use App\Entity\Mailtexte;use App\Entity\News;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"]);$oCaptcha = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "captcha"]);// 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"]);$oFavicon = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "favicon"]);$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");$oMailversand = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "zaehlerstand-email-deaktiviert"]);$bMailversand = true;if($oMailversand && $oMailversand->getMetavalue() == "on"){$bMailversand = false;}$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);}}}}}$oNachrichtenCheck = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "nachrichten-funktion"]);$session->set('nachrichten-funktion',false);if($oNachrichtenCheck){if($oNachrichtenCheck->getMetavalue() == "on"){$session->set('nachrichten-funktion', true);}}$oNewsCheck = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "news-funktion"]);$session->set('news-funktion',false);$aTemp = array();$oNeuesteNews = false;if($oNewsCheck){if($oNewsCheck->getMetavalue() == "on"){$session->set('news-funktion',true);$aNewsList = $doctrine->getRepository(News::class)->findBy([], ['start' => 'DESC']);foreach($aNewsList as $iKey => $oNews){if($iKey == 0){$oNeuesteNews = $oNews;}if($oNews->getEnde()){if($oNews->getEnde() < new \DateTime()){continue;}}// wenn die News älter als 1 Jahr sind, dann nicht mehr anzeigenif($oNews->getStart() < new \DateTime('-1 year')){continue;}$aTemp[] = $oNews;}}}$aNews = $aTemp;// $oInhalteController = new InhalteController;// $aTexte = $oInhalteController->getTexte($doctrine);// 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 vorhandenif ($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($oFavicon && $oFavicon->getMetavalue()){$session->set('favicon', $oFavicon->getMetavalue());}else{$session->set('favicon', '');}// 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 vorhandenif(!$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,],);// // Key f?r Linktext aller Fooerlogos ermitteln// $sFooterLogoTextSlotKeyname = "footer_logo_text_slot_" . $i + 1;// if(!array_key_exists($sFooterLogoTextSlotKeyname, $aTexte) || !$aTexte[$sFooterLogoTextSlotKeyname])// {// $aTexte[$sFooterLogoTextSlotKeyname] = "Aktuelle Satzung";// }}$session->set('texte',$aTexte);$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);if(!empty($request->get('drucken'))){$session->set('zaehlerstandmelden_abgemeldet', false);}// 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ärungif($oDatenschutzText && $oDatenschutzText->getMetavalue()){$sDatenschutzText = $oDatenschutzText->getMetavalue();}// E-Mail-Adresse für Datenschutzerklärungif($oDatenschutzMail && $oDatenschutzMail->getMetavalue()){$sDatenschutzMail = $oDatenschutzMail->getMetavalue();}$sDatenschutzMail = "<a href='mailto:".$sDatenschutzMail."'>".$sDatenschutzMail."</a>";$sDatenschutzText = str_replace("#datenschutz_mail#", $sDatenschutzMail, $sDatenschutzText);// Widerrufif($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 ermittelnif($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')]);}}$bCpatcha = false;if($oCaptcha){if($oCaptcha->getMetavalue() == "on"){$bCpatcha = true;}}$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,'captcha' => $bCpatcha);$b2FA = false;// 2FAif($o2FA->getMetavalue() && $o2FA->getMetavalue() == "on"){$b2FA = true;}$aReturn["twofa"] = $b2FA;$aReturn["auth"] = $oAuth;$aReturn["authz"] = $oAuthZ;$aReturn["news"] = $aNews;$aReturn["neuestenews"] = $oNeuesteNews;// Anzeige drucken Dialogif($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"]);$oFavicon = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "favicon"]);$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($oFavicon && $oFavicon->getMetavalue()){$session->set('favicon', $oFavicon->getMetavalue());}else{$session->set('favicon', '');}$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 ermittelnif($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');}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 ermittelnif($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.";// Mailversandtry{$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"]);$oFavicon = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "favicon"]);$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 vorhandenif ($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());}$oCaptcha = $doctrine->getRepository(Settings::class)->findOneBy(["metakey" => "captcha"]);$bCpatcha = false;if($oCaptcha){if($oCaptcha->getMetavalue() == "on"){$bCpatcha = true;}}$aReturn = array('titel' => $sTitel,'texte' => $aTexte,'impressum' => $sImpressum,'datenschutz' => $sDatenschutz,'barrierefreiheit' => $sBarrierefreiheit,'satzung' => $sSatzung,'error' => "",'captcha' => $bCpatcha);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 istif(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('/zaehlerstand/', name: 'zaehlerstandzeigen')]public function zaehlerstandzeigen(Request $request, ManagerRegistry $doctrine){$oHinweisZaehler = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "hinweis", "type" => "zaehlerstandsmeldung"]);if($oHinweisZaehler){if(strtotime($oHinweisZaehler->getMetavalue()) < time()){$oHinweisZaehler = null;}}return $this->redirectToRoute('login',['target_action' => 'zaehlerstand_melden', "hinweiszaehler" => $oHinweisZaehler]);}#[Route('/zaehlerstanderfassen/', name: 'zaehlerstanderfassen')]public function zaehlerstanderfassen(Request $request, MailerInterface $mailer, EntityManagerInterface $entityManager, ManagerRegistry $doctrine){$aZaehlernummern = $request->get('zaehlernr');$oWebservice = new WebserviceController();$oClient = null;$oErlaubeNachkommastellen = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "zaehlerstandsmeldung_nachkommastellen_zulassen", "type" => "zaehlerstandsmeldung"]);$sErlaubeNachkommastellen = false;if($oErlaubeNachkommastellen && $oErlaubeNachkommastellen->getMetavalue() == 1){$sErlaubeNachkommastellen = true;}if($oWebservice->checkWsConnection($doctrine)){$oClient = $oWebservice->getClient($doctrine);}$sBusinessPartnerNo = $request->get('kundennummer');$sBaseContractNo = $request->get('basecontractnr');$sLeistungsobjektNr = $request->get('leistungsobjektnummerajax');$aSettings = $doctrine->getRepository(Settings::class)->findAll();$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;}$aTempSettings = array();foreach($aSettings as $iKey => $oSetting){$aTempSettings[$oSetting->getMetakey()] = $oSetting->getMetavalue();}$aSettings = $aTempSettings;if(!array_key_exists("zaehlerstand-email-deaktiviert", $aSettings)){$aSettings["zaehlerstand-email-deaktiviert"] = "";}$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){$sFileBase64 = "";# var_dump($request->get('zaehlerstandneu')[$iKey]);if(empty($request->get('zaehlerstandneu')[$iKey]) and "0" != $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];if($sErlaubeNachkommastellen){$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($request->get('zaehlerstandfoto-filedata')){if(array_key_exists($iKey, $request->get('zaehlerstandfoto-filedata'))){// Prüfen ob im request zaehlerstandfoto mitgesendet wurdeif($request->get('zaehlerstandfoto-filedata')[$iKey]){$sFileBase64 = $request->get('zaehlerstandfoto-filedata')[$iKey];$sFileName = $request->get('zaehlerstandfoto-filename')[$iKey];$sFileType = $request->get('zaehlerstandfoto-filetype')[$iKey];$aTempData[$iKey]["ZS_DOCUMENT".$iDokument] = $sFileBase64;$aTempData[$iKey]["ZS_FILEFORMAT".$iDokument] = $sFileType;$aTempData[$iKey]["ZS_FILEDESCRIPTION".$iDokument] = $sFileName;$aFotos[$sZaehlerNr] = $sFileBase64;$iDokument++;}}// #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->get('toleranzart') && array_key_exists($iKey, $request->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 .= "Zählerstand: ".$iZaehlerstandNeu."<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($aSettings["zaehlerstand-email-deaktiviert"]!=='on'){if($sEmailkontakt){$sTo = $sEmailkontakt;$oAbsender = $doctrine->getRepository(Portalsettings::class)->findOneBy(["metakey" => "standardabsender"]);$sMail = 'portal.support@msu-solutions.de';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);$sSubject = str_replace("#vertragsnr#", $sAccountNr, $sSubject);$sThema = $oMail->getInhalt();$sThema = str_replace("#anrede#", $sAnrede, $sThema);$sThema = str_replace("#objectno#", $sLeistungsobjektNr, $sThema);$sThema = str_replace("#vertragsnr#", $sAccountNr, $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]);}}