| | |
| | | foreach ($tnef_arr as $pid => $winatt) { |
| | | $tpart = new rcube_message_part; |
| | | |
| | | $tpart->filename = trim($winatt['name']); |
| | | $tpart->filename = $this->fix_attachment_name(trim($winatt['name']), $part); |
| | | $tpart->encoding = 'stream'; |
| | | $tpart->ctype_primary = trim(strtolower($winatt['type'])); |
| | | $tpart->ctype_secondary = trim(strtolower($winatt['subtype'])); |
| | |
| | | return $parts; |
| | | } |
| | | |
| | | /** |
| | | * Fix attachment name encoding if needed/possible |
| | | */ |
| | | protected function fix_attachment_name($name, $part) |
| | | { |
| | | if ($name == rcube_charset::clean($name)) { |
| | | return $name; |
| | | } |
| | | |
| | | // find charset from part or its parent(s) |
| | | if ($part->charset) { |
| | | $charsets[] = $part->charset; |
| | | } |
| | | else { |
| | | // check first part (common case) |
| | | $n = strpos($part->mime_id, '.') ? preg_replace('/\.[0-9]+$/', '', $part->mime_id) . '.1' : 1; |
| | | if (($_part = $this->mime_parts[$n]) && $_part->charset) { |
| | | $charsets[] = $_part->charset; |
| | | } |
| | | |
| | | // check parents' charset |
| | | $items = explode('.', $part->mime_id); |
| | | for ($i = count($items)-1; $i > 0; $i--) { |
| | | $last = array_pop($items); |
| | | $parent = $this->mime_parts[join('.', $items)]; |
| | | |
| | | if ($parent && $parent->charset) { |
| | | $charsets[] = $parent->charset; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if ($this->headers->charset) { |
| | | $charsets[] = $this->headers->charset; |
| | | } |
| | | |
| | | if (empty($charsets)) { |
| | | $rcube = rcube::get_instance(); |
| | | $charsets[] = rcube_charset::detect($name, $rcube->config->get('default_charset', RCUBE_CHARSET)); |
| | | } |
| | | |
| | | foreach (array_unique($charsets) as $charset) { |
| | | $_name = rcube_charset::convert($name, $charset); |
| | | |
| | | if ($_name == rcube_charset::clean($_name)) { |
| | | if (!$part->charset) { |
| | | $part->charset = $charset; |
| | | } |
| | | |
| | | return $_name; |
| | | } |
| | | } |
| | | |
| | | return $name; |
| | | } |
| | | |
| | | /** |
| | | * Deprecated methods (to be removed) |