/** * Delete a message * * @param string $folderid The folder id * @param array $ids The message ids to delete * * @return array An array of succesfully deleted messages (currently * only guarenteed for email messages). */ public function deleteMessage($folderid, array $ids) { $this->_logger->info(sprintf("[%s] Horde_Core_ActiveSync_Driver::deleteMessage() %s: %s", $this->_pid, $folderid, print_r($ids, true))); $parts = $this->_parseFolderId($folderid); if (is_array($parts)) { $class = $parts[self::FOLDER_PART_CLASS]; $folder_id = $parts[self::FOLDER_PART_ID]; } else { $class = $parts; $folder_id = null; } ob_start(); $results = $ids; switch ($class) { case Horde_ActiveSync::CLASS_CALENDAR: try { $this->_connector->calendar_delete($ids, $folder_id); } catch (Horde_Exception $e) { // Since we don't get back successfully deleted ids and we can // can pass an array of ids to delete, we need to see what ids // were deleted if there was an error. // @todo For Horde 6, the API should return successfully // deleted ids. $this->_logger->err($e->getMessage()); $success = array(); foreach ($ids as $uid) { if ($mod_time = $this->_connector->calendar_getActionTimestamp($uid, 'delete', $folder_id)) { $success[] = $uid; } } $results = $success; } break; case Horde_ActiveSync::CLASS_CONTACTS: try { $this->_connector->contacts_delete($ids); } catch (Horde_Exception $e) { $this->_logger->err($e->getMessage()); // Since we don't get back successfully deleted ids and we can // can pass an array of ids to delete, we need to see what ids // were deleted if there was an error. // @todo For Horde 6, the API should return successfully // deleted ids. $this->_logger->err($e->getMessage()); $success = array(); foreach ($ids as $uid) { if ($mod_time = $this->_connector->contacts_getActionTimestamp($uid, 'delete', $folder_id)) { $success[] = $uid; } } $results = $success; } break; case Horde_ActiveSync::CLASS_TASKS: try { $this->_connector->tasks_delete($ids); } catch (Horde_Exception $e) { $this->_logger->err($e->getMessage()); // Since we don't get back successfully deleted ids and we can // can pass an array of ids to delete, we need to see what ids // were deleted if there was an error. // @todo For Horde 6, the API should return successfully // deleted ids. $this->_logger->err($e->getMessage()); $success = array(); foreach ($ids as $uid) { if ($mod_time = $this->_connector->tasks_getActionTimestamp($uid, 'delete', $folder_id)) { $success[] = $uid; } } $results = $success; } break; case Horde_ActiveSync::CLASS_NOTES: try { $this->_connector->notes_delete($ids); } catch (Horde_Exception $e) { $this->_logger->err($e->getMessage()); // Since we don't get back successfully deleted ids and we can // can pass an array of ids to delete, we need to see what ids // were deleted if there was an error. // @todo For Horde 6, the API should return successfully // deleted ids. $success = array(); foreach ($ids as $uid) { if ($mod_time = $this->_connector->tasks_getActionTimestamp($uid, 'delete', $folder_id)) { $success[] = $uid; } } $results = $success; } break; default: // Must be mail folder try { $results = $this->_imap->deleteMessages($ids, $folderid); } catch (Horde_ActiveSync_Exception $e) { $this->_logger->err($e->getMessage()); } } $this->_endBuffer(); return $results; }