summaryrefslogtreecommitdiff
path: root/app/Http/RequestHandlers/DeleteRecord.php
diff options
context:
space:
mode:
authorGreg Roach <greg@subaqua.co.uk>2020-06-03 12:43:00 +0100
committerGreg Roach <greg@subaqua.co.uk>2020-06-03 13:01:03 +0100
commit8553b2e26fe2920fe20f9cebc3d9b531d9c2233a (patch)
tree02b10f4e6dc1eabb4ac8745878a480870e2a7a37 /app/Http/RequestHandlers/DeleteRecord.php
parent9c7da6818ae982b9ce563152bec3b7e75f25b467 (diff)
downloadwebtrees-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.php26
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