1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/webtrees_ynh.git synced 2024-09-03 18:26:37 +02:00
webtrees_ynh/sources/app/GedcomCode/GedcomCodeRela.php

290 lines
7.7 KiB
PHP
Raw Normal View History

<?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 wont 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;
}
}