/** * get Syncroton_Model_Folder folders recursively by parentFolder * * @param Expressomail_Model_Folder $parentFolder * @param array $result * @return array of Syncroton_Model_Folder */ protected function _getFolders($parentFolder = NULL, &$result = array()) { $globalname = $parentFolder ? $parentFolder->globalname : ''; $account = $this->_getAccount(); if (!$account) { return array(); } $filter = new Expressomail_Model_FolderFilter(array(array('field' => 'globalname', 'operator' => 'startswith', 'value' => $globalname), array('field' => 'account_id', 'operator' => 'equals', 'value' => $account->getId()))); try { $folders = Expressomail_Controller_Folder::getInstance()->search($filter); } catch (Expressomail_Exception_IMAPInvalidCredentials $feiic) { Tinebase_Exception::log($feiic, null, array('accountname' => $account->name)); return array(); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " Found " . count($folders) . ' subfolders of folder "' . $globalname . '"'); } foreach ($folders as $folder) { if (!$folder->is_selectable) { continue; } $serverId = md5($folder->getId()); $result[$serverId] = new Syncroton_Model_Folder(array('serverId' => $serverId, 'parentId' => $parentFolder ? md5($parentFolder->getId()) : 0, 'displayName' => substr($folder->localname, 0, 254), 'type' => $this->_getFolderType($folder), 'bigfolderid' => $folder->getId())); if ($folder->has_children) { $this->_getFolders($folder, $result); } } return $result; }
/** * move messages from one folder to another * * @param Tinebase_Record_RecordSet $_messages * @param string $_folderId * @param Expressomail_Model_Folder|string $_targetFolder * @return boolean did we move messages? */ protected function _moveMessagesByFolder(Tinebase_Record_RecordSet $_messages, $_folderId, $_targetFolder) { $messagesInFolder = $_messages->filter('folder_id', $_folderId); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Moving messages: ' . print_r($messagesInFolder->getArrayOfIds(), TRUE)); } $result = TRUE; if ($_targetFolder === Expressomail_Model_Folder::FOLDER_TRASH) { $result = $this->_moveMessagesToTrash($messagesInFolder, $_folderId); } else { if ($_folderId === $_targetFolder->getId()) { // no need to move $result = FALSE; } else { if ($messagesInFolder->getFirstRecord()->account_id == $_targetFolder->account_id) { $this->_moveMessagesInFolderOnSameAccount($messagesInFolder, $_targetFolder); } else { $this->_moveMessagesToAnotherAccount($messagesInFolder, $_targetFolder); } } } if (!$result) { $_messages->removeRecords($messagesInFolder); } return $result; }
/** * search message by header (X-Tine20TestMessage) and add it to cache * * @param string $_testHeaderValue * @param Expressomail_Model_Folder $_folder * @param boolean $assert * @param string $testHeader * @return Expressomail_Model_Message|NULL */ public function searchAndCacheMessage($_testHeaderValue, $_folder = NULL, $assert = TRUE, $testHeader = 'X-Tine20TestMessage') { $folder = $_folder !== NULL ? $_folder : $this->_folder; $message = $this->_searchMessage($_testHeaderValue, $folder, $assert, $testHeader); if ($message === NULL && !$assert) { return NULL; } // $cachedMessage = $this->_cache->addMessage($message, $folder); // if ($cachedMessage === FALSE) { // // try to add message again (it had a duplicate) // $this->_cache->clear($folder); // $cachedMessage = $this->_cache->addMessage($message, $folder); // } // // if ($assert) { // $this->assertTrue($cachedMessage instanceof Expressomail_Model_Message, 'could not add message to cache'); // } // // $this->_createdMessages->addRecord($cachedMessage); // // return $cachedMessage; $expressoMessage = new Expressomail_Model_Message(array('account_id' => $_folder->account_id, 'messageuid' => $message['uid'], 'folder_id' => $_folder->getId(), 'timestamp' => Tinebase_DateTime::now(), 'received' => Expressomail_Message::convertDate($message['received']), 'size' => $message['size'], 'flags' => $message['flags'])); $expressoMessage->parseStructure($message['structure']); $expressoMessage->parseHeaders($message['header']); $expressoMessage->parseBodyParts(); $attachments = Expressomail_Controller_Message::getInstance()->getAttachments($expressoMessage); $expressoMessage->has_attachment = count($attachments) > 0 ? true : false; return $expressoMessage; }