roundcubemail/program/lib/Roundcube/rcube_addressbook.php
public static function compose_search_name($contact, $email = null, $name = null, $templ = null)
    {
        static $template;

        if (empty($templ) && !isset($template)) {  // cache this
            $template = rcube::get_instance()->config->get('contact_search_name');
            if (empty($template)) {
                $template = '{name} <{email}>';
            }
        }

        $result = $templ ?: $template;

        if (preg_match_all('/\{[a-z]+\}/', $result, $matches)) {
            foreach ($matches[0] as $key) {
                $key   = trim($key, '{}');
                $value = '';

                switch ($key) {
                case 'name':
                    $value = $name ?: self::compose_list_name($contact);

                    // If name(s) are undefined compose_list_name() may return an email address
                    // here we prevent from returning the same name and email
                    if ($name === $email && strpos($result, '{email}') !== false) {
                        $value = '';
                    }

                    break;

                case 'email':
                    $value = $email;
                    break;
                }

                if (empty($value)) {
                    $value = strpos($key, ':') ? $contact[$key] : self::get_col_values($key, $contact, true);
                    if (is_array($value)) {
                        $value = $value[0];
                    }
                }

                $result = str_replace('{' . $key . '}', $value, $result);
            }
        }

        $result = preg_replace('/\s+/u', ' ', $result);
        $result = preg_replace('/\s*(<>|\(\)|\[\])/u', '', $result);
        $result = trim($result, '/ ');

        return $result;
    }
public static function compose_search_name($contact, $email = null, $name = null, $templ = null)
    {
        static $template;

        if (empty($templ) && !isset($template)) {  // cache this
            $template = rcube::get_instance()->config->get('contact_search_name');
            if (empty($template)) {
                $template = '{name} <{email}>';
            }
        }

        $result = $templ ?: $template;

        if (preg_match_all('/\{[a-z]+\}/', $result, $matches)) {
            foreach ($matches[0] as $key) {
                $key   = trim($key, '{}');
                $value = '';

                switch ($key) {
                case 'name':
                    $value = $name ?: self::compose_list_name($contact);

                    // If name(s) are undefined compose_list_name() may return an email address
                    // here we prevent from returning the same name and email
                    if ($name === $email && strpos($result, '{email}') !== false) {
                        $value = '';
                    }

                    break;

                case 'email':
                    $value = $email;
                    break;
                }

                if (empty($value)) {
                    $value = strpos($key, ':') ? $contact[$key] : self::get_col_values($key, $contact, true);
                    if (is_array($value)) {
                        $value = $value[0];
                    }
                }

                $result = str_replace('{' . $key . '}', $value, $result);
            }
        }

        $result = preg_replace('/\s+/u', ' ', $result);
        $result = preg_replace('/\s*(<>|\(\)|\[\])/u', '', $result);
        $result = trim($result, '/ ');

        return $result;
    }
public static function compose_search_name ( $ contact , $ email = null , $ name = null , $ templ = null ) { static $ template ; if ( empty ( $ templ ) && ! isset ( $ template ) ) { // cache this $ template = rcube :: get_instance ( ) -> config -> get ( 'contact_search_name' ) ; if ( empty ( $ template ) ) { $ template = '{name} <{email}>' ; } } $ result = $ templ ? : $ template ; if ( preg_match_all ( '/\{[a-z]+\}/' , $ result , $ matches ) ) { foreach ( $ matches [ 0 ] as $ key ) { $ key = trim ( $ key , '{}' ) ; $ value = '' ; switch ( $ key ) { case 'name' : $ value = $ name ? : self :: compose_list_name ( $ contact ) ; // If name(s) are undefined compose_list_name() may return an email address // here we prevent from returning the same name and email if ( $ name === $ email && strpos ( $ result , '{email}' ) !== false ) { $ value = '' ; } break ; case 'email' : $ value = $ email ; break ; } if ( empty ( $ value ) ) { $ value = strpos ( $ key , ':' ) ? $ contact [ $ key ] : self :: get_col_values ( $ key , $ contact , true ) ; if ( is_array ( $ value ) ) { $ value = $ value [ 0 ] ; } } $ result = str_replace ( '{' . $ key . '}' , $ value , $ result ) ; } } $ result = preg_replace ( '/\s+/u' , ' ' , $ result ) ; $ result = preg_replace ( '/\s*(<>|\(\)|\[\])/u' , '' , $ result ) ; $ result = trim ( $ result , '/ ' ) ; return $ result ; }
Build contact display name for autocomplete listing

@param array  $contact Hash array with contact data as key-value pairs
@param string $email   Optional email address
@param string $name    Optional name (self::compose_list_name() result)
@param string $templ   Optional template to use (defaults to the 'contact_search_name' config option)

@return string Display name
Build contact display name for autocomplete listing