/** * print a family descendancy * * @param WT_Individual $person * @param WT_Family $family * @param int $depth the descendancy depth to show * * @return void */ function print_family_descendancy(WT_Individual $person, WT_Family $family, $depth) { global $WT_IMAGES, $Dindent, $personcount; // print marriage info echo '<li>'; echo '<img src="', $WT_IMAGES['spacer'], '" height="2" width="', $Dindent + 4, '" alt="">'; echo '<span class="details1" style="white-space:nowrap;">'; echo "<a href=\"#\" onclick=\"expand_layer('" . $family->getXref() . $personcount . "'); return false;\" class=\"top\"><i id=\"" . $family->getXref() . $personcount . "_img\" class=\"icon-minus\" title=\"" . WT_I18N::translate('View family') . "\"></i></a>"; if ($family->canShow()) { foreach ($family->getFacts(WT_EVENTS_MARR) as $fact) { echo ' <a href="', $family->getHtmlUrl(), '" class="details1">', $fact->summary(), '</a>'; } } echo '</span>'; // print spouse $spouse = $family->getSpouse($person); echo '<ul style="list-style:none; display:block;" id="' . $family->getXref() . $personcount . '">'; echo '<li>'; echo '<table border="0" cellpadding="0" cellspacing="0"><tr><td>'; print_pedigree_person($spouse, 1, 0, $personcount); echo '</td>'; // check if spouse has parents and add an arrow echo '<td> </td>'; echo '<td>'; if ($spouse) { foreach ($spouse->getChildFamilies() as $cfamily) { foreach ($cfamily->getSpouses() as $parent) { print_url_arrow($parent->getXref() . $personcount . $person->getXref(), '?rootid=' . $parent->getXref() . '&generations=' . $this->generations . '&chart_style=' . $this->chart_style . '&show_full=' . $this->show_full . '&box_width=' . $this->box_width . '&ged=' . WT_GEDURL, WT_I18N::translate('Start at parents'), 2); $personcount++; // only show the arrow for one of the parents break; } } } if ($this->show_full) { echo '<br><br> '; } echo '</td></tr>'; // children $children = $family->getChildren(); echo '<tr><td colspan="3" class="details1" > '; if ($children) { echo WT_Gedcom_Tag::getLabel('NCHI') . ': ' . count($children); } else { // Distinguish between no children (NCHI 0) and no recorded // children (no CHIL records) if (strpos($family->getGedcom(), '\\n1 NCHI 0')) { echo WT_Gedcom_Tag::getLabel('NCHI') . ': ' . count($children); } else { echo WT_I18N::translate('No children'); } } echo '</td></tr></table>'; echo '</li>'; if ($depth > 1) { foreach ($children as $child) { $personcount++; $this->print_child_descendancy($child, $depth - 1); } } echo '</ul>'; echo '</li>'; }
/** * print the children table for a family * * @param WT_Family $family family * @param string $childid child ID * @param int $sosa child sosa number * @param string $label indi label (descendancy booklet) * @param int $personcount */ function print_family_children(WT_Family $family, $childid = '', $sosa = 0, $label = '', $personcount = 1) { global $bheight, $pbheight, $cbheight, $show_cousins, $WT_IMAGES, $TEXT_DIRECTION; $children = $family->getChildren(); $numchil = count($children); echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\"><tr>"; if ($sosa > 0) { echo "<td></td>"; } echo "<td><span class=\"subheaders\">"; if ($numchil == 0) { echo WT_I18N::translate('No children'); } else { echo WT_I18N::plural('%s child', '%s children', $numchil, $numchil); } echo '</span>'; if ($sosa == 0 && WT_USER_CAN_EDIT) { echo '<br>'; echo "<a href=\"#\" onclick=\"return add_child_to_family('", $family->getXref(), "', 'U');\">" . WT_I18N::translate('Add a child to this family') . "</a>"; echo ' <a class="icon-sex_m_15x15" href="#" onclick="return add_child_to_family(\'', $family->getXref(), '\', \'M\');" title="', WT_I18N::translate('son'), '"></a>'; echo ' <a class="icon-sex_f_15x15" href="#" onclick="return add_child_to_family(\'', $family->getXref(), '\', \'F\');" title="', WT_I18N::translate('daughter'), '"></a>'; echo '<br><br>'; } echo '</td>'; if ($sosa > 0) { echo '<td></td><td></td>'; } echo '</tr>'; $nchi = 1; if ($children) { foreach ($children as $child) { echo '<tr>'; if ($sosa != 0) { if ($child->getXref() == $childid) { print_sosa_number($sosa, $childid); } elseif (empty($label)) { print_sosa_number(""); } else { print_sosa_number($label . $nchi++ . "."); } } if ($child->isNew()) { echo '<td valign="middle" class="new">'; } elseif ($child->isOld()) { echo '<td valign="middle" class="old">'; } else { echo '<td valign="middle">'; } print_pedigree_person($child, 1, 8, $personcount++); echo "</td>"; if ($sosa != 0) { // loop for all families where current child is a spouse $famids = $child->getSpouseFamilies(); $maxfam = count($famids) - 1; for ($f = 0; $f <= $maxfam; $f++) { $famid_child = $famids[$f]->getXref(); // multiple marriages if ($f > 0) { echo "</tr><tr><td> </td>"; echo "<td valign=\"top\""; if ($TEXT_DIRECTION == "rtl") { echo " align=\"left\">"; } else { echo " align=\"right\">"; } //if ($f==$maxfam) echo "<img height=\"50%\""; //else echo "<img height=\"100%\""; //find out how many cousins there are to establish vertical line on second families $fchildren = $famids[$f]->getChildren(); $kids = count($fchildren); $Pheader = $cbheight * $kids - $bheight; $PBadj = 6; // default if ($show_cousins > 0) { if ($cbheight * $kids > $bheight) { $PBadj = $Pheader / 2 + $kids * 4.5; } } if ($PBadj < 0) { $PBadj = 0; } if ($f == $maxfam) { echo "<img height=\"" . ($bheight / 2 + $PBadj) . "px\""; } else { echo "<img height=\"" . $pbheight . "px\""; } echo " width=\"3\" src=\"" . $WT_IMAGES["vline"] . "\" alt=\"\">"; echo "</td>"; } echo "<td class=\"details1\" valign=\"middle\" align=\"center\">"; $spouse = $famids[$f]->getSpouse($child); $marr = $famids[$f]->getFirstFact('MARR'); $div = $famids[$f]->getFirstFact('DIV'); if ($marr) { // marriage date echo $marr->getDate()->minDate()->format('%Y'); // divorce date if ($div) { echo '–', $div->getDate()->minDate()->format('%Y'); } } echo "<br><img width=\"100%\" class=\"line5\" height=\"3\" src=\"" . $WT_IMAGES["hline"] . "\" alt=\"\">"; echo "</td>"; // spouse information echo "<td style=\"vertical-align: center;"; if (!empty($divrec)) { echo " filter:alpha(opacity=40);opacity:0.4;\">"; } else { echo "\">"; } print_pedigree_person($spouse, 1, 9, $personcount++); echo "</td>"; // cousins if ($show_cousins) { print_cousins($famid_child, $personcount++); } } } echo "</tr>"; } } elseif ($sosa < 1) { // message 'no children' except for sosa if (preg_match('/\\n1 NCHI (\\d+)/', $family->getGedcom(), $match) && $match[1] == 0) { echo '<tr><td><i class="icon-childless"></i> ' . WT_I18N::translate('This family remained childless') . '</td></tr>'; } } else { echo "<tr>"; print_sosa_number($sosa, $child); echo "<td valign=\"top\">"; print_pedigree_person(WT_Individual::getInstance($childid), 1, 0, $personcount); echo "</td></tr>"; } echo "</table><br>"; }