Aleksander Machniak
2012-08-14 c965c8abe1aa55a70844e2c95de9bb8d8293e9eb
program/include/rcube_utils.php
@@ -1,4 +1,4 @@
<?php
<?php
/*
 +-----------------------------------------------------------------------+
@@ -18,9 +18,6 @@
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
 $Id$
*/
@@ -50,7 +47,7 @@
        }
        $cookie = session_get_cookie_params();
        $secure = self::https_check();
        $secure = $cookie['secure'] || self::https_check();
        setcookie($name, $value, $exp, $cookie['path'], $cookie['domain'], $secure, true);
    }
@@ -619,8 +616,10 @@
    {
        // %n - host
        $n = preg_replace('/:\d+$/', '', $_SERVER['SERVER_NAME']);
        // %d - domain name without first part, e.g. %n=mail.domain.tld, %d=domain.tld
        $d = preg_replace('/^[^\.]+\./', '', $n);
        // %t - host name without first part, e.g. %n=mail.domain.tld, %t=domain.tld
   $t = preg_replace('/^[^\.]+\./', '', $n);
   // %d - domain name without first part
        $d = preg_replace('/^[^\.]+\./', '', $_SERVER['HTTP_HOST']);
        // %h - IMAP host
        $h = $_SESSION['storage_host'] ? $_SESSION['storage_host'] : $host;
        // %z - IMAP domain without first part, e.g. %h=imap.domain.tld, %z=domain.tld
@@ -635,7 +634,7 @@
            }
        }
        $name = str_replace(array('%n', '%d', '%h', '%z', '%s'), array($n, $d, $h, $z, $s[2]), $name);
        $name = str_replace(array('%n', '%t', '%d', '%h', '%z', '%s'), array($n, $t, $d, $h, $z, $s[2]), $name);
        return $name;
    }
@@ -790,4 +789,45 @@
        return $at ? $user . '@' . $domain : $domain;
    }
    /**
     * Split the given string into word tokens
     *
     * @param string Input to tokenize
     * @return array List of tokens
     */
    public static function tokenize_string($str)
    {
        return explode(" ", preg_replace(
            array('/[\s;\/+-]+/i', '/(\d)[-.\s]+(\d)/', '/\s\w{1,3}\s/u'),
            array(' ', '\\1\\2', ' '),
            $str));
    }
    /**
     * Normalize the given string for fulltext search.
     * Currently only optimized for Latin-1 characters; to be extended
     *
     * @param string  Input string (UTF-8)
     * @param boolean True to return list of words as array
     * @return mixed  Normalized string or a list of normalized tokens
     */
    public static function normalize_string($str, $as_array = false)
    {
        // split by words
        $arr = self::tokenize_string($str);
        foreach ($arr as $i => $part) {
            if (utf8_encode(utf8_decode($part)) == $part) {  // is latin-1 ?
                $arr[$i] = utf8_encode(strtr(strtolower(strtr(utf8_decode($part),
                    'ÇçäâàåéêëèïîìÅÉöôòüûùÿøØáíóúñÑÁÂÀãÃÊËÈÍÎÏÓÔõÕÚÛÙýÝ',
                    'ccaaaaeeeeiiiaeooouuuyooaiounnaaaaaeeeiiioooouuuyy')),
                    array('ß' => 'ss', 'ae' => 'a', 'oe' => 'o', 'ue' => 'u')));
            }
            else
                $arr[$i] = mb_strtolower($part);
        }
        return $as_array ? $arr : join(" ", $arr);
    }
}