<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Pimcore\Model\DataObject\Member;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
abstract class AbstractFrontendController extends FrontendController
{
protected $login = false;
protected Request $request;
protected SessionInterface $session;
/**
* @var Member
*/
protected $member;
public function __construct(LoggerInterface $logger, RequestStack $requestStack)
{
// dd(\Pimcore\Tool\Session::getReadonly());
// dd($this->iseditmode);
$this->request = $requestStack->getCurrentRequest();
$this->session = $this->request->getSession();
if ($this->session->has('login')) {
$this->login = $this->session->get('login');
}
if ($this->request->getMethod() === 'POST') {
// Login?
if ($this->request->request->has('member') && $this->request->request->has('pw')) {
$memberListing = new Member\Listing();
$member = $memberListing->filterByUserName($this->request->request->get('member'));
if ($member->count()) {
$memberPw = $member->current()->getUserPassword();
if (password_verify($this->request->request->get('pw'), $memberPw)) {
$this->session->set('login', true);
$this->session->set('memberId', $member->current()->getId());
}
}
}
}
$this->updateMemberData();
}
private function updateMemberData()
{
if ($this->login) {
$this->member = Member::getById($this->session->get('memberId'));
}
}
/**
* @Symfony\Component\Routing\Annotation\Route("{path}", name="logout", requirements={"path": "logout"})
*/
public function logoutAction(Request $request)
{
$this->session->set('login', false);
$this->session->set('member', null);
return $this->redirect('/');
}
protected function getParams()
{
return [
'login' => $this->login,
'session' => $this->session,
];
}
protected function render(string $view, array $parameters = [], ?Response $response = null): Response
{
if (!$this->login && $this->document->getProperty('intern')) {
return $this->redirect('/');
}
return parent::render($view, array_merge($this->getParams(), $parameters), $response);
}
}