From d83344dcceb4f06e9910d591c966c0f57885369c Mon Sep 17 00:00:00 2001 From: nbm Date: Mon, 20 Feb 2006 14:33:42 +0000 Subject: [PATCH] Add OpenDocument indexing support (requires unzip) --- plugins/ktstandard/KTIndexer.php | 2 ++ plugins/ktstandard/contents/OpenDocumentIndexer.php | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 0 deletions(-) create mode 100644 plugins/ktstandard/contents/OpenDocumentIndexer.php diff --git a/plugins/ktstandard/KTIndexer.php b/plugins/ktstandard/KTIndexer.php index 3704647..f3cfdb6 100644 --- a/plugins/ktstandard/KTIndexer.php +++ b/plugins/ktstandard/KTIndexer.php @@ -16,6 +16,8 @@ class KTIndexerPlugin extends KTPlugin { 'ktstandard.indexer.triggers.pdf', 'contents/PdfIndexer.php'); $this->registerTrigger('content', 'transform', 'KTPostscriptIndexerTrigger', 'ktstandard.indexer.triggers.ps', 'contents/PsIndexer.php'); + $this->registerTrigger('content', 'transform', 'KTOpenDocumentIndexerTrigger', + 'ktstandard.indexer.triggers.opendocument', 'contents/OpenDocumentIndexer.php'); } } diff --git a/plugins/ktstandard/contents/OpenDocumentIndexer.php b/plugins/ktstandard/contents/OpenDocumentIndexer.php new file mode 100644 index 0000000..540478f --- /dev/null +++ b/plugins/ktstandard/contents/OpenDocumentIndexer.php @@ -0,0 +1,79 @@ + true, + 'application/zip' => true, + 'application/x-zip' => true, + 'application/vnd.oasis.opendocument.text' => true, + 'application/vnd.oasis.opendocument.text-template' => true, + 'application/vnd.oasis.opendocument.presentation' => true, + 'application/vnd.oasis.opendocument.presentation-template' => true, + 'application/vnd.oasis.opendocument.spreadsheet' => true, + 'application/vnd.oasis.opendocument.spreadsheet-template' => true, + ); + + function transform() { + $iMimeTypeId = $this->oDocument->getMimeTypeId(); + $sMimeType = KTMime::getMimeTypeName($iMimeTypeId); + $sFileName = $this->oDocument->getFileName(); + if (in_array($sMimeType, array('application/octet-stream', 'application/zip', 'application/x-zip'))) { + $sExtension = KTMime::stripAllButExtension($sFileName); + $sTable = KTUtil::getTableName('mimetypes'); + $sQuery = "SELECT id FROM $sTable WHERE LOWER(filetypes) = ?"; + $aParams = array($sExtension); + $id = DBUtil::getOneResultKey(array($sQuery, $aParams), 'id'); + if ($id) { + $this->oDocument->setMimeTypeId($id); + $this->oDocument->update(); + } + } + parent::transform(); + } + + function extract_contents($sFilename, $sTmpFilename) { + $sUnzipCommand = KTUtil::findCommand("import/unzip", "unzip"); + if (empty($sUnzipCommand)) { + return; + } + $this->sTmpPath = tempnam('/tmp', 'opendocumentextract'); + if ($this->sTmpPath === false) { + return; + } + unlink($this->sTmpPath); + mkdir($this->sTmpPath, 0700); + + $sCmd = array( + $sUnzipCommand, + "-q", "-n", + "-d", $this->sTmpPath, + $sFilename, + ); + KTUtil::pexec($sCmd); + + $sManifest = sprintf("%s/%s", $this->sTmpPath, "META-INF/manifest.xml"); + if (!file_exists($sManifest)) { + $this->cleanup(); + return; + } + $sContentFile = sprintf("%s/%s", $this->sTmpPath, "content.xml"); + if (!file_exists($sContentFile)) { + $this->cleanup(); + return; + } + + $sContent = file_get_contents($sContentFile); + $sContent = preg_replace ("@(]*>)+@", " ", $sContent); + + $this->cleanup(); + return $sContent; + } + + function cleanup() { + KTUtil::deleteDirectory($this->sTmpPath); + } +} + +?> -- libgit2 0.21.4