Beispiel #1
0
 /**
  * Defined by Zend_Filter_Interface
  *
  * Returns the UTC-date time format for the specified value.
  * Will return the date for the 1970-1-1 if the passed argument
  * was not in a valid date-format.
  *
  * @param  mixed $value
  * @return string
  *
  * @throws Conjoon_Filter_Exception If Zend_Date could not handle the passed
  * argument. Note, that almost every time Zend_Date will try to convert
  * the passed argument to a date object.
  *
  * @deprecated use Conjoon_Date_Format::toUtc
  */
 public function filter($value)
 {
     /**
      * @see Conjoon_Date_Format
      */
     require_once 'Conjoon/Date/Format.php';
     try {
         return Conjoon_Date_Format::toUtc($value);
     } catch (Conjoon_Date_Exception $e) {
         /**
          * @see Conjoon_Filter_Exception
          */
         require_once 'Conjoon/Filter/Exception.php';
         throw new Conjoon_Filter_Exception($e->getMessage());
     }
 }
 /**
  * Converts the passed string to a date in the timezone of self::$_timezone.
  *
  * Returns a UTC date converted to the local date as determined by the
  * timezonefound in self::$_timezone, which can be specified when
  * instantiating this class. The date sttring returned will be in the format
  * of YYYY-MM-dd HH:mm:ss.
  * Note: The passed argument must already be a UTC date! This method will
  * not check whether the passed argument's timezone is UTC
  * This method will gracefully fall back to teh default date of
  * 1970-01-01 00:00:00 if it could not convert the passed argument properly.
  *
  * @param  mixed $value
  * @return string
  */
 public function filter($value)
 {
     /**
      * @see Conjoon_Date_Format
      */
     require_once 'Conjoon/Date/Format.php';
     return Conjoon_Date_Format::utcToLocal($value, $this->getTimezone());
 }
 /**
  * @inheritdoc
  */
 public function applyForData(array $data)
 {
     try {
         $this->v('message', $data);
         $d =& $data['message'];
         /**
          * @see \Conjoon_Date_Format
          */
         require_once 'Conjoon/Date/Format.php';
         $date = $this->v('date', $d);
         $date = $date ? $date->format('Y-m-d H:i:s') : null;
         $d['date'] = \Conjoon_Date_Format::utcToLocal($date);
         $ccList = $this->buildAddresses($this->v('cc', $d));
         $toList = $this->buildAddresses($this->v('to', $d));
         $usedAccount = $this->guessAccountUsed(array_merge($toList, $ccList));
         //getMessageTextHeader($subject, $date, array $from, array $replyTo, array $to, array $cc)
         /**
          * @see \Conjoon_Filter_StringPrependIf
          */
         require_once 'Conjoon/Filter/StringPrependIf.php';
         $prep = new \Conjoon_Filter_StringPrependIf(array('Fwd: ', 'FWD:'), 'Fwd: ');
         $d['subject'] = $prep->filter($this->v('subject', $d));
         $messageTextHead = $this->getMessageTextHeader($d['subject'], $d['date'], $this->buildAddresses($this->v('from', $d)), $this->buildAddresses($this->v('replyTo', $d)), $toList, $ccList);
         $d['to'] = array();
         $d['cc'] = array();
         $d['bcc'] = array();
         $d['attachments'] = $this->createAttachments($this->v('attachments', $d));
         $d['inReplyTo'] = "";
         $d['references'] = "";
         $d['groupwareEmailAccountsId'] = null;
         if ($usedAccount) {
             $d['groupwareEmailAccountsId'] = $usedAccount->getId();
         }
         $d['contentTextPlain'] = $messageTextHead . $this->getContentTextPlain($this->v('contentTextPlain', $d));
         $d['contentTextHtml'] = "";
         unset($d['messageId']);
         unset($d['replyTo']);
         unset($d['from']);
         $data['draft'] = $data['message'];
         unset($data['message']);
     } catch (\Exception $e) {
         throw new ServicePatronException("Exception thrown by previous exception: " . $e->getMessage(), 0, $e);
     }
     return $data;
 }
 /**
  * @inheritdoc
  */
 public function applyForData(array $data)
 {
     try {
         $this->v('message', $data);
         $d =& $data['message'];
         /**
          * @see \Conjoon_Date_Format
          */
         require_once 'Conjoon/Date/Format.php';
         $date = $this->v('date', $d);
         $date = $date ? $date->format('Y-m-d H:i:s') : null;
         $d['date'] = \Conjoon_Date_Format::utcToLocal($date);
         $d['cc'] = $this->buildAddresses($this->v('cc', $d));
         $d['to'] = $this->buildAddresses($this->v('to', $d));
         $d['bcc'] = $this->buildAddresses($this->v('bcc', $d));
         $d['from'] = $this->buildAddresses($this->v('from', $d));
         $d['replyTo'] = $this->buildAddresses($this->v('replyTo', $d));
         $usedAccount = $this->guessAccountUsed($d['from']);
         $d['attachments'] = $this->createAttachments($this->v('attachments', $d));
         $d['groupwareEmailAccountsId'] = null;
         if ($usedAccount) {
             $d['groupwareEmailAccountsId'] = $usedAccount->getId();
         }
         $d['contentTextPlain'] = $this->getContentTextPlain($this->v('contentTextPlain', $d));
         $d['contentTextHtml'] = "";
         $data['draft'] = $data['message'];
         unset($data['message']);
     } catch (\Exception $e) {
         throw new ServicePatronException("Exception thrown by previous exception: " . $e->getMessage(), 0, $e);
     }
     return $data;
 }
 /**
  * Parses the header into an array.
  *
  * @param string $header The raw header
  *
  * @return array
  *
  * @throws MailEntityCreatorException
  */
 protected function parseHeader($header)
 {
     try {
         /**
          * @see \Conjoon_Text_Parser_Mail_MessageHeaderParser
          */
         require_once 'Conjoon/Text/Parser/Mail/MessageHeaderParser.php';
         $parser = new \Conjoon_Text_Parser_Mail_MessageHeaderParser();
         $header = $parser->parse($header);
         /**
          * @see \Conjoon_Text_Transformer_DateStringSanitizer
          */
         require_once 'Conjoon/Text/Transformer/DateStringSanitizer.php';
         $sanitizeDateTransformer = new \Conjoon_Text_Transformer_DateStringSanitizer();
         /**
          * @see \Conjoon_Date_Format
          */
         require_once 'Conjoon/Date/Format.php';
         $header['date'] = new \DateTime(\Conjoon_Date_Format::toUtc($sanitizeDateTransformer->transform($header['date'])), new \DateTimeZone('UTC'));
         /**
          * @see Conjoon_Text_Transformer_MimeDecoder
          */
         require_once 'Conjoon/Text/Transformer/MimeDecoder.php';
         $mimeDecoder = new \Conjoon_Text_Transformer_MimeDecoder();
         $header['subject'] = $mimeDecoder->transform($header['subject']);
         $header['to'] = isset($header['to']) ? $header['to'] : "";
         $header['cc'] = isset($header['cc']) ? $header['cc'] : "";
         $header['bcc'] = isset($header['bcc']) ? $header['bcc'] : "";
         $header['from'] = isset($header['from']) ? $header['from'] : "";
         $header['replyTo'] = isset($header['replyTo']) ? $header['replyTo'] : "";
         $header['inReplyTo'] = isset($header['inReplyTo']) ? $header['inReplyTo'] : "";
         $header['references'] = isset($header['references']) ? $header['references'] : "";
         return $header;
     } catch (\Exception $e) {
         throw new MailEntityCreatorException("Exception thrown by previous exception: " . $e->getMessage(), 0, $e);
     }
 }
 /**
  * @inheritdoc
  */
 public function applyForData(array $data)
 {
     try {
         $this->v('message', $data);
         $d =& $data['message'];
         /**
          * @see \Conjoon_Date_Format
          */
         require_once 'Conjoon/Date/Format.php';
         $date = $this->v('date', $d);
         $date = $date ? $date->format('Y-m-d H:i:s') : null;
         $d['date'] = \Conjoon_Date_Format::utcToLocal($date);
         $ccList = $this->buildAddresses($this->v('cc', $d));
         $toList = $this->buildAddresses($this->v('to', $d));
         $usedAccount = $this->guessAccountUsed(array_merge($toList, $ccList));
         // build "cc" before "to" since "to" gets overwritten later on
         $d['cc'] = $this->buildCcAddressList($ccList, $toList, $usedAccount);
         $d['to'] = $this->getToAddress($this->v('from', $d), $this->v('replyTo', $d));
         $d['bcc'] = array();
         $d['attachments'] = array();
         $messageId = $this->v('messageId', $d);
         $d['inReplyTo'] = $messageId;
         $d['references'] = $this->v('references', $d) != '' ? $d['references'] . ' ' . $messageId : $messageId;
         $d['groupwareEmailAccountsId'] = null;
         if ($usedAccount) {
             $d['groupwareEmailAccountsId'] = $usedAccount->getId();
         }
         /**
          * @see \Conjoon_Filter_StringPrependIf
          */
         require_once 'Conjoon/Filter/StringPrependIf.php';
         $prep = new \Conjoon_Filter_StringPrependIf(array('Re: ', 'RE: ', 'Aw: ', 'AW: '), 'Re: ');
         $d['subject'] = $prep->filter($this->v('subject', $d));
         $d['contentTextPlain'] = $this->getContentTextPlain($this->v('contentTextPlain', $d));
         $d['contentTextHtml'] = "";
         unset($d['messageId']);
         unset($d['replyTo']);
         unset($d['from']);
         $data['draft'] = $data['message'];
         unset($data['message']);
     } catch (\Exception $e) {
         throw new ServicePatronException("Exception thrown by previous exception: " . $e->getMessage(), 0, $e);
     }
     return $data;
 }
 /**
  *
  * @param Conjoon_Modules_Groupware_Email_Account_Dto $accountDto
  * @param array $pathInfo the pathInfo parts for the remote folder,
  * which have to be assembled again using the remote storage's delimiter
  * @param array $sortInfo
  *
  * @return array
  *
  * @throws Conjoon_Argument_Exception
  */
 protected function _getEmailItemListForAccountAndRemoteFolder(Conjoon_Modules_Groupware_Email_Account_Dto $accountDto, $pathInfo, array $sortInfo = array(), $additionalInfo, $from, $to, $userId)
 {
     if (is_array($pathInfo)) {
         $path = $pathInfo['path'];
         $rootId = $pathInfo['rootId'];
         $globalName = $this->_getFolderFacade()->getAssembledGlobalNameForAccountAndPath($accountDto, $path);
     } else {
         $globalName = $pathInfo;
         $fld = $this->_getFolderFacade()->getRootFolderForAccountId($accountDto, $userId);
         $rootId = $fld[0]->id;
         /**
          * @see Conjoon_Modules_Groupware_Email_ImapHelper
          */
         require_once 'Conjoon/Modules/Groupware/Email/ImapHelper.php';
         $path = Conjoon_Modules_Groupware_Email_ImapHelper::splitFolderForImapAccount($globalName, $accountDto);
     }
     /**
      * @see Conjoon_Date_Format
      */
     require_once 'Conjoon/Date/Format.php';
     /**
      * @see Conjoon_Modules_Groupware_Email_ImapHelper
      */
     require_once 'Conjoon/Modules/Groupware/Email/ImapHelper.php';
     $protocol = Conjoon_Modules_Groupware_Email_ImapHelper::reuseImapProtocolForAccount($accountDto);
     /**
      * @see Zend_Mail_Storage_Imap
      */
     require_once 'Conjoon/Mail/Storage/Imap.php';
     $storage = new Conjoon_Mail_Storage_Imap($protocol);
     $messageStruct = $storage->getHeaderListAndMetaInformationForGlobalName($globalName, $from, $to);
     /**
      * @see Conjoon_Text_Parser_Mail_MessageHeaderParser
      */
     require_once 'Conjoon/Text/Parser/Mail/MessageHeaderParser.php';
     $parser = new Conjoon_Text_Parser_Mail_MessageHeaderParser();
     /**
      * @see Conjoon_Text_Transformer_DateStringSanitizer
      */
     require_once 'Conjoon/Text/Transformer/DateStringSanitizer.php';
     $sanitizeDateTransformer = new Conjoon_Text_Transformer_DateStringSanitizer();
     /**
      * @see Conjoon_Text_Transformer_MimeDecoder
      */
     require_once 'Conjoon/Text/Transformer/MimeDecoder.php';
     $mimeDecoder = new Conjoon_Text_Transformer_MimeDecoder();
     /**
      * @see Conjoon_Text_Parser_Mail_EmailAddressIdentityParser
      */
     require_once 'Conjoon/Text/Parser/Mail/EmailAddressIdentityParser.php';
     $identityParser = new Conjoon_Text_Parser_Mail_EmailAddressIdentityParser();
     $identityParserSender = new Conjoon_Text_Parser_Mail_EmailAddressIdentityParser(array('addSlashes' => false, 'useQuoting' => false));
     /**
      * @see Conjoon_Text_Transformer_Mail_EmailAddressNameQuoteTransformer
      */
     require_once 'Conjoon/Text/Transformer/Mail/EmailAddressNameQuoteTransformer.php';
     $quoteTransformer = new Conjoon_Text_Transformer_Mail_EmailAddressNameQuoteTransformer();
     $parsedHeaders = array();
     for ($i = 0, $len = count($messageStruct); $i < $len; $i++) {
         try {
             $header = $parser->parse($messageStruct[$i]['header']);
         } catch (Exception $e) {
             continue;
         }
         $header['date'] = Conjoon_Date_Format::toUtc($sanitizeDateTransformer->transform($header['date']));
         // no mime decode needed, already done in EmailHeaderParser
         $header['subject'] = $mimeDecoder->transform($header['subject']);
         // RECIPIENTS IS NOT PART OF THE HEADER.
         $recipients = array_merge(isset($header['to']) ? $identityParser->parse($header['to']) : array(), isset($header['cc']) ? $identityParser->parse($header['cc']) : array(), isset($header['bcc']) ? $identityParser->parse($header['bcc']) : array());
         $recipientNames = array();
         foreach ($recipients as $address => $addressValue) {
             if (isset($addressValue[1])) {
                 $recipientNames[] = $quoteTransformer->transform($addressValue[1]);
             } else {
                 $recipientNames[] = $addressValue[0];
             }
         }
         $header['recipients'] = $recipientNames;
         // SENDER IS NOT PART OF THE HEADER.
         $sender = $identityParserSender->parse($header['from']);
         $header['sender'] = isset($sender[0][1]) ? $sender[0][1] : $sender[0][0];
         // the uid
         $header['uid'] = $messageStruct[$i]['uid'];
         $header['isAttachment'] = false;
         $header['isRead'] = false;
         $header['isSpam'] = false;
         $header['referencedAsType'] = array();
         // flag processing
         $flags =& $messageStruct[$i]['flags'];
         for ($u = 0, $lenu = count($flags); $u < $lenu; $u++) {
             if ($flags[$u] == '\\Seen') {
                 $header['isRead'] = true;
             } else {
                 if ($flags[$u] == '$Junk') {
                     $header['isSpam'] = true;
                 } else {
                     if (stripos($flags[$u], 'forwarded') !== false) {
                         array_push($header['referencedAsType'], 'forwarded');
                     } else {
                         if ($flags[$u] == '\\Answered') {
                             array_push($header['referencedAsType'], 'reply');
                         }
                     }
                 }
             }
         }
         // possible attachment?
         $header['isAttachment'] = $this->lookUpImapAttachmentInBodyStructure($messageStruct[$i]['bodystructure']);
         $parsedHeaders[] = $header;
     }
     // PARSED HEADERS IS THE INPUT AS WE NEED IT FOR STORING INTO THE DB
     // NOW GENERATE THE OUTPUT AS CONJOON EXPECTS IT!
     /**
      * @see Conjoon_Date_Format
      */
     require_once 'Conjoon/Date/Format.php';
     /**
      * @see Zend_Filter_HtmlEntities
      */
     require_once 'Zend/Filter/HtmlEntities.php';
     $htmlEntitiesFilter = new Zend_Filter_HtmlEntities(array('quotestyle' => ENT_COMPAT));
     $responseItems = array();
     for ($i = 0, $len = count($parsedHeaders); $i < $len; $i++) {
         $header =& $parsedHeaders[$i];
         $responseItems[] = array('id' => $header['uid'], 'recipients' => $header['recipients'], 'sender' => $header['sender'], 'subject' => $htmlEntitiesFilter->filter($header['subject']), 'date' => Conjoon_Date_Format::utcToLocal($header['date']), 'isRead' => (int) $header['isRead'], 'isAttachment' => (int) $header['isAttachment'], 'isSpam' => (int) $header['isSpam'], 'isDraft' => 0, 'isOutboxPending' => 0, 'referencedAsTypes' => $header['referencedAsType'], 'groupwareEmailFoldersId' => -1, 'path' => array_merge(array($rootId), $path));
     }
     // sort
     if (isset($sortInfo['sort'])) {
         switch ($sortInfo['sort']) {
             case 'date':
                 usort($responseItems, array($this, 'memorySortDate'));
                 break;
             case 'subject':
                 usort($responseItems, array($this, 'memorySortSubject'));
                 break;
             case 'recipients':
                 usort($responseItems, array($this, 'memorySortRecipients'));
                 break;
             case 'sender':
                 usort($responseItems, array($this, 'memorySortSender'));
                 break;
             case 'is_spam':
                 usort($responseItems, array($this, 'memorySortIsSpam'));
                 break;
             case 'is_read':
                 usort($responseItems, array($this, 'memorySortIsRead'));
                 break;
             case 'is_attachment':
                 usort($responseItems, array($this, 'memorySortisAttachment'));
                 break;
         }
         if ($sortInfo['dir'] == 'DESC') {
             $responseItems = array_reverse($responseItems);
         }
     }
     $totalCount = count($responseItems);
     if (isset($sortInfo['limit']) && isset($sortInfo['start'])) {
         $responseItems = array_splice($responseItems, $sortInfo['start'], $sortInfo['limit']);
     }
     if ($additionalInfo) {
         return array('items' => $responseItems, 'totalCount' => $totalCount, 'pendingItems' => $this->getPendingCountForGlobalName($accountDto, $globalName));
     }
     return $responseItems;
 }
 /**
  * @inheritdoc
  */
 public function applyForData(array $data)
 {
     try {
         $this->v('message', $data);
         $d =& $data['message'];
         $d['isPlainText'] = 1;
         $strategyResult = $this->getReadableStrategy()->execute($data);
         $d['body'] = $strategyResult->getBody();
         $d['hasResources'] = false;
         $d['resourcesLoaded'] = false;
         if ($strategyResult->hasExternalResources()) {
             $d['hasResources'] = true;
             $d['resourcesLoaded'] = $strategyResult->areExternalResourcesLoaded();
         }
         $d['attachments'] = $this->createAttachments($this->v('attachments', $d));
         /**
          * @see \Conjoon_Date_Format
          */
         require_once 'Conjoon/Date/Format.php';
         $date = $this->v('date', $d);
         $date = $date ? $date->format('Y-m-d H:i:s') : null;
         $d['date'] = \Conjoon_Date_Format::utcToLocal($date);
         $d['to'] = $this->createAddressList($this->v('to', $d));
         $d['cc'] = $this->createAddressList($this->v('cc', $d));
         $d['from'] = $this->createAddressList($this->v('from', $d));
         $d['bcc'] = $this->createAddressList($this->v('bcc', $d));
         $d['replyTo'] = $this->createAddressList($this->v('replyTo', $d));
         /**
          * @see \Zend_Filter_HtmlEntities
          */
         require_once 'Zend/Filter/HtmlEntities.php';
         $htmlEntitiesFilter = new \Zend_Filter_HtmlEntities(array('quotestyle' => ENT_COMPAT));
         $d['subject'] = $htmlEntitiesFilter->filter($this->v('subject', $d));
         unset($d['contentTextPlain']);
         unset($d['contentTextHtml']);
     } catch (\Exception $e) {
         throw new ServicePatronException("Exception thrown by previous exception: " . $e->getMessage(), 0, $e);
     }
     return $data;
 }
Beispiel #9
0
 /**
  * Ensures eexception is thrown if invalid argument is passed.
  *
  * @expectedException Conjoon_Date_Exception
  *
  * @return void
  */
 public function testToUtcException()
 {
     Conjoon_Date_Format::toUtc("");
 }