. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\FlashMessages; use Fisharebest\Webtrees\Http\Controllers\AbstractBaseController; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Tree; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use function e; use function redirect; use function route; /** * Create a new tree. */ class CreateTreeAction extends AbstractBaseController { /** @var TreeService */ private $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 = $request->getParsedBody()['name']; $title = $request->getParsedBody()['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('manage-trees', ['tree' => $tree->name()])); } }