define('WT_IMPORTED', $WT_TREE->imported); define('WT_USER_GEDCOM_ADMIN', Auth::isManager($WT_TREE)); define('WT_USER_CAN_ACCEPT', Auth::isModerator($WT_TREE)); define('WT_USER_CAN_EDIT', Auth::isEditor($WT_TREE)); define('WT_USER_CAN_ACCESS', Auth::isMember($WT_TREE)); define('WT_USER_GEDCOM_ID', $WT_TREE->userPreference(WT_USER_ID, 'gedcomid')); define('WT_USER_ROOT_ID', $WT_TREE->userPreference(WT_USER_ID, 'rootid') ? $WT_TREE->userPreference(WT_USER_ID, 'rootid') : WT_USER_GEDCOM_ID); define('WT_USER_PATH_LENGTH', $WT_TREE->userPreference(WT_USER_ID, 'RELATIONSHIP_PATH_LENGTH')); if (WT_USER_GEDCOM_ADMIN) { define('WT_USER_ACCESS_LEVEL', WT_PRIV_NONE); } elseif (WT_USER_CAN_ACCESS) { define('WT_USER_ACCESS_LEVEL', WT_PRIV_USER); } else { define('WT_USER_ACCESS_LEVEL', WT_PRIV_PUBLIC); } load_gedcom_settings(WT_GED_ID); } else { define('WT_GEDCOM', ''); define('WT_GED_ID', null); define('WT_GEDURL', ''); define('WT_TREE_TITLE', WT_WEBTREES); define('WT_IMPORTED', false); define('WT_USER_GEDCOM_ADMIN', false); define('WT_USER_CAN_ACCEPT', false); define('WT_USER_CAN_EDIT', false); define('WT_USER_CAN_ACCESS', false); define('WT_USER_GEDCOM_ID', ''); define('WT_USER_ROOT_ID', ''); define('WT_USER_PATH_LENGTH', 0); define('WT_USER_ACCESS_LEVEL', WT_PRIV_PUBLIC); }
function search_repos($query, $geds, $match) { global $GEDCOM; // No query => no results if (!$query) { return array(); } // Convert the query into a SQL expression $querysql = array(); // Convert the query into a regular expression $queryregex = array(); foreach ($query as $q) { $queryregex[] = preg_quote(WT_I18N::strtoupper($q), '/'); $querysql[] = "o_gedcom LIKE " . WT_DB::quote("%{$q}%") . " COLLATE '" . WT_I18N::$collation . "'"; } $sql = "SELECT o_id AS xref, o_file AS gedcom_id, o_gedcom AS gedcom FROM `##other` WHERE (" . implode(" {$match} ", $querysql) . ") AND o_type='REPO' AND o_file IN (" . implode(',', $geds) . ')'; // Group results by gedcom, to minimise switching between privacy files $sql .= ' ORDER BY gedcom_id'; $list = array(); $rows = WT_DB::prepare($sql)->fetchAll(); $GED_ID = WT_GED_ID; foreach ($rows as $row) { // Switch privacy file if necessary if ($row->gedcom_id != $GED_ID) { $GEDCOM = get_gedcom_from_id($row->gedcom_id); load_gedcom_settings($row->gedcom_id); $GED_ID = $row->gedcom_id; } // SQL may have matched on private data or gedcom tags, so check again against privatized data. $record = WT_Individual::getInstance($row->xref, $row->gedcom_id, $row->gedcom); // Ignore non-genealogical data $gedrec = preg_replace('/\\n\\d (_UID|_WT_USER|FILE|FORM|TYPE|CHAN|REFN|RESN) .*/', '', $record->getGedcom()); // Ignore links and tags $gedrec = preg_replace('/\\n\\d ' . WT_REGEX_TAG . '( @' . WT_REGEX_XREF . '@)?/', '', $gedrec); // Ignore tags $gedrec = preg_replace('/\\n\\d ' . WT_REGEX_TAG . ' ?/', '', $gedrec); // Re-apply the filtering $gedrec = WT_I18N::strtoupper($gedrec); foreach ($queryregex as $regex) { if (!preg_match('/' . $regex . '/', $gedrec)) { continue 2; } } $list[] = $record; } // Switch privacy file if necessary if ($GED_ID != WT_GED_ID) { $GEDCOM = WT_GEDCOM; load_gedcom_settings(WT_GED_ID); } return $list; }
function printResults() { require_once WT_ROOT . 'includes/functions/functions_print_lists.php'; global $GEDCOM; $somethingPrinted = false; // whether anything printed // ---- section to search and display results on a general keyword search if ($this->action == "general" || $this->action == "soundex" || $this->action == "replace") { if ($this->myindilist || $this->myfamlist || $this->mysourcelist || $this->mynotelist) { $this->addInlineJavascript('jQuery("#search-result-tabs").tabs();'); $this->addInlineJavascript('jQuery("#search-result-tabs").css("visibility", "visible");'); $this->addInlineJavascript('jQuery(".loading-image").css("display", "none");'); echo '<br>'; echo '<div class="loading-image"> </div>'; echo '<div id="search-result-tabs"><ul>'; if ($this->myindilist) { echo '<li><a href="#searchAccordion-indi"><span id="indisource">', WT_I18N::translate('Individuals'), '</span></a></li>'; } if ($this->myfamlist) { echo '<li><a href="#searchAccordion-fam"><span id="famsource">', WT_I18N::translate('Families'), '</span></a></li>'; } if ($this->mysourcelist) { echo '<li><a href="#searchAccordion-source"><span id="mediasource">', WT_I18N::translate('Sources'), '</span></a></li>'; } if ($this->mynotelist) { echo '<li><a href="#searchAccordion-note"><span id="notesource">', WT_I18N::translate('Notes'), '</span></a></li>'; } echo '</ul>'; // individual results echo '<div id="searchAccordion-indi">'; // Split individuals by tree $trees = WT_Tree::getAll(); foreach ($this->sgeds as $ged_id => $gedcom) { $datalist = array(); foreach ($this->myindilist as $individual) { if ($individual->getGedcomId() == $ged_id) { $datalist[] = $individual; } } if ($datalist) { $somethingPrinted = true; usort($datalist, array('WT_GedcomRecord', 'compare')); $GEDCOM = $gedcom; load_gedcom_settings($ged_id); echo '<h3 class="indi-acc-header"><a href="#"><span class="search_item" dir="auto">', $this->myquery, '</span> @ <span>', $trees[$ged_id]->tree_title_html, '</span></a></h3> <div class="indi-acc_content">', format_indi_table($datalist); echo '</div>'; //indi-acc_content } } echo '</div>'; //#searchAccordion-indi $this->addInlineJavascript('jQuery("#searchAccordion-indi").accordion({heightStyle: "content", collapsible: true});'); // family results echo '<div id="searchAccordion-fam">'; // Split families by gedcom foreach ($this->sgeds as $ged_id => $gedcom) { $datalist = array(); foreach ($this->myfamlist as $family) { if ($family->getGedcomId() == $ged_id) { $datalist[] = $family; } } if ($datalist) { $somethingPrinted = true; usort($datalist, array('WT_GedcomRecord', 'compare')); $GEDCOM = $gedcom; load_gedcom_settings($ged_id); echo '<h3 class="fam-acc-header"><a href="#"><span class="search_item" dir="auto">', $this->myquery, '</span> @ <span>', $trees[$ged_id]->tree_title_html, '</span></a></h3> <div class="fam-acc_content">', format_fam_table($datalist); echo '</div>'; //fam-acc_content } } echo '</div>'; //#searchAccordion-fam $this->addInlineJavascript('jQuery("#searchAccordion-fam").accordion({heightStyle: "content", collapsible: true});'); // source results echo '<div id="searchAccordion-source">'; // Split sources by gedcom foreach ($this->sgeds as $ged_id => $gedcom) { $datalist = array(); foreach ($this->mysourcelist as $source) { if ($source->getGedcomId() == $ged_id) { $datalist[] = $source; } } if ($datalist) { $somethingPrinted = true; usort($datalist, array('WT_GedcomRecord', 'compare')); $GEDCOM = $gedcom; load_gedcom_settings($ged_id); echo '<h3 class="source-acc-header"><a href="#"><span class="search_item" dir="auto">', $this->myquery, '</span> @ <span>', $trees[$ged_id]->tree_title_html, '</span></a></h3> <div class="source-acc_content">', format_sour_table($datalist); echo '</div>'; //fam-acc_content } } echo '</div>'; //#searchAccordion-source $this->addInlineJavascript('jQuery("#searchAccordion-source").accordion({heightStyle: "content", collapsible: true});'); // note results echo '<div id="searchAccordion-note">'; // Split notes by gedcom foreach ($this->sgeds as $ged_id => $gedcom) { $datalist = array(); foreach ($this->mynotelist as $note) { if ($note->getGedcomId() == $ged_id) { $datalist[] = $note; } } if ($datalist) { $somethingPrinted = true; usort($datalist, array('WT_GedcomRecord', 'compare')); $GEDCOM = $gedcom; load_gedcom_settings($ged_id); echo '<h3 class="note-acc-header"><a href="#"><span class="search_item" dir="auto">', $this->myquery, '</span> @ <span>', $trees[$ged_id]->tree_title_html, '</span></a></h3> <div class="note-acc_content">', format_note_table($datalist); echo '</div>'; //note-acc_content } } echo '</div>'; //#searchAccordion-note $this->addInlineJavascript('jQuery("#searchAccordion-note").accordion({heightStyle: "content", collapsible: true});'); $GEDCOM = WT_GEDCOM; load_gedcom_settings(WT_GED_ID); echo '</div>'; //#search-result-tabs } elseif (isset($this->query)) { echo '<br><div class="warning center"><em>' . WT_I18N::translate('No results found.') . '</em><br>'; if (!isset($this->srindi) && !isset($this->srfams) && !isset($this->srsour) && !isset($this->srnote)) { echo '<em>' . WT_I18N::translate('Be sure to select an option to search for.') . '</em><br>'; } echo '</div>'; } } return $somethingPrinted; // whether anything printed }