Turba::guessLastname PHP Method

guessLastname() public static method

Returns a best guess at the lastname in a string.
public static guessLastname ( string $name ) : string
$name string String contain the full name.
return string String containing the last name.
    public static function guessLastname($name)
    {
        $name = trim(preg_replace('|\\s|', ' ', $name));
        if (!empty($name)) {
            /* Assume that last names are always before any commas. */
            if (is_int(strpos($name, ','))) {
                $name = Horde_String::substr($name, 0, strpos($name, ','));
            }
            /* Take out anything in parentheses. */
            $name = trim(preg_replace('|\\(.*\\)|', '', $name));
            $namelist = explode(' ', $name);
            $name = $namelist[$nameindex = count($namelist) - 1];
            while (!empty($name) && ($nlength = Horde_String::length($name)) < 5 && strspn($name[$nlength - 1], '.:-') && !empty($namelist[$nameindex - 1])) {
                $name = $namelist[--$nameindex];
            }
        }
        return strlen($name) ? $name : null;
    }

Usage Example

Example #1
0
 /**
  * Filters/Sorts the list based on the specified sort routine.
  * The default sort order is by last name, ascending.
  *
  * @param array $order  Array of hashes describing sort fields.  Each
  *                      hash has the following fields:
  * <pre>
  * ascending - (boolean) Sort direction.
  * field - (string) Sort field.
  * </pre>
  */
 public function sort($order = null)
 {
     global $attributes, $prefs;
     if (!$order) {
         $order = array(array('ascending' => true, 'field' => 'lastname'));
     }
     $need_lastname = $need_firstname = false;
     $name_format = $prefs->getValue('name_format');
     $name_sort = $prefs->getValue('name_sort');
     foreach ($order as &$field) {
         if ($field['field'] == 'name') {
             if ($name_sort == 'last_first') {
                 $field['field'] = 'lastname';
             } elseif ($name_sort == 'first_last') {
                 $field['field'] = 'firstname';
             }
         }
         if ($field['field'] == 'lastname') {
             $field['field'] = '__lastname';
             $need_lastname = true;
             break;
         }
         if ($field['field'] == 'firstname') {
             $field['field'] = '__firstname';
             $need_firstname = true;
             break;
         }
     }
     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($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;
     }
     // Set the comparison type based on the type of attribute we're
     // sorting by.
     foreach ($order as &$val) {
         $sm = 'text';
         if (isset($attributes[$val['field']])) {
             $f = $attributes[$val['field']];
             if (!empty($f['cmptype'])) {
                 $sm = $f['cmptype'];
             } elseif (in_array($f['type'], array('int', 'intlist', 'number'))) {
                 $sm = 'int';
             }
         }
         $val['sortmethod'] = $sm;
     }
     $this->_usortCriteria = $order;
     /* Exceptions thrown inside a sort incorrectly cause an error. See
      * Bug #9202. */
     @usort($sorted_objects, array($this, '_cmp'));
     $this->objects = $sorted_objects;
 }