diff options
| -rw-r--r-- | app/CustomTags/Gedcom7.php | 17 | ||||
| -rw-r--r-- | app/Elements/Residence.php | 29 | ||||
| -rw-r--r-- | app/Elements/ResidenceWithValue.php (renamed from app/Elements/FamilyResidence.php) | 6 | ||||
| -rw-r--r-- | app/Gedcom.php | 5 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/SiteTagsAction.php | 2 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/SiteTagsPage.php | 2 | ||||
| -rw-r--r-- | resources/views/admin/tags.phtml | 20 | ||||
| -rw-r--r-- | tests/app/Elements/ResidenceWithValueTest.php (renamed from tests/app/Elements/FamilyResidenceTest.php) | 8 |
8 files changed, 51 insertions, 38 deletions
diff --git a/app/CustomTags/Gedcom7.php b/app/CustomTags/Gedcom7.php index aba135487f..ad92615a5c 100644 --- a/app/CustomTags/Gedcom7.php +++ b/app/CustomTags/Gedcom7.php @@ -32,6 +32,7 @@ use Fisharebest\Webtrees\Elements\FamilyFact; use Fisharebest\Webtrees\Elements\LdsInitiatory; use Fisharebest\Webtrees\Elements\LdsOrdinanceStatus; use Fisharebest\Webtrees\Elements\NonEvent; +use Fisharebest\Webtrees\Elements\ResidenceWithValue; use Fisharebest\Webtrees\Elements\RoleInEvent; use Fisharebest\Webtrees\Elements\TempleCode; use Fisharebest\Webtrees\Elements\TimeValue; @@ -42,6 +43,7 @@ use Fisharebest\Webtrees\Elements\UserReferenceType; use Fisharebest\Webtrees\Elements\XrefAssociate; use Fisharebest\Webtrees\Elements\XrefSharedNote; use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Site; /** * GEDCOM files created by Gedcom7 @@ -67,9 +69,9 @@ class Gedcom7 implements CustomTagInterface */ public function tags(): array { - return [ - 'FAM:NO' => new NonEvent('Event did not happen'), - 'INDI:NO' => new NonEvent('Event did not happen'), + $tags = [ + 'FAM:NO' => new NonEvent('Event did not happen'), + 'INDI:NO' => new NonEvent('Event did not happen'), 'FAM:*:ASSO' => new XrefAssociate(I18N::translate('Associate')), 'FAM:*:ASSO:PHRASE' => new CustomElement(I18N::translate('Phrase')), 'FAM:*:ASSO:ROLE' => new RoleInEvent(I18N::translate('Role')), @@ -92,7 +94,7 @@ class Gedcom7 implements CustomTagInterface 'FAM:EXID' => new ExternalIdentifier(I18N::translate('External identifier')), 'FAM:EXID:TYPE' => new ExternalIdentifierType(I18N::translate('Type')), 'FAM:FACT' => new FamilyFact(I18N::translate('Fact')), - 'FAM:FACT:TYPE' => new EventOrFactClassification(I18N::translate('Type of fact')), + 'FAM:FACT:TYPE' => new EventOrFactClassification(I18N::translate('Type of fact')), 'FAM:REFN' => new UserReferenceNumber(I18N::translate('Reference number')), 'FAM:REFN:TYPE' => new UserReferenceType(I18N::translate('Type')), 'FAM:SNOTE' => new XrefSharedNote(I18N::translate('Shared note')), @@ -171,5 +173,12 @@ class Gedcom7 implements CustomTagInterface 'SUBM:SNOTE' => new XrefSharedNote(I18N::translate('Shared note')), 'SUBM:UID' => new Uid(I18N::translate('Unique identifier')), ]; + + if (Site::getPreference('CUSTOM_RESI_VALUE') === '1') { + $tags['FAM:RESI'] = new ResidenceWithValue('Family residence'); + $tags['INDI:RESI'] = new ResidenceWithValue('Residence'); + } + + return $tags; } } diff --git a/app/Elements/Residence.php b/app/Elements/Residence.php index 6dca0a6a74..fe544aea52 100644 --- a/app/Elements/Residence.php +++ b/app/Elements/Residence.php @@ -21,31 +21,11 @@ namespace Fisharebest\Webtrees\Elements; use Fisharebest\Webtrees\Tree; -use function e; - /** * Residence */ -class Residence extends AbstractElement +class Residence extends ResidenceWithValue { - protected const SUBTAGS = [ - 'TYPE' => '0:1:?', - 'DATE' => '0:1', - 'PLAC' => '0:1', - 'ADDR' => '0:1', - 'EMAIL' => '0:1', - 'WWW' => '0:1', - 'PHON' => '0:1', - 'FAX' => '0:1:?', - 'CAUS' => '0:1:?', - 'AGNC' => '0:1:?', - 'RELI' => '0:1:?', - 'NOTE' => '0:M', - 'OBJE' => '0:M', - 'SOUR' => '0:M', - 'RESN' => '0:1', - ]; - /** * An edit control for this data. * @@ -58,6 +38,11 @@ class Residence extends AbstractElement */ public function edit(string $id, string $name, string $value, Tree $tree): string { - return '<input class="form-control" type="hidden" id="' . e($id) . '" name="' . e($name) . '" value="' . e($value) . '" />'; + if ($value === '') { + return $this->editHidden($id, $name, $value); + } + + // Value not allowed in GEDCOM 5.5.1, but if a value is present, then edit it. + return parent::edit($id, $name, $value, $tree); } } diff --git a/app/Elements/FamilyResidence.php b/app/Elements/ResidenceWithValue.php index fb3a8b448a..408c2bb6ca 100644 --- a/app/Elements/FamilyResidence.php +++ b/app/Elements/ResidenceWithValue.php @@ -20,15 +20,13 @@ declare(strict_types=1); namespace Fisharebest\Webtrees\Elements; /** - * FamilyResidence + * ResidenceWithValue */ -class FamilyResidence extends AbstractElement +class ResidenceWithValue extends AbstractElement { protected const SUBTAGS = [ 'TYPE' => '0:1:?', 'DATE' => '0:1', - 'HUSB' => '0:1', - 'WIFE' => '0:1', 'PLAC' => '0:1', 'ADDR' => '0:1', 'EMAIL' => '0:1:?', diff --git a/app/Gedcom.php b/app/Gedcom.php index bd741655ca..4c76b58bd5 100644 --- a/app/Gedcom.php +++ b/app/Gedcom.php @@ -99,7 +99,6 @@ use Fisharebest\Webtrees\Elements\EventTypeCitedFrom; use Fisharebest\Webtrees\Elements\FamilyCensus; use Fisharebest\Webtrees\Elements\FamilyEvent; use Fisharebest\Webtrees\Elements\FamilyRecord; -use Fisharebest\Webtrees\Elements\FamilyResidence; use Fisharebest\Webtrees\Elements\FileName; use Fisharebest\Webtrees\Elements\FirstCommunion; use Fisharebest\Webtrees\Elements\Form; @@ -175,6 +174,7 @@ use Fisharebest\Webtrees\Elements\RelationIsDescriptor; use Fisharebest\Webtrees\Elements\ReligiousAffiliation; use Fisharebest\Webtrees\Elements\RepositoryRecord; use Fisharebest\Webtrees\Elements\Residence; +use Fisharebest\Webtrees\Elements\ResidenceWithValue; use Fisharebest\Webtrees\Elements\ResponsibleAgency; use Fisharebest\Webtrees\Elements\RestrictionNotice; use Fisharebest\Webtrees\Elements\Retirement; @@ -472,7 +472,7 @@ class Gedcom 'FAM:OBJE' => new XrefMedia(I18N::translate('Media object')), 'FAM:REFN' => new UserReferenceNumber(I18N::translate('Reference number')), 'FAM:REFN:TYPE' => new UserReferenceType(I18N::translate('Type of reference number')), - 'FAM:RESI' => new FamilyResidence(I18N::translate('Family residence')), + 'FAM:RESI' => new Residence(I18N::translate('Family residence')), 'FAM:RESN' => new RestrictionNotice(I18N::translate('Restriction')), 'FAM:RIN' => new AutomatedRecordId(I18N::translate('Record ID number')), 'FAM:SLGS' => new LdsSpouseSealing(I18N::translate('LDS spouse sealing')), @@ -1045,6 +1045,7 @@ class Gedcom ['RESN', '0:1'], ]; } + if (Site::getPreference('CUSTOM_TIME_TAGS') === '1') { $subtags['INDI:BIRT:DATE'][] = ['TIME', '0:1']; $subtags['INDI:DEAT:DATE'][] = ['TIME', '0:1']; diff --git a/app/Http/RequestHandlers/SiteTagsAction.php b/app/Http/RequestHandlers/SiteTagsAction.php index 63d1f944ff..186a4175c4 100644 --- a/app/Http/RequestHandlers/SiteTagsAction.php +++ b/app/Http/RequestHandlers/SiteTagsAction.php @@ -55,6 +55,7 @@ class SiteTagsAction implements RequestHandlerInterface $custom_gedcom_l_tags = Validator::parsedBody($request)->boolean('custom_gedcom_l_tags', false); $custom_fam_fact = Validator::parsedBody($request)->boolean('custom_fam_fact', false); $custom_fam_nchi = Validator::parsedBody($request)->boolean('custom_fam_nchi', false); + $custom_resi_value = Validator::parsedBody($request)->boolean('custom_resi_value', false); $custom_time_tags = Validator::parsedBody($request)->boolean('custom_time_tags', false); Site::setPreference('CUSTOM_FAMILY_TAGS', implode(',', $custom_family_tags)); @@ -62,6 +63,7 @@ class SiteTagsAction implements RequestHandlerInterface Site::setPreference('CUSTOM_GEDCOM_L_TAGS', (string) $custom_gedcom_l_tags); Site::setPreference('CUSTOM_FAM_FACT', (string) $custom_fam_fact); Site::setPreference('CUSTOM_FAM_NCHI', (string) $custom_fam_nchi); + Site::setPreference('CUSTOM_RESI_VALUE', (string) $custom_resi_value); Site::setPreference('CUSTOM_TIME_TAGS', (string) $custom_time_tags); FlashMessages::addMessage(I18N::translate('The website preferences have been updated.'), 'success'); diff --git a/app/Http/RequestHandlers/SiteTagsPage.php b/app/Http/RequestHandlers/SiteTagsPage.php index ed4cce3741..e419412781 100644 --- a/app/Http/RequestHandlers/SiteTagsPage.php +++ b/app/Http/RequestHandlers/SiteTagsPage.php @@ -66,6 +66,7 @@ class SiteTagsPage implements RequestHandlerInterface // GEDCOM 7 extensions $custom_fam_fact = (bool) Site::getPreference('CUSTOM_FAM_FACT'); $custom_fam_nchi = (bool) Site::getPreference('CUSTOM_FAM_NCHI'); + $custom_resi_value = (bool) Site::getPreference('CUSTOM_RESI_VALUE'); $custom_time_tags = (bool) Site::getPreference('CUSTOM_TIME_TAGS'); return $this->viewResponse('admin/tags', [ @@ -76,6 +77,7 @@ class SiteTagsPage implements RequestHandlerInterface 'custom_individual_tags' => $custom_individual_tags, 'custom_fam_fact' => $custom_fam_fact, 'custom_fam_nchi' => $custom_fam_nchi, + 'custom_resi_value' => $custom_resi_value, 'custom_time_tags' => $custom_time_tags, 'element_factory' => Registry::elementFactory(), 'title' => I18N::translate('GEDCOM tags'), diff --git a/resources/views/admin/tags.phtml b/resources/views/admin/tags.phtml index 1931591655..c7ac246dec 100644 --- a/resources/views/admin/tags.phtml +++ b/resources/views/admin/tags.phtml @@ -980,7 +980,7 @@ use Fisharebest\Webtrees\Site; </td> <td> - <?= view('components/checkbox', ['id' => 'custom_time_tags', 'name' => 'custom_fam_fact', 'label' => I18N::translate('show'), 'checked' => $custom_fam_fact]) ?> + <?= view('components/checkbox', ['id' => 'custom_fam_fact', 'name' => 'custom_fam_fact', 'label' => I18N::translate('show'), 'checked' => $custom_fam_fact]) ?> </td> </tr> @@ -994,7 +994,23 @@ use Fisharebest\Webtrees\Site; </td> <td> - <?= view('components/checkbox', ['id' => 'custom_time_tags', 'name' => 'custom_fam_nchi', 'label' => I18N::translate('show'), 'checked' => $custom_fam_nchi]) ?> + <?= view('components/checkbox', ['id' => 'custom_fam_nchi', 'name' => 'custom_fam_nchi', 'label' => I18N::translate('show'), 'checked' => $custom_fam_nchi]) ?> + </td> + </tr> + + <tr> + <td> + <?= I18N::translate('Residence') ?> + </td> + + <td> + <code dir="ltr">FAM:RESI …</code> + <br> + <code dir="ltr">INDI:RESI …</code> + </td> + + <td> + <?= view('components/checkbox', ['id' => 'custom_resi_value', 'name' => 'custom_resi_value', 'label' => I18N::translate('show'), 'checked' => $custom_resi_value]) ?> </td> </tr> </tbody> diff --git a/tests/app/Elements/FamilyResidenceTest.php b/tests/app/Elements/ResidenceWithValueTest.php index 25cd067b22..0055f57939 100644 --- a/tests/app/Elements/FamilyResidenceTest.php +++ b/tests/app/Elements/ResidenceWithValueTest.php @@ -22,14 +22,14 @@ namespace Fisharebest\Webtrees\Elements; use Fisharebest\Webtrees\TestCase; /** - * Test harness for the class FamilyResidence + * Test harness for the class ResidenceWithValue * - * @covers Fisharebest\Webtrees\Elements\FamilyResidence + * @covers Fisharebest\Webtrees\Elements\ResidenceWithValue */ -class FamilyResidenceTest extends TestCase +class ResidenceWithValueTest extends TestCase { public function testClass(): void { - $this->assertTrue(class_exists(\Fisharebest\Webtrees\Elements\FamilyResidence::class)); + $this->assertTrue(class_exists(\Fisharebest\Webtrees\Elements\ResidenceWithValue::class)); } } |
