diff options
| author | Greg Roach <greg@subaqua.co.uk> | 2020-06-03 12:43:00 +0100 |
|---|---|---|
| committer | Greg Roach <greg@subaqua.co.uk> | 2020-06-03 13:01:03 +0100 |
| commit | 8553b2e26fe2920fe20f9cebc3d9b531d9c2233a (patch) | |
| tree | 02b10f4e6dc1eabb4ac8745878a480870e2a7a37 /app/Http/RequestHandlers/DeleteRecord.php | |
| parent | 9c7da6818ae982b9ce563152bec3b7e75f25b467 (diff) | |
| download | webtrees-8553b2e26fe2920fe20f9cebc3d9b531d9c2233a.tar.gz webtrees-8553b2e26fe2920fe20f9cebc3d9b531d9c2233a.tar.bz2 webtrees-8553b2e26fe2920fe20f9cebc3d9b531d9c2233a.zip | |
Fix: cannot delete an individual if it is linked to family record that has an invalid link
Diffstat (limited to 'app/Http/RequestHandlers/DeleteRecord.php')
| -rw-r--r-- | app/Http/RequestHandlers/DeleteRecord.php | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/app/Http/RequestHandlers/DeleteRecord.php b/app/Http/RequestHandlers/DeleteRecord.php index 7bbd559abb..6a83c4bd03 100644 --- a/app/Http/RequestHandlers/DeleteRecord.php +++ b/app/Http/RequestHandlers/DeleteRecord.php @@ -21,17 +21,19 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Factory; +use Fisharebest\Webtrees\Family; use Fisharebest\Webtrees\FlashMessages; use Fisharebest\Webtrees\Gedcom; use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Tree; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use function assert; +use function e; use function is_string; -use function preg_match; use function preg_match_all; use function preg_replace; use function response; @@ -66,21 +68,19 @@ class DeleteRecord implements RequestHandlerInterface $old_gedcom = $linker->gedcom(); $new_gedcom = $this->removeLinks($old_gedcom, $record->xref()); if ($old_gedcom !== $new_gedcom) { - // If we have removed a link from a family to an individual, and it has only one member - if (preg_match('/^0 @(' . Gedcom::REGEX_XREF . ')@ FAM/', $new_gedcom, $fmatch) && preg_match_all('/\n1 (HUSB|WIFE|CHIL) @(' . Gedcom::REGEX_XREF . ')@/', $new_gedcom, $match) === 1) { + // If we have removed a link from a family to an individual, and it now has only one member + if ($linker instanceof Family && preg_match_all('/\n1 (HUSB|WIFE|CHIL) @(' . Gedcom::REGEX_XREF . ')@/', $new_gedcom, $match) === 1) { // Delete the family - $family = Factory::gedcomRecord()->make($fmatch[1], $tree); /* I18N: %s is the name of a family group, e.g. “Husband name + Wife name” */ - FlashMessages::addMessage(I18N::translate('The family “%s” has been deleted because it only has one member.', $family->fullName())); - $family->deleteRecord(); - // Delete any remaining link to this family - if ($match) { - $relict = Factory::gedcomRecord()->make($match[2][0], $tree); - $new_gedcom = $relict->gedcom(); - $new_gedcom = $this->removeLinks($new_gedcom, $linker->xref()); - $relict->updateRecord($new_gedcom, false); + FlashMessages::addMessage(I18N::translate('The family “%s” has been deleted because it only has one member.', $linker->fullName())); + $linker->deleteRecord(); + // Delete the remaining link to this family + $relict = Factory::gedcomRecord()->make($match[2][0], $tree); + if ($relict instanceof Individual) { + $relict_gedcom = $this->removeLinks($relict->gedcom(), $linker->xref()); + $relict->updateRecord($relict_gedcom, false); /* I18N: %s are names of records, such as sources, repositories or individuals */ - FlashMessages::addMessage(I18N::translate('The link from “%1$s” to “%2$s” has been deleted.', sprintf('<a href="%1$s" class="alert-link">%2$s</a>', e($relict->url()), $relict->fullName()), $family->fullName())); + FlashMessages::addMessage(I18N::translate('The link from “%1$s” to “%2$s” has been deleted.', sprintf('<a href="%1$s" class="alert-link">%2$s</a>', e($relict->url()), $relict->fullName()), $linker->fullName())); } } else { // Remove links from $linker to $record |
