<?php
namespace App\Controller;
use Pimcore\Db;
use DOMDocument;
use EmailReceiver\Listing;
use GuzzleHttp\TransferStats;
use Pimcore\Log\ApplicationLogger;
use GuzzleHttp\Client as HttpClient;
use Pimcore\Model\DataObject\Service;
use GuzzleHttp\Exception\GuzzleException;
use App\Service\CustomNotificationService;
use Pimcore\Controller\FrontendController;
use Pimcore\Model\DataObject\EmailReceiver;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
class DefaultController extends FrontendController
{
/**
* @param Request $request
* @return Response
*/
public function __construct(
protected TranslatorInterface $translator,
private ApplicationLogger $logger,
private CustomNotificationService $customNotificationService,
) {
header('Content-Type: application/json; charset=UTF-8');
header("Access-Control-Allow-Origin: *");
}
public function defaultAction(Request $request): Response
{
return $this->render('default/default.html.twig');
}
/**
* @param Request $request
* @return Response
*/
public function workshopEmailAction(Request $request): Response
{
$token = $request->get("token");
return $this->render('email/workshop_email_template.html.twig', ["token" => $token]);
}
public function reportEmailAction(Request $request): Response
{
// $token = $request->get("token");
$paramsBag = [
'document' => $this->document
];
foreach ($request->attributes as $key => $value) {
$paramsBag[$key] = $value;
}
$paramsBag = array_merge($request->request->all(), $request->query->all(), $paramsBag);
return $this->render('email/report_email_template.html.twig', $paramsBag);
}
/**
* @Route("/get-image/{token}", name="get_image")
*/
public function getImage(Request $request)
{
$token = $request->get("token");
$decoded_token=base64_decode($token);
$emailReceiver=EmailReceiver::getByEmail($decoded_token,true);
if(!$emailReceiver instanceof EmailReceiver){
$emailReceiver=new EmailReceiver();
$emailReceiver->setParent(Service::createFolderByPath('/Other/EmailReceiver/'));
$emailReceiver->setKey(\Pimcore\Model\Element\Service::getValidKey($decoded_token . time(),'object'));
$emailReceiver->setEmail($decoded_token);
$emailReceiver->setEmailOpen('yes');
$emailReceiver->setNoOfClicks(1);
$emailReceiver->setPublished(true);
}
else{
$emailReceiver->setEmailOpen('yes');
$no_of_clicks=$emailReceiver->getNoOfClicks()?? 0;
$emailReceiver->setNoOfClicks($no_of_clicks + 1);
}
$emailReceiver->save();
$image = '/var/www/html/project_ncm_alertportal/public/assets/images/welcome.png';
$imageData = @file_get_contents($image);
if ($imageData !== false) {
// Create a response with the image data.
$response = new Response($imageData);
// Set the Content-Type header based on the image format (e.g., image/jpeg).
$imageInfo = getimagesizefromstring($imageData);
if ($imageInfo !== false) {
$response->headers->set('Content-Type', $imageInfo['mime']);
}
// Optionally, set response headers such as Cache-Control.
$response->headers->set('Cache-Control', 'public, max-age=3600');
//return $response;
}
return $response;
}
/**
* @Route("/generate-xml", name="generate_xml")
*/
public function generateXml(Request $request): Response
{
// Replace this with your database logic to fetch data
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->formatOutput = true;
$root = $doc->createElement('alert');
$doc->appendChild($root);
foreach ($data as $row) {
$info = $doc->createElement('info');
// Populate the <info> element with data from the entity
$event = $doc->createElement('event', $row->getEvent());
$urgency = $doc->createElement('urgency', $row->getUrgency());
$severity = $doc->createElement('severity', $row->getSeverity());
$certainty = $doc->createElement('certainty', $row->getCertainty());
$info->appendChild($event);
$info->appendChild($urgency);
$info->appendChild($severity);
$info->appendChild($certainty);
$root->appendChild($info);
}
$response = new Response();
$response->headers->set('Content-Type', 'text/xml');
$response->headers->set('Content-Disposition', $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'alert.xml'
));
$response->setContent($doc->saveXML());
return $response;
}
/**
* @Route("/list-meteomatics-permissions", name = "list_meteomatics_permissions")
*/
public function meteomaticsPremissionAction(Request $request)
{
$db = Db::get();
$permissions = $db->fetchAll("SELECT * FROM `policy`");
return $this->render('Permission/meteomaticsPermissionView.html.twig', [
"permissions" => $permissions
]);
}
/**
* @Route("/unsubscribe/advanced-custom-notification", name="unsubscribe_advanced_custom_notification")
*/
public function unsubscribeAdvCustomNotification(Request $request)
{
try {
if ($request->query->has('token')) {
if ($request->get('token')) {
$token = $request->get('token');
$customer = \Pimcore\Model\DataObject\Customer::getByUnSubscribeCustomNotificationToken($token, true);
if ($customer instanceof \Pimcore\Model\DataObject\Customer) {
$result = $this->customNotificationService->unSubscribeNotification($customer, $this->translator);
return $this->json($result);
}
}
}
return $this->json(["success" => false, "message" => "You have already unsubscribed the custom notification"]);
} catch (\Exception $ex) {
$this->logger->error($ex->getMessage());
return $this->json(['success' => false, 'message' => $this->translator->trans(USER_ERROR_MESSAGE)]);
}
}
public function genericMailAction(Request $request)
{
$paramsBag = [
'document' => $this->document
];
foreach ($request->attributes as $key => $value) {
$paramsBag[$key] = $value;
}
$paramsBag = array_merge($request->request->all(), $request->query->all(), $paramsBag);
return $this->render('default/generic_mail.html.twig', $paramsBag);
}
}