ソースを参照

fix attachment mime types in emails

euromark 13 年 前
コミット
785b46f315
4 ファイル変更38 行追加152 行削除
  1. 1 1
      Controller/MyController.php
  2. 7 146
      Lib/EmailLib.php
  3. 29 4
      Lib/Utility/Utility.php
  4. 1 1
      View/Helper/FormatHelper.php

+ 1 - 1
Controller/MyController.php

@@ -12,7 +12,7 @@ class MyController extends Controller {
 	 * 2012-12-25 ms
 	 */
 	public function __construct($request = null, $response = null) {
-  	parent::__construct($request, $response);
+		parent::__construct($request, $response);
 		if (strpos($this->here, '/js/cjs/') === 0 || strpos($this->here, '/css/ccss/') === 0) {
 			unset($this->request->params['ext']);
 		}

+ 7 - 146
Lib/EmailLib.php

@@ -1,6 +1,8 @@
 <?php
 App::uses('CakeEmail', 'Network/Email');
 App::uses('CakeLog', 'Log');
+App::uses('MimeLib', 'Tools.Lib');
+
 if (!defined('BR')) {
 	define('BR', '<br />');
 }
@@ -206,152 +208,11 @@ class EmailLib extends CakeEmail {
 	 * 2012-04-17 ms
 	 */
 	protected function _getMimeByExtension($ext, $default = 'application/octet-stream') {
-		switch ($ext) {
-			case "zip": $mime="application/zip"; break;
-			case "ez": $mime="application/andrew-inset"; break;
-			case "hqx": $mime="application/mac-binhex40"; break;
-			case "cpt": $mime="application/mac-compactpro"; break;
-			case "doc": $mime="application/msword"; break;
-			case "bin": $mime="application/octet-stream"; break;
-			case "dms": $mime="application/octet-stream"; break;
-			case "lha": $mime="application/octet-stream"; break;
-			case "lzh": $mime="application/octet-stream"; break;
-			case "exe": $mime="application/octet-stream"; break;
-			case "class": $mime="application/octet-stream"; break;
-			case "so": $mime="application/octet-stream"; break;
-			case "dll": $mime="application/octet-stream"; break;
-			case "oda": $mime="application/oda"; break;
-			case "pdf": $mime="application/pdf"; break;
-			case "ai": $mime="application/postscript"; break;
-			case "eps": $mime="application/postscript"; break;
-			case "ps": $mime="application/postscript"; break;
-			case "smi": $mime="application/smil"; break;
-			case "smil": $mime="application/smil"; break;
-			case "xls": $mime="application/vnd.ms-excel"; break;
-			case "ppt": $mime="application/vnd.ms-powerpoint"; break;
-			case "wbxml": $mime="application/vnd.wap.wbxml"; break;
-			case "wmlc": $mime="application/vnd.wap.wmlc"; break;
-			case "wmlsc": $mime="application/vnd.wap.wmlscriptc"; break;
-			case "bcpio": $mime="application/x-bcpio"; break;
-			case "vcd": $mime="application/x-cdlink"; break;
-			case "pgn": $mime="application/x-chess-pgn"; break;
-			case "cpio": $mime="application/x-cpio"; break;
-			case "csh": $mime="application/x-csh"; break;
-			case "dcr": $mime="application/x-director"; break;
-			case "dir": $mime="application/x-director"; break;
-			case "dxr": $mime="application/x-director"; break;
-			case "dvi": $mime="application/x-dvi"; break;
-			case "spl": $mime="application/x-futuresplash"; break;
-			case "gtar": $mime="application/x-gtar"; break;
-			case "hdf": $mime="application/x-hdf"; break;
-			case "js": $mime="application/x-javascript"; break;
-			case "skp": $mime="application/x-koan"; break;
-			case "skd": $mime="application/x-koan"; break;
-			case "skt": $mime="application/x-koan"; break;
-			case "skm": $mime="application/x-koan"; break;
-			case "latex": $mime="application/x-latex"; break;
-			case "nc": $mime="application/x-netcdf"; break;
-			case "cdf": $mime="application/x-netcdf"; break;
-			case "sh": $mime="application/x-sh"; break;
-			case "shar": $mime="application/x-shar"; break;
-			case "swf": $mime="application/x-shockwave-flash"; break;
-			case "sit": $mime="application/x-stuffit"; break;
-			case "sv4cpio": $mime="application/x-sv4cpio"; break;
-			case "sv4crc": $mime="application/x-sv4crc"; break;
-			case "tar": $mime="application/x-tar"; break;
-			case "tcl": $mime="application/x-tcl"; break;
-			case "tex": $mime="application/x-tex"; break;
-			case "texinfo": $mime="application/x-texinfo"; break;
-			case "texi": $mime="application/x-texinfo"; break;
-			case "t": $mime="application/x-troff"; break;
-			case "tr": $mime="application/x-troff"; break;
-			case "roff": $mime="application/x-troff"; break;
-			case "man": $mime="application/x-troff-man"; break;
-			case "me": $mime="application/x-troff-me"; break;
-			case "ms": $mime="application/x-troff-ms"; break;
-			case "ustar": $mime="application/x-ustar"; break;
-			case "src": $mime="application/x-wais-source"; break;
-			case "xhtml": $mime="application/xhtml+xml"; break;
-			case "xht": $mime="application/xhtml+xml"; break;
-			case "zip": $mime="application/zip"; break;
-			case "au": $mime="audio/basic"; break;
-			case "snd": $mime="audio/basic"; break;
-			case "mid": $mime="audio/midi"; break;
-			case "midi": $mime="audio/midi"; break;
-			case "kar": $mime="audio/midi"; break;
-			case "mpga": $mime="audio/mpeg"; break;
-			case "mp2": $mime="audio/mpeg"; break;
-			case "mp3": $mime="audio/mpeg"; break;
-			case "aif": $mime="audio/x-aiff"; break;
-			case "aiff": $mime="audio/x-aiff"; break;
-			case "aifc": $mime="audio/x-aiff"; break;
-			case "m3u": $mime="audio/x-mpegurl"; break;
-			case "ram": $mime="audio/x-pn-realaudio"; break;
-			case "rm": $mime="audio/x-pn-realaudio"; break;
-			case "rpm": $mime="audio/x-pn-realaudio-plugin"; break;
-			case "ra": $mime="audio/x-realaudio"; break;
-			case "wav": $mime="audio/x-wav"; break;
-			case "pdb": $mime="chemical/x-pdb"; break;
-			case "xyz": $mime="chemical/x-xyz"; break;
-			case "bmp": $mime="image/bmp"; break;
-			case "gif": $mime="image/gif"; break;
-			case "ief": $mime="image/ief"; break;
-			case "jpeg": $mime="image/jpeg"; break;
-			case "jpg": $mime="image/jpeg"; break;
-			case "jpe": $mime="image/jpeg"; break;
-			case "png": $mime="image/png"; break;
-			case "tiff": $mime="image/tiff"; break;
-			case "tif": $mime="image/tiff"; break;
-			case "djvu": $mime="image/vnd.djvu"; break;
-			case "djv": $mime="image/vnd.djvu"; break;
-			case "wbmp": $mime="image/vnd.wap.wbmp"; break;
-			case "ras": $mime="image/x-cmu-raster"; break;
-			case "pnm": $mime="image/x-portable-anymap"; break;
-			case "pbm": $mime="image/x-portable-bitmap"; break;
-			case "pgm": $mime="image/x-portable-graymap"; break;
-			case "ppm": $mime="image/x-portable-pixmap"; break;
-			case "rgb": $mime="image/x-rgb"; break;
-			case "xbm": $mime="image/x-xbitmap"; break;
-			case "xpm": $mime="image/x-xpixmap"; break;
-			case "xwd": $mime="image/x-xwindowdump"; break;
-			case "igs": $mime="model/iges"; break;
-			case "iges": $mime="model/iges"; break;
-			case "msh": $mime="model/mesh"; break;
-			case "mesh": $mime="model/mesh"; break;
-			case "silo": $mime="model/mesh"; break;
-			case "wrl": $mime="model/vrml"; break;
-			case "vrml": $mime="model/vrml"; break;
-			case "css": $mime="text/css"; break;
-			case "html": $mime="text/html"; break;
-			case "htm": $mime="text/html"; break;
-			case "asc": $mime="text/plain"; break;
-			case "txt": $mime="text/plain"; break;
-			case "rtx": $mime="text/richtext"; break;
-			case "rtf": $mime="text/rtf"; break;
-			case "sgml": $mime="text/sgml"; break;
-			case "sgm": $mime="text/sgml"; break;
-			case "tsv": $mime="text/tab-separated-values"; break;
-			case "wml": $mime="text/vnd.wap.wml"; break;
-			case "wmls": $mime="text/vnd.wap.wmlscript"; break;
-			case "etx": $mime="text/x-setext"; break;
-			case "xml": $mime="text/xml"; break;
-			case "xsl": $mime="text/xml"; break;
-			case "mpeg": $mime="video/mpeg"; break;
-			case "mpg": $mime="video/mpeg"; break;
-			case "mpe": $mime="video/mpeg"; break;
-			case "qt": $mime="video/quicktime"; break;
-			case "mov": $mime="video/quicktime"; break;
-			case "mxu": $mime="video/vnd.mpegurl"; break;
-			case "avi": $mime="video/x-msvideo"; break;
-			case "movie": $mime="video/x-sgi-movie"; break;
-			case "asf": $mime="video/x-ms-asf"; break;
-			case "asx": $mime="video/x-ms-asf"; break;
-			case "wm": $mime="video/x-ms-wm"; break;
-			case "wmv": $mime="video/x-ms-wmv"; break;
-			case "wvx": $mime="video/x-ms-wvx"; break;
-			case "ice": $mime="x-conference/x-cooltalk"; break;
-		}
-		if (empty($mime)) {
+		if (!isset($this->_Mime)) {
+			$this->_Mime = new MimeLib();
+		}
+		$mime = $this->_Mime->getMimeType($ext);
+		if (!$mime) {
 			$mime = $default;
 		}
 		return $mime;

+ 29 - 4
Lib/Utility/Utility.php

@@ -321,12 +321,19 @@ class Utility {
 	}
 
 	/**
-	 * Flattens an array, or returns FALSE on fail.
+	 * Flattens an array
+	 *
+	 * @param array $array to flatten
+	 * @param boolean $perserveKeys
+	 * @return array
 	 * 2011-07-02 ms
 	 */
-	public static function arrayFlatten($array) {
-		if (!is_array($array)) {
-		return false;
+	public static function arrayFlatten($array, $preserveKeys = false) {
+		if ($preserveKeys) {
+			return self::_arrayFlatten($array);
+		}
+		if (!$array) {
+			return array();
 		}
 		$result = array();
 		foreach ($array as $key => $value) {
@@ -340,6 +347,24 @@ class Utility {
 	}
 
 	/**
+	 * Flatten an array and preserve the keys
+	 * @return array
+	 */
+	public static function _arrayFlatten($a, $f = array()) {
+		if (!$a) {
+			return array();
+		}
+		foreach($a as $k=>$v){
+			if(is_array($v)) {
+				$f= self::_arrayFlatten($v, $f);
+			} else {
+				$f[$k]=$v;
+			}
+		}
+		return $f;
+	}
+
+	/**
 	 * Similar to array_shift but on the keys of the array
 	 *
 	 * @param array $keyValuePairs

+ 1 - 1
View/Helper/FormatHelper.php

@@ -221,7 +221,7 @@ class FormatHelper extends TextHelper {
 		} else {
 			$image = $icon;
 		}
-		return $this->Html->image($wwwPath.$image.'.'.$ending, $attr);
+		return $this->Html->image($wwwPath . $image . '.' . $ending, $attr);
 	}