Mail: If there are multiple attachments with the same file name, give them unique names when integrating to another app

This commit is contained in:
nathan 2023-08-23 12:59:04 -06:00
parent 90b03d34d1
commit 979a965aec

View File

@ -354,10 +354,24 @@ class mail_integration {
// Get attachments ready for integration as link // Get attachments ready for integration as link
if (is_array($mailcontent['attachments'])) if (is_array($mailcontent['attachments']))
{ {
$data_attachments = array();
foreach($mailcontent['attachments'] as $key => $attachment) foreach($mailcontent['attachments'] as $key => $attachment)
{ {
// Find a unique name, in case there are multiple attachments with the same filename
$name = $attachment['filename'] ?? $mailcontent['attachments'][$key]['name'];
$i = 1;
$info = pathinfo($name);
while(count(array_filter($data_attachments, function ($v) use ($name)
{
return $v['name'] == $name;
}, ARRAY_FILTER_USE_BOTH)
) > 0)
{
$name = $info['filename'] . " ($i)." . $info['extension'];
$i++;
}
$data_attachments[$key] = array( $data_attachments[$key] = array(
'name' => $attachment['filename'] ?? $mailcontent['attachments'][$key]['name'], 'name' => $name,
'type' => $mailcontent['attachments'][$key]['type'], 'type' => $mailcontent['attachments'][$key]['type'],
'size' => $mailcontent['attachments'][$key]['size'], 'size' => $mailcontent['attachments'][$key]['size'],
'tmp_name' => $mailcontent['attachments'][$key]['tmp_name'] 'tmp_name' => $mailcontent['attachments'][$key]['tmp_name']