db; $bOfficeDocument = false; // application/msword seems to be set by all Office documents if ($sMimeType == "application/msword") { $bOfficeDocument = true; } if ($bOfficeDocument || (!$sMimeType)) { // check by file extension $sExtension = KTMime::stripAllButExtension($sFileName); $sql->query(array("SELECT id FROM " . $default->mimetypes_table . " WHERE LOWER(filetypes) = ?", $sExtension));/*ok*/ if ($sql->next_record()) { return $sql->f("id"); } } // get the mime type id if (isset($sMimeType)) { $sql->query(array("SELECT id FROM " . $default->mimetypes_table . " WHERE mimetypes = ?", $sMimeType));/*ok*/ if ($sql->next_record()) { return $sql->f("id"); } } //otherwise return the default mime type return KTMime::getDefaultMimeTypeID(); } /** * Get the default mime type, which is application/octet-stream * * @return int default mime type * */ function getDefaultMimeTypeID() { global $default; $sql = $default->db; $sql->query("SELECT id FROM " . $default->mimetypes_table . " WHERE mimetypes = 'application/octet-stream'"); $sql->next_record(); //get the mime type id return $sql->f("id"); } function getMimeTypeName($iMimeTypeID) { global $default; $sql = $default->db; $sql->query(array("SELECT mimetypes FROM " . $default->mimetypes_table . " WHERE id = ?", $iMimeTypeID));/*ok*/ if ($sql->next_record()) { return $sql->f("mimetypes"); } return "application/octet-stream"; } function getFriendlyNameForString($sMimeType) { global $default; $sql = $default->db; $sql->query(array("SELECT friendly_name, filetypes FROM " . $default->mimetypes_table . " WHERE mimetypes = ?", $sMimeType));/*ok*/ if ($sql->next_record()) { $friendly_name = $sql->f("friendly_name"); if (!empty($friendly_name)) { return _kt($sql->f("friendly_name")); } else { return sprintf(_kt('%s File'), strtoupper($sql->f('filetypes'))); } } return _kt('Unknown Type'); } /** * Try well-defined methods for getting the MIME type for a file on disk. * First try PECL's Fileinfo library, then try mime_content_type() builtin. * If neither are available, returns NULL. * * @param string file on disk * @return string mime time for given filename, or NULL */ function getMimeTypeFromFile($sFileName) { if (extension_loaded('fileinfo')) { $res = finfo_open(FILEINFO_MIME); $sType = finfo_file($res, $sFileName); } if (!$sType) { if (file_exists('/usr/bin/file')) { $aCmd = array('/usr/bin/file', '-bi', $sFileName); $sCmd = KTUtil::safeShellString($aCmd); $sPossibleType = @exec($sCmd); if (preg_match('#^[^/]+/[^/*]+$#', $sPossibleType)) { $sType = $sPossibleType; } } } if ($sType) { return preg_replace('/;.*$/', '', $sType); } return null; } function getIconPath($iMimeTypeId) { $cached = KTUtil::arrayGet($GLOBALS['_KT_icon_path_cache'], $iMimeTypeId); if (!empty($cached)) { return $cached; } $GLOBALS['_KT_icon_path_cache'][$iMimeTypeId] = KTMime::_getIconPath($iMimeTypeId); return $GLOBALS['_KT_icon_path_cache'][$iMimeTypeId]; } function _getIconPath($iMimeTypeId) { $sQuery = 'SELECT icon_path FROM mime_types WHERE id = ?'; $res = DBUtil::getOneResult(array($sQuery, array($iMimeTypeId))); if ($res['icon_path'] !== null) { return $res['icon_path']; } else { return 'unspecified_type'; } } /** * Strip all but the extension from a file. For instance, input of * 'foo.tif' would return 'tif'. * * @param string filename * @return string extension for given file, without filename itself */ function stripAllButExtension($sFileName) { return strtolower(substr($sFileName, strrpos($sFileName, ".")+1, strlen($sFileName) - strrpos($sFileName, "."))); } } $_KT_icon_path_cache = array();