.
*/
namespace Fisharebest\Webtrees\Module;
use Fisharebest\Webtrees\Auth;
use Fisharebest\Webtrees\Family;
use Fisharebest\Webtrees\Functions\Functions;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Individual;
use Fisharebest\Webtrees\Menu;
/**
* Class FamilyNavigatorModule
*/
class FamilyNavigatorModule extends AbstractModule implements ModuleSidebarInterface {
const TTL = "
%s
";
const LNK = "%s
";
const MSG = "(%s)
"; // class flyout4 not used in standard themes
/** {@inheritdoc} */
public function getTitle() {
return /* I18N: Name of a module/sidebar */ I18N::translate('Family navigator');
}
/** {@inheritdoc} */
public function getDescription() {
return /* I18N: Description of the “Family navigator” module */ I18N::translate('A sidebar showing an individual’s close families and relatives.');
}
/** {@inheritdoc} */
public function defaultSidebarOrder() {
return 20;
}
/** {@inheritdoc} */
public function hasSidebarContent() {
return !Auth::isSearchEngine();
}
/** {@inheritdoc} */
public function getSidebarAjaxContent() {
return '';
}
/**
* Load this sidebar synchronously.
*
* @return string
*/
public function getSidebarContent() {
global $controller;
$controller->addInlineJavascript('
jQuery("#sb_family_nav_content")
.on("click", ".flyout a", function() {
return false;
})
.on("click", ".flyout3", function() {
window.location.href = jQuery(this).data("href");
return false;
});
');
ob_start();
?>
record->getChildFamilies() as $family) {
$this->drawFamily($family, $controller->record->getChildFamilyLabel($family));
}
//-- step parents ----------------------------------------------------------------
foreach ($controller->record->getChildStepFamilies() as $family) {
$this->drawFamily($family, $controller->record->getStepFamilyLabel($family));
}
//-- spouse and children --------------------------------------------------
foreach ($controller->record->getSpouseFamilies() as $family) {
$this->drawFamily($family, $controller->getSpouseFamilyLabel($family, $controller->record));
}
//-- step children ----------------------------------------------------------------
foreach ($controller->record->getSpouseStepFamilies() as $family) {
$this->drawFamily($family, $family->getFullName());
}
?>
|
getSpouses() as $spouse) {
$menu = new Menu(Functions::getCloseRelationshipName($controller->record, $spouse));
$menu->addClass('', 'submenu flyout');
$menu->addSubmenu(new Menu($this->getParents($spouse)));
?>
getMenu(); ?>
|
getFullName(); ?>
getLifeSpan(); ?>
|
getChildren() as $child) {
$menu = new Menu(Functions::getCloseRelationshipName($controller->record, $child));
$menu->addClass('', 'submenu flyout');
$menu->addSubmenu(new Menu($this->getFamily($child)));
?>
getMenu(); ?>
|
getFullName(); ?>
getLifeSpan(); ?>
|
getHtmlUrl(), $person->getFullName());
} elseif ($showUnknown) {
return sprintf(self::MSG, I18N::translate('unknown'));
} else {
return '';
}
}
/**
* Forat the parents of an individual.
*
* @param Individual $person
*
* @return string
*/
private function getParents(Individual $person) {
$father = null;
$mother = null;
$html = sprintf(self::TTL, I18N::translate('Parents'));
$family = $person->getPrimaryChildFamily();
if (!Auth::isSearchEngine() && $person->canShowName() && $family !== null) {
$father = $family->getHusband();
$mother = $family->getWife();
$html .= $this->getHTML($father) .
$this->getHTML($mother);
// Can only have a step parent if one & only one parent found at this point
if ($father instanceof Individual xor $mother instanceof Individual) {
$stepParents = '';
foreach ($person->getChildStepFamilies() as $family) {
if (!$father instanceof Individual) {
$stepParents .= $this->getHTML($family->getHusband());
} else {
$stepParents .= $this->getHTML($family->getWife());
}
}
if ($stepParents) {
$relationship = $father instanceof Individual ?
I18N::translateContext("father’s wife", "step-mother") : I18N::translateContext("mother’s husband", "step-father");
$html .= sprintf(self::TTL, $relationship) . $stepParents;
}
}
}
if (!($father instanceof Individual || $mother instanceof Individual)) {
$html .= sprintf(self::MSG, I18N::translateContext('unknown family', 'unknown'));
}
return $html;
}
/**
* Format a family.
*
* @param Individual $person
*
* @return string
*/
private function getFamily(Individual $person) {
$html = '';
if ($person->canShowName() && !Auth::isSearchEngine()) {
foreach ($person->getSpouseFamilies() as $family) {
$spouse = $family->getSpouse($person);
$html .= $this->getHTML($spouse, true);
$children = $family->getChildren();
if (count($children) > 0) {
$html .= "";
foreach ($children as $child) {
$html .= '- ' . $this->getHTML($child) . '
';
}
$html .= '
';
}
}
}
if (!$html) {
$html = sprintf(self::MSG, I18N::translate('none'));
}
return sprintf(self::TTL, I18N::translate('Family')) . $html;
}
}