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 *** }
$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 . "'";
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 }