From 133bb07f78b9486f0a524390253f08a0b446c584 Mon Sep 17 00:00:00 2001 From: alecpl Date: Fri, 5 Dec 2008 07:38:54 +0000 Subject: - performance: skip imap connection for attachments actions - created attachments.inc file for attachment upload, remove and display actions --- program/steps/mail/attachments.inc | 127 +++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 program/steps/mail/attachments.inc (limited to 'program/steps/mail/attachments.inc') diff --git a/program/steps/mail/attachments.inc b/program/steps/mail/attachments.inc new file mode 100644 index 000000000..a43b22e57 --- /dev/null +++ b/program/steps/mail/attachments.inc @@ -0,0 +1,127 @@ + | + +-----------------------------------------------------------------------+ + + $Id: compose.inc 2081 2008-11-23 12:38:44Z thomasb $ + +*/ + + +if (!$_SESSION['compose']) { + die("Invalid session var!"); +} + + +// remove an attachment +if ($RCMAIL->action=='remove-attachment') +{ + if (preg_match('/^rcmfile([0-9]+)$/', $_POST['_file'], $regs)) + { + $id = $regs[1]; + if (is_array($_SESSION['compose']['attachments'][$id])) + { + @unlink($_SESSION['compose']['attachments'][$id]['path']); + unset($_SESSION['compose']['attachments'][$id]); + $OUTPUT->command('remove_from_attachment_list', "rcmfile$id"); + $OUTPUT->send(); + } + } + exit; +} + +if ($RCMAIL->action=='display-attachment') +{ + if (preg_match('/^rcmfile([0-9]+)$/', $_GET['_file'], $regs)) + { + $id = $regs[1]; + if (is_array($_SESSION['compose']['attachments'][$id])) + { + $apath = $_SESSION['compose']['attachments'][$id]['path']; + header('Content-Type: ' . $_SESSION['compose']['attachments'][$id]['mimetype']); + header('Content-Length: ' . filesize($apath)); + readfile($apath); + } + } + exit; +} + +// attachment upload action + +// use common temp dir for file uploads +$temp_dir = unslashify($CONFIG['temp_dir']); + +if (!is_array($_SESSION['compose']['attachments'])) { + $_SESSION['compose']['attachments'] = array(); +} + +// clear all stored output properties (like scripts and env vars) +$OUTPUT->reset(); + +if (is_array($_FILES['_attachments']['tmp_name'])) { + foreach ($_FILES['_attachments']['tmp_name'] as $i => $filepath) { + $tmpfname = tempnam($temp_dir, 'rcmAttmnt'); + if (move_uploaded_file($filepath, $tmpfname)) { + $id = count($_SESSION['compose']['attachments']); + $_SESSION['compose']['attachments'][] = array( + 'name' => $_FILES['_attachments']['name'][$i], + 'mimetype' => rc_mime_content_type($tmpfname, $_FILES['_attachments']['type'][$i]), + 'path' => $tmpfname, + ); + + if (is_file($icon = $CONFIG['skin_path'] . '/images/icons/remove-attachment.png')) { + $button = html::img(array( + 'src' => $icon, + 'alt' => rcube_label('delete'), + 'style' => "padding-right:2px;vertical-align:middle", + )); + } + else { + $button = Q(rcube_label('delete')); + } + + $content = html::a(array( + 'href' => "#delete", + 'onclick' => sprintf("return %s.command('remove-attachment','rcmfile%d', this)", JS_OBJECT_NAME, $id), + 'title' => rcube_label('delete'), + ), $button); + + $content .= Q($_FILES['_attachments']['name'][$i]); + + $OUTPUT->command('add2attachment_list', "rcmfile$id", $content); + } + else { // upload failed + $err = $_FILES['_attachments']['error'][$i]; + if ($err == UPLOAD_ERR_INI_SIZE || $err == UPLOAD_ERR_FORM_SIZE) { + $msg = rcube_label(array('name' => 'filesizeerror', 'vars' => array('size' => show_bytes(parse_bytes(ini_get('upload_max_filesize')))))); + } + else { + $msg = rcube_label('fileuploaderror'); + } + + $OUTPUT->command('display_message', $msg, 'error'); + } + } +} +else if ($_SERVER['REQUEST_METHOD'] == 'POST') { + $OUTPUT->command('display_message', rcube_label('fileuploaderror'), 'error'); +} + +// send html page with JS calls as response +$OUTPUT->command('show_attachment_form', false); +$OUTPUT->command('auto_save_start', false); +$OUTPUT->send('iframe'); + +?> -- cgit v1.2.3