From c6ed75829394b4d6295c73e3943bcfa9a47006ce Mon Sep 17 00:00:00 2001 From: bshuttle Date: Mon, 5 Jun 2006 12:24:32 +0000 Subject: [PATCH] basic api for workflow triggers. --- docs/VERSION.txt | 2 +- lib/workflow/workflowtrigger.inc.php | 2 +- lib/workflow/workflowtriggerinstance.inc.php | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/workflow/workflowutil.inc.php | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sql/mysql/upgrade/3.0.3.1/workflow-triggers.sql | 14 ++++++++++++++ 5 files changed, 153 insertions(+), 2 deletions(-) create mode 100644 lib/workflow/workflowtriggerinstance.inc.php create mode 100644 sql/mysql/upgrade/3.0.3.1/workflow-triggers.sql diff --git a/docs/VERSION.txt b/docs/VERSION.txt index 75a22a2..4e748b6 100644 --- a/docs/VERSION.txt +++ b/docs/VERSION.txt @@ -1 +1 @@ -3.0.3 +3.0.3.1 diff --git a/lib/workflow/workflowtrigger.inc.php b/lib/workflow/workflowtrigger.inc.php index 3cd2d10..c13f156 100644 --- a/lib/workflow/workflowtrigger.inc.php +++ b/lib/workflow/workflowtrigger.inc.php @@ -55,7 +55,7 @@ class KTWorkflowTrigger { function isLoaded() { return (!is_null($this->oTriggerInstance)); } // simple function to inform the UI/registration what kind of event this is - function getCapabilities() { + function getInfo() { return array( 'guard' => $this->bIsGuard, 'action' => $this->bIsAction, diff --git a/lib/workflow/workflowtriggerinstance.inc.php b/lib/workflow/workflowtriggerinstance.inc.php new file mode 100644 index 0000000..41752dd --- /dev/null +++ b/lib/workflow/workflowtriggerinstance.inc.php @@ -0,0 +1,77 @@ + "id", + "sConfigArrayText" => "config_array", + "sNamespace" => "namespace", + "iTransitionId" => "workflow_transition_id", + ); + + var $_bUsePearError = true; + + function getTransitionId() { return $this->iTransitionId; } + function setTransitionId($iNewValue) { $this->iTransitionId = $iNewValue; } + function getNamespace() { return $this->sNamespace; } + function setNamespace($sNewValue) { $this->sNamespace = $sNewValue; } + function getConfigArrayText() { return $this->sConfigArrayText; } + function setConfigArrayText($sNewValue) { $this->sConfigArrayText = $sNewValue; } + function getConfig() { return unserialize($this->sConfigArrayText); } + function setConfig($aNewValue) { $this->sConfigArrayText = serialize($aNewValue); } + + function _table () { + return KTUtil::getTableName('workflow_trigger_instances'); + } + + // STATIC + function &get($iId) { return KTEntityUtil::get('KTWorkflowTriggerInstance', $iId); } + function &createFromArray($aOptions) { + $aOptions['configarraytext'] = serialize($aOptions['config']); + return KTEntityUtil::createFromArray('KTWorkflowTriggerInstance', $aOptions); + } + function &getList($sWhereClause = null) { return KTEntityUtil::getList2('KTWorkflowTriggerInstance', $sWhereClause); } + function &getByTransition($oTransition, $aOptions = null) { + $iTransitionId = KTUtil::getId($oTransition); + $aOptions = KTUtil::meldOptions($aOptions, array( + 'multi' => true, + )); + return KTEntityUtil::getByDict('KTWorkflowTriggerInstance', array( + 'workflow_transition_id' => $iTransitionId, + ), $aOptions); + } + +} + +?> diff --git a/lib/workflow/workflowutil.inc.php b/lib/workflow/workflowutil.inc.php index ac54a00..a87f0a9 100644 --- a/lib/workflow/workflowutil.inc.php +++ b/lib/workflow/workflowutil.inc.php @@ -29,6 +29,8 @@ require_once(KT_LIB_DIR . '/workflow/workflow.inc.php'); require_once(KT_LIB_DIR . '/workflow/workflowstate.inc.php'); require_once(KT_LIB_DIR . '/workflow/workflowtransition.inc.php'); +require_once(KT_LIB_DIR . '/workflow/workflowtrigger.inc.php'); +require_once(KT_LIB_DIR . '/workflow/workflowtriggerinstance.inc.php'); require_once(KT_LIB_DIR . '/permissions/permissionutil.inc.php'); require_once(KT_LIB_DIR . '/groups/GroupUtil.php'); @@ -644,5 +646,63 @@ class KTWorkflowUtil { return KTPermissionUtil::getAllowedForDescriptor($iDescriptorId); } // }}} + + // retrieves the triggers for a given transition in their WorkflowTrigger form. + function getTriggersForTransition($oTransition) { + $oKTWorkflowTriggerRegistry =& KTWorkflowTriggerRegistry::getSingleton(); + $aTriggers = array(); + $aTriggerInstances = KTWorkflowTriggerInstance::getByTransition($oTransition); + foreach ($aTriggerInstances as $oTriggerInstance) { + $oTrigger = $oKTWorkflowTriggerRegistry->getWorkflowTrigger($oTriggerInstance->getNamespace()); + if (PEAR::isError($oTrigger)) { + return $oTrigger; + } + $oTrigger->loadConfig($oTriggerInstance); + $aTriggers[] = $oTrigger; + } + return $aTriggers; + } +} + +class KTWorkflowTriggerRegistry { + var $triggers; + + // {{{ getSingleton + function &getSingleton () { + if (!KTUtil::arrayGet($GLOBALS['_KT_PLUGIN'], 'oKTWorkflowTriggerRegistry')) { + $GLOBALS['_KT_PLUGIN']['oKTWorkflowTriggerRegistry'] = new KTWorkflowTriggerRegistry; + } + return $GLOBALS['_KT_PLUGIN']['oKTWorkflowTriggerRegistry']; + } + // }}} + + function registerWorkflowTrigger($sNamespace, $sClassname, $sPath) { + $this->triggers[$sNamespace] = array('class' => $sClassname, 'path' => $sPath); + } + + function getWorkflowTrigger($sNamespace) { + $aInfo = KTUtil::arrayGet($this->triggers, $sNamespace, null); + if (is_null($aInfo)) { + return PEAR::raiseError(sprintf(_kt("Unable to find workflow trigger: %s"), $sNamespace)); + } + + if (file_exists($aInfo['path'])) { + require_once($aInfo['path']); + } + + return new $sClassname; + } + + // get a keyed list of workflow triggers + + function listWorkflowTriggers() { + $triggerlist = array(); + foreach ($this->triggers as $sNamespace => $aTrigInfo) { + $oTriggerObj = $this->getWorkflowTrigger($sNamespace); + $triggerlist[$sNamespace] = $oTriggerObj->getInfo(); + } + // FIXME do we want to order this alphabetically? + return $triggerlist; + } } diff --git a/sql/mysql/upgrade/3.0.3.1/workflow-triggers.sql b/sql/mysql/upgrade/3.0.3.1/workflow-triggers.sql new file mode 100644 index 0000000..3973476 --- /dev/null +++ b/sql/mysql/upgrade/3.0.3.1/workflow-triggers.sql @@ -0,0 +1,14 @@ +CREATE TABLE workflow_trigger_instances ( + id int(10) unsigned NOT NULL default '0', + workflow_transition_id int(11) NOT NULL default '0', + namespace char(255) NOT NULL default '', + config_array text, + PRIMARY KEY (id), + KEY workflow_transition_id (workflow_transition_id), + KEY namespace (namespace) +) TYPE=InnoDB; + +CREATE TABLE zseq_workflow_trigger_instances ( + id int(10) unsigned NOT NULL auto_increment, + PRIMARY KEY (id) +) TYPE=MyISAM; -- libgit2 0.21.4