mirror of
https://github.com/FriendsOfTYPO3/tea.git
synced 2024-12-23 12:06:10 +01:00
eeda862e77
The `Product` namespace segment in the domain model namespace `TTN\Tea\Domain\Model` currently serves no purpose and only adds confusion. So let's simplify the extension structure accordingly. (I intended to use this to demonstrate DDD contexts, but never built enough models in the Tea extension for this to actually make sense.) Fixes #1008
111 lines
2.7 KiB
PHP
111 lines
2.7 KiB
PHP
<?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
|
|
{
|
|
return $this->context->getPropertyFromAspect('frontend.user', 'id');
|
|
}
|
|
|
|
/**
|
|
* @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');
|
|
}
|
|
}
|