Aleksander Machniak
2013-10-21 99d59620e143ff7ff6424eded4c290319cf8b8db
Join many preg_replace() calls into one
1 files modified
27 ■■■■■ changed files
program/lib/Roundcube/rcube_vcard.php 27 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_vcard.php
@@ -518,29 +518,34 @@
     */
    public static function cleanup($vcard)
    {
        // Convert special types (like Skype) to normal type='skype' classes with this simple regex ;)
        $vcard = preg_replace(
            '/item(\d+)\.(TEL|EMAIL|URL)([^:]*?):(.*?)item\1.X-ABLabel:(?:_\$!<)?([\w-() ]*)(?:>!\$_)?./s',
            '\2;type=\5\3:\4',
            $vcard);
        // convert Apple X-ABRELATEDNAMES into X-* fields for better compatibility
        $vcard = preg_replace_callback(
            '/item(\d+)\.(X-ABRELATEDNAMES)([^:]*?):(.*?)item\1.X-ABLabel:(?:_\$!<)?([\w-() ]*)(?:>!\$_)?./s',
            array('self', 'x_abrelatednames_callback'),
            $vcard);
        // Remove cruft like item1.X-AB*, item1.ADR instead of ADR, and empty lines
        $vcard = preg_replace(array('/^item\d*\.X-AB.*$/m', '/^item\d*\./m', "/\n+/"), array('', '', "\n"), $vcard);
        // Cleanup
        $vcard = preg_replace(array(
                // convert special types (like Skype) to normal type='skype' classes with this simple regex ;)
                '/item(\d+)\.(TEL|EMAIL|URL)([^:]*?):(.*?)item\1.X-ABLabel:(?:_\$!<)?([\w-() ]*)(?:>!\$_)?./s',
                '/^item\d*\.X-AB.*$/m',  // remove cruft like item1.X-AB*
                '/^item\d*\./m',         // remove item1.ADR instead of ADR
                '/\n+/',                 // remove empty lines
                '/^(N:[^;\R]*)$/m',      // if N doesn't have any semicolons, add some
            ),
            array(
                '\2;type=\5\3:\4',
                '',
                '',
                "\n",
                '\1;;;;',
            ), $vcard);
        // convert X-WAB-GENDER to X-GENDER
        if (preg_match('/X-WAB-GENDER:(\d)/', $vcard, $matches)) {
            $value = $matches[1] == '2' ? 'male' : 'female';
            $vcard = preg_replace('/X-WAB-GENDER:\d/', 'X-GENDER:' . $value, $vcard);
        }
        // if N doesn't have any semicolons, add some
        $vcard = preg_replace('/^(N:[^;\R]*)$/m', '\1;;;;', $vcard);
        return $vcard;
    }