/**
  * updates an attender
  * 
  * @param Calendar_Model_Attender  $attender
  * @param Calendar_Model_Attender  $currentAttender
  * @param Calendar_Model_Event     $event
  * @param bool                     $isRescheduled event got rescheduled reset all attendee status
  * @param Tinebase_Model_Container $calendar
  */
 protected function _updateAttender($attender, $currentAttender, $event, $isRescheduled, $calendar = NULL)
 {
     $userAccountId = $currentAttender->getUserAccountId();
     // update display calendar if attender has/is a useraccount
     if ($userAccountId) {
         if ($calendar->type == Tinebase_Model_Container::TYPE_PERSONAL && Tinebase_Container::getInstance()->hasGrant($userAccountId, $calendar, Tinebase_Model_Grants::GRANT_ADMIN)) {
             // if attender has admin grant to personal physical container, this phys. cal also gets displ. cal
             $attender->displaycontainer_id = $calendar->getId();
         } else {
             if ($userAccountId == Tinebase_Core::getUser()->getId() && Tinebase_Container::getInstance()->hasGrant($userAccountId, $attender->displaycontainer_id, Tinebase_Model_Grants::GRANT_ADMIN)) {
                 // allow user to set his own displ. cal
                 $attender->displaycontainer_id = $attender->displaycontainer_id;
             } else {
                 $attender->displaycontainer_id = $currentAttender->displaycontainer_id;
             }
         }
     }
     // reset status if user has no right and authkey is wrong
     if ($attender->displaycontainer_id) {
         if (!Tinebase_Core::getUser()->hasGrant($attender->displaycontainer_id, Tinebase_Model_Grants::GRANT_EDIT) && $attender->status_authkey != $currentAttender->status_authkey) {
             if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) {
                 Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' Wrong authkey, resetting status (' . $attender->status . ' -> ' . $currentAttender->status . ')');
             }
             $attender->status = $currentAttender->status;
         }
     }
     // reset all status but calUser on reschedule except resources (Resources might have a configured default value)
     if ($isRescheduled && !$attender->isSame($this->getCalendarUser())) {
         if ($attender->user_type === Calendar_Model_Attender::USERTYPE_RESOURCE) {
             //If resource has a default status reset to this
             $resource = Calendar_Controller_Resource::getInstance()->get($attender->user_id);
             $attender->status = isset($resource->status) ? $resource->status : Calendar_Model_Attender::STATUS_NEEDSACTION;
         } else {
             $attender->status = Calendar_Model_Attender::STATUS_NEEDSACTION;
         }
         $attender->transp = null;
     }
     // preserve old authkey
     $attender->status_authkey = $currentAttender->status_authkey;
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . " Updating attender: " . print_r($attender->toArray(), TRUE));
     }
     Tinebase_Timemachine_ModificationLog::getInstance()->setRecordMetaData($attender, 'update', $currentAttender);
     Tinebase_Timemachine_ModificationLog::getInstance()->writeModLog($attender, $currentAttender, get_class($attender), $this->_getBackendType(), $attender->getId());
     $this->_backend->updateAttendee($attender);
     if ($attender->displaycontainer_id !== $currentAttender->displaycontainer_id) {
         $this->_increaseDisplayContainerContentSequence($currentAttender, $event, Tinebase_Model_ContainerContent::ACTION_DELETE);
         $this->_increaseDisplayContainerContentSequence($attender, $event, Tinebase_Model_ContainerContent::ACTION_CREATE);
     } else {
         $this->_increaseDisplayContainerContentSequence($attender, $event);
     }
 }