summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2012-12-28 12:40:57 +0100
committerAleksander Machniak <alec@alec.pl>2012-12-28 12:40:57 +0100
commitbe72fb3597c21ca3aaa058adf41bb72d53d197c7 (patch)
treef1f77633fb77f105305967b760f7d37a8372409d
parent8809a1828477101ade03b261662df089e268ecb4 (diff)
Unified attachments filenames handling for message parts without a filename
-rw-r--r--program/lib/Roundcube/rcube_message.php21
-rw-r--r--program/localization/en_US/labels.inc1
-rw-r--r--program/steps/mail/compose.inc11
-rw-r--r--program/steps/mail/func.inc30
-rw-r--r--program/steps/mail/get.inc21
-rw-r--r--program/steps/mail/show.inc5
6 files changed, 30 insertions, 59 deletions
diff --git a/program/lib/Roundcube/rcube_message.php b/program/lib/Roundcube/rcube_message.php
index 9fea8382a..d450bb439 100644
--- a/program/lib/Roundcube/rcube_message.php
+++ b/program/lib/Roundcube/rcube_message.php
@@ -106,7 +106,6 @@ class rcube_message
if (!empty($this->headers->structure)) {
$this->get_mime_numbers($this->headers->structure);
$this->parse_structure($this->headers->structure);
- $this->parse_attachments();
}
else {
$this->body = $this->storage->get_body($uid);
@@ -651,26 +650,6 @@ class rcube_message
/**
- * Parse attachment parts
- */
- private function parse_attachments()
- {
- // Attachment must have a name
- foreach ($this->attachments as $attachment) {
- if (!$attachment->filename) {
- $ext = rcube_mime::get_mime_extensions($attachment->mimetype);
- $ext = array_shift($ext);
-
- $attachment->filename = 'Part_' . $attachment->mime_id;
- if ($ext) {
- $attachment->filename .= '.' . $ext;
- }
- }
- }
- }
-
-
- /**
* Fill aflat array with references to all parts, indexed by part numbers
*
* @param rcube_message_part $part Message body structure
diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
index 730e6af09..fa8f33d6d 100644
--- a/program/localization/en_US/labels.inc
+++ b/program/localization/en_US/labels.inc
@@ -377,6 +377,7 @@ $labels['edititem'] = 'Edit item';
$labels['preferhtml'] = 'Display HTML';
$labels['defaultcharset'] = 'Default Character Set';
$labels['htmlmessage'] = 'HTML Message';
+$labels['messagepart'] = 'Part';
$labels['dateformat'] = 'Date format';
$labels['timeformat'] = 'Time format';
$labels['prettydate'] = 'Pretty dates';
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 379e920e5..74c6d5f29 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -1154,16 +1154,7 @@ function rcmail_save_attachment(&$message, $pid)
}
$mimetype = $part->ctype_primary . '/' . $part->ctype_secondary;
- $filename = $part->filename;
- if (!strlen($filename)) {
- if ($mimetype == 'text/html') {
- $filename = rcube_label('htmlmessage');
- }
- else {
- $filename = 'Part_'.$pid;
- }
- $filename .= '.' . $part->ctype_secondary;
- }
+ $filename = rcmail_attachment_name($part);
$attachment = array(
'group' => $COMPOSE['id'],
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 814adb64d..bedd3e8ea 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -1598,10 +1598,7 @@ function rcmail_message_part_controls($attrib)
$part = $MESSAGE->mime_parts[$part];
$table = new html_table(array('cols' => 3));
- $filename = $part->filename;
- if (empty($filename) && $attach_prop->mimetype == 'text/html') {
- $filename = rcube_label('htmlmessage');
- }
+ $filename = rcmail_attachment_name($part);
if (!empty($filename)) {
$table->add('title', Q(rcube_label('filename')));
@@ -1616,7 +1613,6 @@ function rcmail_message_part_controls($attrib)
}
-
function rcmail_message_part_frame($attrib)
{
global $MESSAGE;
@@ -1841,6 +1837,30 @@ function rcmail_fix_mimetype($name)
return $name;
}
+// return attachment filename, handle empty filename case
+function rcmail_attachment_name($attachment)
+{
+ $filename = $attachment->filename;
+
+ if ($filename === null || $filename === '') {
+ if ($attachment->mimetype == 'text/html') {
+ $filename = rcube_label('htmlmessage');
+ }
+ else {
+ $ext = rcube_mime::get_mime_extensions($attachment->mimetype);
+ $ext = array_shift($ext);
+ $filename = rcube_label('messagepart') . ' ' . $attachment->mime_id;
+ if ($ext) {
+ $filename .= '.' . $ext;
+ }
+ }
+ }
+
+ $filename = preg_replace('[\r\n]', '', $filename);
+
+ return $filename;
+}
+
function rcmail_search_filter($attrib)
{
global $OUTPUT, $CONFIG;
diff --git a/program/steps/mail/get.inc b/program/steps/mail/get.inc
index 803716d61..37f728ebf 100644
--- a/program/steps/mail/get.inc
+++ b/program/steps/mail/get.inc
@@ -47,13 +47,7 @@ check_storage_status();
// show part page
if (!empty($_GET['_frame'])) {
if (($part_id = get_input_value('_part', RCUBE_INPUT_GPC)) && ($part = $MESSAGE->mime_parts[$part_id])) {
- $filename = $part->filename;
- if (empty($filename) && $part->mimetype == 'text/html') {
- $filename = rcube_label('htmlmessage');
- }
- if (!empty($filename)) {
- $OUTPUT->set_pagetitle($filename);
- }
+ $OUTPUT->set_pagetitle(rcmail_attachment_name($part));
}
$OUTPUT->send('messagepart');
@@ -236,18 +230,7 @@ else if (strlen($pid = get_input_value('_part', RCUBE_INPUT_GET))) {
// don't kill the connection if download takes more than 30 sec.
@set_time_limit(0);
- if ($part->filename) {
- $filename = $part->filename;
- }
- else if ($part->mimetype == 'text/html') {
- $filename = rcube_label('htmlmessage');
- }
- else {
- $ext = '.' . ($mimetype == 'text/plain' ? 'txt' : $ctype_secondary);
- $filename = ($MESSAGE->subject ? $MESSAGE->subject : 'roundcube') . $ext;
- }
-
- $filename = preg_replace('[\r\n]', '', $filename);
+ $filename = rcmail_attachment_name($part);
if ($browser->ie && $browser->ver < 7)
$filename = rawurlencode(abbreviate_string($filename, 55));
diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc
index 82594f3e4..22f4ff4c2 100644
--- a/program/steps/mail/show.inc
+++ b/program/steps/mail/show.inc
@@ -150,10 +150,7 @@ function rcmail_message_attachments($attrib)
if (sizeof($MESSAGE->attachments)) {
foreach ($MESSAGE->attachments as $attach_prop) {
- $filename = $attach_prop->filename;
- if (empty($filename) && $attach_prop->mimetype == 'text/html') {
- $filename = rcube_label('htmlmessage');
- }
+ $filename = rcmail_attachment_name($attach_prop);
if ($PRINT_MODE) {
$size = $RCMAIL->message_part_size($attach_prop);