From: Jan Schneider Date: Thu, 21 Oct 2010 20:13:30 +0000 (+0200) Subject: [jan] Use name format preference not only for paging, but for sorting too X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=4a6943f8334f97af5667edcdbfc251298db963cf;p=horde.git [jan] Use name format preference not only for paging, but for sorting too (Request #8806). --- diff --git a/turba/docs/CHANGES b/turba/docs/CHANGES index 0062fceb9..7e82bad59 100644 --- a/turba/docs/CHANGES +++ b/turba/docs/CHANGES @@ -15,6 +15,8 @@ v3.0-git v2.3.6-cvs ---------- +[jan] Use name format preference not only for paging, but for sorting too + (Request #8806). [jan] Fix photo corruption when exporting to vCard 3.0 (Bug #9100). diff --git a/turba/lib/List.php b/turba/lib/List.php index 157877bc7..39e35bcbb 100644 --- a/turba/lib/List.php +++ b/turba/lib/List.php @@ -104,11 +104,16 @@ class Turba_List implements Countable ); } - $need_lastname = false; - $last_first = ($GLOBALS['prefs']->getValue('name_format') == 'last_first'); + $need_lastname = $need_firstname = false; + $name_format = $GLOBALS['prefs']->getValue('name_format'); + $name_sort = $GLOBALS['prefs']->getValue('name_sort'); foreach ($order as &$field) { - if ($last_first && ($field['field'] == 'name')) { - $field['field'] = 'lastname'; + if ($field['field'] == 'name') { + if ($name_sort == 'last_first') { + $field['field'] = 'lastname'; + } elseif ($name_sort == 'first_last') { + $field['field'] = 'firstname'; + } } if ($field['field'] == 'lastname') { @@ -116,20 +121,41 @@ class Turba_List implements Countable $need_lastname = true; break; } + if ($field['field'] == 'firstname') { + $field['field'] = '__firstname'; + $need_firstname = true; + break; + } } - if (!$need_lastname) { - $sorted_objects = $this->objects; - } else { + if ($need_firstname || $need_lastname) { $sorted_objects = array(); foreach ($this->objects as $key => $object) { + $name = $object->getValue('name'); + $firstname = $object->getValue('firstname'); $lastname = $object->getValue('lastname'); if (!$lastname) { - $lastname = Turba::guessLastname($object->getValue('name')); + $lastname = Turba::guessLastname($name); + } + if (!$firstname) { + switch ($name_format) { + case 'last_first': + $firstname = preg_replace('/' . preg_quote($lastname, '/') . ',\s*/', '', $name); + break; + case 'first_last': + $firstname = preg_replace('/\s+' . preg_quote($lastname, '/') . '/', '', $name); + break; + default: + $firstname = preg_replace('/\s*' . preg_quote($lastname, '/') . '(,\s*)?/', '', $name); + break; + } } $object->setValue('__lastname', $lastname); + $object->setValue('__firstname', $firstname); $sorted_objects[$key] = $object; } + } else { + $sorted_objects = $this->objects; } $this->_usortCriteria = $order;