Esempio n. 1
0
function child_of($p, $url = './family.php')
{
    global $_son, $_daughter, $_child, $_of, $_and;
    $str = '';
    if (has_parents($p)) {
        $gender = get_gender($p);
        if ($gender == 0) {
            $ch = $_child;
        } elseif ($gender == 1) {
            $ch = $_son;
        } elseif ($gender == 2) {
            $ch = $_daughter;
        }
        $father = find_father($p);
        $mother = find_mother($p);
        if ($father && $mother) {
            $str = paren("{$ch} {$_of} " . linked_name($father, $url) . " {$_and} " . linked_name($mother, $url));
        } elseif ($father) {
            $str = paren("{$ch} {$_of} " . linked_name($father, $url));
        } elseif ($mother) {
            $str = paren("{$ch} {$_of} " . linked_name($mother, $url));
        }
    }
    return $str;
}
Esempio n. 2
0
function build_tree($p)
{
    // The indices of the tree array are plain Sosa-Stradonitz numbers.
    // The proband is number 1. The father of any person P in the pedigree
    // has index P * 2, the mother of P has P * 2 + 1. Missing persons are
    // assigned a 0.
    $tree_array[1] = $p;
    // hunt down ancestors
    for ($i = 1; $i < 16; $i++) {
        if ($tree_array[$i]) {
            $tree_array[$i * 2] = find_father($tree_array[$i]);
        } else {
            $tree_array[$i * 2] = 0;
        }
        if ($tree_array[$i]) {
            $tree_array[$i * 2 + 1] = find_mother($tree_array[$i]);
        } else {
            $tree_array[$i * 2 + 1] = 0;
        }
    }
    // populate name array
    $name[1] = get_name_and_dates('./family.php', $p);
    for ($i = 2; $i < 32; $i++) {
        if ($tree_array[$i]) {
            $name[$i] = get_name_and_dates('', $tree_array[$i]);
        } else {
            $name[$i] = '';
        }
    }
    // if a gggparent has registered ancestors, append right arrow
    for ($i = 16; $i < 32; $i++) {
        if (has_parents($tree_array[$i])) {
            $name[$i] .= "</td><td rowspan=\"2\"><img src=\"./graphics/arr_rt.gif\" alt=\"\" />";
        }
    }
    if (get_gender($p) == 1) {
        $pcolor = 'blue';
    } elseif (get_gender($p) == 2) {
        $pcolor = 'red';
    } else {
        $pcolor = 'green';
    }
    // The following vars are space-saving abbreviations for the matrix below.
    // Each line in the matrix, except for the proband, occupies *two* table rows.
    // The reason is of course that the lines and angles are done with pure CSS.
    // Even if it's actually validating with W3C, the semantic fundamentalists
    // will hold their noses over such blatant table abuse. I may consider
    // rewriting it for SVG when IE supports it out of the box, and all earlier
    // versions of IE have gone to bit heaven. (I'm probably pushing up daisies
    // myself before that happens.) Until then, this format is understood by all
    // browsers more recent than Netscape 4. It's even (sort of) working in Lynx.
    // two empty cells
    $ec = "<td>&nbsp;</td><td>&nbsp;</td>";
    // four empty cells in a two-by-two block
    $eb = "<td rowspan=\"2\" colspan=\"2\">&nbsp;</td>";
    // a red box for a female ancestor
    $red = "<td rowspan=\"2\" colspan=\"2\" class=\"red\">";
    // a blue box for a male ancestor
    $blue = "<td rowspan=\"2\" colspan=\"2\" class=\"blue\">";
    // a box for the proband
    $proband = "<td colspan=\"2\" class=\"{$pcolor}\">";
    // the upper angle to a father box
    $tf = "<td>&nbsp;</td><td class=\"tofath\">&nbsp;</td>";
    // the lower angle to a mother box
    $tm = "<td>&nbsp;</td><td class=\"tomoth\">&nbsp;</td>";
    // vertical line
    $vl = "<td>&nbsp;</td><td class=\"vline\">&nbsp;</td>";
    // table row end and newline
    $nl = "</tr>\n<tr>";
    // The Matrix From Hell. Don't mess with it. Note that every line in
    // the matrix is conditional, no need to print empty boxes.
    echo "<table cellspacing=\"0\"><!-- the pedigree monster table -->\n";
    if ($name[16]) {
        echo "<tr>{$eb}{$eb}{$eb}{$ec}{$blue} 16 {$name['16']}</td>{$nl}{$tf}</tr>\n";
    }
    if ($name[8]) {
        echo "<tr>{$eb}{$eb}{$ec}{$blue} 8 {$name['8']}</td>{$eb}{$nl}{$tf}</tr>\n";
    }
    if ($name[17]) {
        echo "<tr>{$eb}{$eb}{$vl}{$tm}{$red} 17 {$name['17']}</td>{$nl}{$vl}{$ec}</tr>\n";
    }
    if ($name[4]) {
        echo "<tr>{$eb}{$ec}{$blue} 4 {$name['4']}</td>{$eb}{$eb}{$nl}{$tf}</tr>\n";
    }
    if ($name[18]) {
        echo "<tr>{$eb}{$vl}{$vl}{$ec}{$blue} 18 {$name['18']}</td>{$nl}{$vl}{$vl}{$tf}</tr>\n";
    }
    if ($name[9]) {
        echo "<tr>{$eb}{$vl}{$tm}{$red} 9 {$name['9']}</td>{$eb}{$nl}{$vl}{$ec}</tr>\n";
    }
    if ($name[19]) {
        echo "<tr>{$eb}{$vl}{$eb}{$tm}{$red} 19 {$name['19']}</td>{$nl}{$vl}{$ec}</tr>\n";
    }
    if ($name[2]) {
        echo "<tr>{$ec}{$blue} 2 {$name['2']}</td>{$eb}{$eb}{$eb}{$nl}{$tf}</tr>\n";
    }
    if ($name[20]) {
        echo "<tr>{$vl}{$vl}{$eb}{$ec}{$blue} 20 {$name['20']}</td>{$nl}{$vl}{$vl}{$tf}</tr>\n";
    }
    if ($name[10]) {
        echo "<tr>{$vl}{$vl}{$ec}{$blue} 10 {$name['10']}</td>{$eb}{$nl}{$vl}{$vl}{$tf}</tr>\n";
    }
    if ($name[21]) {
        echo "<tr>{$vl}{$vl}{$vl}{$tm}{$red} 21 {$name['21']}</td>{$nl}{$vl}{$vl}{$vl}{$ec} </tr>\n";
    }
    if ($name[5]) {
        echo "<tr>{$vl}{$tm}{$red} 5 {$name['5']}</td>{$eb}{$eb}{$nl}{$vl}{$ec}</tr>\n";
    }
    if ($name[22]) {
        echo "<tr>{$vl}{$eb}{$vl}{$ec}{$blue} 22 {$name['22']}</td>{$nl}{$vl}{$vl}{$tf}</tr>\n";
    }
    if ($name[11]) {
        echo "<tr>{$vl}{$eb}{$tm}{$red} 11 {$name['11']}</td>{$eb}{$nl}{$vl}{$ec}</tr>\n";
    }
    if ($name[23]) {
        echo "<tr>{$vl}{$eb}{$eb}{$tm}{$red} 23 {$name['23']}</td>{$nl}{$vl}{$ec}</tr>\n";
    }
    echo "<tr>{$proband} 1 {$name['1']}</td>{$ec}{$ec}{$ec}{$ec}</tr>\n";
    if ($name[24]) {
        echo "<tr>{$vl}{$eb}{$eb}{$ec}{$blue} 24 {$name['24']}</td>{$nl}{$vl}{$tf}</tr>";
    }
    if ($name[12]) {
        echo "<tr>{$vl}{$eb}{$ec}{$blue} 12 {$name['12']}</td>{$eb}{$nl}{$vl}{$tf}</tr>\n";
    }
    if ($name[25]) {
        echo "<tr>{$vl}{$eb}{$vl}{$tm}{$red} 25 {$name['25']}</td>{$nl}{$vl}{$vl}{$ec}</tr>\n";
    }
    if ($name[6]) {
        echo "<tr>{$vl}{$ec}{$blue} 6 {$name['6']}</td>{$eb}{$eb}{$nl}{$vl}{$tf}</tr>\n";
    }
    if ($name[26]) {
        echo "<tr>{$vl}{$vl}{$vl}{$ec}{$blue} 26 {$name['26']}</td>{$nl}{$vl}{$vl}{$vl}{$tf}</tr>\n";
    }
    if ($name[13]) {
        echo "<tr>{$vl}{$vl}{$tm}{$red} 13 {$name['13']}</td>{$eb}{$nl}{$vl}{$vl}{$ec}</tr>\n";
    }
    if ($name[27]) {
        echo "<tr>{$vl}{$vl}{$eb}{$tm}{$red} 27 {$name['27']}</td>{$nl}{$vl}{$vl}{$ec}</tr>\n";
    }
    if ($name[3]) {
        echo "<tr>{$tm}{$red} 3 {$name['3']}</td>{$eb}{$eb}{$eb}{$nl}{$ec}</tr>\n";
    }
    if ($name[28]) {
        echo "<tr>{$eb}{$vl}{$eb}{$ec}{$blue} 28 {$name['28']}</td>{$nl}{$vl}{$tf}</tr>\n";
    }
    if ($name[14]) {
        echo "<tr>{$eb}{$vl}{$ec}{$blue} 14 {$name['14']}</td>{$eb}{$nl}{$vl}{$tf}</tr>\n";
    }
    if ($name[29]) {
        echo "<tr>{$eb}{$vl}{$vl}{$tm}{$red} 29 {$name['29']}</td>{$nl}{$vl}{$vl}{$ec}</tr>\n";
    }
    if ($name[7]) {
        echo "<tr>{$eb}{$tm}{$red} 7 {$name['7']}</td>{$eb}{$eb}{$nl}{$ec}</tr>\n";
    }
    if ($name[30]) {
        echo "<tr>{$eb}{$eb}{$vl}{$ec}{$blue} 30 {$name['30']}</td>{$nl}{$vl}{$tf}</tr>\n";
    }
    if ($name[15]) {
        echo "<tr>{$eb}{$eb}{$tm}{$red} 15 {$name['15']}</td>{$eb}{$nl}{$ec}</tr>\n";
    }
    if ($name[31]) {
        echo "<tr>{$eb}{$eb}{$eb}{$tm}{$red} 31 {$name['31']}</td>{$nl}{$ec}</tr>\n";
    }
    echo "</table>\n";
}