From 3eef5e55f45996a4c88677cd94549c0678ba134e Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 23 Mar 2010 19:24:29 +0100 Subject: [PATCH] Added "Duplicate PDF" workflow trigger --- plugins/ktstandard/PDFGeneratorAction.php | 2 +- plugins/ktstandard/PDFGeneratorPlugin.php | 5 +++-- plugins/ktstandard/PDFGeneratorWorkflowTriggers.php | 241 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 plugins/ktstandard/PDFGeneratorWorkflowTriggers.php diff --git a/plugins/ktstandard/PDFGeneratorAction.php b/plugins/ktstandard/PDFGeneratorAction.php index 4aee9c8..ee6589e 100644 --- a/plugins/ktstandard/PDFGeneratorAction.php +++ b/plugins/ktstandard/PDFGeneratorAction.php @@ -32,7 +32,7 @@ * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices * must display the words "Powered by KnowledgeTree" and retain the original * copyright notice. - * Contributor( s): ______________________________________ + * Contributor( s): thePanz (thepanz@gmail.com) * */ diff --git a/plugins/ktstandard/PDFGeneratorPlugin.php b/plugins/ktstandard/PDFGeneratorPlugin.php index 451edf6..d04be86 100644 --- a/plugins/ktstandard/PDFGeneratorPlugin.php +++ b/plugins/ktstandard/PDFGeneratorPlugin.php @@ -32,7 +32,7 @@ * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices * must display the words "Powered by KnowledgeTree" and retain the original * copyright notice. - * Contributor( s): ______________________________________ + * Contributor( s): thePanz (thepanz@gmail.com) * */ @@ -52,7 +52,8 @@ require_once('PDFGeneratorAction.php'); } function setup() { - $this->registerAction('documentaction', 'PDFGeneratorAction', 'ktstandard.pdf.generate', $sFilename = null); + $this->registerAction('documentaction', 'PDFGeneratorAction', 'ktstandard.pdf.generate', 'PDFGeneratorAction.php'); + $this->registerWorkflowTrigger('ktcore.workflowtriggers.pdfgenerator.duplicate' , 'PDFGeneratorWorkflowTriggerDuplicatePDF', 'PDFGeneratorWorkflowTriggers.php'); } } $oPluginRegistry =& KTPluginRegistry::getSingleton(); diff --git a/plugins/ktstandard/PDFGeneratorWorkflowTriggers.php b/plugins/ktstandard/PDFGeneratorWorkflowTriggers.php new file mode 100644 index 0000000..5ea0aae --- /dev/null +++ b/plugins/ktstandard/PDFGeneratorWorkflowTriggers.php @@ -0,0 +1,241 @@ +. + * + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, + * California 94120-7775, or email info@knowledgetree.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU General Public License version 3. + * + * In accordance with Section 7(b) of the GNU General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * KnowledgeTree" logo and retain the original copyright notice. If the display of the + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices + * must display the words "Powered by KnowledgeTree" and retain the original + * copyright notice. + * Contributor( s): thePanz (thepanz@gmail.com) + * + */ + +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(); + + // 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.'); + } + + // perform more expensive checks -before- performTransition. + // Taken from : plugins\ktcore\KTWorkflowTriggers.inc.php + public function precheckTransition($oDocument, $oUser) { + $iFolderId = KTUtil::arrayGet($this->aConfig, 'folder_id'); + $oFolder = 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.')); + } + + return true; + } + function performTransition($oDocument, $oUser) { + $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 + $pdfFile = $this->createPDF($oDocument); + if (PEAR::isError($pdfFile)) { + return $pdfFile; + } + + // Duplicate/Copy the Document + $oNewDocument = KTDocumentUtil::copy($oDocument, $oToFolder); + if (PEAR::isError($oNewDocument)) { + return $oNewDocument; + } + + // Associate PDF with the new document + $aOptions = array( + 'temp_filename' => $pdfFile, + 'cleanup_initial_file' => true, + ); + + $res = KTDocumentUtil::storeContents($oNewDocument, $oContents = null, $aOptions); + if (PEAR::isError($res)) { + // Remove the created document (not-correct) + KTDocumentUtil::delete($oNewDocument, _kt("PDF WorkflowTrigger error: can't create associate PDF file to document.")); + return $res; + } + + 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) { + global $default; + $dir = $default->pdfDirectory; + $file = $dir .'/'. $iDocId . '.pdf'; + print __class__ . '::' . __function__ . '() .'." file=$file
"; + if (!file_exists($file)) { + // If not - create one + $converter = new pdfConverter(); + $converter->setDocument($oDocument); + $res = $converter->processDocument(); + if ($res !== true) { + return PEAR::raiseError(_kt('PDF file could not be generated; Please contact your System Administrator for assistance.')); + } + } + return $file; + } + + function displayConfiguration($args) { + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('ktcore/workflowtriggers/copyaction'); + + require_once(KT_LIB_DIR . '/browse/DocumentCollection.inc.php'); + require_once(KT_LIB_DIR . '/browse/columnregistry.inc.php'); + + $collection = new AdvancedCollection; + $oColumnRegistry = KTColumnRegistry::getSingleton(); + $aColumns = array(); + $aColumns[] = $oColumnRegistry->getColumn('ktcore.columns.singleselection'); + $aColumns[] = $oColumnRegistry->getColumn('ktcore.columns.title'); + + $collection->addColumns($aColumns); + + $aOptions = $collection->getEnvironOptions(); // extract data from the environment + + + $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)); + } + $qs = implode('&',$qsFrag); + $aOptions['result_url'] = KTUtil::addQueryStringSelf($qs); + $aOptions['show_documents'] = false; + + $fFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId', KTUtil::arrayGet($this->aConfig, 'folder_id', 1)); + + $oFolder = Folder::get($fFolderId); + 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, + )); + + $collection->setColumnOptions('ktcore.columns.title', array( + 'direct_folder' => false, + 'folder_link' => $aOptions['result_url'], + )); + + + $aBreadcrumbs = array(); + $folder_path_names = $oFolder->getPathArray(); + $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); + } + + 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')); + } + + $sBreadcrumbs = implode(' » ', $aBreadcrumbs); + + $aTemplateData = array( + 'context' => $this, + 'breadcrumbs' => $sBreadcrumbs, + 'collection' => $collection, + 'args' => $args, + ); + return $oTemplate->render($aTemplateData); + } + + function saveConfiguration() { + $folder_id = KTUtil::arrayGet($_REQUEST, 'folder_id', null); + $oFolder = Folder::get($folder_id); + if (PEAR::isError($oFolder)) { + // silenty ignore + $folder_id = null; + } + + $config = array(); + $config['folder_id'] = $folder_id; + + $this->oTriggerInstance->setConfig($config); + $res = $this->oTriggerInstance->update(); + + return $res; + } + + function getConfigDescription() { + if (!$this->isLoaded()) { + return _kt('This trigger has no configuration.'); + } + // the actual permissions are stored in the array. + $perms = array(); + if (empty($this->aConfig) || is_null($this->aConfig['folder_id'])) { + return _kt('This transition cannot be performed: no folder has been selected.'); + } + $oFolder = Folder::get($this->aConfig['folder_id']); + if (PEAR::isError($oFolder)) { + return _kt('The folder required for this trigger has been deleted, so the transition cannot be performed.'); + } else { + return sprintf(_kt('The document will be copied as PDF to folder "%s".'), KTBrowseUtil::getUrlForFolder($oFolder), htmlentities($oFolder->getName(), ENT_NOQUOTES, 'UTF-8')); + } + } +} \ No newline at end of file -- libgit2 0.21.4