From 233a2a96039ad2d93284c60da2efddfa77cfd770 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Jacob?= Date: Mon, 21 Nov 2011 11:52:01 +0100 Subject: [PATCH] Properly generates sort_name. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Jacob --- include/name.func.inc.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/include/name.func.inc.php b/include/name.func.inc.php index 7dd3687..39b2bfe 100644 --- a/include/name.func.inc.php +++ b/include/name.func.inc.php @@ -71,7 +71,7 @@ function build_display_names(array $public_names, array $private_names, $isFemal $display_names['private_name'] = $display_names['public_name'] . $private_last_name_end; $display_names['directory_name'] = build_directory_name($firstname, $full_last_name); $display_names['short_name'] = build_full_name($firstname, $short_last_name); - $display_names['sort_name'] = $short_last_name . ' ' . $firstname; + $display_names['sort_name'] = build_sort_name($firstname, $short_last_name); return $display_names; } @@ -143,6 +143,22 @@ function build_full_name($firstname, $lastname) return $firstname . ' ' . $lastname; } +// Returns the name on which the sort is performed, according to French +// typographic rules. +function build_sort_name($firstname, $lastname) +{ + // Remove uncapitalized particles. + $particles = "/^(d'|(" . implode($particles, '|') . ') )/'; + $name = preg_replace($particles, '', $lastname); + // Mac must also be uniformized. + $lastname = preg_replace("/^(Mac|Mc)(| )/", 'Mac', $name); + + if ($firstname == '') { + return $lastname; + } + return $lastname . ' ' . $firstname; +} + /** Splits a name into tokens, as used in search_name. * Used for search_name rebuilding and for queries. */ -- 2.1.4