. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Module\ModuleBlockInterface; use Fisharebest\Webtrees\Services\HomePageService; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\Validator; use Illuminate\Support\Collection; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use function redirect; use function route; /** * Save updated blocks on a tree's page. */ class TreePageUpdate implements RequestHandlerInterface { private HomePageService $home_page_service; /** * @param HomePageService $home_page_service */ public function __construct(HomePageService $home_page_service) { $this->home_page_service = $home_page_service; } /** * @param ServerRequestInterface $request * * @return ResponseInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { $tree = Validator::attributes($request)->tree(); $user = Validator::attributes($request)->user(); $defaults = Validator::parsedBody($request)->boolean('defaults', false); if ($defaults) { $default_tree = new Tree(-1, 'DEFAULT', 'DEFAULT'); $main_blocks = $this->home_page_service->treeBlocks($default_tree, $user, ModuleBlockInterface::MAIN_BLOCKS) ->map(static fn (ModuleBlockInterface $block) => $block->name()); $side_blocks = $this->home_page_service->treeBlocks($default_tree, $user, ModuleBlockInterface::SIDE_BLOCKS) ->map(static fn (ModuleBlockInterface $block) => $block->name()); } else { $main_blocks = new Collection(Validator::parsedBody($request)->array(ModuleBlockInterface::MAIN_BLOCKS)); $side_blocks = new Collection(Validator::parsedBody($request)->array(ModuleBlockInterface::SIDE_BLOCKS)); } $this->home_page_service->updateTreeBlocks($tree->id(), $main_blocks, $side_blocks); return redirect(route(TreePage::class, ['tree' => $tree->name()])); } }