| | |
| | | // HTML part can be on the lower level, if not... |
| | | if (count($level) > 1) { |
| | | // It can be an alternative or related message part |
| | | $parent = $this->mime_parts[0]; |
| | | // find parent part |
| | | $parent = null; |
| | | foreach ($this->mime_parts as $part) { |
| | | if ($part->mime_id == $level[0]) { |
| | | $parent = $part; |
| | | } |
| | | } |
| | | |
| | | if (!$parent) { |
| | | continue; |
| | | } |
| | | |
| | | if ($parent->mimetype != 'multipart/alternative' && $parent->mimetype != 'multipart/related') { |
| | | continue; |
| | | } |
| | |
| | | |
| | | |
| | | /** |
| | | * Checks if part of the message is an attachment (or part of it) |
| | | * |
| | | * @param rcube_message_part $part Message part |
| | | * |
| | | * @return bool True if the part is an attachment part |
| | | */ |
| | | public function is_attachment($part) |
| | | { |
| | | foreach ($this->attachments as $att_part) { |
| | | if ($att_part->mime_id == $part->mime_id) { |
| | | return true; |
| | | } |
| | | |
| | | // check if the part is a subpart of another attachment part (message/rfc822) |
| | | if ($att_part->mimetype == 'message/rfc822') { |
| | | if (in_array($part, (array)$att_part->parts)) { |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Read the message structure returend by the IMAP server |
| | | * and build flat lists of content parts and attachments |
| | | * |
| | |
| | | foreach ($structure->parts as $p => $sub_part) { |
| | | $sub_mimetype = $sub_part->mimetype; |
| | | |
| | | // skip empty text parts |
| | | if (!$sub_part->size && preg_match('#^text/(plain|html|enriched)$#', $sub_mimetype)) { |
| | | continue; |
| | | } |
| | | |
| | | // check if sub part is |
| | | if ($sub_mimetype == 'text/plain') |
| | | $plain_part = $p; |