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%'> " . __("These persons are not related in any way.") . " <br><br>"; } else { echo "<br><span style='font-weight:bold;font-size:120%'> " . __("No further paths found.") . " <br><br>"; } }
<?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";