14b3ef6caSGreg Roach<?php 24b3ef6caSGreg Roach 34b3ef6caSGreg Roach/** 44b3ef6caSGreg Roach * webtrees: online genealogy 55bfc6897SGreg Roach * Copyright (C) 2022 webtrees development team 64b3ef6caSGreg Roach * This program is free software: you can redistribute it and/or modify 74b3ef6caSGreg Roach * it under the terms of the GNU General Public License as published by 84b3ef6caSGreg Roach * the Free Software Foundation, either version 3 of the License, or 94b3ef6caSGreg Roach * (at your option) any later version. 104b3ef6caSGreg Roach * This program is distributed in the hope that it will be useful, 114b3ef6caSGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of 124b3ef6caSGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 134b3ef6caSGreg Roach * GNU General Public License for more details. 144b3ef6caSGreg Roach * You should have received a copy of the GNU General Public License 154b3ef6caSGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>. 164b3ef6caSGreg Roach */ 174b3ef6caSGreg Roach 184b3ef6caSGreg Roachdeclare(strict_types=1); 194b3ef6caSGreg Roach 204b3ef6caSGreg Roachnamespace Fisharebest\Webtrees\Http\RequestHandlers; 214b3ef6caSGreg Roach 22*748dbe15SGreg Roachuse Fisharebest\Webtrees\Individual; 23*748dbe15SGreg Roachuse Fisharebest\Webtrees\Media; 244b3ef6caSGreg Roachuse Fisharebest\Webtrees\Registry; 254b3ef6caSGreg Roachuse Fisharebest\Webtrees\Services\TreeService; 26*748dbe15SGreg Roachuse Fisharebest\Webtrees\Validator; 274b3ef6caSGreg Roachuse Psr\Http\Message\ResponseInterface; 284b3ef6caSGreg Roachuse Psr\Http\Message\ServerRequestInterface; 294b3ef6caSGreg Roachuse Psr\Http\Server\RequestHandlerInterface; 304b3ef6caSGreg Roach 314b3ef6caSGreg Roachuse function response; 324b3ef6caSGreg Roach 334b3ef6caSGreg Roach/** 344b3ef6caSGreg Roach * Move media links from records to facts. 354b3ef6caSGreg Roach */ 364b3ef6caSGreg Roachclass FixLevel0MediaAction implements RequestHandlerInterface 374b3ef6caSGreg Roach{ 38c4943cffSGreg Roach private TreeService $tree_service; 394b3ef6caSGreg Roach 404b3ef6caSGreg Roach /** 414b3ef6caSGreg Roach * FixLevel0MediaController constructor. 424b3ef6caSGreg Roach * 434b3ef6caSGreg Roach * @param TreeService $tree_service 444b3ef6caSGreg Roach */ 454b3ef6caSGreg Roach public function __construct(TreeService $tree_service) 464b3ef6caSGreg Roach { 474b3ef6caSGreg Roach $this->tree_service = $tree_service; 484b3ef6caSGreg Roach } 494b3ef6caSGreg Roach 504b3ef6caSGreg Roach /** 514b3ef6caSGreg Roach * Move a link to a media object from a level 0 record to a level 1 record. 524b3ef6caSGreg Roach * 534b3ef6caSGreg Roach * @param ServerRequestInterface $request 544b3ef6caSGreg Roach * 554b3ef6caSGreg Roach * @return ResponseInterface 564b3ef6caSGreg Roach */ 574b3ef6caSGreg Roach public function handle(ServerRequestInterface $request): ResponseInterface 584b3ef6caSGreg Roach { 59*748dbe15SGreg Roach $fact_id = Validator::parsedBody($request)->string('fact_id'); 60*748dbe15SGreg Roach $indi_xref = Validator::parsedBody($request)->isXref()->string('indi_xref'); 61*748dbe15SGreg Roach $obje_xref = Validator::parsedBody($request)->isXref()->string('obje_xref'); 62*748dbe15SGreg Roach $tree_id = Validator::parsedBody($request)->integer('tree_id'); 634b3ef6caSGreg Roach 644b3ef6caSGreg Roach $tree = $this->tree_service->find($tree_id); 654b3ef6caSGreg Roach $individual = Registry::individualFactory()->make($indi_xref, $tree); 664b3ef6caSGreg Roach $media = Registry::mediaFactory()->make($obje_xref, $tree); 674b3ef6caSGreg Roach 68*748dbe15SGreg Roach if ($individual instanceof Individual && $media instanceof Media) { 694b3ef6caSGreg Roach foreach ($individual->facts() as $fact1) { 704b3ef6caSGreg Roach if ($fact1->id() === $fact_id) { 714b3ef6caSGreg Roach $individual->updateFact($fact_id, $fact1->gedcom() . "\n2 OBJE @" . $obje_xref . '@', false); 72*748dbe15SGreg Roach 734b3ef6caSGreg Roach foreach ($individual->facts(['OBJE']) as $fact2) { 744b3ef6caSGreg Roach if ($fact2->target() === $media) { 754b3ef6caSGreg Roach $individual->deleteFact($fact2->id(), false); 764b3ef6caSGreg Roach } 774b3ef6caSGreg Roach } 784b3ef6caSGreg Roach break; 794b3ef6caSGreg Roach } 804b3ef6caSGreg Roach } 814b3ef6caSGreg Roach } 824b3ef6caSGreg Roach 834b3ef6caSGreg Roach return response(); 844b3ef6caSGreg Roach } 854b3ef6caSGreg Roach} 86