summaryrefslogtreecommitdiff
path: root/includes/functions/functions_db.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/functions/functions_db.php')
-rw-r--r--includes/functions/functions_db.php21
1 files changed, 13 insertions, 8 deletions
diff --git a/includes/functions/functions_db.php b/includes/functions/functions_db.php
index 6cfaecbe70..3aab50fc80 100644
--- a/includes/functions/functions_db.php
+++ b/includes/functions/functions_db.php
@@ -231,7 +231,7 @@ function search_indis_names($query, $geds, $match) {
foreach ($query as $q) {
$querysql[]="n_full LIKE ".WT_DB::quote("%{$q}%")." COLLATE '".WT_I18N::$collation."'";
}
- $sql="SELECT DISTINCT i_id AS xref, i_file AS gedcom_id, i_gedcom AS gedcom, n_num FROM `##individuals` JOIN `##name` ON i_id=n_id AND i_file=n_file WHERE (".implode(" {$match} ", $querysql).') AND i_file IN ('.implode(',', $geds).')';
+ $sql="SELECT DISTINCT i_id AS xref, i_file AS gedcom_id, i_gedcom AS gedcom, n_full FROM `##individuals` JOIN `##name` ON i_id=n_id AND i_file=n_file WHERE (".implode(" {$match} ", $querysql).') AND i_file IN ('.implode(',', $geds).')';
// Group results by gedcom, to minimise switching between privacy files
$sql.=' ORDER BY gedcom_id';
@@ -247,14 +247,19 @@ function search_indis_names($query, $geds, $match) {
$GED_ID=$row->gedcom_id;
}
$indi=WT_Individual::getInstance($row->xref, $row->gedcom_id, $row->gedcom);
+ // The individual may have private names - and the DB search may have found it.
if ($indi->canShowName()) {
- $indi->setPrimaryName($row->n_num);
- // We need to clone $indi, as we may have multiple references to the
- // same person in this list, and the "primary name" would otherwise
- // be shared amongst all of them. This has some performance/memory
- // implications, and there is probably a better way. This, however,
- // is clean, easy and works.
- $list[]=clone $indi;
+ foreach ($indi->getAllNames() as $num => $name) {
+ if ($name['fullNN'] == $row->n_full) {
+ $indi->setPrimaryName($num);
+ // We need to clone $indi, as we may have multiple references to the
+ // same person in this list, and the "primary name" would otherwise
+ // be shared amongst all of them.
+ $list[]=clone $indi;
+ // Only need to match an individual on one name
+ break;
+ }
+ }
}
}
// Switch privacy file if necessary