From aa19cb6558989cd6edb962d27b9d222dce4db9e7 Mon Sep 17 00:00:00 2001 From: Jason Oster Date: Fri, 29 May 2009 16:04:23 +0000 Subject: Attempt to parse attendees/organizers without a Common Name attribute and invalid email address --- functions/ical_parser.php | 36 +++++++++++++++++++++++------------- includes/event.php | 12 ++++++++++-- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/functions/ical_parser.php b/functions/ical_parser.php index d3031d7..b6b2a70 100644 --- a/functions/ical_parser.php +++ b/functions/ical_parser.php @@ -420,16 +420,20 @@ foreach ($cal_filelist as $cal_key=>$filename) { } break; case 'ATTENDEE': - $name = preg_match("/CN=([^;]*)/i", $field, $matches1); - $email = str_replace("mailto:", "", $data); - $rsvp = preg_match("/RSVP=([^;]*)/i", $field, $matches2); - $partstat = preg_match("/PARTSTAT=([^;]*)/i", $field, $matches3); - $role = preg_match("/ROLE=([^;]*)/i", $field, $matches4); + $email = preg_match("/mailto:(.*)/i", $data, $matches1); + $name = preg_match("/CN=([^;]*)/i", $field, $matches2); + $rsvp = preg_match("/RSVP=([^;]*)/i", $field, $matches3); + $partstat = preg_match("/PARTSTAT=([^;]*)/i", $field, $matches4); + $role = preg_match("/ROLE=([^;]*)/i", $field, $matches5); - $name = ($name ? $matches1[1] : $email); - $rsvp = ($rsvp ? $matches2[1] : ''); - $partstat = ($partstat ? $matches3[1] : ''); - $role = ($role ? $matches4[1] : ''); + $email = ($email ? $matches1[1] : ''); + $name = ($name ? $matches2[1] : $email); + $rsvp = ($rsvp ? $matches3[1] : ''); + $partstat = ($partstat ? $matches4[1] : ''); + $role = ($role ? $matches5[1] : ''); + + // Emergency fallback + if (empty($name) && empty($email)) $name = $data; $attendee[] = array ('name' => stripslashes($name), 'email' => stripslashes($email), @@ -439,10 +443,16 @@ foreach ($cal_filelist as $cal_key=>$filename) { ); break; case 'ORGANIZER': - $data = str_replace ("mailto:", "", $data); - $field = preg_match("/CN=([^;]*)/i", $field, $matches); - $field = ($field ? $matches[1] : $data); - $organizer[] = array ('name' => stripslashes($field), 'email' => stripslashes($data)); + $email = preg_match("/mailto:(.*)/i", $data, $matches1); + $name = preg_match("/CN=([^;]*)/i", $field, $matches2); + + $email = ($email ? $matches1[1] : ''); + $name = ($name ? $matches2[1] : $email); + + // Emergency fallback + if (empty($name) && empty($email)) $name = $data; + + $organizer[] = array ('name' => stripslashes($name), 'email' => stripslashes($email)); break; case 'LOCATION': $data = str_replace("\\n", "
", $data); diff --git a/includes/event.php b/includes/event.php index 4112700..8b98c26 100644 --- a/includes/event.php +++ b/includes/event.php @@ -39,7 +39,11 @@ if (isset($organizer) && is_array($organizer)) { $i=0; $organizers = array(); foreach ($organizer as $val) { - $organizers[] .= "{$organizer[$i]["name"]}"; + if (!empty($organizer[$i]["email"])) { + $organizers[] .= "{$organizer[$i]["name"]}"; + } else { + $organizers[] .= $organizer[$i]["name"]; + } $i++; } $organizer = implode(', ',$organizers); @@ -48,7 +52,11 @@ if (isset($attendee) && is_array($attendee)) { $i=0; $attendees = array(); foreach ($attendee as $val) { - $attendees[] .= "{$attendee[$i]["name"]}"; + if (!empty($attendee[$i]["email"])) { + $attendees[] .= "{$attendee[$i]["name"]}"; + } else { + $attendees[] .= $attendee[$i]["name"]; + } $i++; } $attendee = implode(', ',$attendees); -- cgit v1.2.3