alecpl
2008-12-05 133bb07f78b9486f0a524390253f08a0b446c584
- performance: skip imap connection for attachments actions
- created attachments.inc file for attachment upload, remove and display actions


1 files renamed
3 files modified
80 ■■■■ changed files
index.php 5 ●●●●● patch | view | raw | blame | history
program/steps/mail/attachments.inc 44 ●●●● patch | view | raw | blame | history
program/steps/mail/compose.inc 28 ●●●●● patch | view | raw | blame | history
program/steps/mail/func.inc 3 ●●●● patch | view | raw | blame | history
index.php
@@ -176,8 +176,9 @@
    'send'    => 'sendmail.inc',
    'expunge' => 'folders.inc',
    'purge'   => 'folders.inc',
    'remove-attachment'  => 'compose.inc',
    'display-attachment' => 'compose.inc',
    'remove-attachment'  => 'attachments.inc',
    'display-attachment' => 'attachments.inc',
    'upload' => 'attachments.inc',
  ),
  
  'addressbook' => array(
program/steps/mail/attachments.inc
File was renamed from program/steps/mail/upload.inc
@@ -2,20 +2,20 @@
/*
 +-----------------------------------------------------------------------+
 | program/steps/mail/upload.inc                                         |
 | program/steps/mail/attachments.inc                                    |
 |                                                                       |
 | This file is part of the RoundCube Webmail client                     |
 | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland                 |
 | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland                 |
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Handle file-upload and make them available as attachments           |
 |   Upload, remove, display attachments in compose form                 |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
 $Id$
 $Id: compose.inc 2081 2008-11-23 12:38:44Z thomasb $
*/
@@ -25,9 +25,43 @@
}
// 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();
program/steps/mail/compose.inc
@@ -24,34 +24,6 @@
define('RCUBE_COMPOSE_FORWARD', 0x0107);
define('RCUBE_COMPOSE_DRAFT', 0x0108);
// remove an attachment
if ($RCMAIL->action=='remove-attachment' && 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' && 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;
}
$MESSAGE_FORM = NULL;
$MESSAGE = NULL;
program/steps/mail/func.inc
@@ -25,7 +25,7 @@
$EMAIL_ADDRESS_PATTERN = '/([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})/i';
// actions that do not require imap connection
$NOIMAP_ACTIONS = array('spell', 'addcontact', 'autocomplete', 'upload');
$NOIMAP_ACTIONS = array('spell', 'addcontact', 'autocomplete', 'upload', 'display-attachment', 'remove-attachment');
// log in to imap server
@@ -38,7 +38,6 @@
  $OUTPUT->set_env('task', 'login');
  $OUTPUT->send('login');
}
// set imap properties and session vars