<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Pimcore\Controller\FrontendController;
use Pimcore\Bundle\AdminBundle\HttpFoundation\JsonResponse;
use Pimcore\Translation\Translator;
use Pimcore\Tool\Session;
use App\Validator\Validator;
use App\Helper\LogHelper;
use App\Services\IPService;
use App\Services\MiniSiteService;
use Symfony\Component\Process\Process;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Pimcore\Model\DataObject\ClassDefinition;
use Pimcore\Model\Site;
class BaseController extends FrontendController
{
CONST LOG_FILE_NAME = 'helper_500';
protected $translator;
protected $validator;
protected $params;
public function __construct(
Translator $translator,
Validator $validator,
ParameterBagInterface $params
)
{
$this->translator = $translator;
$this->validator = $validator;
$this->params = $params;
}
public function sendWithHeader($response)
{
$response->headers->add([
'Strict-Transport-Security' => 'max-age=63072000; includeSubDomains; preload',
]);
return $response;
}
/**
* Return a success response.
*
* @param array $data
*
* @return JsonResponse
*/
public function sendResponse($data = [])
{
return $this->sendWithHeader(new JsonResponse($data, Response::HTTP_OK));
}
/**
* Return an error response.
*
* @param $error
* @param int $statusCode
*
* @return JsonResponse
*/
public function sendError($error, $statusCode = Response::HTTP_BAD_REQUEST)
{
// log if status code = 500
if ($statusCode == Response::HTTP_INTERNAL_SERVER_ERROR) {
$errorCode = time() . rand(0,9) . rand(0,9) . rand(0,9) . rand(0,9);
LogHelper::logError(self::LOG_FILE_NAME, (string) ($errorCode .':'. $error ."\n \n"));
return new JsonResponse(['code' => $errorCode], $statusCode);
} else {
if (is_string($error)) {
$error = ["message" => $this->translator ? $this->translator->trans($error) : $error];
}
}
return $this->sendWithHeader(new JsonResponse($error, $statusCode));
}
/**
* Return an error response format validator.
*
* @param array $errorMessages
*
* @return JsonResponse
*/
public function sendValidatorError(array $errorMessages)
{
return $this->sendError($this->validator->getError($errorMessages), Response::HTTP_BAD_REQUEST);
}
public function getSite(Request $request)
{
try {
$header = $request->headers->all();
$siteName = $header['authorization'][0];
if ($siteName == 'SunWorldAsiaPark') {
$siteName = 'DaNangDowntown';
}
return $this->getSiteByName($siteName);
} catch (\Throwable $e) {
$site = null;
}
return $site;
}
public function getSiteByName($name)
{
try {
$rootDocument = \Pimcore\Model\Document::getByPath('/'. $name);
$site = Site::getByRootId($rootDocument->getId());
} catch (\Throwable $e) {
$site = null;
}
return $site;
}
public function checkMiniSiteClass($class, $siteName)
{
$defaultNamespace = 'SunWorldMiniSite';
$miniSites = MiniSiteService::getList();
if (in_array($siteName, $miniSites)) {
$class = str_replace($siteName, $defaultNamespace, $class);
}
return $class;
}
public function returnNotFound()
{
return $this->sendError("site.page-not-found", Response::HTTP_NOT_FOUND);
}
/**
* @Route("/healthcheck")
*/
public function healthCheck()
{
try {
$data = [
"app_name" => $this->getParameter('app_name'),
"app_env" => getenv('APP_ENV'),
"app_version" => $this->getParameter('app_version'),
];
return $this->sendResponse($data);
} catch (\Throwable $e) {
return $this->sendResponse(["message" => $e->getMessage()]);
}
}
}