summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/CustomTags/Gedcom7.php17
-rw-r--r--app/Elements/Residence.php29
-rw-r--r--app/Elements/ResidenceWithValue.php (renamed from app/Elements/FamilyResidence.php)6
-rw-r--r--app/Gedcom.php5
-rw-r--r--app/Http/RequestHandlers/SiteTagsAction.php2
-rw-r--r--app/Http/RequestHandlers/SiteTagsPage.php2
-rw-r--r--resources/views/admin/tags.phtml20
-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));
}
}