function amr_format_attendees($attendees) { /* receive array of hopefully attendess[] CN and MAILTO, and possibly other */ // in plain ics only individuals and accepted attendees listed and by plain name only // maybe show some stats ? $text = ''; $status = array(); //'ACCEPTED','TENTATIVE','DELEGATED','NEEDS_ACTION','DECLINED','COMPLETED','IN-PROCESS' if (is_array($attendees)) { // How should they be sorted ? // CN alpha? or email alpha or by part stat? or role ? amr_sort_by_two_cols('ROLE', 'CN', $attendees); // sort by participaton status, may include all foreach ($attendees as $i => $attendee) { if ($attendee['PARTSTAT'] == 'ACCEPTED') { $list[] = amr_format_attendee($attendee); } } if (!empty($list)) { $text .= '<ul><li>' . implode('</li><li> ', $list) . '</li></ul>'; } } return $text; }
function amr_check_for_multiday_events(&$events) { //for each event passed, chcek whiether it is a multi day, and if so add dummy days global $amr_globaltz; if (!empty($events)) { foreach ($events as $m => $event) { if (empty($event['EventDate'])) { if (ICAL_EVENTS_DEBUG) { echo 'Unexpected empty event date for event '; print_r($event, true); } } else { date_timezone_set($event['EventDate'], $amr_globaltz); // may do this earlier (after recurrence though), no harm in twice $days = amr_event_is_multiday($event); if (isset($_GET['debugmulti'])) { echo '<br />Doing ' . $event['id'] . ' <b>multiday = ' . $days . ' </b>'; } if ($days > 1) { $day = 1; if (empty($events[$m]['Classes'])) { $events[$m]['Classes'] = ''; } $events[$m]['Classes'] .= ' firstday '; // already have first day $events[$m]['dummyYMD'] = $event['EventDate']->format('Ymd'); //numerical so do not need amr_date_format $events[$m]['MultiDay'] = $day; //$tempdate = amr_newDateTime(); // create new obect so we do not update the same object while ($day < $days) { // must not be <= because we are plus one anyway - and original is first anyway if (isset($_GET['debugmulti'])) { echo '<br /> Do day = ' . $day; } $tempdate = new Datetime(); //if cloning dont need tz $tempdate = clone $event['EventDate']; // copy the current event date date_modify($tempdate, '+' . $day . ' days'); // adjust days to currenmt midddle date if necessary // must do like above in case we go over a month $day = $day + 1; $dummy[$m][$day] = $events[$m]; // copy event data over , but use dumy so we do not reprocess the additions $dummy[$m][$day]['dummyYMD'] = $tempdate->format('Ymd'); // now set the date for this dummy event //numerical so do not need amr_date_format $dummy[$m][$day]['MultiDay'] = $day; // flag it as a multi day // set the classes so we can style multi days if (isset($_GET['debugmulti'])) { echo ' dummyymd= ' . $dummy[$m][$day]['dummyYMD']; } if ($day >= $days) { $dummy[$m][$day]['Classes'] .= ' lastday '; $dummy[$m][$day]['Classes'] = str_replace('firstday', '', $dummy[$m][$day]['Classes']); } else { $dummy[$m][$day]['Classes'] = str_replace('firstday', '', $dummy[$m][$day]['Classes']); $dummy[$m][$day]['Classes'] .= ' middleday '; } } } else { $events[$m]['dummyYMD'] = $event['EventDate']->format('Ymd'); //numerical so do not need amr_date_format $events[$m]['MultiDay'] = '0'; // to force non multidays to bottom } $events[$m]['dummytime'] = $event['EventDate']->format('His'); //for sorting according to time } } //once we have processed all the events, THEN we can add the dummies in, so we do not reprocess them! if (!empty($dummy)) { foreach ($dummy as $m => $dummydays) { foreach ($dummydays as $k => $event) { $events[] = $event; } } } //$events = amr_sort_by_three_cols ('dummyYMD', 'MultiDay', 'dummytime', $events); $events = amr_sort_by_two_cols('dummyYMD', 'MultiDay', $events); if (isset($_GET['debugmulti'])) { foreach ($events as $i => $e) { echo '<br />' . $e['id'] . ' ' . $e['EventDate']->format('Ymd') . ' ' . $e['dummyYMD']; } } } return $events; }