<?php
/**
* Created by PhpStorm.
* User: Mariem
* Date: 02/04/2018
* Time: 12:19
*/
namespace App\Controller;
use App\Business\ContactUs;
use App\Business\DataSubjectAccessRequest;
use App\Business\VulnerabilityDisclosure;
use App\Form\ContactUsType;
use App\Form\DataSubjectAccessRequestType;
use App\Form\VulnerabilityDisclosureType;
use App\Security\SecurityConstants;
use App\Services\AboutUsService;
use App\Services\RecaptchaService;
use App\Services\VulnerabilityDisclosureService;
use App\Utils\Helper;
use Psr\Log\LoggerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Security;
class AboutUsController extends BaseController
{
/** @var AboutUsService $insightService */
protected $aboutUsService;
/** @var RecaptchaService $recaptchaService */
protected $recaptchaService;
/** @var VulnerabilityDisclosureService $vulnerabilityDisclosureService */
protected $vulnerabilityDisclosureService;
/** @var Security $security */
protected Security $security;
public function __construct(AboutUsService $aboutUsService, RecaptchaService $recaptchaService,
VulnerabilityDisclosureService $vulnerabilityDisclosureService, Security $security)
{
$this->aboutUsService = $aboutUsService;
$this->recaptchaService = $recaptchaService;
$this->vulnerabilityDisclosureService = $vulnerabilityDisclosureService;
$this->security = $security;
}
/**
* @Route("/about", name="about_homepage", methods={"GET"})
* @Route("/about/", name="about_homepage_slash", methods={"GET"})
* @Route("/aboutus", name="aboutus_homepage", methods={"GET"})
* @Route("/aboutus/", name="aboutus_homepage_slash", methods={"GET"})
* @return Response
*/
public function aboutUsAction()
{
$adminUrl = null;
if ($this->security->isGranted(SecurityConstants::ROLE_ADMINISTRATOR)) {
$adminUrl = $this->generateUrl('admin_app_aboutuswhoweare_edit', ['id' => 1]);
}
$whoWeAre = $this->aboutUsService->getWhoWeAre();
$keyFacts = $this->aboutUsService->getKeyFacts();
$OurTeam = $this->aboutUsService->getOurTeam();
return $this->render('aboutus/aboutus.html.twig', [
'whoWeAre' => $whoWeAre,
'keyFacts' => $keyFacts,
'OurTeam' => $OurTeam,
'key' => $this->getParameter('google_maps_key'),
BaseController::PARAM_ADMIN_URL => $adminUrl
]);
}
/**
* @Route("/about/whoweare", name="aboutus_whoweare", methods={"GET"})
* @Route("/about/whoweare/", name="aboutus_whoweare_slash", methods={"GET"})
* @return Response
*/
public function aboutUsWhoWeAreAction()
{
$adminUrl = null;
if ($this->security->isGranted(SecurityConstants::ROLE_ADMINISTRATOR)) {
$adminUrl = $this->generateUrl('admin_app_aboutuswhoweare_edit', ['id' => 1]);
}
$whoWeAre = $this->aboutUsService->getWhoWeAre();
return $this->render('aboutus/aboutus_who_we_are.html.twig', [
'form' => $whoWeAre,
BaseController::PARAM_ADMIN_URL => $adminUrl
]);
}
/**
* @Route("/about/keyfacts", name="aboutus_keyfacts", methods={"GET"})
* @return Response
*/
public function aboutUsKeyFactsAction()
{
$adminUrl = null;
if ($this->security->isGranted(SecurityConstants::ROLE_ADMINISTRATOR)) {
$adminUrl = $this->generateUrl('admin_app_aboutuskeyfacts_edit', ['id' => 1]);
}
$keyFacts = $this->aboutUsService->getKeyFacts();
return $this->render('aboutus/aboutus_keyfacts.html.twig', [
'form' => $keyFacts,
BaseController::PARAM_ADMIN_URL => $adminUrl
]);
}
/**
* @Route("/about/ourteam", name="aboutus_ourteam", methods={"GET"})
* @return Response
*/
public function aboutUsOurTeamAction()
{
$adminUrl = null;
if ($this->security->isGranted(SecurityConstants::ROLE_ADMINISTRATOR)) {
$adminUrl = $this->generateUrl('admin_app_aboutusourteam_edit', ['id' => 1]);
}
$OurTeam = $this->aboutUsService->getOurTeam();
return $this->render('aboutus/aboutus_ourteam.html.twig', [
'form' => $OurTeam,
BaseController::PARAM_ADMIN_URL => $adminUrl,
'key' => $this->getParameter('google_maps_key')
]);
}
/**
* @Route("/about/contactus", name="aboutus_contactus", methods={"GET", "POST"})
* @param Request $request
* @return Response
*/
public function aboutUsContactUsAction(Request $request)
{
$adminUrl = null;
if ($this->security->isGranted(SecurityConstants::ROLE_ADMINISTRATOR)) {
$adminUrl = $this->generateUrl('admin_app_aboutuscontactus_edit', ['id' => 1]);
}
$contactUsPage = $this->aboutUsService->getContactUs();
$contactUs = new ContactUs();
$contactForm = $this->createForm(ContactUsType::class, $contactUs);
$contactForm->handleRequest($request);
if ($contactForm->isSubmitted() && $contactForm->isValid()) {
if ($this->recaptchaService->captchaVerification($request->get('g-recaptcha-response'))) {
$this->aboutUsService->sendMailContactUs($contactUs);
$this->addFlash('about_us_success', ['title' => 'Thank You for Reaching Out!', 'message' => 'We appreciate you getting in touch with us. Your message has been successfully received, and our team is already reviewing it. We’ll respond to your inquiry or concern as soon as possible.']);
} else {
$this->addFlash('about_us_error', ['title' => 'A Problem occured!', 'message' => 'An error occurred while processing your request.']);
}
}
return $this->render('aboutus/aboutus_contactus.html.twig', [
'form' => $contactUsPage,
'contactform' => $contactForm->createView(),
BaseController::PARAM_ADMIN_URL => $adminUrl,
'key' => $this->getParameter('google_maps_key')
]);
}
/**
* @Route("/about/help", name="aboutus_help", methods={"GET", "POST"})
* @param Request $request
* @return Response
*/
public function aboutUsHelpAction(Request $request)
{
$adminUrl = null;
if ($this->security->isGranted(SecurityConstants::ROLE_ADMINISTRATOR)) {
$adminUrl = $this->generateUrl('admin_app_aboutushelp_edit', ['id' => 1]);
}
$helps = $this->aboutUsService->getHelps();
return $this->render('aboutus/aboutus_help.html.twig', [
'form' => $helps,
BaseController::PARAM_ADMIN_URL => $adminUrl
]);
}
/**
* @Route("/about/terms", name="about_terms", methods={"GET"})
* @return Response
*/
public function aboutTermsAction()
{
$adminUrl = null;
if ($this->security->isGranted(SecurityConstants::ROLE_ADMINISTRATOR)) {
$adminUrl = $this->generateUrl('admin_app_aboutterms_edit', ['id' => 1]);
}
$terms = $this->aboutUsService->getTerms();
return $this->render('aboutus/about_terms.html.twig', [
'form' => $terms,
BaseController::PARAM_ADMIN_URL => $adminUrl
]);
}
/**
* @Route("/about/data-privacy", name="about_data_privacy", methods={"GET"})
* @Route("/about/data-privacy/", name="about_data_privacy_slash", methods={"GET"})
* @return Response
*/
public function aboutDataPrivacyAction()
{
return $this->render('aboutus/about_data_privacy.html.twig');
}
/**
* @Route("/about/privacy", name="about_privacy", methods={"GET"})
* @Route("/about/privacy-notice", name="about_privacy_notice", methods={"GET"})
* @return Response
*/
public function aboutPrivacyAction()
{
$adminUrl = null;
if ($this->security->isGranted(SecurityConstants::ROLE_ADMINISTRATOR)) {
$adminUrl = $this->generateUrl('admin_app_aboutprivacy_edit', ['id' => 1]);
}
$terms = $this->aboutUsService->getPrivacy();
return $this->render('aboutus/about_privacy.html.twig', [
'form' => $terms,
'noVideo' => "true",
BaseController::PARAM_ADMIN_URL => $adminUrl
]);
}
/**
* @Route("/about/privacy/cookies", name="about_privacy_cookies", methods={"GET"})
* @Route("/about/privacy-notice/cookies", name="about_privacy_notice_cookies", methods={"GET"})
* @return Response
*/
public function aboutPrivacyCookiesAction()
{
return $this->render('aboutus/about_privacy_cookies.html.twig');
}
/**
* @Route("/about/privacy/data-subject", name="about_privacy_data_subject", methods={"GET"})
* @Route("/about/privacy/data-subject/", name="about_privacy_data_subject_slash", methods={"GET"})
* @return Response
*/
public function aboutPrivacyDataSubjectAction()
{
return $this->render('aboutus/about_privacy_data_subject.html.twig');
}
/**
* @Route("/about/privacy/data-subject/access-request", name="about_privacy_data_subject_access_request", methods={"GET", "POST"})
* @Route("/about/privacy/data-subject/access-request/", name="about_privacy_data_subject_access_request_slash", methods={"GET", "POST"})
* @return Response
*/
public function aboutPrivacyDataSubjectAccessRequestAction(Request $request)
{
$dataRequestAccess = new DataSubjectAccessRequest();
$dataRequestAccessForm = $this->createForm(DataSubjectAccessRequestType::class, $dataRequestAccess);
$dataRequestAccessForm->handleRequest($request);
if ($dataRequestAccessForm->isSubmitted() && $dataRequestAccessForm->isValid()) {
if ($this->recaptchaService->captchaVerification($request->get('g-recaptcha-response'))) {
$this->aboutUsService->sendMailDSAR($dataRequestAccess);
$this->addFlash('data_subject_access_success', ['title' => 'Thank You for Reaching Out!', 'message' => 'We appreciate you getting in touch with us. Your message has been successfully received, and our team is already reviewing it. We’ll respond to your inquiry or concern as soon as possible.']);
} else {
$this->addFlash('data_subject_access_error', ['title' => 'A Problem occured!', 'message' => 'An error occurred while processing your request.']);
}
}
return $this->render('aboutus/about_privacy_data_subject_access_request.html.twig', [
'form' => $dataRequestAccessForm->createView(),
'key' => $this->getParameter('google_maps_key')
]);
}
/**
* @Route("/about/vulnerability-disclosure", name="about_vulnerability_disclosure", methods={"GET"})
* @param Request|null $request
* @return Response
*/
public function aboutVulnerabilityDisclosureAction(Request $request = null)
{
// Build the form
$vulnerabilityForm = new VulnerabilityDisclosure();
$form = $this->createForm(VulnerabilityDisclosureType::class, $vulnerabilityForm);
$form->handleRequest($request);
return $this->render(
'aboutus/about_vulnerability_disclosure.html.twig',
[
'form' => $form->createView()
]
);
}
/**
* @Route("/about/vulnerability-disclosure/submit", name="about_vulnerability_disclosure_submit", options={"expose" = true})
* @param Request $request
* @param LoggerInterface $logger
* @return Response
*/
public function submitVulnerabilityDisclosureAction(Request $request, LoggerInterface $logger)
{
try {
$vulnerability = new VulnerabilityDisclosure();
$form = $this->createForm(VulnerabilityDisclosureType::class, $vulnerability);
$form->handleRequest($request);
if (!$form->isValid()) {
$errors = Helper::getErrorMessagesFlat($form, true);
$data['message'] = "Please, check errors in vulnerability diclosure form.";
$data['errors'] = $errors;
$jsonResponse = $this->json($data, JsonResponse::HTTP_BAD_REQUEST);
return $jsonResponse;
}
if ($this->recaptchaService->captchaVerification($request->get('g-recaptcha-response'))) {
$result = $this->vulnerabilityDisclosureService->sendVulnerabilityDisclosure($vulnerability);
if ($result->isError()) {
return $this->json($result->getMessage(), JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
}
return $this->json($result->getData());
}
} catch (Exception $ex) {
$logger->alert("error in submit vulnerability disclosure form" . $ex->getMessage(), ["exception" => $ex]);
return $this->json($ex->getMessage(), JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
}
}
/**
* @Route("/about/ethics", name="about_ethics", methods={"GET"})
* @return Response
*/
public function aboutEthicsAction()
{
return $this->render('aboutus/about_ethics.html.twig');
}
/**
* @Route("/about/esg", name="about_esg", methods={"GET"})
* @return Response
*/
public function aboutEsgAction()
{
return $this->render('aboutus/about_esg.html.twig');
}
/**
* @Route("/about/compliance", name="about_compliance", methods={"GET"})
* @return Response
*/
public function aboutComplianceAction()
{
return $this->render('aboutus/about_compliance.html.twig');
}
}