<?php
/******************************************************************************
* KernelSubscriber.php [IMPORT] *
* -------------------------------------------------------------------------- *
* Diese Datei wurde nicht für dieses Projekt entwickelt, sondern lediglich *
* importiert und in das Projekt integriert. *
* *
* Es steht unter einer proprietären Lizenz, eine Weitergabe oder Verwendung *
* in anderen Projekten ist ohne ausdrückliche Zustimmungen von *
* Michael Hack Software e.K. nicht gestattet. Die Verwendung dieses *
* Quellcodes ist ausschließlich auf dieses Projekt beschränkt. *
* -------------------------------------------------------------------------- *
* Copyright (c) 2023 | Michael Hack Software e.K. | www.mh-s.de *
******************************************************************************/
namespace Core\Subscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mime\Email;
class KernelSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() : array {
return [
KernelEvents::CONTROLLER => 'onControllerEvent',
KernelEvents::EXCEPTION => 'onKernelException',
KernelEvents::REQUEST => 'onRequest',
];
}
/**
* JSON Anfrage verarbeiten
* @param ControllerEvent $event
*/
public function onControllerEvent(ControllerEvent $event) {
$request = $event->getRequest();
if ($request->getContentType() != 'json' || !$request->getContent()) {
return;
}
$data = json_decode($request->getContent(), true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new BadRequestHttpException('invalid json body: ' . json_last_error_msg());
}
$request->request->replace(is_array($data) ? $data : []);
}
/**
* Allgemeiner Exception Handler
* @param ExceptionEvent $event
*/
public function onKernelException(ExceptionEvent $event) {
global $kernel;
$exception = $event->getThrowable();
// Nur wichtige Events verarbeiten
if ($exception instanceof HttpException) return;
if ($kernel->getEnvironment() == 'dev') return;
// Body erstellen
$body = "Code: {$exception->getCode()}\n"
. "File: {$exception->getFile()} : {$exception->getLine()}\n"
. "User: " . ($kernel->getUser() ?: '') . "\n"
. "\n"
. "{$exception->getMessage()}\n"
. "\n"
. "{$exception->getTraceAsString()}";
// E-Mail versenden
$transport = new Transport\SendmailTransport();
$mailer = new Mailer($transport);
$mailer->send((new Email())
->subject($_ENV['APP_TITLE'] . " - Error")
->from($_ENV['MAIL_FROM'])
->to($_ENV['MAIL_ERROR'])
->text($body)
);
}
/**
* Request verarbeiten - Locale und Ajax Flag
* @param RequestEvent $event
*/
public function onRequest(RequestEvent $event) {
global $kernel;
if (!$event->isMainRequest()) {
return;
}
$request = $event->getRequest();
// Kernel Parameter setzen
$kernel->setLocale($request->getLocale());
$kernel->setIsAjax($request->isXmlHttpRequest());
}
}