parameter('compact-chart-box-x');
$bheight = Theme::theme()->parameter('compact-chart-box-y');
$Dbwidth = Theme::theme()->parameter('compact-chart-box-x');
}
$Dbheight = $bheight;
$Dbxspacing = 0;
$Dbyspacing = 0;
$Dbasexoffset = 0;
$Dbaseyoffset = 0;
$person1 = WT_Individual::getInstance($pid1);
$person2 = WT_Individual::getInstance($pid2);
$controller
->addExternalJavascript(WT_AUTOCOMPLETE_JS_URL)
->addInlineJavascript('autocomplete();');
if ($person1 && $person1->canShowName() && $person2 && $person2->canShowName()) {
$controller
->setPageTitle(WT_I18N::translate(/* I18N: %s are individual’s names */ 'Relationships between %1$s and %2$s', $person1->getFullName(), $person2->getFullName()))
->PageHeader();
$node = get_relationship($person1, $person2, $followspouse, 0, $path_to_find);
// If no blood relationship exists, look for relationship via marriage
if ($path_to_find == 0 && $node == false && $followspouse == false) {
$followspouse = true;
$node = get_relationship($person1, $person2, $followspouse, 0, $path_to_find);
}
$disp = true;
} else {
$controller
->setPageTitle(WT_I18N::translate('Relationships'))
->PageHeader();
$node = false;
$disp = false;
}
?>
getPageTitle(); ?>
', WT_I18N::translate('This information is private and cannot be shown.'), '
';
} elseif (!$node) {
if ($path_to_find == 0) {
echo '', WT_I18N::translate('No link between the two individuals could be found.'), '
';
} else {
echo '', WT_I18N::translate('No other link between the two individuals could be found.'), '
';
}
} else {
if ($node) {
echo '', WT_I18N::translate('Relationship: %s', get_relationship_name($node)), '
';
// Use relative layout to position the person boxes.
echo '';
$yoffset = $Dbaseyoffset + 20;
$xoffset = $Dbasexoffset;
$colNum = 0;
$rowNum = 0;
$previous = '';
$change_count = ''; // shift right on alternate change of direction
$xs = $Dbxspacing + 70;
$ys = $Dbyspacing + 50;
// step1 = tree depth calculation
$dmin = 0;
$dmax = 0;
$depth = 0;
foreach ($node['path'] as $index=>$person) {
if ($node['relations'][$index] == 'father' || $node['relations'][$index] == 'mother' || $node['relations'][$index] == 'parent') {
$depth++;
if ($depth > $dmax) {
$dmax = $depth;
}
if ($asc == 0) {
$asc = 1; // the first link is a parent link
}
}
if ($node['relations'][$index] == 'son' || $node['relations'][$index] == 'daughter' || $node['relations'][$index] == 'child') {
$depth--;
if ($depth < $dmin) {
$dmin = $depth;
}
if ($asc == 0) {
$asc = -1; // the first link is a child link
}
}
}
$depth = $dmax + $dmin;
// need more yoffset before the first box ?
if ($asc == 1) {
$yoffset -= $dmin * ($Dbheight + $ys);
}
if ($asc == -1) {
$yoffset += $dmax * ($Dbheight + $ys);
}
$rowNum = ($asc == -1) ? $depth : 0;
$maxxoffset = -1 * $Dbwidth - 20;
$maxyoffset = $yoffset;
// Left and right get reversed on RTL pages
if ($TEXT_DIRECTION == 'ltr') {
$right_arrow = 'icon-rarrow';
} else {
$right_arrow = 'icon-larrow';
}
// Up and down get reversed, for the “oldest at top” option
if ($asc == 1) {
$up_arrow = 'icon-uarrow';
$down_arrow = 'icon-darrow';
} else {
$up_arrow = 'icon-darrow';
$down_arrow = 'icon-uarrow';
}
foreach ($node['path'] as $index=>$person) {
$linex = $xoffset;
$liney = $yoffset;
switch ($person->getSex()) {
case 'M':
$mfstyle = '';
break;
case 'F':
$mfstyle = 'F';
break;
default:
$mfstyle = 'NN';
break;
}
switch ($node['relations'][$index]) {
case 'father':
case 'mother':
case 'parent':
$arrow_img = $down_arrow;
$line = Theme::theme()->parameter('image-vline');
$liney += $Dbheight;
$linex += $Dbwidth / 2;
$lh = 54;
$lw = 3;
$lh = $ys;
$linex = $xoffset + $Dbwidth / 2;
// put the box up or down ?
$yoffset += $asc * ($Dbheight + $lh);
$rowNum += $asc;
if ($asc == 1) {
$liney = $yoffset - $lh;
} else {
$liney = $yoffset + $Dbheight;
}
// need to draw a joining line ?
if ($previous == 'child' && ($change_count++ % 2) == 0) {
$joinh = 3;
$joinw = $xs / 2 + 2;
$xoffset += $Dbwidth + $xs;
$colNum++;
//$rowNum is inherited from the box immediately to the left
$linex = $xoffset - $xs / 2;
if ($asc == -1) {
$liney = $yoffset + $Dbheight;
} else {
$liney = $yoffset - $lh;
}
$joinx = $xoffset - $xs;
$joiny = $liney - 2 - ($asc - 1) / 2 * $lh;
echo "

parameter('image-hline'), "\" align=\"left\" width=\"", $joinw, "\" height=\"", $joinh, "\" alt=\"\">
";
$joinw = $xs / 2 + 2;
$joinx = $joinx + $xs / 2;
$joiny = $joiny + $asc * $lh;
echo "

parameter('image-hline'), "\" align=\"left\" width=\"", $joinw, "\" height=\"", $joinh, "\" alt=\"\">
";
} else {
$change_count = '';
}
$previous = 'parent';
break;
case 'brother':
case 'sister':
case 'sibling':
case 'husband':
case 'wife':
case 'spouse':
$arrow_img = $right_arrow;
$xoffset += $Dbwidth + $Dbxspacing + 70;
$colNum++;
//$rowNum is inherited from the box immediately to the left
$line = Theme::theme()->parameter('image-hline');
$linex += $Dbwidth;
$liney += $Dbheight / 2;
$lh = 3;
$lw = 70;
$lw = $xs;
$linex = $xoffset - $lw;
$liney = $yoffset + $Dbheight / 4;
$previous = '';
break;
case 'son':
case 'daughter':
case 'child':
$arrow_img = $up_arrow;
$line = Theme::theme()->parameter('image-vline');
$liney += $Dbheight;
$linex += $Dbwidth / 2;
$lh = 54;
$lw = 3;
$lh = $ys;
$linex = $xoffset + $Dbwidth / 2;
// put the box up or down ?
$yoffset -= $asc * ($Dbheight + $lh);
$rowNum -= $asc;
if ($asc == -1) {
$liney = $yoffset - $lh;
} else {
$liney = $yoffset + $Dbheight;
}
// need to draw a joining line ?
if ($previous == 'parent' && ($change_count++ % 2) == 0) {
$joinh = 3;
$joinw = $xs / 2 + 2;
$xoffset += $Dbwidth + $xs;
$colNum++;
//$rowNum is inherited from the box immediately to the left
$linex = $xoffset - $xs / 2;
if ($asc == 1) {
$liney = $yoffset + $Dbheight;
} else {
$liney = $yoffset - ($lh + $Dbyspacing);
}
$joinx = $xoffset - $xs;
$joiny = $liney - 2 + ($asc + 1) / 2 * $lh;
echo '
->parameter('image-hline'), ')
';
$joinw = $xs / 2 + 2;
$joinx = $joinx + $xs / 2;
$joiny = $joiny - $asc * $lh;
echo '
';
} else {
$change_count = '';
}
$previous = 'child';
break;
}
if ($yoffset > $maxyoffset) {
$maxyoffset = $yoffset;
}
$plinex = $linex;
$pxoffset = $xoffset;
// Adjust all box positions for proper placement with respect to other page elements
$pyoffset = $yoffset - 2;
if ($index > 0) {
if ($TEXT_DIRECTION === 'rtl' && $line !== Theme::theme()->parameter('image-hline')) {
echo '
';
echo '

';
echo '
';
echo WT_I18N::translate($node['relations'][$index]);
echo '
';
} else {
echo '

';
echo '
';
echo '
';
if ($lh == 3) {
echo '
'; // note: $lh==3 means horiz arrow
}
echo WT_I18N::translate($node['relations'][$index]);
}
echo '
';
}
// Determine the z-index for this box
$zIndex = 200 - ($colNum * $depth + $rowNum);
echo '
';
print_pedigree_person($person);
echo '
';
}
}
echo '
'; // close#relationship_chart
}
}
echo '
'; // close #relationshippage
// The contents of use relative positions.
// Need to expand the div to include the children, or we'll overlap the footer.
// $maxyoffset is the top edge of the lowest box.
$controller->addInlineJavascript('
relationship_chart_div = document.getElementById("relationship_chart");
if (relationship_chart_div) {
relationship_chart_div.style.height = "'.($maxyoffset + $Dbheight + 20) . 'px";
relationship_chart_div.style.width = "100%";
}'
);