diff options
Diffstat (limited to 'includes/functions/functions_charts.php')
| -rw-r--r-- | includes/functions/functions_charts.php | 550 |
1 files changed, 0 insertions, 550 deletions
diff --git a/includes/functions/functions_charts.php b/includes/functions/functions_charts.php deleted file mode 100644 index ab4e24f7fb..0000000000 --- a/includes/functions/functions_charts.php +++ /dev/null @@ -1,550 +0,0 @@ -<?php - -/** - * webtrees: online genealogy - * Copyright (C) 2015 webtrees development team - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ -use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Family; -use Fisharebest\Webtrees\I18N; -use Fisharebest\Webtrees\Individual; -use Fisharebest\Webtrees\Theme; - -/** - * print a table cell with sosa number - * - * @param int $sosa - * @param string $pid optional pid - * @param string $arrowDirection direction of link arrow - */ -function print_sosa_number($sosa, $pid = "", $arrowDirection = "up") { - if (substr($sosa, -1, 1) == ".") { - $personLabel = substr($sosa, 0, -1); - } else { - $personLabel = $sosa; - } - if ($arrowDirection == "blank") { - $visibility = "hidden"; - } else { - $visibility = "normal"; - } - echo "<td class=\"subheaders center\" style=\"vertical-align: middle; text-indent: 0px; margin-top: 0px; white-space: nowrap; visibility: ", $visibility, ";\">"; - echo $personLabel; - if ($sosa != "1" && $pid != "") { - if ($arrowDirection == "left") { - $dir = 0; - } elseif ($arrowDirection == "right") { - $dir = 1; - } elseif ($arrowDirection == "down") { - $dir = 3; - } else { - $dir = 2; // either 'blank' or 'up' - } - echo '<br>'; - print_url_arrow('#' . $pid, $pid, $dir); - } - echo '</td>'; -} - -/** - * print the parents table for a family - * - * @param Family $family family gedcom ID - * @param int $sosa child sosa number - * @param string $label indi label (descendancy booklet) - * @param string $parid parent ID (descendancy booklet) - * @param string $gparid gd-parent ID (descendancy booklet) - * @param int $show_full large or small box - */ -function print_family_parents(Family $family, $sosa = 0, $label = '', $parid = '', $gparid = '', $show_full = 1) { - - if ($show_full) { - $pbheight = Theme::theme()->parameter('chart-box-y') + 14; - } else { - $pbheight = Theme::theme()->parameter('compact-chart-box-y') + 14; - } - - $husb = $family->getHusband(); - if ($husb) { - echo '<a name="', $husb->getXref(), '"></a>'; - } else { - $husb = new Individual('M', "0 @M@ INDI\n1 SEX M", null, $family->getTree()); - } - $wife = $family->getWife(); - if ($wife) { - echo '<a name="', $wife->getXref(), '"></a>'; - } else { - $wife = new Individual('F', "0 @F@ INDI\n1 SEX F", null, $family->getTree()); - } - - if ($sosa) { - echo '<p class="name_head">', $family->getFullName(), '</p>'; - } - - /** - * husband side - */ - echo "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tr><td rowspan=\"2\">"; - echo "<table border='0'><tr>"; - - if ($parid) { - if ($husb->getXref() == $parid) { - print_sosa_number($label); - } else { - print_sosa_number($label, "", "blank"); - } - } elseif ($sosa) { - print_sosa_number($sosa * 2); - } - if ($husb->isPendingAddtion()) { - echo '<td valign="top" class="facts_value new">'; - } elseif ($husb->isPendingDeletion()) { - echo '<td valign="top" class="facts_value old">'; - } else { - echo '<td valign="top">'; - } - print_pedigree_person($husb, $show_full); - echo "</td></tr></table>"; - echo "</td>"; - // husband’s parents - $hfam = $husb->getPrimaryChildFamily(); - if ($hfam) { - // remove the|| test for $sosa - echo "<td rowspan=\"2\"><img src=\"" . Theme::theme()->parameter('image-hline') . "\" alt=\"\"></td><td rowspan=\"2\"><img src=\"" . Theme::theme()->parameter('image-vline') . "\" width=\"3\" height=\"" . ($pbheight + 9) . "\" alt=\"\"></td>"; - echo "<td><img class=\"line5\" src=\"" . Theme::theme()->parameter('image-hline') . "\" alt=\"\"></td><td>"; - // husband’s father - if ($hfam && $hfam->getHusband()) { - echo "<table border='0'><tr>"; - if ($sosa > 0) { - print_sosa_number($sosa * 4, $hfam->getHusband()->getXref(), "down"); - } - if (!empty($gparid) && $hfam->getHusband()->getXref() == $gparid) { - print_sosa_number(trim(substr($label, 0, -3), ".") . "."); - } - echo "<td valign=\"top\">"; - print_pedigree_person($hfam->getHusband(), $show_full); - echo "</td></tr></table>"; - } elseif ($hfam && !$hfam->getHusband()) { - // Empty box for grandfather - echo "<table border='0'><tr>"; - echo '<td valign="top">'; - print_pedigree_person($hfam->getHusband(), $show_full); - echo '</td></tr></table>'; - } - echo "</td>"; - } - if ($hfam && ($sosa != -1)) { - echo '<td valign="middle" rowspan="2">'; - print_url_arrow(($sosa == 0 ? '?famid=' . $hfam->getXref() . '&ged=' . $hfam->getTree()->getNameUrl() : '#' . $hfam->getXref()), $hfam->getXref(), 1); - echo '</td>'; - } - if ($hfam) { - // husband’s mother - echo "</tr><tr><td><img src=\"" . Theme::theme()->parameter('image-hline') . "\" alt=\"\"></td><td>"; - if ($hfam && $hfam->getWife()) { - echo "<table border='0'><tr>"; - if ($sosa > 0) { - print_sosa_number($sosa * 4 + 1, $hfam->getWife()->getXref(), "down"); - } - if (!empty($gparid) && $hfam->getWife()->getXref() == $gparid) { - print_sosa_number(trim(substr($label, 0, -3), ".") . "."); - } - echo '<td valign="top">'; - print_pedigree_person($hfam->getWife(), $show_full); - echo '</td></tr></table>'; - } elseif ($hfam && !$hfam->getWife()) { - // Empty box for grandmother - echo "<table border='0'><tr>"; - echo '<td valign="top">'; - print_pedigree_person($hfam->getWife(), $show_full); - echo '</td></tr></table>'; - } - echo '</td>'; - } - echo '</tr></table>'; - if ($sosa && $family->canShow()) { - foreach ($family->getFacts(WT_EVENTS_MARR) as $fact) { - echo '<a href="', $family->getHtmlUrl(), '" class="details1">'; - echo str_repeat(' ', 10); - echo $fact->summary(); - echo '</a>'; - } - } else { - echo '<br>'; - } - - /** - * wife side - */ - echo "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tr><td rowspan=\"2\">"; - echo "<table><tr>"; - if ($parid) { - if ($wife->getXref() == $parid) { - print_sosa_number($label); - } else { - print_sosa_number($label, "", "blank"); - } - } elseif ($sosa) { - print_sosa_number($sosa * 2 + 1); - } - if ($wife->isPendingAddtion()) { - echo '<td valign="top" class="facts_value new">'; - } elseif ($wife->isPendingDeletion()) { - echo '<td valign="top" class="facts_value old">'; - } else { - echo '<td valign="top">'; - } - print_pedigree_person($wife, $show_full); - echo "</td></tr></table>"; - echo "</td>"; - // wife’s parents - $hfam = $wife->getPrimaryChildFamily(); - - if ($hfam) { - echo "<td rowspan=\"2\"><img src=\"" . Theme::theme()->parameter('image-hline') . "\" alt=\"\"></td><td rowspan=\"2\"><img src=\"" . Theme::theme()->parameter('image-vline') . "\" width=\"3\" height=\"" . ($pbheight + 9) . "\" alt=\"\"></td>"; - echo "<td><img class=\"line5\" src=\"" . Theme::theme()->parameter('image-hline') . "\" alt=\"\"></td><td>"; - // wife’s father - if ($hfam && $hfam->getHusband()) { - echo "<table><tr>"; - if ($sosa > 0) { - print_sosa_number($sosa * 4 + 2, $hfam->getHusband()->getXref(), "down"); - } - if (!empty($gparid) && $hfam->getHusband()->getXref() == $gparid) { - print_sosa_number(trim(substr($label, 0, -3), ".") . "."); - } - echo "<td valign=\"top\">"; - print_pedigree_person($hfam->getHusband(), $show_full); - echo "</td></tr></table>"; - } elseif ($hfam && !$hfam->getHusband()) { - // Empty box for grandfather - echo "<table border='0'><tr>"; - echo '<td valign="top">'; - print_pedigree_person($hfam->getHusband(), $show_full); - echo '</td></tr></table>'; - } - echo "</td>"; - } - if ($hfam && ($sosa != -1)) { - echo '<td valign="middle" rowspan="2">'; - print_url_arrow(($sosa == 0 ? '?famid=' . $hfam->getXref() . '&ged=' . $hfam->getTree()->getNameUrl() : '#' . $hfam->getXref()), $hfam->getXref(), 1); - echo '</td>'; - } - if ($hfam) { - // wife’s mother - echo "</tr><tr><td><img src=\"" . Theme::theme()->parameter('image-hline') . "\" alt=\"\"></td><td>"; - if ($hfam && $hfam->getWife()) { - echo "<table><tr>"; - if ($sosa > 0) { - print_sosa_number($sosa * 4 + 3, $hfam->getWife()->getXref(), "down"); - } - if (!empty($gparid) && $hfam->getWife()->getXref() == $gparid) { - print_sosa_number(trim(substr($label, 0, -3), ".") . "."); - } - echo "<td valign=\"top\">"; - print_pedigree_person($hfam->getWife(), $show_full); - echo "</td></tr></table>"; - } elseif ($hfam && !$hfam->getWife()) { - // Empty box for grandmother - echo "<table border='0'><tr>"; - echo '<td valign="top">'; - print_pedigree_person($hfam->getWife(), $show_full); - echo '</td></tr></table>'; - } - echo '</td>'; - } - echo "</tr></table>"; -} - -/** - * print the children table for a family - * - * @param Family $family family - * @param string $childid child ID - * @param int $sosa child sosa number - * @param string $label indi label (descendancy booklet) - * @param int $show_cousins display cousins on chart - * @param int $show_full large or small box - */ -function print_family_children(Family $family, $childid = '', $sosa = 0, $label = '', $show_cousins = 0, $show_full = 1) { - - if ($show_full) { - $bheight = Theme::theme()->parameter('chart-box-y'); - } else { - $bheight = Theme::theme()->parameter('compact-chart-box-y'); - } - - $pbheight = $bheight + 14; - - $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 I18N::translate('No children'); - } else { - echo I18N::plural('%s child', '%s children', $numchil, $numchil); - } - echo '</span>'; - - if ($sosa == 0 && Auth::isEditor($family->getTree())) { - echo '<br>'; - echo "<a href=\"#\" onclick=\"return add_child_to_family('", $family->getXref(), "', 'U');\">" . 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="', I18N::translate('son'), '"></a>'; - echo ' <a class="icon-sex_f_15x15" href="#" onclick="return add_child_to_family(\'', $family->getXref(), '\', \'F\');" title="', 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->isPendingAddtion()) { - echo '<td valign="middle" class="new">'; - } elseif ($child->isPendingDeletion()) { - echo '<td valign="middle" class="old">'; - } else { - echo '<td valign="middle">'; - } - print_pedigree_person($child, $show_full); - 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 (I18N::direction() === 'rtl') { - echo ' align="left">'; - } else { - echo ' align="right">'; - } - - //find out how many cousins there are to establish vertical line on second families - $fchildren = $famids[$f]->getChildren(); - $kids = count($fchildren); - $Pheader = ($bheight - 1) * $kids; - $PBadj = 6; // default - if ($show_cousins > 0) { - if ($kids) { - $PBadj = max(0, $Pheader / 2 + $kids * 4.5); - } - } - - if ($f == $maxfam) { - echo "<img height=\"" . ((($bheight / 2)) + $PBadj) . "px\""; - } else { - echo "<img height=\"" . $pbheight . "px\""; - } - echo " width=\"3\" src=\"" . Theme::theme()->parameter('image-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()->minimumDate()->format('%Y'); - // divorce date - if ($div) { - echo '–', $div->getDate()->minimumDate()->format('%Y'); - } - } - echo "<br><img width=\"100%\" class=\"line5\" height=\"3\" src=\"" . Theme::theme()->parameter('image-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, $show_full); - echo "</td>"; - // cousins - if ($show_cousins) { - print_cousins($famid_child, $show_full); - } - } - } - 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> ' . I18N::translate('This family remained childless') . '</td></tr>'; - } - } - echo "</table><br>"; -} - -/** - * print a family with Sosa-Stradonitz numbering system - * ($rootid=1, father=2, mother=3 ...) - * - * @param string $famid family gedcom ID - * @param string $childid tree root ID - * @param int $sosa starting sosa number - * @param string $label indi label (descendancy booklet) - * @param string $parid parent ID (descendancy booklet) - * @param string $gparid gd-parent ID (descendancy booklet) - * @param int $show_cousins display cousins on chart - * @param int $show_full large or small box - */ -function print_sosa_family($famid, $childid, $sosa, $label = '', $parid = '', $gparid = '', $show_cousins = 0, $show_full = 1) { - global $WT_TREE; - - echo '<hr>'; - echo '<p style="page-break-before: always;">'; - if (!empty($famid)) { - echo '<a name="', $famid, '"></a>'; - } - print_family_parents(Family::getInstance($famid, $WT_TREE), $sosa, $label, $parid, $gparid, $show_full); - echo '<br>'; - echo '<table><tr><td valign="top">'; - print_family_children(Family::getInstance($famid, $WT_TREE), $childid, $sosa, $label, $show_cousins, $show_full); - echo '</td></tr></table>'; - echo '<br>'; -} - -/** - * print an arrow to a new url - * - * @param string $url target url - * @param string $label arrow label - * @param int $dir arrow direction 0=left 1=right 2=up 3=down (default=2) - */ -function print_url_arrow($url, $label, $dir = 2) { - if ($url === '') { - return; - } - - // arrow direction - $adir = $dir; - if (I18N::direction() === 'rtl' && $dir === 0) { - $adir = 1; - } - if (I18N::direction() === 'rtl' && $dir === 1) { - $adir = 0; - } - - // arrow style 0 1 2 3 - $array_style = array('icon-larrow', 'icon-rarrow', 'icon-uarrow', 'icon-darrow'); - $astyle = $array_style[$adir]; - - // Labels include people’s names, which may contain markup - echo '<a href="' . $url . '" title="' . strip_tags($label) . '" class="' . $astyle . '"></a>'; -} - -/** - * builds and returns sosa relationship name in the active language - * - * @param string $sosa sosa number - * - * @return string - */ -function get_sosa_name($sosa) { - $path = ''; - while ($sosa > 1) { - if ($sosa % 2 == 1) { - $sosa -= 1; - $path = 'mot' . $path; - } else { - $path = 'fat' . $path; - } - $sosa /= 2; - } - - return get_relationship_name_from_path($path, null, null); -} - -/** - * print cousins list - * - * @param string $famid family ID - * @param int $show_full large or small box - */ -function print_cousins($famid, $show_full = 1) { - global $WT_TREE; - - if ($show_full) { - $bheight = Theme::theme()->parameter('chart-box-y'); - } else { - $bheight = Theme::theme()->parameter('compact-chart-box-y'); - } - - $family = Family::getInstance($famid, $WT_TREE); - $fchildren = $family->getChildren(); - - $kids = count($fchildren); - - echo '<td valign="middle" height="100%">'; - if ($kids) { - echo '<table cellspacing="0" cellpadding="0" border="0" ><tr valign="middle">'; - if ($kids > 1) { - echo '<td rowspan="', $kids, '" valign="middle" align="right"><img width="3px" height="', (($bheight + 9) * ($kids - 1)), 'px" src="', Theme::theme()->parameter('image-vline'), '" alt=""></td>'; - } - $ctkids = count($fchildren); - $i = 1; - foreach ($fchildren as $fchil) { - if ($i == 1) { - echo '<td><img width="10px" height="3px" align="top"'; - } else { - echo '<td><img width="10px" height="3px"'; - } - if (I18N::direction() === 'ltr') { - echo ' style="padding-right: 2px;"'; - } else { - echo ' style="padding-left: 2px;"'; - } - echo ' src="', Theme::theme()->parameter('image-hline'), '" alt=""></td><td>'; - print_pedigree_person($fchil, $show_full); - echo '</td></tr>'; - if ($i < $ctkids) { - echo '<tr>'; - $i++; - } - } - echo '</table>'; - } else { - // If there is known that there are no children (as opposed to no known children) - if (preg_match('/\n1 NCHI (\d+)/', $family->getGedcom(), $match) && $match[1] == 0) { - echo ' <i class="icon-childless" title="', I18N::translate('This family remained childless'), '"></i>'; - } - } - echo '</td>'; -} |
