From f37261538451e1477ec875667185fde3efa42a46 Mon Sep 17 00:00:00 2001 From: "deb.monish" Date: Fri, 30 Sep 2016 16:48:47 +0530 Subject: [PATCH] CRM-19294: Unable to upload files via a contribution page --- CRM/Contribute/Form/ContributionBase.php | 14 +++++++-- CRM/Core/BAO/CustomField.php | 11 ++----- CRM/Core/Page/File.php | 18 ++++++++--- CRM/Utils/File.php | 40 ++++++++++++++++++++++++ templates/CRM/UF/Form/Block.tpl | 2 ++ 5 files changed, 70 insertions(+), 15 deletions(-) diff --git a/CRM/Contribute/Form/ContributionBase.php b/CRM/Contribute/Form/ContributionBase.php index 45f13c35ad..e408c5ff19 100644 --- a/CRM/Contribute/Form/ContributionBase.php +++ b/CRM/Contribute/Form/ContributionBase.php @@ -629,13 +629,19 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { CRM_Core_BAO_Address::checkContactSharedAddressFields($fields, $contactID); $addCaptcha = FALSE; + // fetch file preview when not submitted yet, like in online contribution Confirm and ThankYou page + $viewOnlyFileValues = array(); foreach ($fields as $key => $field) { if ($viewOnly && isset($field['data_type']) && $field['data_type'] == 'File' || ($viewOnly && $field['name'] == 'image_URL') ) { - // ignore file upload fields - continue; + $viewOnlyFileValues[$key] = ''; + if (!empty($this->_params[$key])) { + $path = CRM_Utils_Array::value('name', $this->_params[$key]); + $fileType = CRM_Utils_Array::value('type', $this->_params[$key]); + $viewOnlyFileValues[$key] = CRM_Utils_File::getFileURL($path, $fileType); + } } if ($profileContactType) { @@ -687,6 +693,10 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { $this->assign($name, $fields); + if (count($viewOnlyFileValues)) { + $this->assign('viewOnlyFileValues', $viewOnlyFileValues); + } + if ($addCaptcha && !$viewOnly) { $captcha = CRM_Utils_ReCAPTCHA::singleton(); $captcha->add($this); diff --git a/CRM/Core/BAO/CustomField.php b/CRM/Core/BAO/CustomField.php index 4bdcacc0fa..a71e503109 100644 --- a/CRM/Core/BAO/CustomField.php +++ b/CRM/Core/BAO/CustomField.php @@ -1438,18 +1438,13 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { 'id' ); list($path) = CRM_Core_BAO_File::path($fileID, $entityId, NULL, NULL); - list($imageWidth, $imageHeight) = getimagesize($path); - list($imageThumbWidth, $imageThumbHeight) = CRM_Contact_BAO_Contact::getThumbSize($imageWidth, $imageHeight); $url = CRM_Utils_System::url('civicrm/file', "reset=1&id=$fileID&eid=$contactID", $absolute, NULL, TRUE, TRUE ); - $result['file_url'] = " - - - "; - // for non image files + $result['file_url'] = CRM_Utils_File::getFileURL($path, $fileType, $url); } + // for non image files else { $uri = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_File', $fileID, @@ -1459,7 +1454,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField { "reset=1&id=$fileID&eid=$contactID", $absolute, NULL, TRUE, TRUE ); - $result['file_url'] = "{$uri}"; + $result['file_url'] = CRM_Utils_File::getFileURL($uri, $fileType, $url); } } return $result; diff --git a/CRM/Core/Page/File.php b/CRM/Core/Page/File.php index b0632cf9be..dc02ce8017 100644 --- a/CRM/Core/Page/File.php +++ b/CRM/Core/Page/File.php @@ -35,13 +35,21 @@ class CRM_Core_Page_File extends CRM_Core_Page { public function run() { - $eid = CRM_Utils_Request::retrieve('eid', 'Positive', $this, TRUE); - $fid = CRM_Utils_Request::retrieve('fid', 'Positive', $this, FALSE); - $id = CRM_Utils_Request::retrieve('id', 'Positive', $this, TRUE); - $quest = CRM_Utils_Request::retrieve('quest', 'String', $this); + $fileName = CRM_Utils_Request::retrieve('filename', 'String', $this); + $path = CRM_Core_Config::singleton()->customFileUploadDir . $fileName; + $mimeType = CRM_Utils_Request::retrieve('mime-type', 'String', $this); $action = CRM_Utils_Request::retrieve('action', 'String', $this); - list($path, $mimeType) = CRM_Core_BAO_File::path($id, $eid, NULL, $quest); + // if we are not providing essential parameter needed for file preview then + if (empty($fileName) && empty($mimeType)) { + $eid = CRM_Utils_Request::retrieve('eid', 'Positive', $this, TRUE); + $fid = CRM_Utils_Request::retrieve('fid', 'Positive', $this, FALSE); + $id = CRM_Utils_Request::retrieve('id', 'Positive', $this, TRUE); + $quest = CRM_Utils_Request::retrieve('quest', 'String', $this); + + list($path, $mimeType) = CRM_Core_BAO_File::path($id, $eid, NULL, $quest); + } + if (!$path) { CRM_Core_Error::statusBounce('Could not retrieve the file'); } diff --git a/CRM/Utils/File.php b/CRM/Utils/File.php index 284b71a5ea..a99077ef67 100644 --- a/CRM/Utils/File.php +++ b/CRM/Utils/File.php @@ -786,4 +786,44 @@ HTACCESS; $param[$fileName] = $fileParams; } + /** + * Return formatted file URL, like for image file return image url with image icon + * + * @param string $path + * Absoulte file path + * @param string $fileType + * @param string $url + * File preview link e.g. https://example.com/civicrm/file?reset=1&filename=image.png&mime-type=image/png + * + * @return string $url + */ + public static function getFileURL($path, $fileType, $url = NULL) { + if (empty($path) || empty($fileType)) { + return ''; + } + elseif (empty($url)) { + $fileName = basename($path); + $url = CRM_Utils_System::url('civicrm/file', "reset=1&filename={$fileName}&mime-type={$fileType}"); + } + switch ($fileType) { + case 'image/jpeg': + case 'image/pjpeg': + case 'image/gif': + case 'image/x-png': + case 'image/png': + list($imageWidth, $imageHeight) = getimagesize($path); + list($imageThumbWidth, $imageThumbHeight) = CRM_Contact_BAO_Contact::getThumbSize($imageWidth, $imageHeight); + $url = " + + "; + break; + + default: + $url = sprintf('%s', $url, basename($path)); + break; + } + + return $url; + } + } diff --git a/templates/CRM/UF/Form/Block.tpl b/templates/CRM/UF/Form/Block.tpl index adc17e86a0..c59098b604 100644 --- a/templates/CRM/UF/Form/Block.tpl +++ b/templates/CRM/UF/Form/Block.tpl @@ -136,6 +136,8 @@ {$form.onbehalfof_id.html} {/if} {$form.$prefix.$n.html} + {elseif $field.html_type eq 'File' && $viewOnlyFileValues} + {$viewOnlyFileValues.$n} {else} {$form.$n.html} {/if} -- 2.25.1