xref: /webtrees/app/Module/RelativesTabModule.php (revision 3d7a8a4ca809135634f38216b734b15acff479f7)
18c2e8227SGreg Roach<?php
20e62c4b8SGreg Roachnamespace Fisharebest\Webtrees\Module;
38c2e8227SGreg Roach
48c2e8227SGreg Roach/**
58c2e8227SGreg Roach * webtrees: online genealogy
68c2e8227SGreg Roach * Copyright (C) 2015 webtrees development team
78c2e8227SGreg Roach * This program is free software: you can redistribute it and/or modify
88c2e8227SGreg Roach * it under the terms of the GNU General Public License as published by
98c2e8227SGreg Roach * the Free Software Foundation, either version 3 of the License, or
108c2e8227SGreg Roach * (at your option) any later version.
118c2e8227SGreg Roach * This program is distributed in the hope that it will be useful,
128c2e8227SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
138c2e8227SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
148c2e8227SGreg Roach * GNU General Public License for more details.
158c2e8227SGreg Roach * You should have received a copy of the GNU General Public License
168c2e8227SGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>.
178c2e8227SGreg Roach */
180e62c4b8SGreg Roachuse Fisharebest\Webtrees\Auth;
190e62c4b8SGreg Roachuse Fisharebest\Webtrees\Date;
200e62c4b8SGreg Roachuse Fisharebest\Webtrees\Family;
21*3d7a8a4cSGreg Roachuse Fisharebest\Webtrees\Functions\Functions;
220e62c4b8SGreg Roachuse Fisharebest\Webtrees\GedcomTag;
230e62c4b8SGreg Roachuse Fisharebest\Webtrees\I18N;
240e62c4b8SGreg Roachuse Fisharebest\Webtrees\Individual;
250e62c4b8SGreg Roachuse Fisharebest\Webtrees\Theme;
268c2e8227SGreg Roach
278c2e8227SGreg Roach/**
288c2e8227SGreg Roach * Class RelativesTabModule
298c2e8227SGreg Roach */
30e2a378d3SGreg Roachclass RelativesTabModule extends AbstractModule implements ModuleTabInterface {
318c2e8227SGreg Roach	/** {@inheritdoc} */
328c2e8227SGreg Roach	public function getTitle() {
338c2e8227SGreg Roach		return /* I18N: Name of a module */ I18N::translate('Families');
348c2e8227SGreg Roach	}
358c2e8227SGreg Roach
368c2e8227SGreg Roach	/** {@inheritdoc} */
378c2e8227SGreg Roach	public function getDescription() {
388c2e8227SGreg Roach		return /* I18N: Description of the “Families” module */ I18N::translate('A tab showing the close relatives of an individual.');
398c2e8227SGreg Roach	}
408c2e8227SGreg Roach
418c2e8227SGreg Roach	/** {@inheritdoc} */
428c2e8227SGreg Roach	public function defaultTabOrder() {
438c2e8227SGreg Roach		return 20;
448c2e8227SGreg Roach	}
458c2e8227SGreg Roach
468c2e8227SGreg Roach	/**
478c2e8227SGreg Roach	 * @param Date $prev
488c2e8227SGreg Roach	 * @param Date $next
49cbc1590aSGreg Roach	 * @param int  $child_number
508c2e8227SGreg Roach	 *
518c2e8227SGreg Roach	 * @return string
528c2e8227SGreg Roach	 */
53ffd703eaSGreg Roach	private static function ageDifference(Date $prev, Date $next, $child_number = 0) {
548c2e8227SGreg Roach		if ($prev->isOK() && $next->isOK()) {
558c2e8227SGreg Roach			$days = $next->maximumJulianDay() - $prev->minimumJulianDay();
568c2e8227SGreg Roach			if ($days < 0) {
578c2e8227SGreg Roach				// Show warning triangle if dates in reverse order
588c2e8227SGreg Roach				$diff = '<i class="icon-warning"></i> ';
598c2e8227SGreg Roach			} elseif ($child_number > 1 && $days > 1 && $days < 240) {
608c2e8227SGreg Roach				// Show warning triangle if children born too close together
618c2e8227SGreg Roach				$diff = '<i class="icon-warning"></i> ';
628c2e8227SGreg Roach			} else {
638c2e8227SGreg Roach				$diff = '';
648c2e8227SGreg Roach			}
658c2e8227SGreg Roach
668c2e8227SGreg Roach			$months = round($days * 12 / 365.25); // Approximate - we do not know the calendar
678c2e8227SGreg Roach			if (abs($months) == 12 || abs($months) >= 24) {
68def7396fSGreg Roach				$diff .= I18N::plural('%s year', '%s years', round($months / 12), I18N::number(round($months / 12)));
698c2e8227SGreg Roach			} elseif ($months != 0) {
70def7396fSGreg Roach				$diff .= I18N::plural('%s month', '%s months', $months, I18N::number($months));
718c2e8227SGreg Roach			}
728c2e8227SGreg Roach
738c2e8227SGreg Roach			return '<div class="elderdate age">' . $diff . '</div>';
748c2e8227SGreg Roach		} else {
758c2e8227SGreg Roach			return '';
768c2e8227SGreg Roach		}
778c2e8227SGreg Roach	}
788c2e8227SGreg Roach
798c2e8227SGreg Roach	/**
808c2e8227SGreg Roach	 * @param Family $family
818c2e8227SGreg Roach	 * @param string $type
828c2e8227SGreg Roach	 * @param string $label
838c2e8227SGreg Roach	 */
84ffd703eaSGreg Roach	private function printFamily(Family $family, $type, $label) {
858c2e8227SGreg Roach		global $controller;
868c2e8227SGreg Roach
874b9ff166SGreg Roach		if ($family->getTree()->getPreference('SHOW_PRIVATE_RELATIONSHIPS')) {
884b9ff166SGreg Roach			$access_level = Auth::PRIV_HIDE;
898c2e8227SGreg Roach		} else {
904b9ff166SGreg Roach			$access_level = Auth::accessLevel($family->getTree());
918c2e8227SGreg Roach		}
928c2e8227SGreg Roach
938c2e8227SGreg Roach		?>
948c2e8227SGreg Roach		<table>
958c2e8227SGreg Roach			<tr>
968c2e8227SGreg Roach				<td>
978c2e8227SGreg Roach					<i class="icon-cfamily"></i>
988c2e8227SGreg Roach				</td>
998c2e8227SGreg Roach				<td>
1008c2e8227SGreg Roach					<span class="subheaders"> <?php echo $label; ?> </span> -
1018c2e8227SGreg Roach					<a href="<?php echo $family->getHtmlUrl(); ?>"><?php echo I18N::translate('View family'); ?></a>
1028c2e8227SGreg Roach				</td>
1038c2e8227SGreg Roach			</tr>
1048c2e8227SGreg Roach		</table>
1058c2e8227SGreg Roach		<table class="facts_table">
1068c2e8227SGreg Roach		<?php
1078c2e8227SGreg Roach
1088c2e8227SGreg Roach		///// HUSB /////
1098c2e8227SGreg Roach		$found = false;
1108c2e8227SGreg Roach		foreach ($family->getFacts('HUSB', false, $access_level) as $fact) {
1118c2e8227SGreg Roach			$found |= !$fact->isPendingDeletion();
1128c2e8227SGreg Roach			$person = $fact->getTarget();
1138c2e8227SGreg Roach			if ($person instanceof Individual) {
1148c2e8227SGreg Roach				if ($fact->isPendingAddition()) {
1158c2e8227SGreg Roach					$class = 'facts_label new';
1168c2e8227SGreg Roach				} elseif ($fact->isPendingDeletion()) {
1178c2e8227SGreg Roach					$class = 'facts_label old';
1188c2e8227SGreg Roach				} else {
1198c2e8227SGreg Roach					$class = 'facts_label';
1208c2e8227SGreg Roach				}
1218c2e8227SGreg Roach				?>
1228c2e8227SGreg Roach					<tr>
1238c2e8227SGreg Roach					<td class="<?php echo $class; ?>">
124*3d7a8a4cSGreg Roach						<?php echo Functions::getCloseRelationshipName($controller->record, $person); ?>
1258c2e8227SGreg Roach					</td>
1268c2e8227SGreg Roach					<td class="<?php echo $controller->getPersonStyle($person); ?>">
1278c2e8227SGreg Roach						<?php echo Theme::theme()->individualBoxLarge($person); ?>
1288c2e8227SGreg Roach					</td>
1298c2e8227SGreg Roach					</tr>
1308c2e8227SGreg Roach				<?php
1318c2e8227SGreg Roach			}
1328c2e8227SGreg Roach		}
1338c2e8227SGreg Roach		if (!$found && $family->canEdit()) {
1348c2e8227SGreg Roach			?>
1358c2e8227SGreg Roach			<tr>
1368c2e8227SGreg Roach				<td class="facts_label"></td>
1378c2e8227SGreg Roach				<td class="facts_value"><a href="#" onclick="return add_spouse_to_family('<?php echo $family->getXref(); ?>', 'HUSB');"><?php echo I18N::translate('Add a husband to this family'); ?></a></td>
1388c2e8227SGreg Roach			</tr>
1398c2e8227SGreg Roach			<?php
1408c2e8227SGreg Roach		}
1418c2e8227SGreg Roach
1428c2e8227SGreg Roach		///// WIFE /////
1438c2e8227SGreg Roach		$found = false;
1448c2e8227SGreg Roach		foreach ($family->getFacts('WIFE', false, $access_level) as $fact) {
1458c2e8227SGreg Roach			$person = $fact->getTarget();
1468c2e8227SGreg Roach			if ($person instanceof Individual) {
1478c2e8227SGreg Roach				$found |= !$fact->isPendingDeletion();
1488c2e8227SGreg Roach				if ($fact->isPendingAddition()) {
1498c2e8227SGreg Roach					$class = 'facts_label new';
1508c2e8227SGreg Roach				} elseif ($fact->isPendingDeletion()) {
1518c2e8227SGreg Roach					$class = 'facts_label old';
1528c2e8227SGreg Roach				} else {
1538c2e8227SGreg Roach					$class = 'facts_label';
1548c2e8227SGreg Roach				}
1558c2e8227SGreg Roach				?>
1568c2e8227SGreg Roach				<tr>
1578c2e8227SGreg Roach					<td class="<?php echo $class; ?>">
158*3d7a8a4cSGreg Roach						<?php echo Functions::getCloseRelationshipName($controller->record, $person); ?>
1598c2e8227SGreg Roach					</td>
1608c2e8227SGreg Roach					<td class="<?php echo $controller->getPersonStyle($person); ?>">
1618c2e8227SGreg Roach						<?php echo Theme::theme()->individualBoxLarge($person); ?>
1628c2e8227SGreg Roach					</td>
1638c2e8227SGreg Roach				</tr>
1648c2e8227SGreg Roach				<?php
1658c2e8227SGreg Roach			}
1668c2e8227SGreg Roach		}
1678c2e8227SGreg Roach		if (!$found && $family->canEdit()) {
1688c2e8227SGreg Roach			?>
1698c2e8227SGreg Roach			<tr>
1708c2e8227SGreg Roach				<td class="facts_label"></td>
1718c2e8227SGreg Roach				<td class="facts_value"><a href="#" onclick="return add_spouse_to_family('<?php echo $family->getXref(); ?>', 'WIFE');"><?php echo I18N::translate('Add a wife to this family'); ?></a></td>
1728c2e8227SGreg Roach			</tr>
1738c2e8227SGreg Roach			<?php
1748c2e8227SGreg Roach		}
1758c2e8227SGreg Roach
1768c2e8227SGreg Roach		///// MARR /////
1778c2e8227SGreg Roach		$found = false;
1788c2e8227SGreg Roach		$prev  = new Date('');
1798c2e8227SGreg Roach		foreach ($family->getFacts(WT_EVENTS_MARR) as $fact) {
1808c2e8227SGreg Roach			$found |= !$fact->isPendingDeletion();
1818c2e8227SGreg Roach			if ($fact->isPendingAddition()) {
1828c2e8227SGreg Roach				$class = ' new';
1838c2e8227SGreg Roach			} elseif ($fact->isPendingDeletion()) {
1848c2e8227SGreg Roach				$class = ' old';
1858c2e8227SGreg Roach			} else {
1868c2e8227SGreg Roach				$class = '';
1878c2e8227SGreg Roach			}
1888c2e8227SGreg Roach			?>
1898c2e8227SGreg Roach			<tr>
1908c2e8227SGreg Roach				<td class="facts_label">
1918c2e8227SGreg Roach					&nbsp;
1928c2e8227SGreg Roach				</td>
1938c2e8227SGreg Roach				<td class="facts_value<?php echo $class; ?>">
194764a01d9SGreg Roach					<?php echo GedcomTag::getLabelValue($fact->getTag(), $fact->getDate()->display() . ' — ' . $fact->getPlace()->getFullName()); ?>
1958c2e8227SGreg Roach				</td>
1968c2e8227SGreg Roach			</tr>
1978c2e8227SGreg Roach			<?php
1988c2e8227SGreg Roach			if (!$prev->isOK() && $fact->getDate()->isOK()) {
1998c2e8227SGreg Roach				$prev = $fact->getDate();
2008c2e8227SGreg Roach			}
2018c2e8227SGreg Roach		}
2028c2e8227SGreg Roach		if (!$found && $family->canShow() && $family->canEdit()) {
2038c2e8227SGreg Roach			// Add a new marriage
2048c2e8227SGreg Roach			?>
2058c2e8227SGreg Roach			<tr>
2068c2e8227SGreg Roach				<td class="facts_label">
2078c2e8227SGreg Roach					&nbsp;
2088c2e8227SGreg Roach				</td>
2098c2e8227SGreg Roach				<td class="facts_value">
2108c2e8227SGreg Roach					<a href="#" onclick="return add_new_record('<?php echo $family->getXref(); ?>', 'MARR');">
2118c2e8227SGreg Roach						<?php echo I18N::translate('Add marriage details'); ?>
2128c2e8227SGreg Roach					</a>
2138c2e8227SGreg Roach				</td>
2148c2e8227SGreg Roach			</tr>
2158c2e8227SGreg Roach			<?php
2168c2e8227SGreg Roach		}
2178c2e8227SGreg Roach
2188c2e8227SGreg Roach		///// CHIL /////
2198c2e8227SGreg Roach		$child_number = 0;
2208c2e8227SGreg Roach		foreach ($family->getFacts('CHIL', false, $access_level) as $fact) {
2218c2e8227SGreg Roach			$person = $fact->getTarget();
2228c2e8227SGreg Roach			if ($person instanceof Individual) {
2238c2e8227SGreg Roach				if ($fact->isPendingAddition()) {
2248c2e8227SGreg Roach					$child_number++;
2258c2e8227SGreg Roach					$class = 'facts_label new';
2268c2e8227SGreg Roach				} elseif ($fact->isPendingDeletion()) {
2278c2e8227SGreg Roach					$class = 'facts_label old';
2288c2e8227SGreg Roach				} else {
2298c2e8227SGreg Roach					$child_number++;
2308c2e8227SGreg Roach					$class = 'facts_label';
2318c2e8227SGreg Roach				}
2328c2e8227SGreg Roach				$next = new Date('');
2338c2e8227SGreg Roach				foreach ($person->getFacts(WT_EVENTS_BIRT) as $bfact) {
2348c2e8227SGreg Roach					if ($bfact->getDate()->isOK()) {
2358c2e8227SGreg Roach						$next = $bfact->getDate();
2368c2e8227SGreg Roach						break;
2378c2e8227SGreg Roach					}
2388c2e8227SGreg Roach				}
2398c2e8227SGreg Roach				?>
2408c2e8227SGreg Roach				<tr>
2418c2e8227SGreg Roach					<td class="<?php echo $class; ?>">
2428c2e8227SGreg Roach						<?php echo self::ageDifference($prev, $next, $child_number); ?>
243*3d7a8a4cSGreg Roach						<?php echo Functions::getCloseRelationshipName($controller->record, $person); ?>
2448c2e8227SGreg Roach					</td>
2458c2e8227SGreg Roach					<td class="<?php echo $controller->getPersonStyle($person); ?>">
2468c2e8227SGreg Roach						<?php echo Theme::theme()->individualBoxLarge($person); ?>
2478c2e8227SGreg Roach					</td>
2488c2e8227SGreg Roach				</tr>
2498c2e8227SGreg Roach				<?php
2508c2e8227SGreg Roach				$prev = $next;
2518c2e8227SGreg Roach			}
2528c2e8227SGreg Roach		}
2538c2e8227SGreg Roach		// Re-order children / add a new child
2548c2e8227SGreg Roach		if ($family->canEdit()) {
2558c2e8227SGreg Roach			if ($type == 'FAMS') {
2568c2e8227SGreg Roach				$add_child_text = I18N::translate('Add a new son or daughter');
2578c2e8227SGreg Roach			} else {
2588c2e8227SGreg Roach				$add_child_text = I18N::translate('Add a new brother or sister');
2598c2e8227SGreg Roach			}
2608c2e8227SGreg Roach			?>
2618c2e8227SGreg Roach			<tr>
2628c2e8227SGreg Roach				<td class="facts_label">
2638c2e8227SGreg Roach					<?php if (count($family->getChildren()) > 1) { ?>
2648c2e8227SGreg Roach					<a href="#" onclick="reorder_children('<?php echo $family->getXref(); ?>');tabswitch(5);"><i class="icon-media-shuffle"></i> <?php echo I18N::translate('Re-order children'); ?></a>
2658c2e8227SGreg Roach					<?php } ?>
2668c2e8227SGreg Roach				</td>
2678c2e8227SGreg Roach				<td class="facts_value">
2688c2e8227SGreg Roach					<a href="#" onclick="return add_child_to_family('<?php echo $family->getXref(); ?>');"><?php echo $add_child_text; ?></a>
2698c2e8227SGreg Roach					<span style='white-space:nowrap;'>
2708c2e8227SGreg Roach						<a href="#" class="icon-sex_m_15x15" onclick="return add_child_to_family('<?php echo $family->getXref(); ?>','M');"></a>
2718c2e8227SGreg Roach						<a href="#" class="icon-sex_f_15x15" onclick="return add_child_to_family('<?php echo $family->getXref(); ?>','F');"></a>
2728c2e8227SGreg Roach					</span>
2738c2e8227SGreg Roach				</td>
2748c2e8227SGreg Roach			</tr>
2758c2e8227SGreg Roach			<?php
2768c2e8227SGreg Roach		}
2778c2e8227SGreg Roach
2788c2e8227SGreg Roach		echo '</table>';
2798c2e8227SGreg Roach
2808c2e8227SGreg Roach		return;
2818c2e8227SGreg Roach	}
2828c2e8227SGreg Roach
2838c2e8227SGreg Roach	/** {@inheritdoc} */
2848c2e8227SGreg Roach	public function getTabContent() {
2858c2e8227SGreg Roach		global $WT_TREE, $show_full, $controller;
2868c2e8227SGreg Roach
2878c2e8227SGreg Roach		if (isset($show_full)) {
2888c2e8227SGreg Roach			$saved_show_full = $show_full;
2898c2e8227SGreg Roach		}
2908c2e8227SGreg Roach		// We always want to see full details here
2918c2e8227SGreg Roach		$show_full = 1;
2928c2e8227SGreg Roach
2938c2e8227SGreg Roach		ob_start();
2948c2e8227SGreg Roach		?>
2958c2e8227SGreg Roach		<table class="facts_table"><tr><td class="descriptionbox rela">
2968c2e8227SGreg Roach		<input id="checkbox_elder" type="checkbox" onclick="jQuery('div.elderdate').toggle();" <?php echo $WT_TREE->getPreference('SHOW_AGE_DIFF') ? 'checked' : ''; ?>>
2978c2e8227SGreg Roach		<label for="checkbox_elder"><?php echo I18N::translate('Show date differences'); ?></label>
2988c2e8227SGreg Roach		</td></tr></table>
2998c2e8227SGreg Roach		<?php
3008c2e8227SGreg Roach		$families = $controller->record->getChildFamilies();
3018c2e8227SGreg Roach		if (!$families && $controller->record->canEdit()) {
3028c2e8227SGreg Roach			?>
3038c2e8227SGreg Roach			<table class="facts_table">
3048c2e8227SGreg Roach				<tr>
3058c2e8227SGreg Roach					<td class="facts_value"><a href="#" onclick="return add_parent_to_individual('<?php echo $controller->record->getXref(); ?>', 'M');"><?php echo I18N::translate('Add a new father'); ?></td>
3068c2e8227SGreg Roach				</tr>
3078c2e8227SGreg Roach				<tr>
3088c2e8227SGreg Roach					<td class="facts_value"><a href="#" onclick="return add_parent_to_individual('<?php echo $controller->record->getXref(); ?>', 'F');"><?php echo I18N::translate('Add a new mother'); ?></a></td>
3098c2e8227SGreg Roach				</tr>
3108c2e8227SGreg Roach			</table>
3118c2e8227SGreg Roach			<?php
3128c2e8227SGreg Roach		}
3138c2e8227SGreg Roach
3148c2e8227SGreg Roach		// parents
3158c2e8227SGreg Roach		foreach ($families as $family) {
3168c2e8227SGreg Roach			$this->printFamily($family, 'FAMC', $controller->record->getChildFamilyLabel($family));
3178c2e8227SGreg Roach		}
3188c2e8227SGreg Roach
3198c2e8227SGreg Roach		// step-parents
3208c2e8227SGreg Roach		foreach ($controller->record->getChildStepFamilies() as $family) {
3218c2e8227SGreg Roach			$this->printFamily($family, 'FAMC', $controller->record->getStepFamilyLabel($family));
3228c2e8227SGreg Roach		}
3238c2e8227SGreg Roach
3248c2e8227SGreg Roach		// spouses
3258c2e8227SGreg Roach		$families = $controller->record->getSpouseFamilies();
3268c2e8227SGreg Roach		foreach ($families as $family) {
327268bcb45SGreg Roach			$this->printFamily($family, 'FAMS', $controller->getSpouseFamilyLabel($family, $controller->record));
3288c2e8227SGreg Roach		}
3298c2e8227SGreg Roach
3308c2e8227SGreg Roach		// step-children
3318c2e8227SGreg Roach		foreach ($controller->record->getSpouseStepFamilies() as $family) {
3328c2e8227SGreg Roach			$this->printFamily($family, 'FAMS', $family->getFullName());
3338c2e8227SGreg Roach		}
3348c2e8227SGreg Roach
3358c2e8227SGreg Roach		if (!$WT_TREE->getPreference('SHOW_AGE_DIFF')) {
3368c2e8227SGreg Roach			echo '<script>jQuery("DIV.elderdate").toggle();</script>';
3378c2e8227SGreg Roach		}
3388c2e8227SGreg Roach
3398c2e8227SGreg Roach		if ($controller->record->canEdit()) {
3408c2e8227SGreg Roach		?>
3418c2e8227SGreg Roach		<br><table class="facts_table">
3428c2e8227SGreg Roach		<?php
3438c2e8227SGreg Roach			if (count($families) > 1) { ?>
3448c2e8227SGreg Roach			<tr>
3458c2e8227SGreg Roach				<td class="facts_value">
3468c2e8227SGreg Roach				<a href="#" onclick="return reorder_families('<?php echo $controller->record->getXref(); ?>');"><?php echo I18N::translate('Re-order families'); ?></a>
3478c2e8227SGreg Roach				</td>
3488c2e8227SGreg Roach			</tr>
3498c2e8227SGreg Roach		<?php } ?>
3508c2e8227SGreg Roach			<tr>
3518c2e8227SGreg Roach				<td class="facts_value">
3528c2e8227SGreg Roach				<a href="#" onclick="return add_famc('<?php echo $controller->record->getXref(); ?>');"><?php echo I18N::translate('Link this individual to an existing family as a child'); ?></a>
3538c2e8227SGreg Roach				</td>
3548c2e8227SGreg Roach			</tr>
3558c2e8227SGreg Roach			<?php if ($controller->record->getSex() != "F") { ?>
3568c2e8227SGreg Roach			<tr>
3578c2e8227SGreg Roach				<td class="facts_value">
3588c2e8227SGreg Roach				<a href="#" onclick="return add_spouse_to_individual('<?php echo $controller->record->getXref(); ?>','WIFE');"><?php echo I18N::translate('Add a new wife'); ?></a>
3598c2e8227SGreg Roach				</td>
3608c2e8227SGreg Roach			</tr>
3618c2e8227SGreg Roach			<tr>
3628c2e8227SGreg Roach				<td class="facts_value">
3638c2e8227SGreg Roach				<a href="#" onclick="return linkspouse('<?php echo $controller->record->getXref(); ?>','WIFE');"><?php echo I18N::translate('Add a wife using an existing individual'); ?></a>
3648c2e8227SGreg Roach				</td>
3658c2e8227SGreg Roach			</tr>
3668c2e8227SGreg Roach			<?php }
3678c2e8227SGreg Roach			if ($controller->record->getSex() != "M") { ?>
3688c2e8227SGreg Roach			<tr>
3698c2e8227SGreg Roach				<td class="facts_value">
3708c2e8227SGreg Roach				<a href="#" onclick="return add_spouse_to_individual('<?php echo $controller->record->getXref(); ?>','HUSB');"><?php echo I18N::translate('Add a new husband'); ?></a>
3718c2e8227SGreg Roach				</td>
3728c2e8227SGreg Roach			</tr>
3738c2e8227SGreg Roach			<tr>
3748c2e8227SGreg Roach				<td class="facts_value">
3758c2e8227SGreg Roach				<a href="#" onclick="return linkspouse('<?php echo $controller->record->getXref(); ?>','HUSB');"><?php echo I18N::translate('Add a husband using an existing individual'); ?></a>
3768c2e8227SGreg Roach				</td>
3778c2e8227SGreg Roach			</tr>
3788c2e8227SGreg Roach			<?php } ?>
3798c2e8227SGreg Roach			<tr>
3808c2e8227SGreg Roach				<td class="facts_value">
3818c2e8227SGreg Roach				<a href="#" onclick="return add_child_to_individual('<?php echo $controller->record->getXref(); ?>','U');"><?php echo I18N::translate('Add a child to create a one-parent family'); ?></a>
3828c2e8227SGreg Roach				</td>
3838c2e8227SGreg Roach			</tr>
3848c2e8227SGreg Roach		</table>
3858c2e8227SGreg Roach		<?php } ?>
3868c2e8227SGreg Roach		<br>
3878c2e8227SGreg Roach		<?php
3888c2e8227SGreg Roach
3898c2e8227SGreg Roach		unset($show_full);
3908c2e8227SGreg Roach		if (isset($saved_show_full)) {
3918c2e8227SGreg Roach			$show_full = $saved_show_full;
3928c2e8227SGreg Roach		}
3938c2e8227SGreg Roach
3948c2e8227SGreg Roach		return '<div id="' . $this->getName() . '_content">' . ob_get_clean() . '</div>';
3958c2e8227SGreg Roach	}
3968c2e8227SGreg Roach
3978c2e8227SGreg Roach	/** {@inheritdoc} */
3988c2e8227SGreg Roach	public function hasTabContent() {
3998c2e8227SGreg Roach		return true;
4008c2e8227SGreg Roach	}
4018c2e8227SGreg Roach	/** {@inheritdoc} */
4028c2e8227SGreg Roach	public function isGrayedOut() {
4038c2e8227SGreg Roach		return false;
4048c2e8227SGreg Roach	}
4058c2e8227SGreg Roach	/** {@inheritdoc} */
4068c2e8227SGreg Roach	public function canLoadAjax() {
4078c2e8227SGreg Roach		return !Auth::isSearchEngine(); // Search engines cannot use AJAX
4088c2e8227SGreg Roach	}
4098c2e8227SGreg Roach
4108c2e8227SGreg Roach	/** {@inheritdoc} */
4118c2e8227SGreg Roach	public function getPreLoadContent() {
4128c2e8227SGreg Roach		return '';
4138c2e8227SGreg Roach	}
4148c2e8227SGreg Roach}
415