コード例 #1
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;
 }