/** * saves all attendee of given event * * NOTE: This function is executed in a create/update context. As such the user * has edit/update the event and can do anything besides status settings of attendee * * @todo add support for resources * * @param Calendar_Model_Event $_event * @param Calendar_Model_Event $_currentEvent * @param bool $_isRescheduled event got rescheduled reset all attendee status */ protected function _saveAttendee($_event, $_currentEvent = NULL, $_isRescheduled = FALSE) { if (!$_event->attendee instanceof Tinebase_Record_RecordSet) { $_event->attendee = new Tinebase_Record_RecordSet('Calendar_Model_Attender'); } Calendar_Model_Attender::resolveEmailOnlyAttendee($_event); $_event->attendee->cal_event_id = $_event->getId(); Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . " About to save attendee for event {$_event->id} "); $currentAttendee = $_currentEvent->attendee; $diff = $currentAttendee->getMigration($_event->attendee->getArrayOfIds()); $calendar = Tinebase_Container::getInstance()->getContainerById($_event->container_id); // delete attendee $this->_backend->deleteAttendee($diff['toDeleteIds']); foreach ($diff['toDeleteIds'] as $deleteAttenderId) { $idx = $currentAttendee->getIndexById($deleteAttenderId); if ($idx !== FALSE) { $currentAttenderToDelete = $currentAttendee[$idx]; $this->_increaseDisplayContainerContentSequence($currentAttenderToDelete, $_event, Tinebase_Model_ContainerContent::ACTION_DELETE); } } // create/update attendee foreach ($_event->attendee as $attender) { $attenderId = $attender->getId(); $idx = $attenderId ? $currentAttendee->getIndexById($attenderId) : FALSE; if ($idx !== FALSE) { $currentAttender = $currentAttendee[$idx]; $this->_updateAttender($attender, $currentAttender, $_event, $_isRescheduled, $calendar); } else { $this->_createAttender($attender, $_event, FALSE, $calendar); } } }