Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions app/Family.php
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,16 @@ public function getAllMarriagePlaces(): array
return [];
}

/**
* A closure which will compare families by marriage place.
*
* @return Closure(Family,Family):int
*/
public static function marriagePlaceComparator(): Closure
{
return static fn (Family $x, Family $y): int => Place::compare($x->getMarriagePlace(), $y->getMarriagePlace());
}

/**
* Derived classes should redefine this function, otherwise the object will have no name
*
Expand Down
46 changes: 46 additions & 0 deletions app/Individual.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,36 @@ public static function deathDateComparator(): Closure
return static fn (Individual $x, Individual $y): int => Date::compare($x->getEstimatedDeathDate(), $y->getEstimatedDeathDate());
}

/**
* A closure which will compare individuals by birth place.
*
* @return Closure(Individual,Individual):int
*/
public static function birthPlaceComparator(): Closure
{
return static fn (Individual $x, Individual $y): int => Place::compare($x->getBirthPlace(), $y->getBirthPlace());
}

/**
* A closure which will compare individuals by death place.
*
* @return Closure(Individual,Individual):int
*/
public static function deathPlaceComparator(): Closure
{
return static fn (Individual $x, Individual $y): int => Place::compare($x->getDeathPlace(), $y->getDeathPlace());
}

/**
* A closure which will compare individuals by burial place.
*
* @return Closure(Individual,Individual):int
*/
public static function burialPlaceComparator(): Closure
{
return static fn (Individual $x, Individual $y): int => Place::compare($x->getBurialPlace(), $y->getBurialPlace());
}

/**
* Can the name of this record be shown?
*
Expand Down Expand Up @@ -414,6 +444,22 @@ public function getDeathPlace(): Place
return new Place('', $this->tree);
}

/**
* Get the place of burial
*
* @return Place
*/
public function getBurialPlace(): Place
{
$places = $this->getAllEventPlaces(['BURI']);

foreach ($places as $place) {
return $place;
}

return new Place('', $this->tree);
}

/**
* Get the range of years in which a individual lived. e.g. “1870–”, “1870–1920”, “–1920”.
* Provide the place and full date using a tooltip.
Expand Down
24 changes: 24 additions & 0 deletions app/Place.php
Original file line number Diff line number Diff line change
Expand Up @@ -292,4 +292,28 @@ public function shortName(bool $link = false): string

return '<span class="ut">' . e($short_name) . '</span>';
}

/**
* Compare two places, so they can be sorted.
* return -1 if $a<$b
* return +1 if $b>$a
* return 0 if places are the same
*
* @param Place $a
* @param Place $b
* @return int
*/
public static function compare(Place $a, Place $b): int
{
return strcasecmp($a->reversedFullName(), $b->reversedFullName());
}

private function reversedFullName(): string
{
if ($this->parts->isEmpty()) {
return '';
}
return $this->parts->reverse()->implode(I18N::$list_separator);
}

}
12 changes: 12 additions & 0 deletions app/Report/ReportParserGenerate.php
Original file line number Diff line number Diff line change
Expand Up @@ -1699,12 +1699,24 @@ protected function listStartHandler(array $attrs): void
case 'BIRT:DATE':
uasort($this->list, Individual::birthDateComparator());
break;
case 'BIRT:PLAC':
uasort($this->list, Individual::birthPlaceComparator());
break;
case 'DEAT:DATE':
uasort($this->list, Individual::deathDateComparator());
break;
case 'DEAT:PLAC':
uasort($this->list, Individual::deathPlaceComparator());
break;
case 'BURI:PLAC':
uasort($this->list, Individual::burialPlaceComparator());
break;
case 'MARR:DATE':
uasort($this->list, Family::marriageDateComparator());
break;
case 'MARR:PLAC':
uasort($this->list, Family::marriagePlaceComparator());
break;
default:
// unsorted or already sorted by SQL
break;
Expand Down
6 changes: 4 additions & 2 deletions resources/xml/reports/birth_report.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Input name="birthplace" lookup="PLAC" type="text"><var var="I18N::translate('Birthplace contains')" /></Input>
<Input name="birthdate1" lookup="DATE" type="text"><var var="I18N::translate('Birth date range start')" /></Input>
<Input name="birthdate2" lookup="DATE" type="text"><var var="I18N::translate('Birth date range end')" /></Input>
<Input name="sortby" type="select" default="NAME" options="NAME=>I18N::translate('sort by name')|BIRT:DATE=>I18N::translate('sort by date of birth')"><var var="I18N::translate('Sort order')" /></Input>
<Input name="sortby" type="select" default="NAME" options="NAME=>I18N::translate('sort by name')|BIRT:DATE=>I18N::translate('sort by date of birth')|BIRT:PLAC=>I18N::translate('sort by place of birth')"><var var="I18N::translate('Sort order')" /></Input>
<Input name="pageSize" type="select" options="A4=>I18N::translateContext('paper size','A4')|A3=>I18N::translateContext('paper size', 'A3')|US-Letter=>I18N::translateContext('paper size','Letter')|US-Tabloid=>I18N::translateContext('paper size','Tabloid')"><var var="I18N::translate('Page size')" /></Input>
<SetVar name="fonts" value="dejavusans" />

Expand Down Expand Up @@ -36,7 +36,9 @@
<if condition="$sortby=='BIRT:DATE'"><SetVar name="fill" value="#AAAAAA" /></if>
<Cell bgcolor="$fill" border="1" width="100" style="label"><var var="I18N::translate('Date')" /></Cell>

<Cell border="1" width="150" style="label"><var var="I18N::translate('Place')" /></Cell>
<SetVar name="fill" value="" />
<if condition="$sortby=='BIRT:PLAC'"><SetVar name="fill" value="#AAAAAA" /></if>
<Cell bgcolor="$fill" border="1" width="150" style="label"><var var="I18N::translate('Place')" /></Cell>
<Cell border="1" newline="1" style="label"><var var="I18N::translate('Source')" /></Cell>
</Header>

Expand Down
4 changes: 2 additions & 2 deletions resources/xml/reports/cemetery_report.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<Title><var var="I18N::translate('Burials')" /></Title>
<Description><var var="I18N::translate('A report of individuals who were buried in a given place.')" /></Description>
<Input name="deathplace" lookup="PLAC" type="text"><var var="I18N::translate('Burial place contains')" /> </Input>
<Input name="sortby" type="select" default="NAME" options="NAME=>I18N::translate('sort by name')|DEAT:DATE=>I18N::translate('sort by date of death')"><var var="I18N::translate('Sort order')" /></Input>
<Input name="sortby" type="select" default="NAME" options="NAME=>I18N::translate('sort by name')|DEAT:DATE=>I18N::translate('sort by date of death')|BURI:PLAC=>I18N::translate('sort by place of burial')"><var var="I18N::translate('Sort order')" /></Input>
<Input name="adlist" type="select" default="none" options="none=>I18N::translate('None')|_MARNM=>I18N::translate('Married name')|HUSB=>I18N::translate('Husband')"><var var="I18N::translate('Names')" /></Input>
<Input name="pageSize" type="select" options="A4=>I18N::translateContext('paper size','A4')|A3=>I18N::translateContext('paper size', 'A3')|US-Letter=>I18N::translateContext('paper size','Letter')|US-Tabloid=>I18N::translateContext('paper size','Tabloid')"><var var="I18N::translate('Page size')" /></Input>
<SetVar name="fonts" value="dejavusans" />
Expand Down Expand Up @@ -50,7 +50,7 @@
</TextBox>

<SetVar name="fill" value="" />
<if condition="$sortby=='PLAC'"><SetVar name="fill" value="#AAAAAA" /></if>
<if condition="$sortby=='BURI:PLAC'"><SetVar name="fill" value="#AAAAAA" /></if>
<TextBox bgcolor="$fill" border="1" width="$placewidth">
<Text style="label"><var var="I18N::translate('Place of burial')" /></Text>
</TextBox>
Expand Down
8 changes: 6 additions & 2 deletions resources/xml/reports/death_report.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Input name="deathplace" lookup="PLAC" type="text"><var var="I18N::translate('Death place contains')" /></Input>
<Input name="deathdate1" lookup="DATE" type="text"><var var="I18N::translate('Death date range start')" /></Input>
<Input name="deathdate2" lookup="DATE" type="text"><var var="I18N::translate('Death date range end')" /></Input>
<Input name="sortby" type="select" default="NAME" options="NAME=>I18N::translate('sort by name')|DEAT:DATE=>I18N::translate('sort by date of death')"><var var="I18N::translate('Sort order')" /></Input>
<Input name="sortby" type="select" default="NAME" options="NAME=>I18N::translate('sort by name')|DEAT:DATE=>I18N::translate('sort by date of death')|DEAT:PLAC=>I18N::translate('sort by place of death')"><var var="I18N::translate('Sort order')" /></Input>
<Input name="adlist" type="select" default="none" options="none=>I18N::translate('None')|_MARNM=>I18N::translate('Married name')|HUSB=>I18N::translate('Husband')"><var var="I18N::translate('Names')" /></Input>
<Input name="pageSize" type="select" options="letter=>I18N::translateContext('paper size','Letter')|A3=>I18N::translateContext('paper size', 'A3')|A4=>I18N::translateContext('paper size','A4')"><var var="I18N::translate('Page size')" /></Input>
<SetVar name="fonts" value="dejavusans" />
Expand Down Expand Up @@ -43,7 +43,11 @@
<Text style="label"><var var="I18N::translate('Date')" /></Text>
</TextBox>

<TextBox border="1" width="150">
<SetVar name="fill" value="" />
<if condition="$sortby=='DEAT:PLAC'">
<SetVar name="fill" value="#AAAAAA" />
</if>
<TextBox bgcolor="$fill" border="1" width="150">
<Text style="label"><var var="I18N::translate('Place')" /></Text>
</TextBox>

Expand Down
8 changes: 6 additions & 2 deletions resources/xml/reports/marriage_report.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Input name="marrplace" lookup="PLAC" type="text"><var var="I18N::translate('Marriage place contains')" /> </Input>
<Input name="marrdate1" lookup="DATE" type="text"><var var="I18N::translate('Marriage date range start')" /></Input>
<Input name="marrdate2" lookup="DATE" type="text"><var var="I18N::translate('Marriage date range end')" /></Input>
<Input name="sortby" type="select" default="NAME" options="NAME=>I18N::translate('sort by name')|MARR:DATE=>I18N::translate('sort by date of marriage')"><var var="I18N::translate('Sort order')" /></Input>
<Input name="sortby" type="select" default="NAME" options="NAME=>I18N::translate('sort by name')|MARR:DATE=>I18N::translate('sort by date of marriage')|MARR:PLAC=>I18N::translate('sort by place of marriage')"><var var="I18N::translate('Sort order')" /></Input>
<Input name="pageSize" type="select" options="A4=>I18N::translateContext('paper size','A4')|A3=>I18N::translateContext('paper size', 'A3')|US-Letter=>I18N::translateContext('paper size','Letter')|US-Tabloid=>I18N::translateContext('paper size','Tabloid')"><var var="I18N::translate('Page size')" /></Input>
<SetVar name="fonts" value="dejavusans" />

Expand Down Expand Up @@ -43,7 +43,11 @@
<Text style="label"><var var="I18N::translate('Date')" /></Text>
</TextBox>

<TextBox border="1" height="12" width="150">
<SetVar name="fill" value="" />
<if condition="$sortby=='MARR:PLAC'">
<SetVar name="fill" value="#AAAAAA" />
</if>
<TextBox bgcolor="$fill" border="1" height="12" width="150">
<Text style="label"><var var="I18N::translate('Place')" /></Text>
</TextBox>

Expand Down
Loading