mirror of https://github.com/FriendsOfTYPO3/tea.git synced 2024-12-27 13:26:09 +01:00
tea/Classes/Controller/FrontEndEditorController.php

115 lines
2.8 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
namespace TTN\Tea\Controller;
use Psr\Http\Message\ResponseInterface;
use TTN\Tea\Domain\Model\Tea;
use TTN\Tea\Domain\Repository\TeaRepository;
use TYPO3\CMS\Core\Context\Context;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Annotation as Extbase;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
/**
* Controller for a CRUD FE editor for teas.
*/
class FrontEndEditorController extends ActionController
{
private Context $context;
private TeaRepository $teaRepository;
public function __construct(Context $context, TeaRepository $teaRepository)
{
$this->context = $context;
$this->teaRepository = $teaRepository;
}
public function indexAction(): ResponseInterface
{
$userUid = $this->getUidOfLoggedInUser();
if ($userUid > 0) {
$this->view->assign('teas', $this->teaRepository->findByOwnerUid($userUid));
}
return $this->htmlResponse();
}
/**
* @return int<0, max>
*/
private function getUidOfLoggedInUser(): int
{
$userUid = $this->context->getPropertyFromAspect('frontend.user', 'id');
\assert(\is_int($userUid) && $userUid >= 0);
return $userUid;
}
/**
* @Extbase\IgnoreValidation("tea")
*/
public function editAction(Tea $tea): ResponseInterface
{
$this->checkIfUserIsOwner($tea);
$this->view->assign('tea', $tea);
return $this->htmlResponse();
}
/**
* @throws \RuntimeException
*/
private function checkIfUserIsOwner(Tea $tea): void
{
if ($tea->getOwnerUid() !== $this->getUidOfLoggedInUser()) {
throw new \RuntimeException('You do not have the permissions to edit this tea.', 1687363749);
}
}
public function updateAction(Tea $tea): ResponseInterface
{
$this->checkIfUserIsOwner($tea);
$this->teaRepository->update($tea);
return $this->redirect('index');
}
/**
* @Extbase\IgnoreValidation("tea")
*/
public function newAction(?Tea $tea = null): ResponseInterface
{
// Note: We are using `makeInstance` here instead of `new` to allow for XCLASSing.
$teaToAssign = $tea ?? GeneralUtility::makeInstance(Tea::class);
$this->view->assign('tea', $teaToAssign);
return $this->htmlResponse();
}
public function createAction(Tea $tea): ResponseInterface
{
$tea->setOwnerUid($this->getUidOfLoggedInUser());
$this->teaRepository->add($tea);
return $this->redirect('index');
}
/**
* @Extbase\IgnoreValidation("tea")
*/
public function deleteAction(Tea $tea): ResponseInterface
{
$this->checkIfUserIsOwner($tea);
$this->teaRepository->remove($tea);
return $this->redirect('index');
}
}