1c2ed51d1SGreg Roach<?php 2c2ed51d1SGreg Roach 3c2ed51d1SGreg Roach/** 4c2ed51d1SGreg Roach * webtrees: online genealogy 5*d11be702SGreg Roach * Copyright (C) 2023 webtrees development team 6c2ed51d1SGreg Roach * This program is free software: you can redistribute it and/or modify 7c2ed51d1SGreg Roach * it under the terms of the GNU General Public License as published by 8c2ed51d1SGreg Roach * the Free Software Foundation, either version 3 of the License, or 9c2ed51d1SGreg Roach * (at your option) any later version. 10c2ed51d1SGreg Roach * This program is distributed in the hope that it will be useful, 11c2ed51d1SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of 12c2ed51d1SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13c2ed51d1SGreg Roach * GNU General Public License for more details. 14c2ed51d1SGreg Roach * You should have received a copy of the GNU General Public License 15c2ed51d1SGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>. 16c2ed51d1SGreg Roach */ 17c2ed51d1SGreg Roach 18c2ed51d1SGreg Roachdeclare(strict_types=1); 19c2ed51d1SGreg Roach 20c2ed51d1SGreg Roachnamespace Fisharebest\Webtrees\Http\RequestHandlers; 21c2ed51d1SGreg Roach 22c2ed51d1SGreg Roachuse Fisharebest\Webtrees\Auth; 23c2ed51d1SGreg Roachuse Fisharebest\Webtrees\Http\ViewResponseTrait; 24c2ed51d1SGreg Roachuse Fisharebest\Webtrees\Registry; 25f8505e4aSGreg Roachuse Fisharebest\Webtrees\Services\GedcomEditService; 26b55cbc6bSGreg Roachuse Fisharebest\Webtrees\Validator; 27c2ed51d1SGreg Roachuse Psr\Http\Message\ResponseInterface; 28c2ed51d1SGreg Roachuse Psr\Http\Message\ServerRequestInterface; 29c2ed51d1SGreg Roachuse Psr\Http\Server\RequestHandlerInterface; 30c2ed51d1SGreg Roach 3110e06497SGreg Roachuse function array_key_exists; 32f8505e4aSGreg Roachuse function route; 33c2ed51d1SGreg Roach 34c2ed51d1SGreg Roach/** 35c2ed51d1SGreg Roach * Edit a record. 36c2ed51d1SGreg Roach */ 37c2ed51d1SGreg Roachclass EditRecordPage implements RequestHandlerInterface 38c2ed51d1SGreg Roach{ 39c2ed51d1SGreg Roach use ViewResponseTrait; 40c2ed51d1SGreg Roach 41f8505e4aSGreg Roach private GedcomEditService $gedcom_edit_service; 42f8505e4aSGreg Roach 43f8505e4aSGreg Roach /** 44f8505e4aSGreg Roach * @param GedcomEditService $gedcom_edit_service 45f8505e4aSGreg Roach */ 46f8505e4aSGreg Roach public function __construct(GedcomEditService $gedcom_edit_service) 47f8505e4aSGreg Roach { 48f8505e4aSGreg Roach $this->gedcom_edit_service = $gedcom_edit_service; 49f8505e4aSGreg Roach } 50f8505e4aSGreg Roach 51c2ed51d1SGreg Roach /** 52c2ed51d1SGreg Roach * @param ServerRequestInterface $request 53c2ed51d1SGreg Roach * 54c2ed51d1SGreg Roach * @return ResponseInterface 55c2ed51d1SGreg Roach */ 56c2ed51d1SGreg Roach public function handle(ServerRequestInterface $request): ResponseInterface 57c2ed51d1SGreg Roach { 58b55cbc6bSGreg Roach $tree = Validator::attributes($request)->tree(); 59b55cbc6bSGreg Roach $xref = Validator::attributes($request)->isXref()->string('xref'); 60c2ed51d1SGreg Roach $record = Registry::gedcomRecordFactory()->make($xref, $tree); 61c2ed51d1SGreg Roach $record = Auth::checkRecordAccess($record, true); 62748dbe15SGreg Roach $include_hidden = Validator::queryParams($request)->boolean('include_hidden', false); 63bd29d468SGreg Roach $can_edit_raw = Auth::isAdmin() || $tree->getPreference('SHOW_GEDCOM_RECORD') === '1'; 643d2c98d1SGreg Roach $subtags = Registry::elementFactory()->make($record->tag())->subtags(); 65e04233f9SGreg Roach 66f8505e4aSGreg Roach $gedcom = $this->gedcom_edit_service->insertMissingRecordSubtags($record, $include_hidden); 67f8505e4aSGreg Roach $hidden = $this->gedcom_edit_service->insertMissingRecordSubtags($record, true); 68f8505e4aSGreg Roach 69f8505e4aSGreg Roach if ($gedcom === $hidden) { 70f8505e4aSGreg Roach $hidden_url = ''; 71f8505e4aSGreg Roach } else { 72f8505e4aSGreg Roach $hidden_url = route(self::class, [ 73f8505e4aSGreg Roach 'include_hidden' => true, 74f8505e4aSGreg Roach 'tree' => $tree->name(), 75f8505e4aSGreg Roach 'xref' => $xref, 76f8505e4aSGreg Roach ]); 77f8505e4aSGreg Roach } 78f8505e4aSGreg Roach 79c2ed51d1SGreg Roach return $this->viewResponse('edit/edit-record', [ 80c2ed51d1SGreg Roach 'can_edit_raw' => $can_edit_raw, 81f8505e4aSGreg Roach 'gedcom' => $gedcom, 82e04233f9SGreg Roach 'has_chan' => array_key_exists('CHAN', $subtags), 83f8505e4aSGreg Roach 'hidden_url' => $hidden_url, 84c2ed51d1SGreg Roach 'record' => $record, 85c2ed51d1SGreg Roach 'title' => $record->fullName(), 86c2ed51d1SGreg Roach 'tree' => $tree, 87c2ed51d1SGreg Roach ]); 88c2ed51d1SGreg Roach } 89c2ed51d1SGreg Roach} 90