/** * Returns a user object with raw data from ldap * * @param array $_userData * @param string $_accountClass * @return Tinebase_Model_EmailUser * * @todo add generic function for this in Tinebase_User_Ldap or Tinebase_Ldap? */ protected function _ldap2User(Tinebase_Model_User $_user, array &$_ldapEntry) { #if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_ldapEntry, true)); $accountArray = $this->_defaults; if ($this instanceof Tinebase_EmailUser_Smtp_Interface) { $accountArray = array_merge($accountArray, array('emailForwardOnly' => false, 'emailAliases' => array(), 'emailForwards' => array())); } foreach ($_ldapEntry as $key => $value) { if (is_int($key)) { continue; } $keyMapping = array_search($key, $this->_propertyMapping); if ($keyMapping !== FALSE) { switch ($keyMapping) { case 'emailMailQuota': // convert to megabytes $accountArray[$keyMapping] = Tinebase_Helper::convertToMegabytes($value[0]); break; case 'emailAliases': case 'emailForwards': $accountArray[$keyMapping] = $value; break; case 'emailForwardOnly': $accountArray[$keyMapping] = strtolower($value[0]) == 'forwardonly' ? true : false; break; default: $accountArray[$keyMapping] = $value[0]; break; } } } return new Tinebase_Model_EmailUser($accountArray, true); }
/** * add attachments to mail * * @param Tinebase_Mail $_mail * @param Felamimail_Model_Message $_message * @throws Felamimail_Exception_IMAP */ protected function _addAttachments(Tinebase_Mail $_mail, Felamimail_Model_Message $_message) { if (!isset($_message->attachments) || empty($_message->attachments)) { return; } $maxAttachmentSize = $this->_getMaxAttachmentSize(); $size = 0; $tempFileBackend = Tinebase_TempFile::getInstance(); foreach ($_message->attachments as $attachment) { if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Adding attachment: ' . (is_object($attachment) ? print_r($attachment->toArray(), TRUE) : print_r($attachment, TRUE))); } if (isset($attachment['type']) && $attachment['type'] == Felamimail_Model_Message::CONTENT_TYPE_MESSAGE_RFC822 && $_message->original_id instanceof Felamimail_Model_Message) { $part = $this->getMessagePart($_message->original_id, $_message->original_part_id ? $_message->original_part_id : NULL); $part->decodeContent(); $name = $attachment['name'] . '.eml'; $type = $attachment['type']; if (!empty($attachment['size'])) { $size += $attachment['size']; } } else { $tempFile = $attachment instanceof Tinebase_Model_TempFile ? $attachment : (isset($attachment['tempFile']) || array_key_exists('tempFile', $attachment) ? $tempFileBackend->get($attachment['tempFile']['id']) : NULL); if ($tempFile === NULL) { continue; } if (!$tempFile->path) { Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' Could not find attachment.'); continue; } // get contents from uploaded file $stream = fopen($tempFile->path, 'r'); $part = new Zend_Mime_Part($stream); // RFC822 attachments are not encoded, set all others to ENCODING_BASE64 $part->encoding = $tempFile->type == Felamimail_Model_Message::CONTENT_TYPE_MESSAGE_RFC822 ? null : Zend_Mime::ENCODING_BASE64; $name = $tempFile->name; $type = $tempFile->type; if (!empty($tempFile->size)) { $size += $tempFile->size; } } $part->setTypeAndDispositionForAttachment($type, $name); if ($size > $maxAttachmentSize) { if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) { Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' Current attachment size: ' . Tinebase_Helper::convertToMegabytes($size) . ' MB / allowed size: ' . Tinebase_Helper::convertToMegabytes($maxAttachmentSize) . ' MB'); } throw new Felamimail_Exception_IMAP('Maximum attachment size exceeded. Please remove one or more attachments.'); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Adding attachment ' . $part->type); } $_mail->addAttachment($part); } }
/** * converts raw data from adapter into a single record / do mapping * * @param array $_data * @return Tinebase_Model_EmailUser */ protected function _rawDataToRecord(array $_rawdata) { $data = array(); foreach ($_rawdata as $key => $value) { $keyMapping = array_search($key, $this->_propertyMapping); if ($keyMapping !== FALSE) { switch ($keyMapping) { case 'emailPassword': // do nothing break; case 'emailMailQuota': case 'emailMailSize': case 'emailSieveQuota': case 'emailSieveSize': $data[$keyMapping] = Tinebase_Helper::convertToMegabytes($value); break; default: $data[$keyMapping] = $value; break; } } } return new Tinebase_Model_EmailUser($data, true); }
/** * get event attachments * * @param Calendar_Model_Event $_event * @return array of Zend_Mime_Part */ protected function _getEventAttachments($_event) { $attachments = array(); foreach ($_event->attachments as $attachment) { if ($attachment->size < self::INVITATION_ATTACHMENT_MAX_FILESIZE) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " Adding attachment " . $attachment->name . ' to invitation mail'); } $path = Tinebase_Model_Tree_Node_Path::STREAMWRAPPERPREFIX . Tinebase_FileSystem_RecordAttachments::getInstance()->getRecordAttachmentPath($_event) . '/' . $attachment->name; $handle = fopen($path, 'r'); $stream = fopen("php://temp", 'r+'); stream_copy_to_stream($handle, $stream); rewind($stream); $part = new Zend_Mime_Part($stream); $part->encoding = Zend_Mime::ENCODING_BASE64; // ? $part->filename = $attachment->name; $part->setTypeAndDispositionForAttachment($attachment->contenttype, $attachment->name); fclose($handle); $attachments[] = $part; } else { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " Not adding attachment " . $attachment->name . ' to invitation mail (size: ' . Tinebase_Helper::convertToMegabytes($attachment - size) . ')'); } } } return $attachments; }
/** * add attachments to mail * * @param Tinebase_Mail $_mail * @param Felamimail_Model_Message $_message * @throws Felamimail_Exception_IMAP */ protected function _addAttachments(Tinebase_Mail $_mail, Felamimail_Model_Message $_message) { if (!isset($_message->attachments) || empty($_message->attachments)) { return; } $maxAttachmentSize = $this->_getMaxAttachmentSize(); $totalSize = 0; foreach ($_message->attachments as $attachment) { if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Adding attachment: ' . (is_object($attachment) ? print_r($attachment->toArray(), TRUE) : print_r($attachment, TRUE))); } if (isset($attachment['type']) && $attachment['type'] == Felamimail_Model_Message::CONTENT_TYPE_MESSAGE_RFC822 && $_message->original_id instanceof Felamimail_Model_Message) { $part = $this->_getRfc822Attachment($attachment, $_message); } else { if ($attachment instanceof Tinebase_Model_TempFile || isset($attachment['tempFile'])) { $part = $this->_getTempFileAttachment($attachment); } else { $part = $this->_getMessagePartAttachment($attachment); } } if (!$part || empty($attachment['type'])) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Skipping attachment ' . print_r($attachment, true)); } continue; } $part->setTypeAndDispositionForAttachment($attachment['type'], $attachment['name']); if (!empty($attachment['size'])) { $totalSize += $attachment['size']; } if ($totalSize > $maxAttachmentSize) { if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) { Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' Current attachment size: ' . Tinebase_Helper::convertToMegabytes($totalSize) . ' MB / allowed size: ' . Tinebase_Helper::convertToMegabytes($maxAttachmentSize) . ' MB'); } throw new Felamimail_Exception_IMAP('Maximum attachment size exceeded. Please remove one or more attachments.'); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Adding attachment ' . $part->type); } $_mail->addAttachment($part); } }