diff options
Diffstat (limited to 'program/lib/Roundcube/rcube_vcard.php')
| -rw-r--r-- | program/lib/Roundcube/rcube_vcard.php | 31 | 
1 files changed, 18 insertions, 13 deletions
| diff --git a/program/lib/Roundcube/rcube_vcard.php b/program/lib/Roundcube/rcube_vcard.php index d54dc56ad..5f74ccbd4 100644 --- a/program/lib/Roundcube/rcube_vcard.php +++ b/program/lib/Roundcube/rcube_vcard.php @@ -518,20 +518,28 @@ class rcube_vcard       */      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)) { @@ -539,9 +547,6 @@ class rcube_vcard              $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;      } @@ -612,8 +617,8 @@ class rcube_vcard                  $enc   = null;                  foreach($regs2[1] as $attrid => $attr) { +                    $attr = preg_replace('/[\s\t\n\r\0\x0B]/', '', $attr);                      if ((list($key, $value) = explode('=', $attr)) && $value) { -                        $value = trim($value);                          if ($key == 'ENCODING') {                              $value = strtoupper($value);                              // add next line(s) to value string if QP line end detected @@ -792,7 +797,7 @@ class rcube_vcard                  return $result;              } -            $s = strtr($s, $rep2); +            $s = trim(strtr($s, $rep2));          }          // some implementations (GMail) use non-standard backslash before colon (#1489085) | 
