Merge branch 'master' of github.com:roundcube/roundcubemail
commit
700dc66c67
@ -0,0 +1,19 @@
|
||||
require ["enotify","variables"];
|
||||
# rule:[notify1]
|
||||
if header :contains "from" "boss@example.org"
|
||||
{
|
||||
notify :importance "1" :message "This is probably very important" "mailto:alm@example.com";
|
||||
stop;
|
||||
}
|
||||
# rule:[subject]
|
||||
if header :matches "Subject" "*"
|
||||
{
|
||||
set "subject" "${1}";
|
||||
}
|
||||
# rule:[from notify2]
|
||||
if header :matches "From" "*"
|
||||
{
|
||||
set "from" "${1}";
|
||||
notify :importance "3" :message "${from}: ${subject}" "mailto:alm@example.com";
|
||||
}
|
||||
|
@ -0,0 +1,18 @@
|
||||
require ["envelope","variables","enotify"];
|
||||
# rule:[from]
|
||||
if envelope :all :matches "from" "*"
|
||||
{
|
||||
set "env_from" " [really: ${1}]";
|
||||
}
|
||||
# rule:[subject]
|
||||
if header :matches "Subject" "*"
|
||||
{
|
||||
set "subject" "${1}";
|
||||
}
|
||||
# rule:[from notify]
|
||||
if address :all :matches "from" "*"
|
||||
{
|
||||
set "from_addr" "${1}";
|
||||
notify :message "${from_addr}${env_from}: ${subject}" "mailto:alm@example.com";
|
||||
}
|
||||
|
@ -0,0 +1,18 @@
|
||||
require ["notify","variables"];
|
||||
# rule:[notify1]
|
||||
if header :contains "from" "boss@example.org"
|
||||
{
|
||||
notify :low :message "This is probably very important";
|
||||
stop;
|
||||
}
|
||||
# rule:[subject]
|
||||
if header :matches "Subject" "*"
|
||||
{
|
||||
set "subject" "${1}";
|
||||
}
|
||||
# rule:[from notify2]
|
||||
if header :matches "From" "*"
|
||||
{
|
||||
set "from" "${1}";
|
||||
notify :high :message "${from}: ${subject}" :method "mailto:test@example.org";
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
require ["envelope","variables","notify"];
|
||||
# rule:[from]
|
||||
if envelope :all :matches "from" "*"
|
||||
{
|
||||
set "env_from" " [really: ${1}]";
|
||||
}
|
||||
# rule:[subject]
|
||||
if header :matches "Subject" "*"
|
||||
{
|
||||
set "subject" "${1}";
|
||||
}
|
||||
# rule:[from notify]
|
||||
if address :all :matches "from" "*"
|
||||
{
|
||||
set "from_addr" "${1}";
|
||||
notify :message "${from_addr}${env_from}: ${subject}" :method "sms:1234567890";
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
Roundcube Webmail ZipDownload
|
||||
=============================
|
||||
|
||||
2012-09-20
|
||||
==========
|
||||
* Added style for new Larry skin
|
||||
* Made plugin work with 0.8 version of Roundcube
|
||||
* Save attachments to temp files before adding to zip archive (memory!)
|
||||
|
||||
2011 03 12
|
||||
==========
|
||||
* Convert charset for filenames inside zip
|
||||
|
||||
2010 08 30
|
||||
==========
|
||||
* Get all messages in folder, not just the first page
|
||||
|
||||
2010 08 12
|
||||
==========
|
||||
* Use $.inArray() instead of Array.indexOf()
|
||||
|
||||
2010 08 07
|
||||
==========
|
||||
* Add the ability to download a folder as zip
|
||||
* Add the ability to download selection of messages as zip
|
||||
* Add config file to control download options
|
||||
|
||||
2010 05 29
|
||||
==========
|
||||
* Remove tnef_decode, now done by message class (r3680)
|
||||
|
||||
2010 02 21
|
||||
==========
|
||||
* First version
|
@ -0,0 +1,35 @@
|
||||
Roundcube Webmail ZipDownload
|
||||
=============================
|
||||
This plugin adds an option to download all attachments to a message in one zip
|
||||
file, when a message has multiple attachments. The plugin also allows the
|
||||
download of a selection of messages in 1 zip file and the download of entire
|
||||
folders.
|
||||
|
||||
Requirements
|
||||
============
|
||||
* php_zip extension (including ZipArchive class)
|
||||
Either install it via PECL or for PHP >= 5.2 compile with --enable-zip option
|
||||
|
||||
License
|
||||
=======
|
||||
This plugin is released under the GNU General Public License Version 3
|
||||
or later (http://www.gnu.org/licenses/gpl.html).
|
||||
|
||||
Even if skins might contain some programming work, they are not considered
|
||||
as a linked part of the plugin and therefore skins DO NOT fall under the
|
||||
provisions of the GPL license. See the README file located in the core skins
|
||||
folder for details on the skin license.
|
||||
|
||||
Install
|
||||
=======
|
||||
* Place this plugin folder into plugins directory of Roundcube
|
||||
* Add zipdownload to $rcmail_config['plugins'] in your Roundcube config
|
||||
|
||||
NB: When downloading the plugin from GitHub you will need to create a
|
||||
directory called zipdownload and place the files in there, ignoring the
|
||||
root directory in the downloaded archive
|
||||
|
||||
Config
|
||||
======
|
||||
The default config file is plugins/zipdownload/config.inc.php.dist
|
||||
Rename this to plugins/zipdownload/config.inc.php
|
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ZipDownload configuration file
|
||||
*/
|
||||
|
||||
// Zip attachments
|
||||
// Only show the link when there are more than this many attachments
|
||||
// -1 to prevent downloading of attachments as zip
|
||||
$rcmail_config['zipdownload_attachments'] = 1;
|
||||
|
||||
// Zip entire folders
|
||||
$rcmail_config['zipdownload_folder'] = false;
|
||||
|
||||
// Zip selection of messages
|
||||
$rcmail_config['zipdownload_selection'] = false;
|
||||
|
||||
// Charset to use for filenames inside the zip
|
||||
$rcmail_config['zipdownload_charset'] = 'ISO-8859-1';
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: Drakon */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Descarregar tots els adjunts';
|
||||
$labels['downloadfolder'] = 'Descarregar carpeta';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: Tomáš Šafařík */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Stáhnout všechny přílohy';
|
||||
$labels['downloadfolder'] = 'Stáhnout složku';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: John Loft Christiansen */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Download alle som .zip-fil';
|
||||
$labels['downloadfolder'] = 'Download folder som .zip-fil';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: jedix */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Alle Anhänge herunterladen';
|
||||
$labels['downloadfolder'] = 'Ordner herunterladen';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: jedix */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Alle Anhänge herunterladen';
|
||||
$labels['downloadfolder'] = 'Ordner herunterladen';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: Philip Weir */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Download all attachments';
|
||||
$labels['downloadfolder'] = 'Download folder';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: Philip Weir */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Download all attachments';
|
||||
$labels['downloadfolder'] = 'Download folder';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
/* Author: gboksar */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Descargar Todo';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: David Garabana Barro */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Descargar todos los adjuntos';
|
||||
$labels['downloadfolder'] = 'Descargar carpeta';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
/* Author: Henrik Pihl */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Laadi alla kõik manused';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: Olivier Le Brouster */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Télécharger toutes les pièces jointes';
|
||||
$labels['downloadfolder'] = 'Télécharger le répertoire';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: David Garabana Barro */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Descargar tódolos adxuntos';
|
||||
$labels['downloadfolder'] = 'Descargar o cartafol';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: Németh János */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Összes csatolmány letöltése';
|
||||
$labels['downloadfolder'] = 'Könyvtár letöltése';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: Roberto Puzzanghera */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Scarica tutti gli allegati';
|
||||
$labels['downloadfolder'] = 'Scarica cartella';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: Wouter Kevenaar*/
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Alle bijlagen downloaden';
|
||||
$labels['downloadfolder'] = 'Map downloaden';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: DZIOBAK */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Pobierz wszystkie jako ZIP';
|
||||
$labels['downloadfolder'] = 'Pobierz folder';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
/* Author: Alexandre Gorges */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Baixar todos os anexos';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
/* Author: Ovidiu Bica */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Descarca toate atasamentele.';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/* Author: Peter Zotov */
|
||||
|
||||
$labels = array();
|
||||
$labels['downloadall'] = 'Загрузить все вложения';
|
||||
$labels['downloadfolder'] = 'Загрузить каталог';
|
||||
|
||||
$messages = array();
|
||||
|
||||
?>
|
@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.9.0" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
|
||||
http://pear.php.net/dtd/tasks-1.0.xsd
|
||||
http://pear.php.net/dtd/package-2.0
|
||||
http://pear.php.net/dtd/package-2.0.xsd">
|
||||
<name>zipdownload</name>
|
||||
<channel>pear.roundcube.net</channel>
|
||||
<summary>Download multiple attachments or messages in one zip file</summary>
|
||||
<description>Adds an option to download all attachments to a message in one zip file, when a message has multiple attachments. Also allows the download of a selection of messages in one zip file and the download of entire folders.</description>
|
||||
<lead>
|
||||
<name>Philip Weir</name>
|
||||
<user>JohnDoh</user>
|
||||
<email>roundcube@tehinterweb.co.uk</email>
|
||||
<active>no</active>
|
||||
</lead>
|
||||
<lead>
|
||||
<name>Thomas Bruederli</name>
|
||||
<user>bruederli</user>
|
||||
<email>roundcube@gmail.com</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<date>2012-09-20</date>
|
||||
<time>19:16:00</time>
|
||||
<version>
|
||||
<release>2.0</release>
|
||||
<api>2.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://www.gnu.org/licenses/gpl.html">GNU GPLv3+</license>
|
||||
<notes>Repo only</notes>
|
||||
<contents>
|
||||
<dir baseinstalldir="/" name="/">
|
||||
<file name="zipdownload.php" role="php">
|
||||
<tasks:replace from="@name@" to="name" type="package-info"/>
|
||||
<tasks:replace from="@package_version@" to="version" type="package-info"/>
|
||||
</file>
|
||||
<file name="zipdownload.js" role="data">
|
||||
<tasks:replace from="@name@" to="name" type="package-info"/>
|
||||
<tasks:replace from="@package_version@" to="version" type="package-info"/>
|
||||
</file>
|
||||
<file name="config.inc.php.dist" role="data"/>
|
||||
<file name="CHANGELOG" role="data"/>
|
||||
<file name="README" role="data"/>
|
||||
<file name="localization/ca_ES.inc" role="data"/>
|
||||
<file name="localization/cs_CZ.inc" role="data"/>
|
||||
<file name="localization/da_DK.inc" role="data"/>
|
||||
<file name="localization/de_CH.inc" role="data"/>
|
||||
<file name="localization/de_DE.inc" role="data"/>
|
||||
<file name="localization/en_GB.inc" role="data"/>
|
||||
<file name="localization/en_US.inc" role="data"/>
|
||||
<file name="localization/es_AR.inc" role="data"/>
|
||||
<file name="localization/es_ES.inc" role="data"/>
|
||||
<file name="localization/et_EE.inc" role="data"/>
|
||||
<file name="localization/fr_FR.inc" role="data"/>
|
||||
<file name="localization/gl_ES.inc" role="data"/>
|
||||
<file name="localization/hu_HU.inc" role="data"/>
|
||||
<file name="localization/it_IT.inc" role="data"/>
|
||||
<file name="localization/nl_NL.inc" role="data"/>
|
||||
<file name="localization/pl_PL.inc" role="data"/>
|
||||
<file name="localization/pt_BR.inc" role="data"/>
|
||||
<file name="localization/ro_RO.inc" role="data"/>
|
||||
<file name="localization/ru_RU.inc" role="data"/>
|
||||
<file name="localization/tr_TR.inc" role="data"/>
|
||||
<file name="skins/classic/zip.png" role="data"/>
|
||||
<file name="skins/classic/zipdownload.css" role="data"/>
|
||||
<file name="skins/larry/zipdownload.css" role="data"/>
|
||||
</dir>
|
||||
<!-- / -->
|
||||
</contents>
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>5.2.1</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.7.0</min>
|
||||
</pearinstaller>
|
||||
<extension>
|
||||
<name>zip</name>
|
||||
<channel>pecl.php.net</channel>
|
||||
<providesextension>zip</providesextension>
|
||||
</extension>
|
||||
</required>
|
||||
</dependencies>
|
||||
<phprelease/>
|
||||
</package>
|
Binary file not shown.
After Width: | Height: | Size: 546 B |
@ -0,0 +1,8 @@
|
||||
/* Roundcube Zipdownload plugin styles for classic skin */
|
||||
|
||||
a.zipdownload {
|
||||
display: inline-block;
|
||||
padding: 0 0 2px 20px;
|
||||
background: url(zip.png) 0 1px no-repeat;
|
||||
font-style: italic;
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
/* Roundcube Zipdownload plugin styles for skin "Larry" */
|
||||
|
||||
a.zipdownload {
|
||||
display: inline-block;
|
||||
margin-top: 1.5em;
|
||||
padding: 3px 5px 4px 5px;
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
/**
|
||||
* ZipDownload plugin script
|
||||
*/
|
||||
|
||||
function rcmail_zipmessages() {
|
||||
if (rcmail.message_list && rcmail.message_list.get_selection().length > 1) {
|
||||
rcmail.goto_url('plugin.zipdownload.zip_messages', '_mbox=' + urlencode(rcmail.env.mailbox) + '&_uid=' + rcmail.message_list.get_selection().join(','));
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
if (window.rcmail) {
|
||||
rcmail.addEventListener('init', function(evt) {
|
||||
// register command (directly enable in message view mode)
|
||||
rcmail.register_command('plugin.zipdownload.zip_folder', function() {
|
||||
rcmail.goto_url('plugin.zipdownload.zip_folder', '_mbox=' + urlencode(rcmail.env.mailbox));
|
||||
}, rcmail.env.messagecount > 0);
|
||||
|
||||
if (rcmail.message_list && rcmail.env.zipdownload_selection) {
|
||||
rcmail.message_list.addEventListener('select', function(list) {
|
||||
rcmail.enable_command('download', list.get_selection().length > 0);
|
||||
});
|
||||
|
||||
// check in contextmenu plugin exists and if so allow multiple message download
|
||||
if (rcmail.contextmenu_disable_multi)
|
||||
rcmail.contextmenu_disable_multi.splice($.inArray('#download', rcmail.contextmenu_disable_multi), 1);
|
||||
}
|
||||
});
|
||||
|
||||
rcmail.addEventListener('listupdate', function(props) { rcmail.enable_command('plugin.zipdownload.zip_folder', rcmail.env.messagecount > 0); } );
|
||||
rcmail.addEventListener('beforedownload', function(props) { rcmail_zipmessages(); } );
|
||||
}
|
||||
});
|
@ -0,0 +1,267 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ZipDownload
|
||||
*
|
||||
* Plugin to allow the download of all message attachments in one zip file
|
||||
*
|
||||
* @version @package_version@
|
||||
* @requires php_zip extension (including ZipArchive class)
|
||||
* @author Philip Weir
|
||||
* @author Thomas Bruderli
|
||||
*/
|
||||
class zipdownload extends rcube_plugin
|
||||
{
|
||||
public $task = 'mail';
|
||||
private $charset = 'ASCII';
|
||||
|
||||
/**
|
||||
* Plugin initialization
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
// check requirements first
|
||||
if (!class_exists('ZipArchive', false)) {
|
||||
rcmail::raise_error(array(
|
||||
'code' => 520, 'type' => 'php',
|
||||
'file' => __FILE__, 'line' => __LINE__,
|
||||
'message' => "php_zip extension is required for the zipdownload plugin"), true, false);
|
||||
return;
|
||||
}
|
||||
|
||||
$rcmail = rcmail::get_instance();
|
||||
$this->charset = $rcmail->config->get('zipdownload_charset', RCMAIL_CHARSET);
|
||||
|
||||
$this->load_config();
|
||||
$this->add_texts('localization');
|
||||
|
||||
if ($rcmail->config->get('zipdownload_attachments', 1) > -1 && ($rcmail->action == 'show' || $rcmail->action == 'preview'))
|
||||
$this->add_hook('template_object_messageattachments', array($this, 'attachment_ziplink'));
|
||||
|
||||
$this->register_action('plugin.zipdownload.zip_attachments', array($this, 'download_attachments'));
|
||||
$this->register_action('plugin.zipdownload.zip_messages', array($this, 'download_selection'));
|
||||
$this->register_action('plugin.zipdownload.zip_folder', array($this, 'download_folder'));
|
||||
|
||||
if ($rcmail->config->get('zipdownload_folder', false) || $rcmail->config->get('zipdownload_selection', false)) {
|
||||
$this->include_script('zipdownload.js');
|
||||
$this->api->output->set_env('zipdownload_selection', $rcmail->config->get('zipdownload_selection', false));
|
||||
|
||||
if ($rcmail->config->get('zipdownload_folder', false) && ($rcmail->action == '' || $rcmail->action == 'show')) {
|
||||
$zipdownload = $this->api->output->button(array('command' => 'plugin.zipdownload.zip_folder', 'type' => 'link', 'classact' => 'active', 'content' => $this->gettext('downloadfolder')));
|
||||
$this->api->add_content(html::tag('li', array('class' => 'separator_above'), $zipdownload), 'mailboxoptions');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Place a link/button after attachments listing to trigger download
|
||||
*/
|
||||
public function attachment_ziplink($p)
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
// only show the link if there is more than the configured number of attachments
|
||||
if (substr_count($p['content'], '<li') > $rcmail->config->get('zipdownload_attachments', 1)) {
|
||||
$link = html::a(array(
|
||||
'href' => rcmail_url('plugin.zipdownload.zip_attachments', array('_mbox' => $rcmail->output->env['mailbox'], '_uid' => $rcmail->output->env['uid'])),
|
||||
'class' => 'button zipdownload',
|
||||
),
|
||||
Q($this->gettext('downloadall'))
|
||||
);
|
||||
|
||||
// append link to attachments list, slightly different in some skins
|
||||
switch (rcmail::get_instance()->config->get('skin')) {
|
||||
case 'classic':
|
||||
$p['content'] = str_replace('</ul>', html::tag('li', array('class' => 'zipdownload'), $link) . '</ul>', $p['content']);
|
||||
break;
|
||||
|
||||
default:
|
||||
$p['content'] .= $link;
|
||||
break;
|
||||
}
|
||||
|
||||
$this->include_stylesheet($this->local_skin_path() . '/zipdownload.css');
|
||||
}
|
||||
|
||||
return $p;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handler for attachment download action
|
||||
*/
|
||||
public function download_attachments()
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
$imap = $rcmail->storage;
|
||||
$temp_dir = $rcmail->config->get('temp_dir');
|
||||
$tmpfname = tempnam($temp_dir, 'zipdownload');
|
||||
$tempfiles = array($tmpfname);
|
||||
$message = new rcube_message(get_input_value('_uid', RCUBE_INPUT_GET));
|
||||
|
||||
// open zip file
|
||||
$zip = new ZipArchive();
|
||||
$zip->open($tmpfname, ZIPARCHIVE::OVERWRITE);
|
||||
|
||||
foreach ($message->attachments as $part) {
|
||||
$pid = $part->mime_id;
|
||||
$part = $message->mime_parts[$pid];
|
||||
$disp_name = $this->_convert_filename($part->filename, $part->charset);
|
||||
|
||||
if ($part->body) {
|
||||
$orig_message_raw = $part->body;
|
||||
$zip->addFromString($disp_name, $orig_message_raw);
|
||||
}
|
||||
else {
|
||||
$tmpfn = tempnam($temp_dir, 'zipattach');
|
||||
$tmpfp = fopen($tmpfn, 'w');
|
||||
$imap->get_message_part($message->uid, $part->mime_id, $part, null, $tmpfp, true);
|
||||
$tempfiles[] = $tmpfn;
|
||||
fclose($tmpfp);
|
||||
$zip->addFile($tmpfn, $disp_name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$zip->close();
|
||||
|
||||
$filename = ($message->subject ? $message->subject : 'roundcube') . '.zip';
|
||||
$this->_deliver_zipfile($tmpfname, $filename);
|
||||
|
||||
// delete temporary files from disk
|
||||
foreach ($tempfiles as $tmpfn)
|
||||
unlink($tmpfn);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handler for message download action
|
||||
*/
|
||||
public function download_selection()
|
||||
{
|
||||
if (isset($_REQUEST['_uid'])) {
|
||||
$uids = explode(",", get_input_value('_uid', RCUBE_INPUT_GPC));
|
||||
|
||||
if (sizeof($uids) > 0)
|
||||
$this->_download_messages($uids);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handler for folder download action
|
||||
*/
|
||||
public function download_folder()
|
||||
{
|
||||
$imap = rcmail::get_instance()->storage;
|
||||
$mbox_name = $imap->get_folder();
|
||||
|
||||
// initialize searching result if search_filter is used
|
||||
if ($_SESSION['search_filter'] && $_SESSION['search_filter'] != 'ALL') {
|
||||
$imap->search($mbox_name, $_SESSION['search_filter'], RCMAIL_CHARSET);
|
||||
}
|
||||
|
||||
// fetch message headers for all pages
|
||||
$uids = array();
|
||||
if ($count = $imap->count($mbox_name, $imap->get_threading() ? 'THREADS' : 'ALL', FALSE)) {
|
||||
for ($i = 0; ($i * $imap->get_pagesize()) <= $count; $i++) {
|
||||
$a_headers = $imap->list_messages($mbox_name, ($i + 1));
|
||||
|
||||
foreach ($a_headers as $n => $header) {
|
||||
if (empty($header))
|
||||
continue;
|
||||
|
||||
array_push($uids, $header->uid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sizeof($uids) > 0)
|
||||
$this->_download_messages($uids);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to packs all the given messages into a zip archive
|
||||
*
|
||||
* @param array List of message UIDs to download
|
||||
*/
|
||||
private function _download_messages($uids)
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
$imap = $rcmail->storage;
|
||||
$temp_dir = $rcmail->config->get('temp_dir');
|
||||
$tmpfname = tempnam($temp_dir, 'zipdownload');
|
||||
$tempfiles = array($tmpfname);
|
||||
|
||||
// open zip file
|
||||
$zip = new ZipArchive();
|
||||
$zip->open($tmpfname, ZIPARCHIVE::OVERWRITE);
|
||||
|
||||
foreach ($uids as $key => $uid){
|
||||
$headers = $imap->get_message_headers($uid);
|
||||
$subject = rcube_mime::decode_mime_string((string)$headers->subject);
|
||||
$subject = $this->_convert_filename($subject);
|
||||
$subject = substr($subject, 0, 16);
|
||||
|
||||
if (isset($subject) && $subject !="")
|
||||
$disp_name = $subject . ".eml";
|
||||
else
|
||||
$disp_name = "message_rfc822.eml";
|
||||
|
||||
$disp_name = $uid . "_" . $disp_name;
|
||||
|
||||
$tmpfn = tempnam($temp_dir, 'zipmessage');
|
||||
$tmpfp = fopen($tmpfn, 'w');
|
||||
$imap->get_raw_body($uid, $tmpfp);
|
||||
$tempfiles[] = $tmpfn;
|
||||
fclose($tmpfp);
|
||||
$zip->addFile($tmpfn, $disp_name);
|
||||
}
|
||||
|
||||
$zip->close();
|
||||
|
||||
$this->_deliver_zipfile($tmpfname, $imap->get_folder() . '.zip');
|
||||
|
||||
// delete temporary files from disk
|
||||
foreach ($tempfiles as $tmpfn)
|
||||
unlink($tmpfn);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to send the zip archive to the browser
|
||||
*/
|
||||
private function _deliver_zipfile($tmpfname, $filename)
|
||||
{
|
||||
$browser = new rcube_browser;
|
||||
send_nocacheing_headers();
|
||||
|
||||
if ($browser->ie && $browser->ver < 7)
|
||||
$filename = rawurlencode(abbreviate_string($filename, 55));
|
||||
else if ($browser->ie)
|
||||
$filename = rawurlencode($filename);
|
||||
else
|
||||
$filename = addcslashes($filename, '"');
|
||||
|
||||
// send download headers
|
||||
header("Content-Type: application/octet-stream");
|
||||
if ($browser->ie)
|
||||
header("Content-Type: application/force-download");
|
||||
|
||||
// don't kill the connection if download takes more than 30 sec.
|
||||
@set_time_limit(0);
|
||||
header("Content-Disposition: attachment; filename=\"". $filename ."\"");
|
||||
header("Content-length: " . filesize($tmpfname));
|
||||
readfile($tmpfname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to convert filenames to the configured charset
|
||||
*/
|
||||
private function _convert_filename($str, $from = RCMAIL_CHARSET)
|
||||
{
|
||||
return strtr(rcube_charset_convert($str, $from, $this->charset), array(':'=>'', '/'=>'-'));
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
Loading…
Reference in New Issue