18e0e1b25SGreg Roach<?php 28e0e1b25SGreg Roach 38e0e1b25SGreg Roach/** 48e0e1b25SGreg Roach * webtrees: online genealogy 589f7189bSGreg Roach * Copyright (C) 2021 webtrees development team 68e0e1b25SGreg Roach * This program is free software: you can redistribute it and/or modify 78e0e1b25SGreg Roach * it under the terms of the GNU General Public License as published by 88e0e1b25SGreg Roach * the Free Software Foundation, either version 3 of the License, or 98e0e1b25SGreg Roach * (at your option) any later version. 108e0e1b25SGreg Roach * This program is distributed in the hope that it will be useful, 118e0e1b25SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of 128e0e1b25SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 138e0e1b25SGreg Roach * GNU General Public License for more details. 148e0e1b25SGreg Roach * You should have received a copy of the GNU General Public License 1589f7189bSGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>. 168e0e1b25SGreg Roach */ 178e0e1b25SGreg Roach 188e0e1b25SGreg Roachdeclare(strict_types=1); 198e0e1b25SGreg Roach 208e0e1b25SGreg Roachnamespace Fisharebest\Webtrees\Http\RequestHandlers; 218e0e1b25SGreg Roach 22f6924bc8SGreg Roachuse Fisharebest\Webtrees\Contracts\UserInterface; 238e0e1b25SGreg Roachuse Fisharebest\Webtrees\Http\ViewResponseTrait; 248e0e1b25SGreg Roachuse Fisharebest\Webtrees\I18N; 258e0e1b25SGreg Roachuse Fisharebest\Webtrees\Module\ModuleBlockInterface; 268e0e1b25SGreg Roachuse Fisharebest\Webtrees\Services\HomePageService; 278e0e1b25SGreg Roachuse Fisharebest\Webtrees\Tree; 288e0e1b25SGreg Roachuse Illuminate\Database\Capsule\Manager as DB; 298e0e1b25SGreg Roachuse Illuminate\Database\Query\Builder; 308e0e1b25SGreg Roachuse Illuminate\Database\Query\Expression; 318e0e1b25SGreg Roachuse Psr\Http\Message\ResponseInterface; 328e0e1b25SGreg Roachuse Psr\Http\Message\ServerRequestInterface; 338e0e1b25SGreg Roachuse Psr\Http\Server\RequestHandlerInterface; 348e0e1b25SGreg Roach 358e0e1b25SGreg Roachuse function assert; 368e0e1b25SGreg Roach 378e0e1b25SGreg Roach/** 38fceda430SGreg Roach * Show a user's page. 398e0e1b25SGreg Roach */ 408e0e1b25SGreg Roachclass UserPage implements RequestHandlerInterface 418e0e1b25SGreg Roach{ 428e0e1b25SGreg Roach use ViewResponseTrait; 438e0e1b25SGreg Roach 44*c4943cffSGreg Roach private HomePageService $home_page_service; 458e0e1b25SGreg Roach 468e0e1b25SGreg Roach /** 478e0e1b25SGreg Roach * @param HomePageService $home_page_service 488e0e1b25SGreg Roach */ 498e0e1b25SGreg Roach public function __construct(HomePageService $home_page_service) 508e0e1b25SGreg Roach { 518e0e1b25SGreg Roach $this->home_page_service = $home_page_service; 528e0e1b25SGreg Roach } 538e0e1b25SGreg Roach 548e0e1b25SGreg Roach /** 558e0e1b25SGreg Roach * @param ServerRequestInterface $request 568e0e1b25SGreg Roach * 578e0e1b25SGreg Roach * @return ResponseInterface 588e0e1b25SGreg Roach */ 598e0e1b25SGreg Roach public function handle(ServerRequestInterface $request): ResponseInterface 608e0e1b25SGreg Roach { 618e0e1b25SGreg Roach $tree = $request->getAttribute('tree'); 628e0e1b25SGreg Roach assert($tree instanceof Tree); 638e0e1b25SGreg Roach 648e0e1b25SGreg Roach $user = $request->getAttribute('user'); 65f6924bc8SGreg Roach assert($user instanceof UserInterface); 668e0e1b25SGreg Roach 678e0e1b25SGreg Roach $has_blocks = DB::table('block') 688e0e1b25SGreg Roach ->where('user_id', '=', $user->id()) 698e0e1b25SGreg Roach ->exists(); 708e0e1b25SGreg Roach 718e0e1b25SGreg Roach if (!$has_blocks) { 728e0e1b25SGreg Roach $this->home_page_service->checkDefaultUserBlocksExist(); 738e0e1b25SGreg Roach 748e0e1b25SGreg Roach // Copy the defaults 758e0e1b25SGreg Roach (new Builder(DB::connection()))->from('block')->insertUsing( 768e0e1b25SGreg Roach ['user_id', 'location', 'block_order', 'module_name'], 778e0e1b25SGreg Roach static function (Builder $query) use ($user): void { 788e0e1b25SGreg Roach $query 798e0e1b25SGreg Roach ->select([new Expression($user->id()), 'location', 'block_order', 'module_name']) 808e0e1b25SGreg Roach ->from('block') 818e0e1b25SGreg Roach ->where('user_id', '=', -1); 828e0e1b25SGreg Roach } 838e0e1b25SGreg Roach ); 848e0e1b25SGreg Roach } 858e0e1b25SGreg Roach 868e0e1b25SGreg Roach return $this->viewResponse('user-page', [ 87f6924bc8SGreg Roach 'main_blocks' => $this->home_page_service->userBlocks($tree, $user, ModuleBlockInterface::MAIN_BLOCKS), 88f6924bc8SGreg Roach 'side_blocks' => $this->home_page_service->userBlocks($tree, $user, ModuleBlockInterface::SIDE_BLOCKS), 898e0e1b25SGreg Roach 'title' => I18N::translate('My page'), 908e0e1b25SGreg Roach 'tree' => $tree, 918e0e1b25SGreg Roach ]); 928e0e1b25SGreg Roach } 938e0e1b25SGreg Roach} 94