function update($data) { $uid = substr($data['uid'], strlen('event-')); $oldCalName = $data['oldCalName']; $calName = $data['calName']; $eventStart = $data['eventStart']; $eventEnd = $data['eventEnd']; $eventText = $data['eventText']; if ($calName == null) { throw new Exception("no calendar name"); } if ($uid == '' && ($eventStart == null || $eventEnd == null)) { throw new Exception("no start/end date"); } if ($uid == '' && $eventText == '') { throw new Exception("haven't created event because text is empty"); } if ($oldCalName != null) { // we have an old calendar, so move event from that cal to $calName // possibly updating event summary as well $this->moveEvent($uid, $eventText, $oldCalName, $calName); } else { if ($uid == '') { // No UID so create a new event $event = new vevent(); $event->setProperty('summary', $eventText); $event->setProperty('dtstart', $eventStart, array('VALUE' => 'DATE')); $event->setProperty('dtend', $eventEnd, array('VALUE' => 'DATE')); $uid = $event->getProperty('uid'); $cal = new Calendar($calName); $cal->setComponent($event); $cal->save(); return $uid; } else { if ($eventText === '') { // Event text is now empty, so delete event $cal = new Calendar($calName); $cal->deleteComponent($uid); $cal->save(); } else { // Update the event $cal = new Calendar($calName); $event = $cal->getComponent($uid); if ($eventText != null) { $event->setProperty('summary', $eventText); } if ($eventStart != null) { $event->setProperty('dtstart', $eventStart, array('VALUE' => 'DATE')); } if ($eventEnd != null) { $event->setProperty('dtend', $eventEnd, array('VALUE' => 'DATE')); } $cal->setComponent($event, $uid); $cal->save(); } } } }
/** * Returns modified ical uid for google recurring edited events. * * @param vevent $e Vevent object. * * @return string ICAL uid. */ protected function _get_ical_uid($e) { $ical_uid = $e->getProperty('uid'); $recurrence_id = $e->getProperty('recurrence-id'); if (false !== $recurrence_id) { $ical_uid = implode('', array_values($recurrence_id)) . '-' . $ical_uid; } return $ical_uid; }