Merge pull request #3029 from danielkesselberg/refactor-mimehelper

Refactor mimehelper
This commit is contained in:
Lucas Bartholemy 2018-02-18 00:07:12 +01:00 committed by GitHub
commit 58bd1c4026
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 144 additions and 36 deletions

View File

@ -1,5 +1,4 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
@ -19,6 +18,69 @@ use humhub\modules\file\models\File;
class MimeHelper
{
/** IconClass */
const MIME_WORD = 'mime-word';
const MIME_EXCEL = 'mime-excel';
const MIME_POWERPOINT = 'mime-powerpoint';
const MIME_PDF = 'mime-pdf';
const MIME_ZIP = 'mime-zip';
const MIME_IMAGE = 'mime-image';
const MIME_AUDIO = 'mime-audio';
const MIME_VIDEO = 'mime-video';
const MIME_PHOTOSHOP = 'mime-photoshop';
const MIME_ILLUSTRATOR = 'mime-illustrator';
const MIME_FILE = 'mime-file';
/** @var array Map for Extension to IconClass */
private static $extensionToIconClass = [
// Word
'doc' => self::MIME_WORD,
'docx' => self::MIME_WORD,
'odt' => self::MIME_WORD,
// Excel
'xls' => self::MIME_EXCEL,
'xlsx' => self::MIME_EXCEL,
'ods' => self::MIME_EXCEL,
// Powerpoint
'ppt' => self::MIME_POWERPOINT,
'pptx' => self::MIME_POWERPOINT,
'pps' => self::MIME_POWERPOINT,
'ppsx' => self::MIME_POWERPOINT,
'odp' => self::MIME_POWERPOINT,
// PDF
'pdf' => self::MIME_PDF,
// Archive
'zip' => self::MIME_ZIP,
'gzip' => self::MIME_ZIP,
'rar' => self::MIME_ZIP,
'tar' => self::MIME_ZIP,
'7z' => self::MIME_ZIP,
// Image
'jpg' => self::MIME_IMAGE,
'jpeg' => self::MIME_IMAGE,
'png' => self::MIME_IMAGE,
'gif' => self::MIME_IMAGE,
'webp' => self::MIME_IMAGE,
'tiff' => self::MIME_IMAGE,
// Audio
'mp3' => self::MIME_AUDIO,
'aiff' => self::MIME_AUDIO,
'wav' => self::MIME_AUDIO,
'ogg' => self::MIME_AUDIO,
// Video
'avi' => self::MIME_VIDEO,
'mp4' => self::MIME_VIDEO,
'mov' => self::MIME_VIDEO,
'mpeg' => self::MIME_VIDEO,
'wma' => self::MIME_VIDEO,
'webm' => self::MIME_VIDEO,
'mkv' => self::MIME_VIDEO,
// Adobe Photoshop
'psd' => self::MIME_PHOTOSHOP,
// Adobe Illustrator
'ai' => self::MIME_ILLUSTRATOR
];
/**
* Returns Stylesheet Classname based on file extension
*
@ -28,46 +90,16 @@ class MimeHelper
public static function getMimeIconClassByExtension($ext)
{
if ($ext instanceof File) {
$ext = FileHelper::getExtension($ext->file_name);
$ext = FileHelper::getExtension($ext);
}
// lowercase string
$ext = strtolower($ext);
// Word
if ($ext == 'doc' || $ext == 'docx' || $ext == 'odt') {
return 'mime-word';
// Excel
} elseif ($ext == 'xls' || $ext == 'xlsx') {
return 'mime-excel';
// Powerpoint
} elseif ($ext == 'ppt' || $ext == 'pptx' || $ext == 'ppsx' || $ext == 'pps' || $ext == 'odp') {
return 'mime-powerpoint';
// PDF
} elseif ($ext == 'pdf') {
return 'mime-pdf';
// Archive
} elseif ($ext == 'zip' || $ext == 'gzip' || $ext == 'rar' || $ext == 'tar' || $ext == '7z') {
return 'mime-zip';
// Audio
} elseif ($ext == 'jpg' || $ext == 'jpeg' || $ext == 'png' || $ext == 'gif' || $ext == 'webp' || $ext == 'tiff') {
return 'mime-image';
// Audio
} elseif ($ext == 'mp3' || $ext == 'aiff' || $ext == 'wav' || $ext == 'ogg') {
return 'mime-audio';
// Video
} elseif ($ext == 'avi' || $ext == 'mp4' || $ext == 'mov' || $ext == 'mpeg' || $ext == 'wma' || $ext == 'webm' || $ext == 'mkv') {
return 'mime-video';
// Adobe Photoshop
} elseif ($ext == 'psd') {
return 'mime-photoshop';
// Adobe Illustrator
} elseif ($ext == 'ai') {
return 'mime-illustrator';
// other file formats
} else {
return 'mime-file';
if (isset(self::$extensionToIconClass[$ext])) {
return self::$extensionToIconClass[$ext];
}
}
return self::MIME_FILE;
}
}

View File

@ -0,0 +1,76 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\tests\codeception\unit;
use Codeception\Test\Unit;
use humhub\libs\MimeHelper;
use humhub\modules\file\models\File;
/**
* Class MimeHelperTest
*/
class MimeHelperTest extends Unit
{
/**
* Test valid extension
* @dataProvider dataValidExtension
*/
public function testValidExtension($expected, $actual)
{
$this->assertEquals($expected, MimeHelper::getMimeIconClassByExtension($actual));
}
/**
* Test valid extension
* @dataProvider dataValidExtension
*/
public function testValidExtensionFileObject($expected, $actual)
{
$temp = new File();
$temp->file_name = uniqid() . '.' . $actual;
$this->assertEquals($expected, MimeHelper::getMimeIconClassByExtension($temp));
}
/**
* Testcases for valid extension
* @return array
*/
public function dataValidExtension()
{
return [
'word' => [MimeHelper::MIME_WORD, 'doc'],
'excel' => [MimeHelper::MIME_EXCEL, 'xls'],
'powerpoint' => [MimeHelper::MIME_POWERPOINT, 'ppt'],
'pdf' => [MimeHelper::MIME_PDF, 'pdf'],
'image' => [MimeHelper::MIME_IMAGE, 'jpg'],
'audio' => [MimeHelper::MIME_AUDIO, 'mp3'],
'video' => [MimeHelper::MIME_VIDEO, 'avi'],
'zip' => [MimeHelper::MIME_ZIP, 'zip'],
];
}
/**
* Test unknown extension
*/
public function testUnknownExtension()
{
$this->assertEquals(MimeHelper::MIME_FILE, MimeHelper::getMimeIconClassByExtension('unknown'));
}
/**
* Test unknown extension
*/
public function testUnknownExtensionFileObject()
{
$temp = new File;
$temp->file_name = 'test.unknown';
$this->assertEquals(MimeHelper::MIME_FILE, MimeHelper::getMimeIconClassByExtension($temp));
}
}