1a49d0e3fSGreg Roach<?php 2a49d0e3fSGreg Roach 3a49d0e3fSGreg Roach/** 4a49d0e3fSGreg Roach * webtrees: online genealogy 51fe542e9SGreg Roach * Copyright (C) 2021 webtrees development team 6a49d0e3fSGreg Roach * This program is free software: you can redistribute it and/or modify 7a49d0e3fSGreg Roach * it under the terms of the GNU General Public License as published by 8a49d0e3fSGreg Roach * the Free Software Foundation, either version 3 of the License, or 9a49d0e3fSGreg Roach * (at your option) any later version. 10a49d0e3fSGreg Roach * This program is distributed in the hope that it will be useful, 11a49d0e3fSGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of 12a49d0e3fSGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13a49d0e3fSGreg Roach * GNU General Public License for more details. 14a49d0e3fSGreg 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/>. 16a49d0e3fSGreg Roach */ 17a49d0e3fSGreg Roach 18a49d0e3fSGreg Roachdeclare(strict_types=1); 19a49d0e3fSGreg Roach 20a49d0e3fSGreg Roachnamespace Fisharebest\Webtrees\Http\RequestHandlers; 21a49d0e3fSGreg Roach 22a49d0e3fSGreg Roachuse Fisharebest\Webtrees\Auth; 231fe542e9SGreg Roachuse Fisharebest\Webtrees\Contracts\UserInterface; 24a49d0e3fSGreg Roachuse Fisharebest\Webtrees\Services\UserService; 25a49d0e3fSGreg Roachuse Fisharebest\Webtrees\Tree; 26a49d0e3fSGreg Roachuse Fisharebest\Webtrees\User; 27*b55cbc6bSGreg Roachuse Fisharebest\Webtrees\Validator; 28a49d0e3fSGreg Roachuse Psr\Http\Message\ResponseInterface; 29a49d0e3fSGreg Roachuse Psr\Http\Message\ServerRequestInterface; 30a49d0e3fSGreg Roachuse Psr\Http\Server\RequestHandlerInterface; 31a49d0e3fSGreg Roach 32a49d0e3fSGreg Roachuse function redirect; 33a49d0e3fSGreg Roachuse function route; 34a49d0e3fSGreg Roach 35a49d0e3fSGreg Roach/** 36a49d0e3fSGreg Roach * Delete a user account. 37a49d0e3fSGreg Roach */ 38a49d0e3fSGreg Roachclass AccountDelete implements RequestHandlerInterface 39a49d0e3fSGreg Roach{ 40c4943cffSGreg Roach private UserService $user_service; 41a49d0e3fSGreg Roach 42a49d0e3fSGreg Roach /** 43a49d0e3fSGreg Roach * AccountController constructor. 44a49d0e3fSGreg Roach * 45a49d0e3fSGreg Roach * @param UserService $user_service 46a49d0e3fSGreg Roach */ 47a49d0e3fSGreg Roach public function __construct(UserService $user_service) 48a49d0e3fSGreg Roach { 49a49d0e3fSGreg Roach $this->user_service = $user_service; 50a49d0e3fSGreg Roach } 51a49d0e3fSGreg Roach 52a49d0e3fSGreg Roach /** 53a49d0e3fSGreg Roach * @param ServerRequestInterface $request 54a49d0e3fSGreg Roach * 55a49d0e3fSGreg Roach * @return ResponseInterface 56a49d0e3fSGreg Roach */ 57a49d0e3fSGreg Roach public function handle(ServerRequestInterface $request): ResponseInterface 58a49d0e3fSGreg Roach { 59*b55cbc6bSGreg Roach $tree = Validator::attributes($request)->treeOptional(); 60*b55cbc6bSGreg Roach $user = Validator::attributes($request)->user(); 61a49d0e3fSGreg Roach 62a49d0e3fSGreg Roach // An administrator can only be deleted by another administrator 631fe542e9SGreg Roach if ($user instanceof User && $user->getPreference(UserInterface::PREF_IS_ADMINISTRATOR) !== '1') { 64a49d0e3fSGreg Roach $this->user_service->delete($user); 65a49d0e3fSGreg Roach Auth::logout(); 66a49d0e3fSGreg Roach } 67a49d0e3fSGreg Roach 68a49d0e3fSGreg Roach return redirect(route(AccountEdit::class, ['tree' => $tree instanceof Tree ? $tree->name() : null])); 69a49d0e3fSGreg Roach } 70a49d0e3fSGreg Roach} 71