|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|