Esempio n. 1
0
function map_tree($pers_array, $pers_array2)
{
    // in first loop $pers_array and $pers_array2 hold persons A and B
    // in the next loop it will contain the parents, children and spouses of persons A and B, where they exist etc
    // the algorithm starts simultaneously from person A and person B in expanding circles until a common person is found (= connection found)
    // or until either person A or B runs out of persons (= no connection exists)
    global $dbh, $db_functions, $person, $person2, $globaltrack, $globaltrack2, $count;
    global $countfunc, $global_array;
    $count++;
    if ($count > 400000) {
        echo "Database too large!!!!";
        exit;
    }
    $countfunc++;
    $tree = safe_text($_SESSION['tree_prefix']);
    $work_array = array();
    $work_array2 = array();
    // build closest circle around person A (parents, children, spouse(s))
    foreach ($pers_array as $value) {
        // each array item has 4 parts, separated by "@": I124@par@I15@I54;I46;I326;I123;I15
        $params = explode("@", $value);
        $persged = $params[0];
        // the gedcomnumber of this person
        $refer = $params[1];
        // the referrer type: par (parent), spo (spouse), chd (child) - this means who was the previous person that called this one
        $callged = $params[2];
        // the gedcomnumber of the referrer (in case referrer is child: gedcomnumber;famc gedcomnumber)
        $pathway = $params[3];
        // the path from person A to this person (gedcomnumbers separated by semi-colon)
        if ($refer == "chd") {
            $callarray = explode(";", $callged);
            // [0] = gedcomnumber of referring child, [1] = famc gedcomnumber of referring child
        } else {
            $callarray[0] = $callged;
        }
        $persDb = $db_functions->get_person($persged);
        if ($persDb == false) {
            echo "NO SUCH PERSON:" . "ref=" . $refer . "persged=" . $persged . "callged=" . $callged . "\$\$";
            return false;
        }
        if ($refer == "fst") {
            $globaltrack .= $persDb->pers_gedcomnumber . "@";
        }
        if (isset($persDb->pers_famc) and $persDb->pers_famc != "" and $refer != "par") {
            $famcDb = $db_functions->get_family($persDb->pers_famc);
            if ($famcDb == false) {
                echo "NO SUCH FAMILY";
                return;
            }
            if (isset($famcDb->fam_man) and $famcDb->fam_man != "" and $famcDb->fam_man != "0" and strpos($globaltrack, $famcDb->fam_man . "@") === false) {
                if (strpos($_SESSION['next_path'], $famcDb->fam_man . "@") === false) {
                    $work_array[] = $famcDb->fam_man . "@chd@" . $persged . ";" . $persDb->pers_famc . "@" . $pathway . ";" . "chd" . $famcDb->fam_man;
                    $global_array[] = $famcDb->fam_man . "@chd@" . $persged . ";" . $persDb->pers_famc . "@" . $pathway . ";" . "chd" . $famcDb->fam_man;
                }
                $count++;
                $globaltrack .= $famcDb->fam_man . "@";
            }
            if (isset($famcDb->fam_woman) and $famcDb->fam_woman != "" and $famcDb->fam_woman != "0" and strpos($globaltrack, $famcDb->fam_woman . "@") === false) {
                if (strpos($_SESSION['next_path'], $famcDb->fam_woman . "@") === false) {
                    $work_array[] = $famcDb->fam_woman . "@chd@" . $persged . ";" . $persDb->pers_famc . "@" . $pathway . ";" . "chd" . $famcDb->fam_woman;
                    $global_array[] = $famcDb->fam_woman . "@chd@" . $persged . ";" . $persDb->pers_famc . "@" . $pathway . ";" . "chd" . $famcDb->fam_woman;
                }
                $count++;
                $globaltrack .= $famcDb->fam_woman . "@";
            }
        }
        if (isset($persDb->pers_fams) and $persDb->pers_fams != "") {
            $famsarray = explode(";", $persDb->pers_fams);
            foreach ($famsarray as $value) {
                if ($refer == "spo" and $value == $callged) {
                    continue;
                }
                if ($refer == "fst" and $_SESSION['couple'] == $value) {
                    continue;
                }
                $famsDb = $db_functions->get_family($value);
                if ($refer == "chd" and $famsDb->fam_woman == $persDb->pers_gedcomnumber and isset($famsDb->fam_man) and $famsDb->fam_man != "" and $famsDb->fam_gedcomnumber == $callarray[1]) {
                    continue;
                }
                if (isset($famsDb->fam_children) and $famsDb->fam_children != "") {
                    $childarray = explode(";", $famsDb->fam_children);
                    foreach ($childarray as $value) {
                        if ($refer == "chd" and $callarray[0] == $value) {
                            continue;
                        }
                        if (strpos($globaltrack, $value . "@") === false) {
                            if (strpos($_SESSION['next_path'], $value . "@") === false) {
                                $work_array[] = $value . "@par@" . $persged . "@" . $pathway . ";" . "par" . $value;
                                $global_array[] = $value . "@par@" . $persged . "@" . $pathway . ";" . "par" . $value;
                            }
                            $count++;
                            $globaltrack .= $value . "@";
                        }
                    }
                }
            }
            foreach ($famsarray as $value) {
                if ($refer == "chd" and $value == $callarray[1]) {
                    continue;
                }
                if ($refer == "spo" and $value == $callged) {
                    continue;
                }
                if ($refer == "fst" and $_SESSION['couple'] == $value) {
                    continue;
                }
                $famsDb = $db_functions->get_family($value);
                if ($famsDb->fam_man == $persDb->pers_gedcomnumber) {
                    if (isset($famsDb->fam_woman) and $famsDb->fam_woman != "" and $famsDb->fam_woman != "0" and strpos($globaltrack, $famsDb->fam_woman . "@") === false) {
                        if (strpos($_SESSION['next_path'], $famsDb->fam_woman . "@") === false) {
                            $work_array[] = $famsDb->fam_woman . "@spo@" . $value . "@" . $pathway . ";" . "spo" . $famsDb->fam_woman;
                            $global_array[] = $famsDb->fam_woman . "@spo@" . $value . "@" . $pathway . ";" . "spo" . $famsDb->fam_woman;
                        }
                        $count++;
                        $globaltrack .= $famsDb->fam_woman . "@";
                    }
                } else {
                    if (isset($famsDb->fam_man) and $famsDb->fam_man != "" and $famsDb->fam_man != "0" and strpos($globaltrack, $famsDb->fam_man . "@") === false) {
                        if (strpos($_SESSION['next_path'], $famsDb->fam_man . "@") === false) {
                            $work_array[] = $famsDb->fam_man . "@spo@" . $value . "@" . $pathway . ";" . "spo" . $famsDb->fam_man;
                            $global_array[] = $famsDb->fam_man . "@spo@" . $value . "@" . $pathway . ";" . "spo" . $famsDb->fam_man;
                        }
                        $count++;
                        $globaltrack .= $famsDb->fam_man . "@";
                    }
                }
            }
        }
    }
    // build closest circle around person B (parents, children, spouse(s))
    foreach ($pers_array2 as $value) {
        $params = explode("@", $value);
        $persged = $params[0];
        $refer = $params[1];
        $callged = $params[2];
        $pathway = $params[3];
        if ($refer == "chd") {
            $callarray = explode(";", $callged);
        } else {
            $callarray[0] = $callged;
        }
        $persDb = $db_functions->get_person($persged);
        if ($persDb == false) {
            echo "NO SUCH PERSON:" . "ref=" . $refer . "persged=" . $persged . "callged=" . $callged . "\$\$";
            return false;
        }
        if ($refer == "fst") {
            $globaltrack2 .= $persDb->pers_gedcomnumber . "@";
        }
        if (isset($persDb->pers_famc) and $persDb->pers_famc != "" and $refer != "par") {
            $famcDb = $db_functions->get_family($persDb->pers_famc);
            if ($famcDb == false) {
                echo "NO SUCH FAMILY";
                return;
            }
            if (isset($famcDb->fam_man) and $famcDb->fam_man != "" and $famcDb->fam_man != "0") {
                $var1 = strpos($_SESSION['next_path'], $famcDb->fam_man . "@");
                if (strpos($globaltrack, $famcDb->fam_man . "@") !== false and $var1 === false) {
                    $totalpath = join_path($global_array, $pathway, $famcDb->fam_man, "chd");
                    $_SESSION['next_path'] .= $famcDb->fam_man . "@";
                    display_result($totalpath);
                    return $famcDb->fam_man;
                }
                if (strpos($globaltrack2, $famcDb->fam_man . "@") === false) {
                    if ($var1 === false) {
                        $work_array2[] = $famcDb->fam_man . "@chd@" . $persged . ";" . $persDb->pers_famc . "@" . $pathway . ";" . "chd" . $famcDb->fam_man;
                    }
                    $count++;
                    $globaltrack2 .= $famcDb->fam_man . "@";
                }
            }
            if (isset($famcDb->fam_woman) and $famcDb->fam_woman != "" and $famcDb->fam_woman != "0") {
                $var2 = strpos($_SESSION['next_path'], $famcDb->fam_woman . "@");
                if (strpos($globaltrack, $famcDb->fam_woman . "@") !== false and $var2 === false) {
                    $totalpath = join_path($global_array, $pathway, $famcDb->fam_woman, "chd");
                    $_SESSION['next_path'] .= $famcDb->fam_woman . "@";
                    display_result($totalpath);
                    return $famcDb->fam_woman;
                }
                if (strpos($globaltrack2, $famcDb->fam_woman . "@") === false) {
                    if ($var2 === false) {
                        $work_array2[] = $famcDb->fam_woman . "@chd@" . $persged . ";" . $persDb->pers_famc . "@" . $pathway . ";" . "chd" . $famcDb->fam_woman;
                    }
                    $count++;
                    $globaltrack2 .= $famcDb->fam_woman . "@";
                }
            }
        }
        if (isset($persDb->pers_fams) and $persDb->pers_fams != "") {
            $famsarray = explode(";", $persDb->pers_fams);
            foreach ($famsarray as $value) {
                if ($refer == "spo" and $value == $callged) {
                    continue;
                }
                if ($refer == "fst" and $_SESSION['couple'] == $value) {
                    continue;
                }
                $famsDb = $db_functions->get_family($value);
                if ($refer == "chd" and $famsDb->fam_woman == $persDb->pers_gedcomnumber and isset($famsDb->fam_man) and $famsDb->fam_man != "" and $famsDb->fam_gedcomnumber == $callarray[1]) {
                    continue;
                }
                if (isset($famsDb->fam_children) and $famsDb->fam_children != "") {
                    $childarray = explode(";", $famsDb->fam_children);
                    foreach ($childarray as $value) {
                        if ($refer == "chd" and $callarray[0] == $value) {
                            continue;
                        }
                        $var3 = strpos($_SESSION['next_path'], $value . "@");
                        if (strpos($globaltrack, $value . "@") !== false and $var3 === false) {
                            $totalpath = join_path($global_array, $pathway, $value, "par");
                            $_SESSION['next_path'] .= $value . "@";
                            display_result($totalpath);
                            return $value;
                        }
                        if (strpos($globaltrack2, $value . "@") === false) {
                            if ($var3 === false) {
                                $work_array2[] = $value . "@par@" . $persged . "@" . $pathway . ";" . "par" . $value;
                            }
                            $count++;
                            $globaltrack2 .= $value . "@";
                        }
                    }
                }
            }
            foreach ($famsarray as $value) {
                if ($refer == "chd" and $value == $callarray[1]) {
                    continue;
                }
                if ($refer == "spo" and $value == $callged) {
                    continue;
                }
                if ($refer == "fst" and $_SESSION['couple'] == $value) {
                    continue;
                }
                $famsDb = $db_functions->get_family($value);
                if ($famsDb->fam_man == $persDb->pers_gedcomnumber) {
                    if (isset($famsDb->fam_woman) and $famsDb->fam_woman != "" and $famsDb->fam_woman != "0") {
                        $var4 = strpos($_SESSION['next_path'], $famsDb->fam_woman . "@");
                        if (strpos($globaltrack, $famsDb->fam_woman . "@") !== false and $var4 === false) {
                            $totalpath = join_path($global_array, $pathway, $famsDb->fam_woman, "spo");
                            $_SESSION['next_path'] .= $famsDb->fam_woman . "@";
                            display_result($totalpath);
                            return $famsDb->fam_woman;
                        }
                        if (strpos($globaltrack2, $famsDb->fam_woman . "@") === false) {
                            if ($var4 === false) {
                                $work_array2[] = $famsDb->fam_woman . "@spo@" . $value . "@" . $pathway . ";" . "spo" . $famsDb->fam_woman;
                            }
                            $count++;
                            $globaltrack2 .= $famsDb->fam_woman . "@";
                        }
                    }
                } elseif ($famsDb->fam_woman == $persDb->pers_gedcomnumber) {
                    if (isset($famsDb->fam_man) and $famsDb->fam_man != "" and $famsDb->fam_man != "0") {
                        $var5 = strpos($_SESSION['next_path'], $famsDb->fam_man . "@");
                        if (strpos($globaltrack, $famsDb->fam_man . "@") !== false and $var5 === false) {
                            $totalpath = join_path($global_array, $pathway, $famsDb->fam_man, "spo");
                            $_SESSION['next_path'] .= $famsDb->fam_man . "@";
                            display_result($totalpath);
                            return $famsDb->fam_man;
                        }
                        if (strpos($globaltrack2, $famsDb->fam_man . "@") === false) {
                            if ($var5 === false) {
                                $work_array2[] = $famsDb->fam_man . "@spo@" . $value . "@" . $pathway . ";" . "spo" . $famsDb->fam_man;
                            }
                            $count++;
                            $globaltrack2 .= $famsDb->fam_man . "@";
                        }
                    }
                }
            }
        }
    }
    if (isset($work_array[0]) and isset($work_array2[0])) {
        // no common person was found but both A and B still have a wider circle to expand -> call this function again
        map_tree($work_array, $work_array2);
    } elseif (!isset($_SESSION['next_path'])) {
        echo "<br><span style='font-weight:bold;font-size:120%'>&nbsp;&nbsp;" . __("These persons are not related in any way.") . "&nbsp;&nbsp;<br><br>";
    } else {
        echo "<br><span style='font-weight:bold;font-size:120%'>&nbsp;&nbsp;" . __("No further paths found.") . "&nbsp;&nbsp;<br><br>";
    }
}
Esempio n. 2
0
<?php

defined("CATALOG") or die("Access denied");
include 'models/main_model.php';
$categories = get_cat();
$categories_tree = map_tree($categories);
$categories_menu = categories_to_string($categories_tree);
// получение страниц меню
$pages = get_pages();
check_remember();
<?php

defined("CATALOG") or die("Access denied");
include 'main_controller.php';
include "models/{$view}_model.php";
$get_one_product = get_one_product($product_alias);
if (!$get_one_product) {
    include VIEW . "404.php";
    exit;
}
// получаем ID категории
$id = $get_one_product['parent'];
// ID товара
$product_id = $get_one_product['id'];
// кол-во комментариев
$count_comments = count_comments($product_id);
// получаем комментарии к товару
$get_comments = get_comments($product_id);
// строим дерево
$comments_tree = map_tree($get_comments);
// получаем HTML-код комментариев
$comments = categories_to_string($comments_tree, 'comments_template.php');
include 'libs/breadcrumbs.php';
include VIEW . "{$view}.php";