mirror of
https://github.com/YunoHost-Apps/webtrees_ynh.git
synced 2024-09-03 18:26:37 +02:00
290 lines
7.7 KiB
PHP
290 lines
7.7 KiB
PHP
|
<?php
|
|||
|
/**
|
|||
|
* webtrees: online genealogy
|
|||
|
* Copyright (C) 2016 webtrees development team
|
|||
|
* This program is free software: you can redistribute it and/or modify
|
|||
|
* it under the terms of the GNU General Public License as published by
|
|||
|
* the Free Software Foundation, either version 3 of the License, or
|
|||
|
* (at your option) any later version.
|
|||
|
* This program is distributed in the hope that it will be useful,
|
|||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
|
* GNU General Public License for more details.
|
|||
|
* You should have received a copy of the GNU General Public License
|
|||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
*/
|
|||
|
namespace Fisharebest\Webtrees\GedcomCode;
|
|||
|
|
|||
|
use Fisharebest\Webtrees\GedcomRecord;
|
|||
|
use Fisharebest\Webtrees\I18N;
|
|||
|
use Fisharebest\Webtrees\Individual;
|
|||
|
|
|||
|
/**
|
|||
|
* Class GedcomCodeRela - Functions and logic for GEDCOM "RELA" codes
|
|||
|
*/
|
|||
|
class GedcomCodeRela {
|
|||
|
/** @var string[] List of possible values for the RELA tag */
|
|||
|
private static $TYPES = array(
|
|||
|
'attendant', 'attending', 'best_man', 'bridesmaid', 'buyer',
|
|||
|
'circumciser', 'civil_registrar', 'employee', 'employer', 'foster_child',
|
|||
|
'foster_father', 'foster_mother', 'friend', 'godfather', 'godmother',
|
|||
|
'godparent', 'godson', 'goddaughter', 'godchild', 'guardian',
|
|||
|
'informant', 'lodger', 'nanny', 'nurse', 'owner',
|
|||
|
'priest', 'rabbi', 'registry_officer', 'seller', 'servant',
|
|||
|
'slave', 'ward', 'witness',
|
|||
|
);
|
|||
|
|
|||
|
/**
|
|||
|
* Translate a code, for an (optional) record.
|
|||
|
* We need the record to translate the sex (godfather/godmother) but
|
|||
|
* we won’t have this when adding data for new individuals.
|
|||
|
*
|
|||
|
* @param string $type
|
|||
|
* @param GedcomRecord|null $record
|
|||
|
*
|
|||
|
* @return string
|
|||
|
*/
|
|||
|
public static function getValue($type, GedcomRecord $record = null) {
|
|||
|
if ($record instanceof Individual) {
|
|||
|
$sex = $record->getSex();
|
|||
|
} else {
|
|||
|
$sex = 'U';
|
|||
|
}
|
|||
|
|
|||
|
switch ($type) {
|
|||
|
case 'attendant':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Attendant');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Attendant');
|
|||
|
default:
|
|||
|
return I18N::translate('Attendant');
|
|||
|
}
|
|||
|
case 'attending':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Attending');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Attending');
|
|||
|
default:
|
|||
|
return I18N::translate('Attending');
|
|||
|
}
|
|||
|
case 'best_man':
|
|||
|
// always male
|
|||
|
return I18N::translate('Best man');
|
|||
|
case 'bridesmaid':
|
|||
|
// always female
|
|||
|
return I18N::translate('Bridesmaid');
|
|||
|
case 'buyer':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Buyer');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Buyer');
|
|||
|
default:
|
|||
|
return I18N::translate('Buyer');
|
|||
|
}
|
|||
|
case 'circumciser':
|
|||
|
// always male
|
|||
|
return I18N::translate('Circumciser');
|
|||
|
case 'civil_registrar':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Civil registrar');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Civil registrar');
|
|||
|
default:
|
|||
|
return I18N::translate('Civil registrar');
|
|||
|
}
|
|||
|
case 'employee':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Employee');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Employee');
|
|||
|
default:
|
|||
|
return I18N::translate('Employee');
|
|||
|
}
|
|||
|
case 'employer':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Employer');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Employer');
|
|||
|
default:
|
|||
|
return I18N::translate('Employer');
|
|||
|
}
|
|||
|
case 'foster_child':
|
|||
|
// no sex implied
|
|||
|
return I18N::translate('Foster child');
|
|||
|
case 'foster_father':
|
|||
|
// always male
|
|||
|
return I18N::translate('Foster father');
|
|||
|
case 'foster_mother':
|
|||
|
// always female
|
|||
|
return I18N::translate('Foster mother');
|
|||
|
case 'friend':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Friend');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Friend');
|
|||
|
default:
|
|||
|
return I18N::translate('Friend');
|
|||
|
}
|
|||
|
case 'godfather':
|
|||
|
// always male
|
|||
|
return I18N::translate('Godfather');
|
|||
|
case 'godmother':
|
|||
|
// always female
|
|||
|
return I18N::translate('Godmother');
|
|||
|
case 'godparent':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translate('Godfather');
|
|||
|
case 'F':
|
|||
|
return I18N::translate('Godmother');
|
|||
|
default:
|
|||
|
return I18N::translate('Godparent');
|
|||
|
}
|
|||
|
case 'godson':
|
|||
|
// always male
|
|||
|
return I18N::translate('Godson');
|
|||
|
case 'goddaughter':
|
|||
|
// always female
|
|||
|
return I18N::translate('Goddaughter');
|
|||
|
case 'godchild':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translate('Godson');
|
|||
|
case 'F':
|
|||
|
return I18N::translate('Goddaughter');
|
|||
|
default:
|
|||
|
return I18N::translate('Godchild');
|
|||
|
}
|
|||
|
case 'guardian':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Guardian');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Guardian');
|
|||
|
default:
|
|||
|
return I18N::translate('Guardian');
|
|||
|
}
|
|||
|
case 'informant':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Informant');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Informant');
|
|||
|
default:
|
|||
|
return I18N::translate('Informant');
|
|||
|
}
|
|||
|
case 'lodger':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Lodger');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Lodger');
|
|||
|
default:
|
|||
|
return I18N::translate('Lodger');
|
|||
|
}
|
|||
|
case 'nanny':
|
|||
|
// no sex implied
|
|||
|
return I18N::translate('Nanny');
|
|||
|
case 'nurse':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Nurse');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Nurse');
|
|||
|
default:
|
|||
|
return I18N::translate('Nurse');
|
|||
|
}
|
|||
|
case 'owner':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Owner');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Owner');
|
|||
|
default:
|
|||
|
return I18N::translate('Owner');
|
|||
|
}
|
|||
|
case 'priest':
|
|||
|
// no sex implied
|
|||
|
return I18N::translate('Priest');
|
|||
|
case 'rabbi':
|
|||
|
// always male
|
|||
|
return I18N::translate('Rabbi');
|
|||
|
case 'registry_officer':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Registry officer');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Registry officer');
|
|||
|
default:
|
|||
|
return I18N::translate('Registry officer');
|
|||
|
}
|
|||
|
case 'seller':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Seller');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Seller');
|
|||
|
default:
|
|||
|
return I18N::translate('Seller');
|
|||
|
}
|
|||
|
case 'servant':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Servant');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Servant');
|
|||
|
default:
|
|||
|
return I18N::translate('Servant');
|
|||
|
}
|
|||
|
case 'slave':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Slave');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Slave');
|
|||
|
default:
|
|||
|
return I18N::translate('Slave');
|
|||
|
}
|
|||
|
case 'ward':
|
|||
|
switch ($sex) {
|
|||
|
case 'M':
|
|||
|
return I18N::translateContext('MALE', 'Ward');
|
|||
|
case 'F':
|
|||
|
return I18N::translateContext('FEMALE', 'Ward');
|
|||
|
default:
|
|||
|
return I18N::translate('Ward');
|
|||
|
}
|
|||
|
case 'witness':
|
|||
|
// Do we need separate male/female translations for this?
|
|||
|
return I18N::translate('Witness');
|
|||
|
default:
|
|||
|
return I18N::translate($type);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* A list of all possible values for RELA
|
|||
|
*
|
|||
|
* @param GedcomRecord|null $record
|
|||
|
*
|
|||
|
* @return string[]
|
|||
|
*/
|
|||
|
public static function getValues(GedcomRecord $record = null) {
|
|||
|
$values = array();
|
|||
|
foreach (self::$TYPES as $type) {
|
|||
|
$values[$type] = self::getValue($type, $record);
|
|||
|
}
|
|||
|
uasort($values, '\Fisharebest\Webtrees\I18N::strcasecmp');
|
|||
|
|
|||
|
return $values;
|
|||
|
}
|
|||
|
}
|