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