diff --git a/workflow/engine/src/BusinessModel/Trigger.php b/workflow/engine/src/BusinessModel/Trigger.php index dd4be1999..27233823b 100644 --- a/workflow/engine/src/BusinessModel/Trigger.php +++ b/workflow/engine/src/BusinessModel/Trigger.php @@ -79,5 +79,148 @@ class Trigger throw $e; } } + + /** + * List of Triggers in process + * + * return array + */ + public function getTriggersCriteria($sProcessUID = '') + { + $criteria = $this->getTriggerCriteria(); + + $criteria->add(\TriggersPeer::PRO_UID, $sProcessUID); + $criteria->addAscendingOrderByColumn('TRI_TITLE'); + + $oDataset = \TriggersPeer::doSelectRS($criteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + $oDataset->next(); + $triggersArray = ""; + //$triggersArray[] = array('TRI_UID' => 'char', 'PRO_UID' => 'char', 'TRI_TITLE' => 'char', 'TRI_DESCRIPTION' => 'char'); + while ($aRow = $oDataset->getRow()) { + if (($aRow['TRI_TITLE'] == null) || ($aRow['TRI_TITLE'] == "")) { + // There is no transaltion for this Trigger name, try to get/regenerate the label + $triggerObj = $this->getDataTrigger($aRow['TRI_UID']); + $aRow['TRI_TITLE'] = $triggerObj['tri_title']; + $aRow['TRI_DESCRIPTION'] = $triggerObj['tri_description']; + } + $triggersArray[] = array_change_key_case($aRow, CASE_LOWER); + $oDataset->next(); + } + + return $triggersArray; + } + + /** + * Get data for TriggerUid + * + * return array + */ + public function getDataTrigger($sTriggerUID = '') + { + $triggerO = new \Triggers(); + $triggerArray = $triggerO->load($sTriggerUID); + if (isset($triggerArray['PRO_UID'])) { + unset($triggerArray['PRO_UID']); + } + $triggerArray = array_change_key_case($triggerArray, CASE_LOWER); + return $triggerArray; + } + + + /** + * Delete Trigger + * + */ + public function deleteTrigger($sTriggerUID = '') + { + $oTrigger = new \Triggers(); + $triggerObj = $oTrigger->load( $sTriggerUID ); + + $oTrigger->remove( $sTriggerUID ); + $oStepTrigger = new \StepTrigger(); + $oStepTrigger->removeTrigger( $sTriggerUID ); + } + + /** + * Save Data for Trigger + * + */ + public function saveTrigger($sProcessUID = '', $dataTrigger = array(), $create = false, $sTriggerUid = '') + { + if ( ($sProcessUID == '') || (count($dataTrigger) == 0) ) { + return false; + } + $dataTrigger = array_change_key_case($dataTrigger, CASE_UPPER); + + if ( $create && (isset($dataTrigger['TRI_UID'])) ) { + unset($dataTrigger['TRI_UID']); + } + + $dataTrigger= (array)$dataTrigger; + if (isset($dataTrigger['TRI_TYPE']) && $dataTrigger['TRI_TYPE'] == '') { + $dataTrigger['TRI_TYPE'] = 'SCRIPT'; + } + + if (isset($dataTrigger['TRI_TITLE'])) { + if (!$this->verifyNameTrigger($sProcessUID, $dataTrigger['TRI_TITLE'], $sTriggerUid)) { + throw new \Exception('There is a triggers with the same name in this process'); + } + } + + $dataTrigger['PRO_UID'] = $sProcessUID; + $oTrigger = new \Triggers(); + if ($create) { + $oTrigger->create( $dataTrigger ); + $dataTrigger['TRI_UID'] = $oTrigger->getTriUid(); + } + + $oTrigger->update( $dataTrigger ); + if ($create) { + $dataResp = $oTrigger->load( $dataTrigger['TRI_UID'] ); + $dataResp = array_change_key_case($dataResp, CASE_LOWER); + if (isset($dataResp['pro_uid'])) { + unset($dataResp['pro_uid']); + } + return $dataResp; + } + } + + /** + * Verify name for trigger in process + * + * return boolean + */ + public function verifyNameTrigger($sProcessUID, $sTriggerName, $sTriggerUid = '') + { + $oCriteria = new \Criteria("workflow"); + $oCriteria->addSelectColumn( \TriggersPeer::TRI_UID ); + $oCriteria->add( \TriggersPeer::PRO_UID, $sProcessUID ); + if ($sTriggerUid != '') { + $oCriteria->add( \TriggersPeer::TRI_UID, $sTriggerUid, \Criteria::NOT_EQUAL); + } + $oDataset = \TriggersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + while ($oDataset->next()) { + $aRow = $oDataset->getRow(); + + $oCriteria1 = new \Criteria( 'workflow' ); + $oCriteria1->addSelectColumn( 'COUNT(*) AS TRIGGERS' ); + $oCriteria1->add( \ContentPeer::CON_CATEGORY, 'TRI_TITLE' ); + $oCriteria1->add( \ContentPeer::CON_ID, $aRow['TRI_UID'] ); + $oCriteria1->add( \ContentPeer::CON_VALUE, $sTriggerName ); + $oCriteria1->add( \ContentPeer::CON_LANG, SYS_LANG ); + $oDataset1 = \ContentPeer::doSelectRS( $oCriteria1 ); + $oDataset1->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + $oDataset1->next(); + $aRow1 = $oDataset1->getRow(); + + if ($aRow1['TRIGGERS']) { + return false; + } + } + return true; + } } diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project/Trigger.php b/workflow/engine/src/Services/Api/ProcessMaker/Project/Trigger.php new file mode 100644 index 000000000..36fc77dda --- /dev/null +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project/Trigger.php @@ -0,0 +1,109 @@ +getTriggersCriteria($projectUid); + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @param string $projectUid {@min 1} {@max 32} + * @param string $triggerUid {@min 1} {@max 32} + * + * @url GET /:projectUid/trigger/:triggerUid + */ + public function doGetTrigger($projectUid, $triggerUid) + { + try { + $trigger = new \BusinessModel\Trigger(); + $response = $trigger->getDataTrigger($triggerUid); + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @param string $projectUid {@min 1} {@max 32} + * @param array $request_data + * @param string $tri_title {@from body} {@min 1} + * @param string $tri_description {@from body} + * @param string $tri_type {@from body} {@choice SCRIPT} + * @param string $tri_webbot {@from body} + * @param string $tri_param {@from body} + * + * @url POST /:projectUid/trigger + */ + public function doPostTrigger($projectUid, $request_data, $tri_title, $tri_description = '', $tri_type = 'SCRIPT', $tri_webbot = '', $tri_param = '') + { + try { + $trigger = new \BusinessModel\Trigger(); + $response = $trigger->saveTrigger($projectUid, $request_data, true); + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @param string $projectUid {@min 1} {@max 32} + * @param string $triggerUid {@min 1} {@max 32} + * @param array $request_data + * @param string $tri_title {@from body} + * @param string $tri_description {@from body} + * @param string $tri_type {@from body} {@choice SCRIPT} + * @param string $tri_webbot {@from body} + * @param string $tri_param {@from body} + * + * @url PUT /:projectUid/trigger/:triggerUid + */ + public function doPutTrigger($projectUid, $triggerUid, $request_data, $tri_title = '', $tri_description = '', $tri_type = 'SCRIPT', $tri_webbot = '', $tri_param = '') + { + try { + $request_data['tri_uid'] = $triggerUid; + $trigger = new \BusinessModel\Trigger(); + $trigger->saveTrigger($projectUid, $request_data, false, $triggerUid); + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @param string $projectUid {@min 1} {@max 32} + * @param string $triggerUid {@min 1} {@max 32} + * + * @url DELETE /:projectUid/trigger/:triggerUid + */ + public function doDeleteTrigger($projectUid, $triggerUid) + { + try { + $trigger = new \BusinessModel\Trigger(); + $response = $trigger->deleteTrigger($triggerUid); + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } +} + diff --git a/workflow/engine/src/Services/api.ini b/workflow/engine/src/Services/api.ini index 3a28be320..c0ca23507 100644 --- a/workflow/engine/src/Services/api.ini +++ b/workflow/engine/src/Services/api.ini @@ -5,8 +5,8 @@ debug = 1 [api] - version = 1.0 - vendor = "ProcessMaker - Michelangelo (Enterprise)" + version = 1.0 + vendor = "ProcessMaker - Michelangelo (Enterprise)" [alias: test] test2 = "Services\Api\ProcessMaker\Test2" @@ -15,9 +15,10 @@ debug = 1 [alias: project] activity = "Services\Api\ProcessMaker\Project\Activity" step = "Services\Api\ProcessMaker\Project\Activity\Step" - assignee = "Services\Api\ProcessMaker\Project\Activity\Assignee" + assignee = "Services\Api\ProcessMaker\Project\Activity\Assignee" trigger = "Services\Api\ProcessMaker\Project\Activity\Step\Trigger" - project = "Services\Api\ProcessMaker\Project" + project = "Services\Api\ProcessMaker\Project" + trigger2 = "Services\Api\ProcessMaker\Project\Trigger" [alias: projects] project = "Services\Api\ProcessMaker\Project"