/**
  * updates an attender status of a event
  * 
  * @param  Calendar_Model_Event    $_event
  * @param  Calendar_Model_Attender $_attender
  * @param  string                  $_authKey
  * @return Calendar_Model_Attender updated attender
  */
 public function attenderStatusUpdate(Calendar_Model_Event $_event, Calendar_Model_Attender $_attender, $_authKey)
 {
     try {
         $event = $this->get($_event->getId());
         if (!$event->attendee) {
             throw new Tinebase_Exception_NotFound('Could not find any attendee of event.');
         }
         if (($currentAttender = Calendar_Model_Attender::getAttendee($event->attendee, $_attender)) == null) {
             throw new Tinebase_Exception_NotFound('Could not find attender in event.');
         }
         $updatedAttender = clone $currentAttender;
         if ($currentAttender->status_authkey !== $_authKey) {
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " no permissions to update status for {$currentAttender->user_type} {$currentAttender->user_id}");
             }
             return $updatedAttender;
         }
         Calendar_Controller_Alarm::enforceACL($_event, $event);
         $currentAttenderDisplayContainerId = $currentAttender->displaycontainer_id instanceof Tinebase_Model_Container ? $currentAttender->displaycontainer_id->getId() : $currentAttender->displaycontainer_id;
         $attenderDisplayContainerId = $_attender->displaycontainer_id instanceof Tinebase_Model_Container ? $_attender->displaycontainer_id->getId() : $_attender->displaycontainer_id;
         // check if something what can be set as user has changed
         if ($currentAttender->status == $_attender->status && $currentAttenderDisplayContainerId == $attenderDisplayContainerId && $currentAttender->transp == $_attender->transp && !Calendar_Controller_Alarm::hasUpdates($_event, $event)) {
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->DEBUG(__METHOD__ . '::' . __LINE__ . "no status change -> do nothing");
             }
             return $updatedAttender;
         }
         $updatedAttender->status = $_attender->status;
         $updatedAttender->displaycontainer_id = isset($_attender->displaycontainer_id) ? $_attender->displaycontainer_id : $updatedAttender->displaycontainer_id;
         $updatedAttender->transp = isset($_attender->transp) ? $_attender->transp : Calendar_Model_Event::TRANSP_OPAQUE;
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " update attender status to {$_attender->status} for {$currentAttender->user_type} {$currentAttender->user_id}");
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' set alarm_ack_time / alarm_snooze_time: ' . $updatedAttender->alarm_ack_time . ' / ' . $updatedAttender->alarm_snooze_time);
         }
         $transactionId = Tinebase_TransactionManager::getInstance()->startTransaction(Tinebase_Core::getDb());
         $updatedAttender = $this->_backend->updateAttendee($updatedAttender);
         if ($_event->alarms instanceof Tinebase_Record_RecordSet) {
             foreach ($_event->alarms as $alarm) {
                 $this->_inspectAlarmSet($event, $alarm);
             }
             Tinebase_Alarm::getInstance()->setAlarmsOfRecord($_event);
         }
         $this->_increaseDisplayContainerContentSequence($updatedAttender, $event);
         if ($currentAttender->status != $updatedAttender->status) {
             $this->_touch($event, TRUE);
         }
         Tinebase_TransactionManager::getInstance()->commitTransaction($transactionId);
     } catch (Exception $e) {
         Tinebase_TransactionManager::getInstance()->rollBack();
         throw $e;
     }
     // send notifications
     if ($currentAttender->status != $updatedAttender->status && $this->_sendNotifications && $_event->mute != 1) {
         $updatedEvent = $this->get($event->getId());
         $this->doSendNotifications($updatedEvent, Tinebase_Core::getUser(), 'changed', $event);
     }
     return $updatedAttender;
 }