/**
  * Remove a single event from the database and from caldav server.
  *
  * @param array Hash array with event properties
  * @param boolean Remove record irreversible
  *
  * @see calendar_driver::remove_event()
  */
 public function remove_event($obj, $force = true)
 {
     $obj = $this->_get_id($obj);
     $event_id = (int) $obj['id'];
     $cal_id = (int) $obj['calendar'];
     $savemode = $obj['_savemode'] ? $obj['_savemode'] : 'all';
     $event = parent::get_master($obj);
     if ($event['recurrence_id']) {
         $event_id = (int) $event['recurrence_id'];
         $event['id'] = $event_id;
         unset($event['recurrence_id']);
     }
     if (!($props = $this->_get_caldav_props($event_id, self::OBJ_TYPE_VEVENT))) {
         $savemode = 'current';
         $event = parent::get_event($event['uid']);
         $props = $this->_get_caldav_props($event['id'], self::OBJ_TYPE_VEVENT);
     }
     if (parent::remove_event($obj, $force) && is_array($props)) {
         $sync_client = $this->sync_clients[$cal_id];
         switch ($savemode) {
             case 'current':
             case 'future':
                 $event = parent::get_master($event);
                 $event = $this->_save_preprocess($event);
                 $success = $sync_client->update_event($event, $props);
                 break;
             default:
                 // all is default
                 $success = $sync_client->remove_event($props);
                 break;
         }
         if ($success === true) {
             self::debug_log("Successfully removed event \"{$event_id}\".");
         } else {
             self::debug_log("Unkown error while removing caldav event \"{$event_id}\", force sync calendar \"{$cal_id}\"!");
         }
         // Trigger calendar sync to update ctags and etags.
         $this->_sync_calendar($cal_id);
         return $success;
     }
     return false;
     // Unkown error.
 }