Use PharData to create Zip when ZipArchive is not available

This commit is contained in:
djmaze 2021-02-10 15:47:22 +01:00
parent e3376c244e
commit 15631427b0
3 changed files with 35 additions and 19 deletions

View file

@ -717,8 +717,8 @@ class MessageViewMailBoxUserView extends AbstractViewRight {
if (hashes.length) { if (hashes.length) {
Remote.attachmentsActions('Zip', hashes, this.downloadAsZipLoading) Remote.attachmentsActions('Zip', hashes, this.downloadAsZipLoading)
.then((result) => { .then((result) => {
if (result && result.Result && result.Result.Files && result.Result.Files[0] && result.Result.Files[0].Hash) { if (result && result.Result && result.Result.FileHash) {
rl.app.download(attachmentDownload(result.Result.Files[0].Hash)); rl.app.download(attachmentDownload(result.Result.FileHash));
} else { } else {
this.downloadAsZipError(true); this.downloadAsZipError(true);
} }

View file

@ -989,7 +989,7 @@ class Actions
$aAttachmentsActions = array(); $aAttachmentsActions = array();
if ($this->GetCapa(false, $bMobile, Enumerations\Capa::ATTACHMENTS_ACTIONS)) { if ($this->GetCapa(false, $bMobile, Enumerations\Capa::ATTACHMENTS_ACTIONS)) {
if (\class_exists('ZipArchive')) { if (\class_exists('PharData') || \class_exists('ZipArchive')) {
$aAttachmentsActions[] = 'zip'; $aAttachmentsActions[] = 'zip';
} }
} }

View file

@ -131,13 +131,11 @@ trait User
{ {
case 'zip': case 'zip':
if (\class_exists('ZipArchive')) $sZipHash = \MailSo\Base\Utils::Md5Rand();
{ $sZipFileName = $oFilesProvider->GenerateLocalFullFileName($oAccount, $sZipHash);
$sZipHash = \MailSo\Base\Utils::Md5Rand();
$sZipFileName = $oFilesProvider->GenerateLocalFullFileName($oAccount, $sZipHash);
if (!empty($sZipFileName)) if (!empty($sZipFileName)) {
{ if (\class_exists('ZipArchive')) {
$oZip = new \ZipArchive(); $oZip = new \ZipArchive();
$oZip->open($sZipFileName, \ZIPARCHIVE::CREATE | \ZIPARCHIVE::OVERWRITE); $oZip->open($sZipFileName, \ZIPARCHIVE::CREATE | \ZIPARCHIVE::OVERWRITE);
$oZip->setArchiveComment('SnappyMail/'.APP_VERSION); $oZip->setArchiveComment('SnappyMail/'.APP_VERSION);
@ -165,12 +163,33 @@ trait User
{ {
$oZip->close(); $oZip->close();
} }
} else {
@\unlink($sZipFileName);
$oZip = new \PharData($sZipFileName . '.zip', 0, null, \Phar::ZIP);
$oZip->compressFiles(\Phar::GZ);
foreach ($aData as $aItem)
{
$sFileName = (isset($aItem['FileName']) ? (string) $aItem['FileName'] : 'file.dat');
$sFileHash = (isset($aItem['FileHash']) ? (string) $aItem['FileHash'] : '');
if ($sFileHash)
{
$sFullFileNameHash = $oFilesProvider->GetFileName($oAccount, $sFileHash);
$oZip->addFile($sFullFileNameHash, $sFileName);
}
}
$oZip->compressFiles(\Phar::GZ);
unset($oZip);
\rename($sZipFileName . '.zip', $sZipFileName);
} }
foreach ($aData as $aItem) foreach ($aData as $aItem)
{ {
$sFileHash = (string) (isset($aItem['FileHash']) ? $aItem['FileHash'] : ''); $sFileHash = (isset($aItem['FileHash']) ? (string) $aItem['FileHash'] : '');
if (!empty($sFileHash)) if ($sFileHash)
{ {
$oFilesProvider->Clear($oAccount, $sFileHash); $oFilesProvider->Clear($oAccount, $sFileHash);
} }
@ -179,15 +198,12 @@ trait User
if (!$bError) if (!$bError)
{ {
$mResult = array( $mResult = array(
'Files' => array(array( 'FileHash' => Utils::EncodeKeyValuesQ(array(
'V' => APP_VERSION,
'Account' => $oAccount ? \md5($oAccount->Hash()) : '',
'FileName' => 'attachments.zip', 'FileName' => 'attachments.zip',
'Hash' => Utils::EncodeKeyValuesQ(array( 'MimeType' => 'application/zip',
'V' => APP_VERSION, 'FileHash' => $sZipHash
'Account' => $oAccount ? \md5($oAccount->Hash()) : '',
'FileName' => 'attachments.zip',
'MimeType' => 'application/zip',
'FileHash' => $sZipHash
))
)) ))
); );
} }