/** * Change a folder on the server. * * @param string $old_name The server's existing folder id. * @param string $new_name The new display name. * @param string $parent The folder's parent server id, if needed. * @param string $uid The existing folder uid, if this is an edit. * @since 2.5.0 (@todo Look at this for H6. It's * here now to save an extra DB lookup for data * we already have.) * @param integer $type The EAS Folder type. @since 2.12.0 * * @return Horde_ActiveSync_Message_Folder * @throws Horde_ActiveSync_Exception */ public function changeFolder($old_name, $new_name, $parent, $uid = null, $type = null) { $this->_logger->info(sprintf('[%s] Horde_Core_ActiveSync_Driver::changeFolder(%s, %s, %s, %s, %s)', getmypid(), $old_name, $new_name, $parent, $uid, $type)); // For FOLDERUPDATE requests, the EAS Folder type is not passed by // the client so we need to figure it out. if (empty($type) && !empty($old_name)) { $parts = $this->_parseFolderId($old_name, true); if (is_array($parts)) { $type = $parts[self::FOLDER_PART_CLASS]; } else { $type = $parts; } } switch ($type) { case Horde_ActiveSync::CLASS_EMAIL: case Horde_ActiveSync::FOLDER_TYPE_USER_MAIL: if (!$old_name) { try { $serverid = $this->_imap->createMailbox($new_name, $parent); } catch (Horde_ActiveSync_Exception $e) { $this->_logger->err($e->getMessage()); throw $e; } } else { try { $serverid = $this->_imap->renameMailbox($old_name, $new_name, $parent); $uid = $this->_getFolderUidForBackendId($serverid, Horde_ActiveSync::FOLDER_TYPE_USER_MAIL, $old_name); } catch (Horde_ActiveSync_Exception $e) { $this->_logger->err($e->getMessage()); throw $e; } } return $this->getFolder($serverid); case Horde_ActiveSync::CLASS_TASKS: case Horde_ActiveSync::FOLDER_TYPE_USER_TASK: $class = Horde_ActiveSync::CLASS_TASKS; $type = Horde_ActiveSync::FOLDER_TYPE_USER_TASK; break; case Horde_ActiveSync::CLASS_CALENDAR: case Horde_ActiveSync::FOLDER_TYPE_USER_APPOINTMENT: $class = Horde_ActiveSync::CLASS_CALENDAR; $type = Horde_ActiveSync::FOLDER_TYPE_USER_APPOINTMENT; break; case Horde_ActiveSync::CLASS_CONTACTS: case Horde_ActiveSync::FOLDER_TYPE_USER_CONTACT: $class = Horde_ActiveSync::CLASS_CONTACTS; $type = Horde_ActiveSync::FOLDER_TYPE_USER_CONTACT; break; case Horde_ActiveSync::CLASS_NOTES: case Horde_ActiveSync::FOLDER_TYPE_USER_NOTE: $class = Horde_ActiveSync::CLASS_NOTES; $type = Horde_ActiveSync::FOLDER_TYPE_USER_NOTE; break; default: throw new Horde_ActiveSync_Exception('Unsupported EAS Collection Class.'); } if (!$old_name) { try { $id = $this->_connector->createFolder($class, $new_name); } catch (Horde_Exception $e) { $this->_logger->err($e->getMessage()); throw new Horde_ActiveSync_Exception($e); } } else { if (empty($parts)) { $parts = $this->_parseFolderId($old_name); } if (is_array($parts)) { $id = $parts[self::FOLDER_PART_ID]; } else { $id = $parts; } try { $this->_connector->changeFolder($class, $id, $new_name); } catch (Horde_Exception $e) { $this->_logger->err($e->getMessage()); throw new Horde_ActiveSync_Exception($e); } } return $this->_buildNonMailFolder($class . ':' . $id, Horde_ActiveSync::FOLDER_ROOT, $type, $new_name); }