Skip to content

Commit

Permalink
Merge branch 'fisharebest:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
glarwill committed May 17, 2021
2 parents 5544417 + 2aeda30 commit f9b0484
Show file tree
Hide file tree
Showing 17 changed files with 222 additions and 453 deletions.
6 changes: 4 additions & 2 deletions app/Elements/Census.php
Expand Up @@ -55,11 +55,13 @@ class Census extends AbstractElement
*/
public function edit(string $id, string $name, string $value, Tree $tree): string
{
$html = $this->editHidden($id, $name, $value) . view('modules/GEDFact_assistant/select-census', [
$html = $this->editHidden($id, $name, $value);

$html .= view('modules/GEDFact_assistant/select-census', [
'census_places' => Censuses::censusPlaces(I18N::languageTag()),
]);

$xref=app(ServerRequestInterface::class)->getAttribute('xref', '');
$xref = app(ServerRequestInterface::class)->getAttribute('xref', '');

$census_assistant = app(ModuleService::class)->findByInterface(CensusAssistantModule::class)->first();
$record = Registry::individualFactory()->make($xref, $tree);
Expand Down
37 changes: 5 additions & 32 deletions app/Elements/RelationIsDescriptor.php
Expand Up @@ -51,72 +51,44 @@ public function values(string $sex = 'U'): array
'' => '',
'attendant' => I18N::translateContext('MALE', 'Attendant'),
'attending' => I18N::translateContext('MALE', 'Attending'),
'best_man' => I18N::translate('Best man'),
'bridesmaid' => I18N::translate('Bridesmaid'),
'buyer' => I18N::translateContext('MALE', 'Buyer'),
'circumciser' => I18N::translate('Circumciser'),
'civil_registrar' => I18N::translateContext('MALE', 'Civil registrar'),
'employee' => I18N::translateContext('MALE', 'Employee'),
'employer' => I18N::translateContext('MALE', 'Employer'),
'foster_child' => I18N::translate('Foster child'),
'foster_father' => I18N::translate('Foster father'),
'foster_mother' => I18N::translate('Foster mother'),
'friend' => I18N::translateContext('MALE', 'Friend'),
'godfather' => I18N::translate('Godfather'),
'godmother' => I18N::translate('Godmother'),
'godparent' => I18N::translate('Godparent'),
'godson' => I18N::translate('Godson'),
'goddaughter' => I18N::translate('Goddaughter'),
'godchild' => I18N::translate('Godchild'),
'godparent' => I18N::translate('Godfather'),
'godchild' => I18N::translate('Godson'),
'guardian' => I18N::translateContext('MALE', 'Guardian'),
'informant' => I18N::translateContext('MALE', 'Informant'),
'lodger' => I18N::translateContext('MALE', 'Lodger'),
'nanny' => I18N::translate('Nanny'),
'nurse' => I18N::translateContext('MALE', 'Nurse'),
'owner' => I18N::translateContext('MALE', 'Owner'),
'priest' => I18N::translate('Priest'),
'rabbi' => I18N::translate('Rabbi'),
'registry_officer' => I18N::translateContext('MALE', 'Registry officer'),
'seller' => I18N::translateContext('MALE', 'Seller'),
'servant' => I18N::translateContext('MALE', 'Servant'),
'slave' => I18N::translateContext('MALE', 'Slave'),
'ward' => I18N::translateContext('MALE', 'Ward'),
'witness' => I18N::translate('Witness'),
],
'F' => [
'attendant' => I18N::translateContext('FEMALE', 'Attendant'),
'attending' => I18N::translateContext('FEMALE', 'Attending'),
'best_man' => I18N::translate('Best man'),
'bridesmaid' => I18N::translate('Bridesmaid'),
'buyer' => I18N::translateContext('FEMALE', 'Buyer'),
'circumciser' => I18N::translate('Circumciser'),
'civil_registrar' => I18N::translateContext('FEMALE', 'Civil registrar'),
'employee' => I18N::translateContext('FEMALE', 'Employee'),
'employer' => I18N::translateContext('FEMALE', 'Employer'),
'foster_child' => I18N::translate('Foster child'),
'foster_father' => I18N::translate('Foster father'),
'foster_mother' => I18N::translate('Foster mother'),
'friend' => I18N::translateContext('FEMALE', 'Friend'),
'godfather' => I18N::translate('Godfather'),
'godmother' => I18N::translate('Godmother'),
'godparent' => I18N::translate('Godparent'),
'godson' => I18N::translate('Godson'),
'goddaughter' => I18N::translate('Goddaughter'),
'godchild' => I18N::translate('Godchild'),
'godparent' => I18N::translate('Godmother'),
'godchild' => I18N::translate('Goddaughter'),
'guardian' => I18N::translateContext('FEMALE', 'Guardian'),
'informant' => I18N::translateContext('FEMALE', 'Informant'),
'lodger' => I18N::translateContext('FEMALE', 'Lodger'),
'nanny' => I18N::translate('Nanny'),
'nurse' => I18N::translateContext('FEMALE', 'Nurse'),
'owner' => I18N::translateContext('FEMALE', 'Owner'),
'priest' => I18N::translate('Priest'),
'rabbi' => I18N::translate('Rabbi'),
'registry_officer' => I18N::translateContext('FEMALE', 'Registry officer'),
'seller' => I18N::translateContext('FEMALE', 'Seller'),
'servant' => I18N::translateContext('FEMALE', 'Servant'),
'slave' => I18N::translateContext('FEMALE', 'Slave'),
'ward' => I18N::translateContext('FEMALE', 'Ward'),
'witness' => I18N::translate('Witness'),
],
'U' => [
'attendant' => I18N::translate('Attendant'),
Expand Down Expand Up @@ -144,6 +116,7 @@ public function values(string $sex = 'U'): array
'nanny' => I18N::translate('Nanny'),
'nurse' => I18N::translate('Nurse'),
'owner' => I18N::translate('Owner'),
'proxy' => /* I18N: An individual that represents another */ I18N::translate('Proxy'),
'priest' => I18N::translate('Priest'),
'rabbi' => I18N::translate('Rabbi'),
'registry_officer' => I18N::translate('Registry officer'),
Expand Down
55 changes: 14 additions & 41 deletions app/Functions/FunctionsPrintFacts.php
Expand Up @@ -203,7 +203,7 @@ public static function printFact(Fact $fact, GedcomRecord $record): void
if ($type !== '' && $tag !== 'EVEN' && $tag !== 'FACT') {
// Allow (custom) translations for other types
$type = I18N::translate($type);
echo GedcomTag::getLabelValue('TYPE', e($type));
echo Registry::elementFactory()->make($fact->tag() . ':TYPE')->labelValue($type, $tree);
}

// Print the date of this fact/event
Expand All @@ -221,7 +221,7 @@ public static function printFact(Fact $fact, GedcomRecord $record): void
$addr = '<span class="d-block" style="white-space: pre-wrap">' . $addr . '</span';
}

echo GedcomTag::getLabelValue($fact->tag() . ':ADDR', $addr);
echo Registry::elementFactory()->make($fact->tag() . ':ADDR')->labelValue($addr, $tree);
}

// Print the associates of this fact/event
Expand Down Expand Up @@ -389,7 +389,7 @@ private static function formatAssociateRelationship(Fact $event): string
foreach ($associates as $associate) {
$relationship_name = app(RelationshipService::class)->getCloseRelationshipName($associate, $person);
if ($relationship_name === '') {
$relationship_name = GedcomTag::getLabel('RELA');
$relationship_name = I18N::translate('Relationship');
}

if ($parent instanceof Family) {
Expand All @@ -401,11 +401,10 @@ private static function formatAssociateRelationship(Fact $event): string
}
}
$value = implode(' — ', $values);

// Use same markup as GedcomTag::getLabelValue()
$asso = I18N::translate('<span class="label">%1$s:</span> <span class="field" dir="auto">%2$s</span>', $label, $value);
$asso = I18N::translate('<span class="label">%1$s:</span> <span class="field" dir="auto">%2$s</span>', $label, $value);
} elseif (!$person && Auth::isEditor($event->record()->tree())) {
$asso = GedcomTag::getLabelValue('ASSO', '<span class="error">' . $amatch[1] . '</span>');
$value = '<span class="error">' . $amatch[2] . '</span>';
$asso = I18N::translate('<span class="label">%1$s:</span> <span class="field" dir="auto">%2$s</span>', I18N::translate('Associate'), $value);
} else {
$asso = '';
}
Expand Down Expand Up @@ -466,9 +465,9 @@ public static function printFactSources(Tree $tree, string $factrec, int $level)
$data .= view('icons/collapse');
$data .= '</a>';
}
$data .= GedcomTag::getLabelValue('SOUR', '<a href="' . e($source->url()) . '">' . $source->fullName() . '</a>', null, 'span');
$value = '<a href="' . e($source->url()) . '">' . $source->fullName() . '</a>';
$data .= I18N::translate('<span class="label">%1$s:</span> <span class="field" dir="auto">%2$s</span>', I18N::translate('Source'), $value);
$data .= '</div>';

$data .= '<div id="' . e($id) . '" class="collapse ' . ($expanded ? 'show' : '') . '">';
$data .= self::printSourceStructure($tree, self::getSourceStructure($srec));
$data .= '<div class="indent">';
Expand All @@ -480,7 +479,8 @@ public static function printFactSources(Tree $tree, string $factrec, int $level)
$data .= '</div>';
}
} else {
$data .= GedcomTag::getLabelValue('SOUR', '<span class="error">' . $sid . '</span>');
$value = '<span class="error">' . $sid . '</span>';
$data .= I18N::translate('<span class="label">%1$s:</span> <span class="field" dir="auto">%2$s</span>', I18N::translate('Source'), $value);
}
}

Expand Down Expand Up @@ -795,11 +795,11 @@ public static function printMainNotes(Fact $fact, int $level): void
if ($level < 2) {
if ($note instanceof Note) {
echo '<a href="' . e($note->url()) . '">';
echo GedcomTag::getLabel('SHARED_NOTE');
echo I18N::translate('Shared note');
echo view('icons/note');
echo '</a>';
} else {
echo GedcomTag::getLabel('NOTE');
echo I18N::translate('Note');
}
echo '<div class="editfacts nowrap">';
echo view('edit/icon-fact-edit', ['fact' => $fact]);
Expand All @@ -810,9 +810,9 @@ public static function printMainNotes(Fact $fact, int $level): void
} else {
if ($level < 2) {
if ($note) {
echo GedcomTag::getLabel('SHARED_NOTE');
echo I18N::translate('Shared note');
} else {
echo GedcomTag::getLabel('NOTE');
echo I18N::translate('Note');
}
}
$factlines = explode("\n", $factrec); // 1 BIRT Y\n2 NOTE ...
Expand Down Expand Up @@ -848,33 +848,6 @@ public static function printMainNotes(Fact $fact, int $level): void

echo '<td class="', $styleadd, ' wrap">';
echo $text;

// 2 RESN tags. Note, there can be more than one, such as "privacy" and "locked"
if (preg_match_all("/\n2 RESN (.+)/", $factrec, $rmatches)) {
foreach ($rmatches[1] as $rmatch) {
echo '<br><span class="label">', GedcomTag::getLabel('RESN'), ':</span> <span class="field">';
switch ($rmatch) {
case 'none':
// Note: "2 RESN none" is not valid gedcom, and the GUI will not let you add it.
// However, webtrees privacy rules will interpret it as "show an otherwise private fact to public".
echo '<i class="icon-resn-none"></i> ', I18N::translate('Show to visitors');
break;
case 'privacy':
echo '<i class="icon-resn-privacy"></i> ', I18N::translate('Show to members');
break;
case 'confidential':
echo '<i class="icon-resn-confidential"></i> ', I18N::translate('Show to managers');
break;
case 'locked':
echo '<i class="icon-resn-locked"></i> ', I18N::translate('Only managers can edit');
break;
default:
echo $rmatch;
break;
}
echo '</span>';
}
}
echo '</td></tr>';
}
}
Expand Down
19 changes: 0 additions & 19 deletions app/GedcomTag.php
Expand Up @@ -37,23 +37,4 @@ public static function getLabel($tag): string
{
return Registry::elementFactory()->make($tag)->label();
}

/**
* Translate a label/value pair, such as “Occupation: Farmer”
*
* @param string $tag
* @param string $value
* @param GedcomRecord|null $record
* @param string|null $element
*
* @return string
*/
public static function getLabelValue(string $tag, string $value, GedcomRecord $record = null, $element = 'div'): string
{
return
'<' . $element . ' class="fact_' . $tag . '">' .
/* I18N: a label/value pair, such as “Occupation: Farmer”. Some languages may need to change the punctuation. */
I18N::translate('<span class="label">%1$s:</span> <span class="field" dir="auto">%2$s</span>', self::getLabel($tag), $value) .
'</' . $element . '>';
}
}
8 changes: 4 additions & 4 deletions app/Http/Middleware/BadBotBlocker.php
Expand Up @@ -259,14 +259,14 @@ private function checkRobotDNS(string $ip, array $valid_domains, bool $reverse_o
private function fetchIpRangesForAsn(string $asn): array
{
return Registry::cache()->file()->remember('whois-asn-' . $asn, static function () use ($asn): array {
$mapper = fn (AsnRouteInfo $route_info): ?RangeInterface => IPFactory::rangeFromString($route_info->route ?: $route_info->route6);

try {
$loader = new CurlLoader(self::WHOIS_TIMEOUT);
$whois = new Whois($loader);
$info = $whois->loadAsnInfo($asn);
$routes = $info->getRoutes();
$ranges = array_map(static function (AsnRouteInfo $route_info): ?RangeInterface {
return IPFactory::rangeFromString($route_info->getRoute() ?: $route_info->getRoute6());
}, $routes);
$routes = $info->routes;
$ranges = array_map($mapper, $routes);

return array_filter($ranges);
} catch (Throwable $ex) {
Expand Down
12 changes: 9 additions & 3 deletions app/Module/CustomTagsGedcomL.php
Expand Up @@ -90,9 +90,11 @@ public function customTags(): array
{
return [
'FAM:*:ADDR:_NAME' => new CustomElement('Name of addressee'),
// I18N: http://gov.genealogy.net
'FAM:*:PLAC:_GOV' => new GovIdentifier(I18N::translate('GOV identifier')),
'FAM:*:PLAC:_LOC' => new XrefLocation(I18N::translate('Location')),
'FAM:*:PLAC:_MAIDENHEAD' => new MaidenheadLocator('Maidenhead locator'),
// I18N: https://en.wikipedia.org/wiki/Maidenhead_Locator_System
'FAM:*:PLAC:_MAIDENHEAD' => new MaidenheadLocator(I18N::translate('Maidenhead location code')),
'FAM:*:PLAC:_POST' => new AddressPostalCode('Postal code'),
'FAM:*:PLAC:_POST:DATE' => new DateValue(I18N::translate('Date')),
'FAM:*:_ASSO' => new XrefAssociate(I18N::translate('Associate')),
Expand Down Expand Up @@ -137,9 +139,11 @@ public function customTags(): array
'HEAD:_SCHEMA:*:*:*:_DEFN' => new EmptyElement(I18N::translate('Definition')),
'HEAD:_SCHEMA:*:*:_DEFN' => new EmptyElement(I18N::translate('Definition')),
'INDI:*:ADDR:_NAME' => new CustomElement('Name of addressee'),
// I18N: http://gov.genealogy.net
'INDI:*:PLAC:_GOV' => new GovIdentifier(I18N::translate('GOV identifier')),
'INDI:*:PLAC:_LOC' => new XrefLocation(I18N::translate('Location')),
'INDI:*:PLAC:_MAIDENHEAD' => new MaidenheadLocator('Maidenhead locator'),
// I18N: https://en.wikipedia.org/wiki/Maidenhead_Locator_System
'INDI:*:PLAC:_MAIDENHEAD' => new MaidenheadLocator(I18N::translate('Maidenhead location code')),
'INDI:*:PLAC:_POST' => new AddressPostalCode('Postal code'),
'INDI:*:PLAC:_POST:DATE' => new DateValue(I18N::translate('Date')),
'INDI:*:_ASSO' => new XrefAssociate(I18N::translate('Associate')),
Expand Down Expand Up @@ -224,12 +228,14 @@ public function customTags(): array
'_LOC:_DMGD:DATE' => new DateValue(I18N::translate('Date')),
'_LOC:_DMGD:SOUR' => new XrefSource(I18N::translate('Source')),
'_LOC:_DMGD:TYPE' => new CustomElement(I18N::translate('Type of demographic data')),
// I18N: http://gov.genealogy.net
'_LOC:_GOV' => new GovIdentifier(I18N::translate('GOV identifier')),
'_LOC:_LOC' => new XrefLocation(I18N::translate('Parent'), ['DATE' => '0:1', 'SOUR' => '0:M', 'TYPE' => '0:1']),
'_LOC:_LOC:DATE' => new DateValue(I18N::translate('Date')),
'_LOC:_LOC:SOUR' => new XrefSource(I18N::translate('Source')),
'_LOC:_LOC:TYPE' => new HierarchicalRelationship(I18N::translate('Hierarchical relationship')),
'_LOC:_MAIDENHEAD' => new MaidenheadLocator('Maidenhead locator'),
// I18N: https://en.wikipedia.org/wiki/Maidenhead_Locator_System
'_LOC:_MAIDENHEAD' => new MaidenheadLocator(I18N::translate('Maidenhead location code')),
'_LOC:_POST' => new AddressPostalCode(I18N::translate('Postal code')),
'_LOC:_POST:DATE' => new DateValue(I18N::translate('Date')),
'_LOC:_POST:SOUR' => new XrefSource(I18N::translate('Source')),
Expand Down

0 comments on commit f9b0484

Please sign in to comment.