From fc3f4ebb5697aec27170ee4da7a43440d0a8385a Mon Sep 17 00:00:00 2001
From: prasad <prasad@vtiger.com>
Date: Tue, 6 Feb 2018 18:55:11 +0530
Subject: [PATCH] Fixes #774: Eliminated friction when download attachment has
 same name (but different content)

---
 .../layouts/v7/modules/MailManager/MailOpen.tpl   |  7 ++++---
 .../modules/MailManager/models/Message.php        | 15 +++++++++------
 .../modules/MailManager/views/Mail.php            |  5 +++--
 3 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/pkg/vtiger/modules/MailManager/layouts/v7/modules/MailManager/MailOpen.tpl b/pkg/vtiger/modules/MailManager/layouts/v7/modules/MailManager/MailOpen.tpl
index ba0e4faec..11a69d5c8 100644
--- a/pkg/vtiger/modules/MailManager/layouts/v7/modules/MailManager/MailOpen.tpl
+++ b/pkg/vtiger/modules/MailManager/layouts/v7/modules/MailManager/MailOpen.tpl
@@ -119,13 +119,14 @@
                     {assign var=ATTACHNAME value=$ATTACHVALUE['filename']}
                     {if $INLINE_ATT[$ATTACHNAME] eq null}
                         {assign var=DOWNLOAD_LINK value=$ATTACHNAME|@escape:'url'}
+						{assign var=ATTACHID value=$ATTACHVALUE['attachid']}
                         <span>
                             <i class="fa {$MAIL->getAttachmentIcon($ATTACHVALUE['path'])}"></i>&nbsp;&nbsp;
-                            <a href="index.php?module={$MODULE}&view=Index&_operation=mail&_operationarg=attachment_dld&_muid={$MAIL->muid()}&_atname={$DOWNLOAD_LINK|@escape:'htmlall':'UTF-8'}">
+                            <a href="index.php?module={$MODULE}&view=Index&_operation=mail&_operationarg=attachment_dld&_muid={$MAIL->muid()}&_atid={$ATTACHID}&_atname={$DOWNLOAD_LINK|@escape:'htmlall':'UTF-8'}">
                                 {$ATTACHNAME}
                             </a>
                             <span>&nbsp;&nbsp;({$ATTACHVALUE['size']})</span>
-                            <a href="index.php?module={$MODULE}&view=Index&_operation=mail&_operationarg=attachment_dld&_muid={$MAIL->muid()}&_atname={$DOWNLOAD_LINK|@escape:'htmlall':'UTF-8'}">
+                            <a href="index.php?module={$MODULE}&view=Index&_operation=mail&_operationarg=attachment_dld&_muid={$MAIL->muid()}&_atid={$ATTACHID}&_atname={$DOWNLOAD_LINK|@escape:'htmlall':'UTF-8'}">
                                 &nbsp;&nbsp;<i class="fa fa-download"></i>
                             </a>
                         </span>
@@ -135,4 +136,4 @@
             </div>
         {/if}
     </div>
-{/strip}
\ No newline at end of file
+{/strip}
diff --git a/pkg/vtiger/modules/MailManager/modules/MailManager/models/Message.php b/pkg/vtiger/modules/MailManager/modules/MailManager/models/Message.php
index 095a55de8..cc10a52e9 100644
--- a/pkg/vtiger/modules/MailManager/modules/MailManager/models/Message.php
+++ b/pkg/vtiger/modules/MailManager/modules/MailManager/models/Message.php
@@ -247,8 +247,9 @@ class MailManager_Message_Model extends Vtiger_MailRecord  {
 	 * @global Array $upload_badext - List of bad extensions
 	 * @param Boolean $withContent - Used to load the Attachments with/withoud content
 	 * @param String $aName - Attachment Name
+	 * @param Integer $aId - Attachment Id (to eliminate friction with same Attachment Name)
 	 */
-	protected function loadAttachmentsFromDB($withContent, $aName=false) {
+	protected function loadAttachmentsFromDB($withContent, $aName=false, $aId=false) {
 		$db = PearDatabase::getInstance();
 		$currentUserModel = Users_Record_Model::getCurrentUserModel();
 
@@ -260,7 +261,8 @@ class MailManager_Message_Model extends Vtiger_MailRecord  {
 			$filteredColumns = "aname, attachid, path, cid";
 
 			$whereClause = "";
-			if ($aName) { $whereClause = " AND aname=?"; $params[] = $aName; }
+			if ($aName) { $whereClause .= " AND aname=?"; $params[] = $aName; }
+			if ($aId)   { $whereClause .= " AND aid=?"; $params[] = $aId; }
 
 			$atResult = $db->pquery("SELECT {$filteredColumns} FROM vtiger_mailmanager_mailattachments
 						WHERE userid=? AND muid=? $whereClause", $params);
@@ -279,7 +281,7 @@ class MailManager_Message_Model extends Vtiger_MailRecord  {
 					$filePath = $atResultRow['path'].$atResultRow['attachid'].'_'.sanitizeUploadFileName($atResultRow['aname'], vglobal('upload_badext'));
 					$fileSize = $this->convertFileSize(filesize($filePath));
 					$data = ($withContent? $fileContent: false);
-					$this->_attachments[] = array('filename'=>$atResultRow['aname'], 'data' => $data, 'size' => $fileSize, 'path' => $filePath);
+					$this->_attachments[] = array('filename'=>$atResultRow['aname'], 'data' => $data, 'size' => $fileSize, 'path' => $filePath, 'attachid' => $atResultRow['attachid']);
 					unset($fileContent); // Clear immediately
 				}
 
@@ -404,10 +406,11 @@ class MailManager_Message_Model extends Vtiger_MailRecord  {
 	 * Gets the Mail Attachments
 	 * @param Boolean $withContent
 	 * @param String $aName
+	 * @param Integer $aId
 	 * @return List of Attachments
 	 */
-	public function attachments($withContent=true, $aName=false) {
-		$this->loadAttachmentsFromDB($withContent, $aName);
+	public function attachments($withContent=true, $aName=false, $aId=false) {
+		$this->loadAttachmentsFromDB($withContent, $aName, $aId);
 		return $this->_attachments;
 	}
 
@@ -700,4 +703,4 @@ class MailManager_Message_Model extends Vtiger_MailRecord  {
 		return $icon;
 	}
 }
-?>
\ No newline at end of file
+?>
diff --git a/pkg/vtiger/modules/MailManager/modules/MailManager/views/Mail.php b/pkg/vtiger/modules/MailManager/modules/MailManager/views/Mail.php
index 34d07c68b..7d03ebff4 100755
--- a/pkg/vtiger/modules/MailManager/modules/MailManager/views/Mail.php
+++ b/pkg/vtiger/modules/MailManager/modules/MailManager/views/Mail.php
@@ -245,6 +245,7 @@ class MailManager_Mail_View extends MailManager_Abstract_View {
 		} else if ('attachment_dld' == $this->getOperationArg($request)) {
 			$attachmentName = $request->getRaw('_atname');
 			$attachmentName= str_replace(' ', '_', $attachmentName);
+			$attachmentId   = $request->get('_atid');
 
 			if (MailManager_Utils_Helper::allowedFileExtension($attachmentName)) {
 				// This is to handle larger uploads
@@ -253,7 +254,7 @@ class MailManager_Mail_View extends MailManager_Abstract_View {
 
 				$mail = new MailManager_Message_Model(false, false);
 				$mail->readFromDB($request->get('_muid'));
-				$attachment = $mail->attachments(true, $attachmentName);
+				$attachment = $mail->attachments(true, $attachmentName, $attachmentId);
 				//As we are sending attachment name, it will return only that attachment details
 				if($attachment[0]['data']) {
 					header("Content-type: application/octet-stream");
@@ -361,4 +362,4 @@ class MailManager_Mail_View extends MailManager_Abstract_View {
 		return $request->validateReadAccess();
 	}
 }
-?>
\ No newline at end of file
+?>
-- 
GitLab