/** * * @return Conjoon_Modules_Groupware_Email_Folder_Facade */ public static function getInstance() { if (!self::$_instance) { self::$_instance = new self(); } return self::$_instance; }
/** * Gathers all needed information to tranform an imap folder to a * Conjoon_Modules_Groupware_Email_Folder_Dto obejct. * * @param Zend_Mail_Storage_Folder $folder * @param Conjoon_Modules_Groupware_Email_Account_Dto $account * @param Zend_Mail_Protocol_Imap $protocol * @param boolean $isRootLevel Whether the folder is on the first level of * the mailbox hierarchy * * @return Conjoon_Modules_Groupware_Email_Folder_Dto */ private function _transformImapFolder(Zend_Mail_Storage_Folder $folder, Conjoon_Modules_Groupware_Email_Account_Dto $account, Zend_Mail_Protocol_Imap $protocol, $isRootLevel = false, $type = 'folder') { $delim = Conjoon_Modules_Groupware_Email_ImapHelper::getFolderDelimiterForImapAccount($account); $globalName = $folder->getGlobalName(); $path = explode($delim, $globalName); $path = $path[count($path) - 1]; $pendingCount = 0; if (!$this->itemListRequestFacade) { $this->itemListRequestFacade = Conjoon_Modules_Groupware_Email_Item_ItemListRequestFacade::getInstance(); } if ($folder->isSelectable()) { try { $pendingCount = $this->itemListRequestFacade->getPendingCountForGlobalName($account, $globalName); } catch (Exception $e) { // ignore } } $childCount = 0; if (!$folder->isLeaf()) { $protocol = Conjoon_Modules_Groupware_Email_ImapHelper::reuseImapProtocolForAccount($account); /** * @see Zend_Mail_Storage_Imap */ require_once 'Zend/Mail/Storage/Imap.php'; $imap = new Zend_Mail_Storage_Imap($protocol); /** * @ticket CN-595 */ if ($globalName === "INBOX") { $iFolders = $imap->getFolders(null)->getChildren(); } else { $iFolders = $imap->getFolders($globalName)->getChildren(); } foreach ($iFolders as $tmpFolder) { $childCount++; } } return Conjoon_Modules_Groupware_Email_ImapHelper::transformToFolderDto($folder, $isRootLevel, array('id' => $account->id . '_' . $globalName, 'idForPath' => $path, 'pendingCount' => $pendingCount, 'type' => $type, 'childCount' => $childCount)); }
/** * */ protected function getSingleImapListItem($accountDto, $userId, $messageNumber, $globalName) { /** * @see Conjoon_Modules_Groupware_Email_Item_ItemListRequestFacade */ require_once 'Conjoon/Modules/Groupware/Email/Item/ItemListRequestFacade.php'; /** * @see Conjoon_Modules_Groupware_Email_Folder_Facade */ require_once 'Conjoon/Modules/Groupware/Email/Folder/Facade.php'; $folderFacade = Conjoon_Modules_Groupware_Email_Folder_Facade::getInstance(); $rootFolder = $folderFacade->getRootFolderForAccountId($accountDto, $userId); $itemFacade = Conjoon_Modules_Groupware_Email_Item_ItemListRequestFacade::getInstance(); $delimiter = Conjoon_Modules_Groupware_Email_ImapHelper::getFolderDelimiterForImapAccount($accountDto); $list = $itemFacade->getEmailItemList(array('rootId' => $rootFolder[0]->id, 'path' => explode($delimiter, $globalName)), $userId, array(), false, $messageNumber, $messageNumber); return $list[0]; }
/** * Returns the email items based on the passed POST-parameters to the client. * Possible POST parameters are: * * start - the index in the datastore from where to read the first record * limit - the number of records to return * dir - the sort direction, either ASC or DESC * sort - the field to sort. Fields are based upon the properties of the * Conjoon_Modules_Groupware_Email_ItemDto-class and have to be substituted * to their appropriate representatives in the underlying datamodel. * groupwareEmailFoldersId - the id of the folder, for which the items should be loaded. * if this parameter is missing, all emails from all accounts * will be fetched * minDate - this argument is optional - if passed, all emails with a fetched_timestamp * equal to or greater than minDate will be fetched * * * The assigned view variables are: * * items - an array with objects of Conjoon_Modules_Groupware_Email_ItemDto * totalCount - the total count of records available for the requested folder * for this user, or the total count of latest emails for the * user since minDate * version - the version property for Ext.ux.grid.BufferedStore * pendingItems - if a folder id other than 0 was supplied, the number of * pending items will be read out and assigned to this view-variable * */ public function getEmailItemsAction() { require_once 'Conjoon/Modules/Groupware/Email/Item/Filter/Request.php'; require_once 'Conjoon/Util/Array.php'; require_once 'Conjoon/Keys.php'; $auth = Zend_Registry::get(Conjoon_Keys::REGISTRY_AUTH_OBJECT); $userId = $auth->getIdentity()->getId(); $CONTEXT_REQUEST_LATEST = Conjoon_Modules_Groupware_Email_Item_Filter_Request::CONTEXT_REQUEST_LATEST; $CONTEXT_REQUEST = Conjoon_Modules_Groupware_Email_Item_Filter_Request::CONTEXT_REQUEST; if (isset($_POST['minDate']) && !isset($_POST['groupwareEmailFoldersId'])) { $context = $CONTEXT_REQUEST_LATEST; } else { $context = $CONTEXT_REQUEST; } $itemRequestFilter = new Conjoon_Modules_Groupware_Email_Item_Filter_Request($_POST, $context); try { $filteredData = $itemRequestFilter->getProcessedData(); } catch (Zend_Filter_Exception $e) { $this->view->success = true; $this->view->error = null; $this->view->items = array(); $this->view->version = 1; $this->view->totalCount = 0; return; } $sortInfo = array('sort' => $filteredData['sort'], 'dir' => $filteredData['dir'], 'limit' => $filteredData['limit'], 'start' => $filteredData['start']); require_once 'Conjoon/BeanContext/Decorator.php'; require_once 'Conjoon/Modules/Groupware/Email/Item/Filter/ItemResponse.php'; $itemResponseFilter = new Conjoon_Modules_Groupware_Email_Item_Filter_ItemResponse(array(), Conjoon_Filter_Input::CONTEXT_RESPONSE); $pendingItems = -1; if ($context == $CONTEXT_REQUEST) { // check if folder is remote folder /** * @see Conjoon_Text_Parser_Mail_MailboxFolderPathJsonParser */ require_once 'Conjoon/Text/Parser/Mail/MailboxFolderPathJsonParser.php'; $parser = new Conjoon_Text_Parser_Mail_MailboxFolderPathJsonParser(); $pathInfo = $parser->parse($filteredData['path']); /** * @see Conjoon_Modules_Groupware_Email_Folder_Facade */ require_once 'Conjoon/Modules/Groupware/Email/Folder/Facade.php'; $facade = Conjoon_Modules_Groupware_Email_Folder_Facade::getInstance(); if ($facade->isRemoteFolder((int) $pathInfo['rootId'])) { /** * @see Conjoon_Modules_Groupware_Email_Item_ItemListRequestFacade */ require_once 'Conjoon/Modules/Groupware/Email/Item/ItemListRequestFacade.php'; $listFacade = Conjoon_Modules_Groupware_Email_Item_ItemListRequestFacade::getInstance(); $itemData = $listFacade->getEmailItemList($pathInfo, $userId, $sortInfo, true); $this->view->success = true; $this->view->error = null; $this->view->items = $itemData['items']; $this->view->version = 1; $this->view->totalCount = $itemData['totalCount']; $this->view->pendingItems = $itemData['pendingItems']; return; } // get the number of emails currently available for this folder // and this user require_once 'Conjoon/Modules/Groupware/Email/Item/Model/Item.php'; require_once 'Conjoon/Modules/Groupware/Email/Folder/Model/Folder.php'; $folderModel = new Conjoon_Modules_Groupware_Email_Folder_Model_Folder(); $itemModel = new Conjoon_Modules_Groupware_Email_Item_Model_Item(); $totalCount = $folderModel->getItemCountForFolderAndUser($filteredData['groupwareEmailFoldersId'], $userId); if ($totalCount == 0) { $this->view->success = true; $this->view->error = null; $this->view->items = array(); $this->view->version = 1; $this->view->totalCount = 0; $this->view->pendingItems = 0; return; } $decoratedModel = new Conjoon_BeanContext_Decorator($itemModel, $itemResponseFilter); $rows = $decoratedModel->getEmailItemsForAsDto($userId, $filteredData['groupwareEmailFoldersId'], $sortInfo); $pendingItems = $folderModel->getPendingCountForFolderAndUser($filteredData['groupwareEmailFoldersId'], $userId); } else { if ($context == $CONTEXT_REQUEST_LATEST) { require_once 'Conjoon/BeanContext/Decorator.php'; require_once 'Conjoon/Modules/Groupware/Email/Item/Filter/ItemResponse.php'; require_once 'Conjoon/Modules/Groupware/Email/Item/Model/Inbox.php'; $itemInboxModel = new Conjoon_Modules_Groupware_Email_Item_Model_Inbox(); $totalCount = $itemInboxModel->getLatestItemCount($userId, $filteredData['minDate']); if ($totalCount == 0) { $this->view->success = true; $this->view->error = null; $this->view->items = array(); $this->view->version = 1; $this->view->totalCount = 0; return; } $decoratedModel = new Conjoon_BeanContext_Decorator($itemInboxModel, $itemResponseFilter); $rows = $decoratedModel->getLatestEmailItemsForAsDto($userId, $filteredData['minDate'], $sortInfo); } } $this->view->success = true; $this->view->error = null; $this->view->items = $rows; $this->view->pendingItems = $pendingItems; $this->view->version = 1; $this->view->totalCount = $totalCount; }