From b6e8f4eba7b1ebe38083f8747de59dcc44fd07ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Sch=C3=BCle?= Date: Mon, 17 May 2021 13:04:43 +0200 Subject: [PATCH] feature(Felamimail/ActiveSync): support FolderCreate command #7172 also remove all obsolete Felamimail_Model_Message containers (again) fixes #7172 --- .../Felamimail/Frontend/ActiveSyncTest.php | 25 +++++++++++----- tine20/Felamimail/Controller/Folder.php | 2 +- tine20/Felamimail/Frontend/ActiveSync.php | 30 ++++++++++++++----- tine20/Felamimail/Setup/Update/14.php | 30 +++++++++++++++++++ tine20/Felamimail/Setup/setup.xml | 2 +- 5 files changed, 72 insertions(+), 17 deletions(-) create mode 100644 tine20/Felamimail/Setup/Update/14.php diff --git a/tests/tine20/Felamimail/Frontend/ActiveSyncTest.php b/tests/tine20/Felamimail/Frontend/ActiveSyncTest.php index d5ce7f0a3f0..4b3205ba4c9 100644 --- a/tests/tine20/Felamimail/Frontend/ActiveSyncTest.php +++ b/tests/tine20/Felamimail/Frontend/ActiveSyncTest.php @@ -1,17 +1,13 @@ - */ - -/** - * Test class for Felamimail_Frontend_ActiveSync - * - * @package Felamimail * * TODO extend Felamimail_TestCase */ @@ -1108,4 +1104,19 @@ public function testSendMailToRecipientsWithComma() $message = $this->_sendMailTestHelper($email, $messageId, $stringToCheck, "Syncroton_Command_SendMail"); self::assertEquals(1, count($message->to), 'message should have 1 recipient: ' . print_r($message->to, true)); } + + public function testCreateFolder() + { + $controller = $this->_getController($this->_getDevice(Syncroton_Model_Device::TYPE_ANDROID_40)); + $inbox = $this->_emailTestClass->getFolder('INBOX'); + $folder = new Syncroton_Model_Folder([ + 'parentId' => $inbox->getId(), + 'displayName' => 'syncroTestFolder', + ]); + $this->_createdFolders[] = 'INBOX.' . $folder->displayName; + $newFolder = $controller->createFolder($folder); + + $fmailFolder = Felamimail_Controller_Folder::getInstance()->get($newFolder->serverId); + self::assertEquals($folder->displayName, $fmailFolder->localname); + } } diff --git a/tine20/Felamimail/Controller/Folder.php b/tine20/Felamimail/Controller/Folder.php index 37b34f09cf9..bff1a8acabe 100644 --- a/tine20/Felamimail/Controller/Folder.php +++ b/tine20/Felamimail/Controller/Folder.php @@ -209,7 +209,7 @@ public function getByBackendAndGlobalName($_accountId, $_globalName) * * @param string|Felamimail_Model_Account $_accountId * @param string $_folderName to create - * @param string $_parentFolder + * @param string $_parentFolder parent folder globalname * @return Felamimail_Model_Folder * @throws Felamimail_Exception_IMAPServiceUnavailable * @throws Tinebase_Exception_SystemGeneric diff --git a/tine20/Felamimail/Frontend/ActiveSync.php b/tine20/Felamimail/Frontend/ActiveSync.php index d63dd38dd94..462266f52aa 100644 --- a/tine20/Felamimail/Frontend/ActiveSync.php +++ b/tine20/Felamimail/Frontend/ActiveSync.php @@ -42,13 +42,6 @@ class Felamimail_Frontend_ActiveSync extends ActiveSync_Frontend_Abstract implem Syncroton_Command_Sync::FILTER_1_MONTH_BACK, ); - /** - * felamimail message controller - * - * @var Felamimail_Controller_Message - */ - protected $_messageController; - /** * felamimail account * @@ -789,7 +782,28 @@ public function updateFolder(Syncroton_Model_IFolder $folder) Felamimail_Controller_Folder::getInstance()->rename($fmailFolder->account_id, $folder->displayName, $fmailFolder->globalname); return $folder; } - + + /** + * (non-PHPdoc) + * @see Syncroton_Data_IData::createFolder() + */ + public function createFolder(Syncroton_Model_IFolder $folder) + { + if (empty($folder->parentId)) { + if (Tinebase_Core::isLogLevel(Zend_Log::WARN)) Tinebase_Core::getLogger()->warn( + __METHOD__ . '::' . __LINE__ . " It is not possible to create a folder at root level"); + return $folder; + } + + $parent = Felamimail_Controller_Folder::getInstance()->get($folder->parentId); + $account = Felamimail_Controller_Account::getInstance()->get($parent->account_id); + $newFolder = Felamimail_Controller_Folder::getInstance()->create($account, $folder->displayName, $parent->globalname); + + $folder->serverId = $newFolder->getId(); + + return $folder; + } + /** * (non-PHPdoc) * @see ActiveSync_Frontend_Abstract::toTineModel() diff --git a/tine20/Felamimail/Setup/Update/14.php b/tine20/Felamimail/Setup/Update/14.php new file mode 100644 index 00000000000..b290eff9d03 --- /dev/null +++ b/tine20/Felamimail/Setup/Update/14.php @@ -0,0 +1,30 @@ + + */ +class Felamimail_Setup_Update_14 extends Setup_Update_Abstract +{ + const RELEASE014_UPDATE001 = __CLASS__ . '::update001'; + + static protected $_allUpdates = [ + self::PRIO_NORMAL_APP_UPDATE => [ + self::RELEASE014_UPDATE001 => [ + self::CLASS_CONST => self::class, + self::FUNCTION_CONST => 'update001', + ], + ], + ]; + + public function update001() + { + // remove obsolete Felamimail_Model_Message containers that have been created by accident (see \ActiveSync_Frontend_Abstract::createFolder) + $this->_db->query('DELETE FROM ' . SQL_TABLE_PREFIX . 'container WHERE model = "Felamimail_Model_Message"'); + $this->addApplicationUpdate('Felamimail', '14.1', self::RELEASE014_UPDATE001); + } +} diff --git a/tine20/Felamimail/Setup/setup.xml b/tine20/Felamimail/Setup/setup.xml index cdd0db5ad33..4c5f80cecb5 100644 --- a/tine20/Felamimail/Setup/setup.xml +++ b/tine20/Felamimail/Setup/setup.xml @@ -1,7 +1,7 @@ Felamimail - 13.4 + 14.1 30 enabled