/**
  *
  * @return Conjoon_Modules_Groupware_Email_Folder_Facade
  */
 public static function getInstance()
 {
     if (!self::$_instance) {
         self::$_instance = new self();
     }
     return self::$_instance;
 }
Esempio n. 2
0
 /**
  * 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;
 }