. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\FlashMessages; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\Validator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use function e; use function redirect; use function route; /** * Create a new tree. */ class CreateTreeAction implements RequestHandlerInterface { private TreeService $tree_service; /** * CreateTreePage constructor. * * @param TreeService $tree_service */ public function __construct(TreeService $tree_service) { $this->tree_service = $tree_service; } /** * @param ServerRequestInterface $request * * @return ResponseInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { $name = Validator::parsedBody($request)->string('name'); $title = Validator::parsedBody($request)->string('title'); if ($this->tree_service->all()->get($name) instanceof Tree) { FlashMessages::addMessage(I18N::translate('The family tree ā€œ%sā€ already exists.', e($name)), 'danger'); return redirect(route(CreateTreePage::class, ['title' => $title])); } $tree = $this->tree_service->create($name, $title); FlashMessages::addMessage(I18N::translate('The family tree ā€œ%sā€ has been created.', e($name)), 'success'); return redirect(route(ManageTrees::class, ['tree' => $tree->name()])); } }