function descendants($family_id, $main_person, $gn, $nr_generations)
{
    //global $nr_generations;
    global $dbh, $db_functions;
    global $descendant_id, $descendant_array;
    //$family_nr=1; //*** Process multiple families ***
    // *** Selected person ***
    $descendant_id++;
    $descendant_array[$descendant_id] = $main_person;
    $gn++;
    if ($nr_generations < $gn) {
        return;
    }
    // *** Count marriages of main person (man) ***
    // *** YB: if needed show woman as main_person ***
    @($familyDb = $db_functions->get_family($family_id, 'man-woman'));
    $parent1 = '';
    $parent2 = '';
    $change_main_person = false;
    // *** Standard main_person is the father ***
    if ($familyDb->fam_man) {
        $parent1 = $familyDb->fam_man;
    }
    // *** If mother is selected, mother will be main_person ***
    if ($familyDb->fam_woman == $main_person) {
        $parent1 = $familyDb->fam_woman;
        $change_main_person = true;
    }
    // *** Check family with parent1: N.N. ***
    if ($parent1) {
        // *** Save man's families in array ***
        @($personDb = $db_functions->get_person($parent1, 'famc-fams'));
        $marriage_array = explode(";", $personDb->pers_fams);
        //count array:
        $nr_families = substr_count($personDb->pers_fams, ";");
    } else {
        //check code:
        $marriage_array[0] = $family_id;
        //check code:
        $nr_families = 0;
    }
    // *** Loop multiple marriages of main_person ***
    for ($parent1_marr = 0; $parent1_marr <= $nr_families; $parent1_marr++) {
        @($familyDb = $db_functions->get_family($marriage_array[$parent1_marr]));
        // *** Progen: onecht kind, vrouw zonder man ***
        //if ($familyDb->fam_kind!='PRO-GEN') $family_nr++;
        // *************************************************************
        // *** Children                                              ***
        // *************************************************************
        if ($familyDb->fam_children) {
            $child_array = explode(";", $familyDb->fam_children);
            $nr_children = count($child_array);
            $nr_children--;
            for ($i = 0; $i <= $nr_children; $i++) {
                @($childDb = $db_functions->get_person($child_array[$i]));
                if ($childDb->pers_fams) {
                    // *** 1st family of child ***
                    $child_family = explode(";", $childDb->pers_fams);
                    $child1stfam = $child_family[0];
                    // *** Recursive, process ancestors of child ***
                    descendants($child1stfam, $childDb->pers_gedcomnumber, $gn, $nr_generations);
                } else {
                    // *** Child without own family ***
                    $descendant_id++;
                    $descendant_array[$descendant_id] = $childDb->pers_gedcomnumber;
                    //if($nr_generations>=$gn) {
                    //	$childgn=$gn+1;
                    //}
                }
            }
        }
    }
    // *** Process multiple marriages ***
}
Ejemplo n.º 2
0
     $event_qry = $dbh->query($event_sql);
     $eventDb = $event_qry->fetch(PDO::FETCH_OBJ);
     $event_event = $eventDb->event_event;
 }
 $sql = "DELETE FROM humo_events\n\t\t\tWHERE event_tree_id='" . $tree_id . "' AND event_person_id='" . $pers_gedcomnumber . "' AND event_kind='" . $event_kind . "' AND event_order='" . $event_order_id . "'";
 $result = $dbh->query($sql);
 $event_sql = "SELECT * FROM humo_events\n\t\t\tWHERE event_tree_id='" . $tree_id . "' AND event_person_id='" . $pers_gedcomnumber . "' AND event_kind='" . $event_kind . "' AND event_order>'" . $event_order_id . "' ORDER BY event_order";
 $event_qry = $dbh->query($event_sql);
 while ($eventDb = $event_qry->fetch(PDO::FETCH_OBJ)) {
     $sql = "UPDATE humo_events SET\n\t\t\tevent_order='" . ($eventDb->event_order - 1) . "',\n\t\t\tevent_changed_date='" . $gedcom_date . "',\n\t\t\tevent_changed_time='" . $gedcom_time . "'\n\t\t\tWHERE event_id='" . $eventDb->event_id . "'";
     $result = $dbh->query($sql);
 }
 // *** Also remove colour mark from descendants and/ or ancestors ***
 if (isset($_POST['event_descendants'])) {
     // EXAMPLE: descendants($family_id,$main_person,$gn,$nr_generations);
     descendants($marriage, $pers_gedcomnumber, 0, 20);
     // *** Starts with 2nd descendant, skip main person (that's allready processed above this code)! ***
     for ($i = 2; $i <= $descendant_id; $i++) {
         // *** Get event_order from selected person ***
         $event_sql = "SELECT event_order FROM humo_events WHERE event_tree_id='" . $tree_id . "' AND event_person_id='" . $descendant_array[$i] . "'\n\t\t\t\t\tAND event_kind='person_colour_mark' AND event_event='" . $event_event . "'";
         $event_qry = $dbh->query($event_sql);
         $eventDb = $event_qry->fetch(PDO::FETCH_OBJ);
         $event_order = $eventDb->event_order;
         // *** Remove colour from descendant ***
         $sql = "DELETE FROM humo_events WHERE event_tree_id='" . $tree_id . "' AND event_person_id='" . $descendant_array[$i] . "'\n\t\t\t\t\tAND event_kind='person_colour_mark' AND event_event='" . $event_event . "'";
         $result = $dbh->query($sql);
         // *** Restore order of colour marks ***
         $event_sql = "SELECT * FROM humo_events\n\t\t\t\t\tWHERE event_tree_id='" . $tree_id . "' AND event_person_id='" . $descendant_array[$i] . "' AND event_kind='" . $event_kind . "' AND event_order>'" . $event_order . "' ORDER BY event_order";
         $event_qry = $dbh->query($event_sql);
         while ($eventDb = $event_qry->fetch(PDO::FETCH_OBJ)) {
             $sql = "UPDATE humo_events SET\n\t\t\t\t\tevent_order='" . ($eventDb->event_order - 1) . "',\n\t\t\t\t\tevent_changed_date='" . $gedcom_date . "',\n\t\t\t\t\tevent_changed_time='" . $gedcom_time . "'\n\t\t\t\t\tWHERE event_id='" . $eventDb->event_id . "'";
Ejemplo n.º 3
0
function descendants($family_id, $main_person, $gn, $max_generations)
{
    global $dbh, $tree_id, $db_functions;
    global $persids, $famsids;
    global $language;
    $family_nr = 1;
    //*** Process multiple families ***
    if ($max_generations < $gn) {
        return;
    }
    $gn++;
    // *** Count marriages of man ***
    // *** If needed show woman as main_person ***
    if ($family_id == '') {
        // single person
        $persids[] = $main_person;
        return;
    }
    $family = $dbh->query("SELECT fam_man, fam_woman FROM humo_families\n\t\tWHERE fam_tree_id='" . $tree_id . "' AND fam_gedcomnumber='" . $family_id . "'");
    try {
        @($familyDb = $family->fetch(PDO::FETCH_OBJ));
    } catch (PDOException $e) {
        echo __('No valid family number.');
    }
    $parent1 = '';
    $parent2 = '';
    $change_main_person = false;
    // *** Standard main_person is the father ***
    if ($familyDb->fam_man) {
        $parent1 = $familyDb->fam_man;
    }
    // *** If mother is selected, mother will be main_person ***
    if ($familyDb->fam_woman == $main_person) {
        $parent1 = $familyDb->fam_woman;
        $change_main_person = true;
    }
    // *** Check family with parent1: N.N. ***
    if ($parent1) {
        // *** Save man's families in array ***
        //$person_qry=$dbh->query("SELECT pers_fams FROM humo_persons
        //	WHERE pers_tree_id='".$tree_id."' AND pers_gedcomnumber='".$parent1."'");
        //@$personDb=$person_qry->fetch(PDO::FETCH_OBJ);
        $personDb = $db_functions->get_person($parent1);
        $marriage_array = explode(";", $personDb->pers_fams);
        $nr_families = substr_count($personDb->pers_fams, ";");
    } else {
        $marriage_array[0] = $family_id;
        $nr_families = "0";
    }
    // *** Loop multiple marriages of main_person ***
    for ($parent1_marr = 0; $parent1_marr <= $nr_families; $parent1_marr++) {
        $id = $marriage_array[$parent1_marr];
        $familyDb = $db_functions->get_family($id);
        // *************************************************************
        // *** Parent1 (normally the father)                         ***
        // *************************************************************
        if ($familyDb->fam_kind != 'PRO-GEN') {
            //onecht kind, vrouw zonder man
            if ($family_nr == 1) {
                // *** Show data of man ***
                if ($change_main_person == true) {
                    // store I and Fs
                    $persids[] = $familyDb->fam_woman;
                    $families = explode(';', $personDb->pers_fams);
                    foreach ($families as $value) {
                        $famsids[] = $value;
                    }
                } else {
                    // store I and Fs
                    $persids[] = $familyDb->fam_man;
                    $families = explode(';', $personDb->pers_fams);
                    foreach ($families as $value) {
                        $famsids[] = $value;
                    }
                }
            }
            $family_nr++;
        }
        // *** end check of PRO-GEN ***
        // *************************************************************
        // *** Parent2 (normally the mother)                         ***
        // *************************************************************
        if (isset($_POST['desc_spouses'])) {
            if ($change_main_person == true) {
                $persids[] = $familyDb->fam_man;
                $desc_sp = $familyDb->fam_man;
            } else {
                $persids[] = $familyDb->fam_woman;
                $desc_sp = $familyDb->fam_woman;
            }
        }
        if (isset($_POST['desc_sp_parents'])) {
            // if set, add parents of spouse
            $spqry = $dbh->query("SELECT pers_famc FROM humo_persons\n\t\t\t\tWHERE pers_tree_id='" . $tree_id . "' AND pers_gedcomnumber = '" . $desc_sp . "'");
            $spqryDb = $spqry->fetch(PDO::FETCH_OBJ);
            if (isset($spqryDb->pers_famc) and $spqryDb->pers_famc) {
                $famqryDb = $db_functions->get_family($spqryDb->pers_famc);
                if ($famqryDb->fam_man) {
                    $persids[] = $famqryDb->fam_man;
                }
                if ($famqryDb->fam_woman) {
                    $persids[] = $famqryDb->fam_woman;
                }
                $famsids[] = $spqryDb->pers_famc;
            }
        }
        // *************************************************************
        // *** Children                                              ***
        // *************************************************************
        if ($familyDb->fam_children) {
            $childnr = 1;
            $child_array = explode(";", $familyDb->fam_children);
            for ($i = 0; $i <= substr_count("{$familyDb->fam_children}", ";"); $i++) {
                $child = $dbh->query("SELECT * FROM humo_persons\n\t\t\t\t\tWHERE pers_tree_id='" . $tree_id . "' AND pers_gedcomnumber='" . $child_array[$i] . "'");
                @($childDb = $child->fetch(PDO::FETCH_OBJ));
                if ($child->rowCount() > 0) {
                    // *** Build descendant_report ***
                    if ($childDb->pers_fams) {
                        // *** 1e family of child ***
                        $child_family = explode(";", $childDb->pers_fams);
                        $child1stfam = $child_family[0];
                        descendants($child1stfam, $childDb->pers_gedcomnumber, $gn, $max_generations);
                        // recursive
                    } else {
                        // Child without own family
                        if ($max_generations >= $gn) {
                            $childgn = $gn + 1;
                            $persids[] = $childDb->pers_gedcomnumber;
                        }
                    }
                    $childnr++;
                }
            }
        }
    }
    // Show  multiple marriages
}