Add save all attachments as zip to mail preview

This commit is contained in:
Nathan Gray 2014-07-03 16:57:14 +00:00
parent f2dec7deac
commit ed6d15098a
2 changed files with 52 additions and 0 deletions

View File

@ -453,6 +453,10 @@ class mail_ui
//$content[self::$nm_index]['path'] = self::get_home_dir();
}
}
else if ($content['mailPreview']['mailPreviewHeadersAttachments']['previewAttachmentArea'][0]['save_zip'])
{
$this->download_zip(current($content[self::$nm_index]['selected']));
}
//$content[self::$nm_index]['default_cols'] = 'status,attachments,subject,'.($toSchema?'toaddress':'fromaddress').',date,size'; // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns
$content[self::$nm_index]['default_cols'] = 'status,attachments,subject,address,date,size'; // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns
$content[self::$nm_index]['csv_fields'] = false;
@ -2818,6 +2822,53 @@ class mail_ui
}
/**
* Zip all attachments and send to user
* @param string $message_id
*/
function download_zip($message_id)
{
// First, get all attachment IDs
$attachments = $this->mail_bo->getMessageAttachments($message_id);
// put them in VFS so they can be zipped
$header = $this->mail_bo->getMessageHeader($message_id);
$temp_path = egw_vfs::get_home_dir() . "/.mail_$message_id";
if(egw_vfs::is_dir($temp_path)) egw_vfs::remove ($temp_path);
// Add subject to path, so it gets used as the file name
$path = $temp_path . '/' . ($header['SUBJECT'] ? egw_vfs::encodePathComponent($header['SUBJECT']) : lang('mail')) .'/';
if(!egw_vfs::mkdir($path, 0700, true))
{
egw_framework::message("Unable to open temp directory $path",'error');
return;
}
$file_list = array();
foreach($attachments as $file)
{
$this->mail_bo->reopen($this->mail_bo->sessionData['mailbox']);
$attachment = $this->mail_bo->getAttachment($message_id,$file['partID'],$file['is_winmail'],false);
if (!($fp = egw_vfs::fopen($path.$file['filename'],'wb')) ||
!fwrite($fp,$attachment['attachment']))
{
egw_framework::message("Unable to zip {$file['filename']}",'error');
}
$file_list[] = $path.$file['filename'];
if ($fp) fclose($fp);
}
$this->mail_bo->closeConnection();
// Zip it up
egw_vfs::download_zip($file_list);
// Clean up
egw_vfs::remove($temp_path);
common::egw_exit();
}
function get_load_email_data($uid, $partID, $mailbox,$htmlOptions=null)
{
// seems to be needed, as if we open a mail from notification popup that is

View File

@ -102,6 +102,7 @@
<buttononly id="${row}[save]" value="save" image="fileexport" onclick="app.mail.saveAttachment"/>
<buttononly id="${row}[saveAsVFS]" value="save" image="filemanager/navbar" onclick="app.mail.saveAttachmentToVFS"/>
<buttononly class="$row_cont[classSaveAllPossiblyDisabled]" id="${row}[save_all]" value="save_all" image="mail/save_all" onclick="app.mail.saveAllAttachmentsToVFS"/>
<buttononly class="$row_cont[classSaveAllPossiblyDisabled]" id="${row}[save_zip]" value="save_zip" image="mail/save_all" onclick="widget.getInstanceManager().postSubmit();" label="Save as Zip/>
</row>
</rows>
</grid>