/** * 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; }