function transform() { global $default; $iMimeTypeId = $this->oDocument->getMimeTypeId(); $sMimeType = KTMime::getMimeTypeName($iMimeTypeId); $sFileName = $this->oDocument->getFileName(); $aTestTypes = array('application/octet-stream', 'application/zip', 'application/x-zip'); if (in_array($sMimeType, $aTestTypes)) { $sExtension = KTMime::stripAllButExtension($sFileName); $sTable = KTUtil::getTableName('mimetypes'); $sQuery = "SELECT id, mimetypes FROM {$sTable} WHERE LOWER(filetypes) = ?"; $aParams = array($sExtension); $aRow = DBUtil::getOneResult(array($sQuery, $aParams)); if (PEAR::isError($aRow)) { $default->log->debug("ODI: error in query: " . print_r($aRow, true)); return; } if (empty($aRow)) { $default->log->debug("ODI: query returned entry"); return; } $id = $aRow['id']; $mimetype = $aRow['mimetypes']; $default->log->debug("ODI: query returned: " . print_r($aRow, true)); if (in_array($mimetype, $aTestTypes)) { // Haven't changed, really not an OpenDocument file... return; } if ($id) { $this->oDocument->setMimeTypeId($id); $this->oDocument->update(); } } parent::transform(); }
/** * Get the mime type primary key for a specific mime type * * @param string detected mime type * @param string filename * @return int mime type primary key if found, else default mime type primary key (text/plain) */ function getMimeTypeID($sMimeType, $sFileName, $sTempFile = null) { global $default; $sTable = KTUtil::getTableName('mimetypes'); // check by file extension $sExtension = KTMime::stripAllButExtension($sFileName); $res = DBUtil::getOneResultKey(array("SELECT id FROM " . $sTable . " WHERE LOWER(filetypes) = ?", array($sExtension)), 'id'); if (PEAR::isError($res) || empty($res)) { // pass ?! } else { return $res; } // get the mime type id if (isset($sMimeType)) { $res = DBUtil::getResultArray(array("SELECT id FROM " . $sTable . " WHERE mimetypes = ?", array($sMimeType))); if (PEAR::isError($res)) { // pass ?! } if (count($res) != 0) { return $res[0]['id']; } } if (!is_null($sTempFile)) { // The default is a binary file, so if mime magic can resolve better, lets try... $sMimeType = KTMime::getMimeTypeFromFile($sTempFile); if (!empty($sMimeType)) { $res = DBUtil::getResultArray(array("SELECT id FROM " . $sTable . " WHERE mimetypes = ?", array($sMimeType))); if (PEAR::isError($res)) { // pass ?! } if (count($res) != 0) { return $res[0]['id']; } } } //otherwise return the default mime type return KTMime::getDefaultMimeTypeID(); }