From 8a335a0660a6a6a8ecb89209575a4a7c4629cfa3 Mon Sep 17 00:00:00 2001 From: Robert Blanker Date: Tue, 12 Jul 2016 11:42:07 +0200 Subject: [PATCH] File extensions are no longer forced from mime-type on download, extension used from mediafile instead. --- .../mediamosa_asset_mediafile.class.inc | 6 +-- .../mediamosa/lib/testfiles/testing.docx | Bin 0 -> 3739 bytes .../mediamosa_asset_mediafile.download.test | 48 ++++++++++++++++++ .../simpletest/mediamosa.simpletest.class.inc | 18 ++++++- 4 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 sites/all/modules/mediamosa/lib/testfiles/testing.docx diff --git a/sites/all/modules/mediamosa/core/asset/mediafile/mediamosa_asset_mediafile.class.inc b/sites/all/modules/mediamosa/core/asset/mediafile/mediamosa_asset_mediafile.class.inc index b11addfd..0fd84825 100644 --- a/sites/all/modules/mediamosa/core/asset/mediafile/mediamosa_asset_mediafile.class.inc +++ b/sites/all/modules/mediamosa/core/asset/mediafile/mediamosa_asset_mediafile.class.inc @@ -1180,11 +1180,7 @@ class mediamosa_asset_mediafile { // No extension yet? Try to get one based on mimetype. if (empty($file_ext)) { - $mime_type = self::get_mime_type($mediafile[mediamosa_asset_mediafile_db::ID]); - - if (!empty($mime_type)) { - $file_ext = self::get_file_extension_by_mimetype($mime_type); - } + $file_ext = $mediafile[mediamosa_asset_mediafile_db::FILE_EXTENSION]; } // Some must return specific extensions. diff --git a/sites/all/modules/mediamosa/lib/testfiles/testing.docx b/sites/all/modules/mediamosa/lib/testfiles/testing.docx new file mode 100644 index 0000000000000000000000000000000000000000..4413604b268e08ef49f5a27d7728759d42594390 GIT binary patch literal 3739 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 literal 0 HcmV?d00001 diff --git a/sites/all/modules/mediamosa/modules/asset/mediafile/mediamosa_asset_mediafile.download.test b/sites/all/modules/mediamosa/modules/asset/mediafile/mediamosa_asset_mediafile.download.test index 12c91782..a62a230c 100644 --- a/sites/all/modules/mediamosa/modules/asset/mediafile/mediamosa_asset_mediafile.download.test +++ b/sites/all/modules/mediamosa/modules/asset/mediafile/mediamosa_asset_mediafile.download.test @@ -148,5 +148,53 @@ class MediaMosaAssetMediafileDownloadTestCaseEga extends MediaMosaTestCaseEga { t('Delete the mediafile on SAN/NAS: @filename', array('@filename' => mediamosa_io::realpath_safe($mediafile_uri))) ); } + + // Docx upload check. + $upload = $this->uploadTestFile(array( + 'downloadable' => TRUE, + 'filename' => $this->getTestDoc_Docx() + )); + $asset_id = $upload['asset_id']; + $mediafile_id = $upload['mediafile_id']; + + // Get the mediafile. + $mediafile = $this->getMediafile($mediafile_id); + + // Check the values. + foreach (array(mediamosa_asset_mediafile_db::IS_DOWNLOADABLE => mediamosa_asset_mediafile_db::IS_DOWNLOADABLE_TRUE) as $key => $value) { + $this->assertTrue( + $mediafile[$key] == $value, + t("The @key has the good value (@value) after change.", array('@key' => $key, '@value' => $value)) + ); + } + + // Ask mediafile download url. + $parameters = array( + mediamosa_rest_call_media_view::RESPONSE => mediamosa_media::RESPONSE_DOWNLOAD, + mediamosa_rest_call_media_view::MEDIAFILE_ID => $mediafile_id, + ); + $xml = $this->do_media_view($asset_id, $parameters); + + // Check the download url. + $download = (string) $xml->items->item->output; + $this->assertTrue( + !empty($download), + t('Download url is exists: @download', array('@download' => $download)) + ); + + $this->var_export($download); + + // Download the file. + $result = mediamosa_http::drupal_http_request($download); + + $this->var_export($result->headers); + $this->var_export($_SERVER); + if (isset($_SERVER['REDIRECT_STATUS'])) { + $this->assertTrue($_SERVER['REDIRECT_STATUS'] == 200, 'Got 200 HTTP response download.'); + } + $this->assertTrue($result->headers['content-type'] == 'application/octet-stream', 'Got download.'); + $this->assertTrue(mediamosa_unicode::strpos($result->headers['content-disposition'], '.docx"') !== FALSE, 'Is correct extension.'); + + } } diff --git a/sites/all/modules/mediamosa/simpletest/mediamosa.simpletest.class.inc b/sites/all/modules/mediamosa/simpletest/mediamosa.simpletest.class.inc index 08721072..84dd0404 100644 --- a/sites/all/modules/mediamosa/simpletest/mediamosa.simpletest.class.inc +++ b/sites/all/modules/mediamosa/simpletest/mediamosa.simpletest.class.inc @@ -1058,11 +1058,27 @@ class MediaMosaTestCase extends DrupalWebTestCase { $this->pass(t('Got test audio @audio.', array('@audio' => $filename))); return $filename; } + + /** + * Return the path+filename to the test audio (mp3). + * + * @return string + * The filename path. + */ + protected function getTestDoc_Docx() { + $filename = drupal_get_path('module', 'mediamosa') . '/lib/testfiles/testing.docx'; + $this->pass(t('Got test doc @doc.', array('@doc' => $filename))); + return $filename; + } + /** * Create a random app or specified one. * - * @param array $a_attributes + * @param array $fields * Basic app parameters like the DB version (mediamosa_app_db). + * + * @return array + * The node as array. */ protected function createApp($fields = array()) {