From 6f3966ab1aab41bc345b6fbcbe6bd8518f6e62c7 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 29 Mar 2010 18:53:50 +0200 Subject: [PATCH] FIx: Mime type corrected for PDF file --- plugins/ktstandard/PDFGeneratorWorkflowTriggers.php | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------- 1 file changed, 67 insertions(+), 47 deletions(-) diff --git a/plugins/ktstandard/PDFGeneratorWorkflowTriggers.php b/plugins/ktstandard/PDFGeneratorWorkflowTriggers.php index 5ea0aae..40aad17 100644 --- a/plugins/ktstandard/PDFGeneratorWorkflowTriggers.php +++ b/plugins/ktstandard/PDFGeneratorWorkflowTriggers.php @@ -40,22 +40,22 @@ require_once(KT_LIB_DIR . '/workflow/workflowtrigger.inc.php'); require_once(KT_DIR . '/plugins/pdfConverter/pdfConverter.php'); class PDFGeneratorWorkflowTriggerDuplicatePDF extends KTWorkflowTrigger { - var $sNamespace; - var $sFriendlyName; - var $sDescription; - var $oTriggerInstance; - var $aConfig = array(); + var $sNamespace; + var $sFriendlyName; + var $sDescription; + var $oTriggerInstance; + var $aConfig = array(); - // generic requirements - both can be true - var $bIsGuard = false; - var $bIsAction = true; + // generic requirements - both can be true + var $bIsGuard = false; + var $bIsAction = true; public function PDFGeneratorWorkflowTriggerDuplicatePDF() { - $this->sNamespace = 'ktcore.workflowtriggers.pdfgenerator.duplicate'; - $this->sFriendlyName = _kt('Copy the Document as PDF'); - $this->sDescription = _kt('This action will create a pdf copy of the document as a new document.'); + $this->sNamespace = 'ktcore.workflowtriggers.pdfgenerator.duplicate'; + $this->sFriendlyName = _kt('Copy the Document as PDF'); + $this->sDescription = _kt('This action will create a pdf copy of the document as a new document.'); } - + // perform more expensive checks -before- performTransition. // Taken from : plugins\ktcore\KTWorkflowTriggers.inc.php public function precheckTransition($oDocument, $oUser) { @@ -67,51 +67,72 @@ class PDFGeneratorWorkflowTriggerDuplicatePDF extends KTWorkflowTrigger { return true; } + + /** + * Actually duplicate the Document: PDF creation, document copy, and PDF association + */ function performTransition($oDocument, $oUser) { + global $default; $iFolderId = KTUtil::arrayGet($this->aConfig, 'folder_id'); $oToFolder = Folder::get($iFolderId); if (PEAR::isError($oFolder)) { return PEAR::raiseError(_kt('The folder to which this document should be copied as PDF does not exist. Cancelling the transition - please contact a system administrator.')); } - + // Create the PDF + $default->log->error("Create the PDF"); $pdfFile = $this->createPDF($oDocument); if (PEAR::isError($pdfFile)) { return $pdfFile; } - + + $default->log->error("Duplicate_Copy the Document"); // Duplicate/Copy the Document $oNewDocument = KTDocumentUtil::copy($oDocument, $oToFolder); if (PEAR::isError($oNewDocument)) { return $oNewDocument; - } - + } + + $default->log->error("Associate PDF with the new document [$pdfFile]"); // Associate PDF with the new document $aOptions = array( - 'temp_filename' => $pdfFile, - 'cleanup_initial_file' => true, + 'temp_file' => $pdfFile, + 'cleanup_initial_file' => false, ); - + $res = KTDocumentUtil::storeContents($oNewDocument, $oContents = null, $aOptions); if (PEAR::isError($res)) { + $default->log->error("PDF WorkflowTrigger error: can't associate PDF file to document." . $res->message); // Remove the created document (not-correct) KTDocumentUtil::delete($oNewDocument, _kt("PDF WorkflowTrigger error: can't create associate PDF file to document.")); return $res; } + // Changing MIME-Filetype + // TODO: maybe use the KTDocumentUtil::rename($oDocument, $sFilename, $oUser) ? + $iMimeTypeId = KTMime::getMimeTypeID('application/pdf'); + $oNewDocument->setMimeTypeId($iMimeTypeId); + + $bSuccess = $oNewDocument->update(); + if ($bSuccess !== true) { + return PEAR::raiseError(_kt("PDF WorkflowTrigger error: can't finalize document data as PDF.")); + } + + // Returns the new document, so other plugin can extend this class to further handle the new PDF document return $oNewDocument; } - - + + /** * Create the PDF file for the given document (or re-use the already created one) * Returns the PDF filename or PEAR::error */ - private function createPDF(&$oDocument) { + private function createPDF(&$oDocument) { global $default; $dir = $default->pdfDirectory; + $iDocId = $oDocument->iId; $file = $dir .'/'. $iDocId . '.pdf'; - print __class__ . '::' . __function__ . '() .'." file=$file
"; + $default->log->error(__class__ . '::' . __function__ . '() PRE-CONV: '." file=$file'"); if (!file_exists($file)) { // If not - create one $converter = new pdfConverter(); @@ -121,6 +142,7 @@ class PDFGeneratorWorkflowTriggerDuplicatePDF extends KTWorkflowTrigger { return PEAR::raiseError(_kt('PDF file could not be generated; Please contact your System Administrator for assistance.')); } } + $default->log->error(__class__ . '::' . __function__ . '() CONVERTED! : '." file=$file'"); return $file; } @@ -144,8 +166,8 @@ class PDFGeneratorWorkflowTriggerDuplicatePDF extends KTWorkflowTrigger { $qsFrag = array(); foreach ($args as $k => $v) { - if ($k == 'action') { $v = 'editactiontrigger'; } // horrible hack - we really need iframe embedding. - $qsFrag[] = sprintf('%s=%s',urlencode($k), urlencode($v)); + if ($k == 'action') { $v = 'editactiontrigger'; } // horrible hack - we really need iframe embedding. + $qsFrag[] = sprintf('%s=%s',urlencode($k), urlencode($v)); } $qs = implode('&',$qsFrag); $aOptions['result_url'] = KTUtil::addQueryStringSelf($qs); @@ -154,25 +176,23 @@ class PDFGeneratorWorkflowTriggerDuplicatePDF extends KTWorkflowTrigger { $fFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId', KTUtil::arrayGet($this->aConfig, 'folder_id', 1)); $oFolder = Folder::get($fFolderId); - if(PEAR::isError($oFolder)) - { + if(PEAR::isError($oFolder)) { $iRoot = 1; $oFolder = Folder::get($iRoot); $fFolderId = 1; - } $collection->setOptions($aOptions); $collection->setQueryObject(new BrowseQuery($fFolderId, $this->oUser)); $collection->setColumnOptions('ktcore.columns.singleselection', array( - 'rangename' => 'folder_id', - 'show_folders' => true, - 'show_documents' => false, + 'rangename' => 'folder_id', + 'show_folders' => true, + 'show_documents' => false, )); $collection->setColumnOptions('ktcore.columns.title', array( - 'direct_folder' => false, - 'folder_link' => $aOptions['result_url'], + 'direct_folder' => false, + 'folder_link' => $aOptions['result_url'], )); @@ -181,26 +201,26 @@ class PDFGeneratorWorkflowTriggerDuplicatePDF extends KTWorkflowTrigger { $folder_path_ids = explode(',', $oFolder->getParentFolderIds()); $folder_path_ids[] = $oFolder->getId(); if ($folder_path_ids[0] == 0) { - array_shift($folder_path_ids); - array_shift($folder_path_names); + array_shift($folder_path_ids); + array_shift($folder_path_names); } foreach (range(0, count($folder_path_ids) - 1) as $index) { - $id = $folder_path_ids[$index]; - $qsFrag2 = $qsFrag; - $qsFrag2[] = sprintf('fFolderId=%d', $id); - $qs2 = implode('&',$qsFrag2); - $url = KTUtil::addQueryStringSelf($qs2); - $aBreadcrumbs[] = sprintf('%s', $url, htmlentities($folder_path_names[$index], ENT_NOQUOTES, 'UTF-8')); + $id = $folder_path_ids[$index]; + $qsFrag2 = $qsFrag; + $qsFrag2[] = sprintf('fFolderId=%d', $id); + $qs2 = implode('&',$qsFrag2); + $url = KTUtil::addQueryStringSelf($qs2); + $aBreadcrumbs[] = sprintf('%s', $url, htmlentities($folder_path_names[$index], ENT_NOQUOTES, 'UTF-8')); } $sBreadcrumbs = implode(' » ', $aBreadcrumbs); $aTemplateData = array( - 'context' => $this, - 'breadcrumbs' => $sBreadcrumbs, - 'collection' => $collection, - 'args' => $args, + 'context' => $this, + 'breadcrumbs' => $sBreadcrumbs, + 'collection' => $collection, + 'args' => $args, ); return $oTemplate->render($aTemplateData); } @@ -209,8 +229,8 @@ class PDFGeneratorWorkflowTriggerDuplicatePDF extends KTWorkflowTrigger { $folder_id = KTUtil::arrayGet($_REQUEST, 'folder_id', null); $oFolder = Folder::get($folder_id); if (PEAR::isError($oFolder)) { - // silenty ignore - $folder_id = null; + // silenty ignore + $folder_id = null; } $config = array(); -- libgit2 0.21.4