');
define('WT_ICON_BRANCHES', "
");
//-- args
$surn = safe_GET('surn', '[^<>&%{};]*');
$surn = utf8_strtoupper($surn);
$soundex_std = safe_GET_bool('soundex_std');
$soundex_dm = safe_GET_bool('soundex_dm');
$ged = safe_GET('ged');
if (empty($ged)) {
$ged = $GEDCOM;
}
//-- rootid
$rootid = "";
if (WT_USER_ID) {
$rootid = WT_USER_ROOT_ID;
if (empty($_SESSION['user_ancestors']) || $_SESSION['user_ancestors'][1]!==$rootid) {
unset($_SESSION['user_ancestors']);
load_ancestors_array($rootid);
}
}
//-- random surname
if ($surn=='*') {
$surn = array_rand(get_indilist_surns("", "", false, true, WT_GED_ID));
}
//-- form
print_header(i18n::translate('Branches')." - ".$surn);
if ($ENABLE_AUTOCOMPLETE) {
require WT_ROOT.'/js/autocomplete.js.htm';
}
?>
";
$indis = indis_array($surn, $soundex_std, $soundex_dm);
echo "";
foreach ($indis as $k=>$person) {
$famc = $person->getPrimaryChildFamily();
if (!$famc || (!array_key_exists($famc->getHusbId(), $indis)) && !array_key_exists($famc->getWifeId(), $indis)) {
print_fams($person);
}
}
echo "
";
echo "";
if ($rootid) {
$person = Person::getInstance($rootid);
echo "", i18n::translate('Pedigree chart root person'), " : getXref(), "\" href=\"{$person->getLinkUrl()}\">{$person->getFullName()}";
echo "
".i18n::translate('Direct line ancestors')." : ", count($_SESSION['user_ancestors']), "
";
}
}
print_footer();
function print_fams($person, $famid=null) {
global $UNKNOWN_NN, $PEDI_CODES, $PEDI_CODES_F, $PEDI_CODES_M, $surn, $surn_script, $TEXT_DIRECTION;
// select person name according to searched surname
$person_name = "";
foreach ($person->getAllNames() as $n=>$name) {
list($surn1) = explode(", ", $name['list']);
if (stripos($surn1, $surn)===false
&& stripos($surn, $surn1)===false
&& soundex_std($surn1)!==soundex_std($surn)
&& soundex_dm($surn1)!==soundex_dm($surn)
) {
continue;
}
if (utf8_script($surn1)!==$surn_script) {
continue;
}
$person_name = $name['full'];
break;
}
if (empty($person_name)) {
echo "getFullName())), "\">", $person->getSexImage(), "...";
return;
}
$person_script = utf8_script($person_name);
// current indi
echo "";
$class = "";
$sosa = @array_search($person->getXref(), $_SESSION['user_ancestors']);
if ($sosa) {
$class = "search_hit";
$sosa = "getBoxStyle()}\" title=\"Sosa\" href=\"relationship.php?pid2=".WT_USER_ROOT_ID."&pid1=".$person->getXref()."\"> {$sosa} ".sosa_gen($sosa);
}
$current = $person->getSexImage().
"getXref()."\" href=\"{$person->getLinkUrl()}\">".PrintReady($person_name)." ".
$person->getBirthDeathYears()." {$sosa}";
if ($famid && $person->getChildFamilyPedigree($famid)) {
$sex = $person->getSex();
$famcrec = get_sub_record(1, "1 FAMC @".$famid."@", $person->getGedcomRecord());
$pedi = get_gedcom_value("PEDI", 2, $famcrec, '', false);
if ($sex=="F" && isset($PEDI_CODES_F[$pedi])) $label = $PEDI_CODES_F[$pedi];
else if ($sex=="M" && isset($PEDI_CODES_M[$pedi])) $label = $PEDI_CODES_M[$pedi];
else if (isset($PEDI_CODES[$pedi])) $label = $PEDI_CODES[$pedi];
$current = "".$label." ".$current;
}
// spouses and children
if (count($person->getSpouseFamilies())<1) {
echo $current;
}
foreach ($person->getSpouseFamilies() as $f=>$family) {
$txt = $current;
$spouse = $family->getSpouse($person);
if ($spouse) {
$class = "";
$sosa2 = @array_search($spouse->getXref(), $_SESSION['user_ancestors']);
if ($sosa2) {
$class = "search_hit";
$sosa2 = "getBoxStyle()}\" title=\"Sosa\" href=\"relationship.php?pid2=".WT_USER_ROOT_ID."&pid1=".$spouse->getXref()."\"> {$sosa2} ".sosa_gen($sosa2);
}
if ($family->getMarriageYear()) {
$txt .= " getMarriageDate()->Display())."\">".WT_ICON_RINGS.$family->getMarriageYear()." ";
}
else if ($family->getMarriage()) {
$txt .= " ".WT_ICON_RINGS." ";
}
$spouse_name = $spouse->getListName();
foreach ($spouse->getAllNames() as $n=>$name) {
if (utf8_script($name['list']) == $person_script) {
$spouse_name = $name['list'];
break;
}
//How can we use check_NN($names) or something else to replace the unknown unknown name from the page language to the language of the spouse's name?
else if ($name['fullNN']=="@P.N. @N.N.") {
$spouse_name = $UNKNOWN_NN[$person_script].", ".$UNKNOWN_NN[$person_script];
break;
}
}
list($surn2, $givn2) = explode(", ", $spouse_name.", x");
$txt .= $spouse->getSexImage().
"getXref()."\" href=\"{$family->getLinkUrl()}\">".PrintReady($givn2)." ".
"".PrintReady($surn2)." ".
$spouse->getBirthDeathYears()." {$sosa2}";
}
echo $txt;
echo "";
foreach ($family->getChildren() as $c=>$child) {
print_fams($child, $family->getXref());
}
echo "
";
}
echo "";
}
function load_ancestors_array($xref, $sosa=1) {
if ($xref) {
$_SESSION['user_ancestors'][$sosa] = $xref;
$person = Person::getInstance($xref);
$famc = $person->getPrimaryChildFamily();
if ($famc) {
load_ancestors_array($famc->getHusbId(), $sosa*2);
load_ancestors_array($famc->getWifeId(), $sosa*2+1);
}
}
}
function indis_array($surn, $soundex_std, $soundex_dm) {
$sql=
"SELECT DISTINCT n_id".
" FROM `##name`".
" WHERE n_file=?".
" AND n_type!=?".
" AND (n_surn=? OR n_surname=?";
$args=array(WT_GED_ID, '_MARNM', $surn, $surn);
if ($soundex_std) {
$sql .= " OR n_soundex_surn_std=?";
$args[]=soundex_std($surn);
}
if ($soundex_dm) {
$sql .= " OR n_soundex_surn_dm=?";
$args[]=soundex_dm($surn);
}
$sql .= ") ORDER BY n_sort";
$rows=
WT_DB::prepare($sql)
->execute($args)
->fetchAll();
// var_dump($sql); var_dump($rows);
$data=array();
foreach ($rows as $row) {
$data[$row->n_id]=Person::getInstance($row->n_id);
}
return $data;
}
function sosa_gen($sosa) {
$gen = (int)log($sosa, 2)+1;
return "{$gen}";
}
?>