/** * Display family members with clickable links * * @param Family $family * @param Individual $individual */ function print_navigator_family(Family $family, Individual $individual) { foreach ($family->getSpouses() as $spouse) { ?> <tr class="fact_value"> <td class="facts_value"> <a href="edit_interface.php?action=addmedia_links&noteid=newnote&pid=<?php echo $spouse->getXref(); ?> &gedcom=<?php echo $spouse->getTree()->getNameUrl(); ?> "> <i class="headimg vmiddle icon-button_head"></i> </a> </td> <td class="facts_value" > <a href="#" onclick="opener.insertRowToTable('<?php echo $spouse->getXref(); ?> ', '<?php echo Filter::escapeJs($spouse->getFullName()); ?> ', '', '', '', '', '', '', '', '');"> <?php echo $spouse === $individual ? '<b>' : ''; ?> <?php echo $spouse->getFullName(); ?> <?php echo $spouse->getLifeSpan(); ?> <?php echo $spouse === $individual ? '</b>' : ''; ?> </a> </td> <tr> <?php } foreach ($family->getChildren() as $child) { ?> <tr> <td class="facts_value" > <a href="edit_interface.php?action=addmedia_links&noteid=newnote&pid=<?php echo $child->getXref(); ?> &gedcom=<?php echo $child->getTree()->getNameUrl(); ?> "> <i class="headimg vmiddle icon-button_head"></i> </a> </td> <td class="facts_value"> <a href="#" onclick="opener.insertRowToTable('<?php echo $child->getXref(); ?> ', '<?php echo Filter::escapeJs($child->getFullName()); ?> ', '', '', '', '', '', '', '', '');"> <?php echo $child === $individual ? '<b>' : ''; ?> <?php echo $child->getFullName(); ?> <?php echo $child->getLifeSpan(); ?> <?php echo $child === $individual ? '</b>' : ''; ?> </a> </td> </tr> <?php } }
/** * Create a label for a step family * * @param Family $step_family * * @return string */ public function getStepFamilyLabel(Family $step_family) { foreach ($this->getChildFamilies() as $family) { if ($family !== $step_family) { // Must be a step-family foreach ($family->getSpouses() as $parent) { foreach ($step_family->getSpouses() as $step_parent) { if ($parent === $step_parent) { // One common parent - must be a step family if ($parent->getSex() == 'M') { // Father’s family with someone else if ($step_family->getSpouse($step_parent)) { return I18N::translate('Father’s family with %s', $step_family->getSpouse($step_parent)->getFullName()); } else { return I18N::translate('Father’s family with an unknown individual'); } } else { // Mother’s family with someone else if ($step_family->getSpouse($step_parent)) { return I18N::translate('Mother’s family with %s', $step_family->getSpouse($step_parent)->getFullName()); } else { return I18N::translate('Mother’s family with an unknown individual'); } } } } } } } // Perahps same parents - but a different family record? return I18N::translate('Family with parents'); }
/** * Format a family. * * @param Family $family * @param string $title */ private function drawFamily(Family $family, $title) { global $controller; ?> <tr> <td class="center" colspan="2"> <a class="famnav_title" href="<?php echo $family->getHtmlUrl(); ?> "> <?php echo $title; ?> </a> </td> </tr> <?php foreach ($family->getSpouses() as $spouse) { $menu = new Menu(Functions::getCloseRelationshipName($controller->record, $spouse)); $menu->addClass('', 'submenu flyout'); $menu->addSubmenu(new Menu($this->getParents($spouse))); ?> <tr> <td class="facts_label"> <?php echo $menu->getMenu(); ?> </td> <td class="center <?php echo $controller->getPersonStyle($spouse); ?> nam"> <a class="famnav_link" href="<?php echo $spouse->getHtmlUrl(); ?> "> <?php echo $spouse->getFullName(); ?> </a> <div class="font9"> <?php echo $spouse->getLifeSpan(); ?> </div> </td> </tr> <?php } foreach ($family->getChildren() as $child) { $menu = new Menu(Functions::getCloseRelationshipName($controller->record, $child)); $menu->addClass('', 'submenu flyout'); $menu->addSubmenu(new Menu($this->getFamily($child))); ?> <tr> <td class="facts_label"> <?php echo $menu->getMenu(); ?> </td> <td class="center <?php echo $controller->getPersonStyle($child); ?> nam"> <a class="famnav_link" href="<?php echo $child->getHtmlUrl(); ?> "> <?php echo $child->getFullName(); ?> </a> <div class="font9"> <?php echo $child->getLifeSpan(); ?> </div> </td> </tr> <?php } }
/** * Create a family on the census navigator. * * @param CensusInterface $census * @param Family $family * @param Individual $head * * @return string */ public static function censusNavigatorFamily(CensusInterface $census, Family $family, Individual $head) { $headImg2 = '<i class="icon-button_head" title="' . I18N::translate('Head of household') . '"></i>'; foreach ($family->getSpouses() as $spouse) { $menu = new Menu(Functions::getCloseRelationshipName($head, $spouse)); foreach ($spouse->getChildFamilies() as $grandparents) { foreach ($grandparents->getSpouses() as $grandparent) { $submenu = new Menu(Functions::getCloseRelationshipName($head, $grandparent) . ' - ' . $grandparent->getFullName(), '#', '', array('onclick' => 'return appendCensusRow("' . Filter::escapeJs(self::censusTableRow($census, $grandparent, $head)) . '");')); $submenu->addClass('submenuitem', ''); $menu->addSubmenu($submenu); $menu->addClass('', 'submenu'); } } ?> <tr> <td class="optionbox"> <?php echo $menu->getMenu(); ?> </td> <td class="facts_value nowrap"> <a href="#" onclick="return appendCensusRow('<?php echo Filter::escapeJs(self::censusTableRow($census, $spouse, $head)); ?> ');"> <?php echo $spouse->getFullName(); ?> </a> </td> <td class="facts_value"> <?php if ($head !== $spouse) { ?> <a href="edit_interface.php?action=addnewnote_assisted&noteid=newnote&xref=<?php echo $spouse->getXref(); ?> &gedcom=<?php echo $spouse->getTree()->getNameUrl(); ?> &census=<?php echo get_class($census); ?> "> <?php echo $headImg2; ?> </a> <?php } ?> </td> </tr> <?php } foreach ($family->getChildren() as $child) { $menu = new Menu(Functions::getCloseRelationshipName($head, $child)); foreach ($child->getSpouseFamilies() as $spouse_family) { foreach ($spouse_family->getSpouses() as $spouse_family_spouse) { if ($spouse_family_spouse != $child) { $submenu = new Menu(Functions::getCloseRelationshipName($head, $spouse_family_spouse) . ' - ' . $spouse_family_spouse->getFullName(), '#', '', array('onclick' => 'return appendCensusRow("' . Filter::escapeJs(self::censusTableRow($census, $spouse_family_spouse, $head)) . '");')); $submenu->addClass('submenuitem', ''); $menu->addSubmenu($submenu); $menu->addClass('', 'submenu'); } } foreach ($spouse_family->getChildren() as $spouse_family_child) { $submenu = new Menu(Functions::getCloseRelationshipName($head, $spouse_family_child) . ' - ' . $spouse_family_child->getFullName(), '#', '', array('onclick' => 'return appendCensusRow("' . Filter::escapeJs(self::censusTableRow($census, $spouse_family_child, $head)) . '");')); $submenu->addClass('submenuitem', ''); $menu->addSubmenu($submenu); $menu->addClass('', 'submenu'); } } ?> <tr> <td class="optionbox"> <?php echo $menu->getMenu(); ?> </td> <td class="facts_value"> <a href="#" onclick="return appendCensusRow('<?php echo Filter::escapeJs(self::censusTableRow($census, $child, $head)); ?> ');"> <?php echo $child->getFullName(); ?> </a> </td> <td class="facts_value"> <?php if ($head !== $child) { ?> <a href="edit_interface.php?action=addnewnote_assisted&noteid=newnote&xref=<?php echo $child->getXref(); ?> &gedcom=<?php echo $child->getTree()->getNameUrl(); ?> &census=<?php echo get_class($census); ?> "> <?php echo $headImg2; ?> </a> <?php } ?> </td> </tr> <?php } echo '<tr><td><br></td></tr>'; }
/** * Recursive function to traverse the tree * * @param Family|null $family * @param int $level */ public function addFamilyDescendancy(Family $family = null, $level = PHP_INT_MAX) { if (!$family) { return; } foreach ($family->getSpouses() as $spouse) { $this->addClipping($spouse); } foreach ($family->getChildren() as $child) { $this->addClipping($child); foreach ($child->getSpouseFamilies() as $child_family) { $this->addClipping($child_family); if ($level > 0) { $this->addFamilyDescendancy($child_family, $level - 1); // recurse on the childs family } } } }