From 8d3a2d00075c016f7e760db2fc1921c901a52b2e Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Thu, 13 Mar 2014 10:20:17 +0000 Subject: [PATCH] * CalDAV/Calendar: store and therefore keep external organizer if he has no common name (just email) and also store its common name --- calendar/inc/class.calendar_bo.inc.php | 4 ++-- calendar/inc/class.calendar_ical.inc.php | 15 +++++++++++---- calendar/inc/class.calendar_uiforms.inc.php | 4 ++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/calendar/inc/class.calendar_bo.inc.php b/calendar/inc/class.calendar_bo.inc.php index d87af1d935..5a59416d46 100644 --- a/calendar/inc/class.calendar_bo.inc.php +++ b/calendar/inc/class.calendar_bo.inc.php @@ -270,7 +270,7 @@ class calendar_bo { $email = $id; $name = ''; - if (preg_match('/^(.*) *<([a-z0-9_.@-]{8,})>$/i',$email,$matches)) + if (preg_match('/^(.*) *<([a-z0-9_.@-]{8,})>$/iU',$email,$matches)) { $name = $matches[1]; $email = $matches[2]; @@ -1487,7 +1487,7 @@ class calendar_bo $id2email[$id] = $GLOBALS['egw']->accounts->id2name($id,'account_email'); } } - return $id2lid[$id].($append_email && $id2email[$id] ? ' <'.$id2email[$id].'>' : ''); + return $id2lid[$id].(($append_email || $id[0] == 'e') && $id2email[$id] ? ' <'.$id2email[$id].'>' : ''); } /** diff --git a/calendar/inc/class.calendar_ical.inc.php b/calendar/inc/class.calendar_ical.inc.php index d79603261e..9eb7ef22e9 100644 --- a/calendar/inc/class.calendar_ical.inc.php +++ b/calendar/inc/class.calendar_ical.inc.php @@ -533,7 +533,7 @@ class calendar_ical extends calendar_boupdate break; case 'ORGANIZER': - if (!$organizerCN) + if (!$organizerURL) { $organizerCN = '"' . trim($GLOBALS['egw']->accounts->id2name($event['owner'],'account_firstname') . ' ' . $GLOBALS['egw']->accounts->id2name($event['owner'],'account_lastname')) . '"'; @@ -2691,8 +2691,15 @@ class calendar_ical extends calendar_boupdate { $role = $attributes['params']['ROLE']; } - // parse email and cn from attendee - if (preg_match('/MAILTO:([@.a-z0-9_-]+)|MAILTO:"?([.a-z0-9_ -]*)"?[ ]*<([@.a-z0-9_-]*)>/i', + // CN explicit given --> use it + if (strtoupper(substr($attributes['value'], 0, 7)) == 'MAILTO:' && + !empty($attributes['params']['CN'])) + { + $email = substr($attributes['value'], 7); + $cn = $attributes['params']['CN']; + } + // try parsing email and cn from attendee + elseif (preg_match('/MAILTO:([@.a-z0-9_-]+)|MAILTO:"?([.a-z0-9_ -]*)"?[ ]*<([@.a-z0-9_-]*)>/i', $attributes['value'],$matches)) { $email = $matches[1] ? $matches[1] : $matches[3]; @@ -2731,7 +2738,7 @@ class calendar_ical extends calendar_boupdate $uid = $this->user; } // check principal url from CalDAV here after X-EGROUPWARE-UID and to get optional X-EGROUPWARE-QUANTITY - if (!$uid) $uid = groupdav_principals::url2uid($attributes['value']); + if (!$uid) $uid = groupdav_principals::url2uid($attributes['value'], null, $cn); // try to find an email address if (!$uid && $email && ($uid = $GLOBALS['egw']->accounts->name2id($email, 'account_email'))) diff --git a/calendar/inc/class.calendar_uiforms.inc.php b/calendar/inc/class.calendar_uiforms.inc.php index 2644e0448b..7887f0d606 100644 --- a/calendar/inc/class.calendar_uiforms.inc.php +++ b/calendar/inc/class.calendar_uiforms.inc.php @@ -1078,6 +1078,10 @@ class calendar_uiforms extends calendar_ui } elseif (($info = $this->bo->resource_info($uid))) { + if ($uid[0] == 'e' && $info['name'] && $info['name'] != $info['email']) + { + return $info['name'].' <'.$info['email'].'>'; + } return $info['name'] ? $info['name'] : $info['email']; } return '#'.$uid;