From ce686e5084e51ddc4ad6ff52a73bab3020b9ecbd Mon Sep 17 00:00:00 2001 From: Freddy Daniel Rojas Valda Date: Wed, 5 Feb 2014 09:59:38 -0400 Subject: [PATCH 1/4] Se agregan validaciones en ASSIGNEE. Se ajustan main_test BEHAT para ASSIGNEE --- .../main_tests_adhoc_assignee.feature | 4 +- .../assignee/activity_assignee.feature | 2 +- .../assignee/main_tests_assignee.feature | 2 +- .../main_tests_supervisor.feature | 4 +- workflow/engine/src/BusinessModel/Task.php | 160 +++++++++++++++++- 5 files changed, 162 insertions(+), 10 deletions(-) diff --git a/features/backend/adhoc_assignee/main_tests_adhoc_assignee.feature b/features/backend/adhoc_assignee/main_tests_adhoc_assignee.feature index d2495a967..2c90ef890 100644 --- a/features/backend/adhoc_assignee/main_tests_adhoc_assignee.feature +++ b/features/backend/adhoc_assignee/main_tests_adhoc_assignee.feature @@ -66,7 +66,7 @@ Feature: Project Properties -Adhoc Assignee Resources Examples: | test_description | project | activity | records | ada_uid | ada_type | - | Verify that the activity has expected quantity of asignees | 4224292655297723eb98691001100052 | 65496814252977243d57684076211485 | 5 | 54731929352d56741de9d42002704749 | group | + | Verify that the activity has expected quantity of asignees | 4224292655297723eb98691001100052 | 65496814252977243d57684076211485 | 4 | 54731929352d56741de9d42002704749 | group | | Verify that the activity has expected quantity of asignees | 4224292655297723eb98691001100052 | 68911670852a22d93c22c06005808422 | 1 | 36775342552d5674146d9c2078497230 | group | @@ -119,7 +119,7 @@ Feature: Project Properties -Adhoc Assignee Resources And the response charset is "UTF-8" And the content type is "application/json" And the type is "array" - And the response has 2 records + And the response has 1 records diff --git a/features/backend/assignee/activity_assignee.feature b/features/backend/assignee/activity_assignee.feature index 272221a2b..5d4ca2bce 100644 --- a/features/backend/assignee/activity_assignee.feature +++ b/features/backend/assignee/activity_assignee.feature @@ -19,7 +19,7 @@ Feature: Assignee Resources Examples: | test_description | project | activity | records | aas_uid | aas_type | - | check if the list of possible users and groups to be assigned is correct | 4224292655297723eb98691001100052 | 65496814252977243d57684076211485 | 82 | 54731929352d56741de9d42002704749 | group | + | check if the list of possible users and groups to be assigned is correct | 4224292655297723eb98691001100052 | 65496814252977243d57684076211485 | 81 | 54731929352d56741de9d42002704749 | group | Scenario Outline: Get the list of available users and groups to be assigned to an activity using filter Given I request "project/4224292655297723eb98691001100052/activity/65496814252977243d57684076211485/available-assignee?filter=&start=&limit=" diff --git a/features/backend/assignee/main_tests_assignee.feature b/features/backend/assignee/main_tests_assignee.feature index ff07db5aa..af9eaf4f3 100644 --- a/features/backend/assignee/main_tests_assignee.feature +++ b/features/backend/assignee/main_tests_assignee.feature @@ -19,7 +19,7 @@ Feature: Assignee Resources Examples: | test_description | project | activity | records | aas_uid | aas_type | - | check if the list of possible users and groups to be assigned is correct | 4224292655297723eb98691001100052 | 65496814252977243d57684076211485 | 82 | 54731929352d56741de9d42002704749 | group | + | check if the list of possible users and groups to be assigned is correct | 4224292655297723eb98691001100052 | 65496814252977243d57684076211485 | 81 | 54731929352d56741de9d42002704749 | group | Scenario Outline: Get the list of available users and groups to be assigned to an activity using filter Given I request "project//activity//available-assignee?filter=&start=&limit=" diff --git a/features/backend/process_supervisor/main_tests_supervisor.feature b/features/backend/process_supervisor/main_tests_supervisor.feature index f8dd0ce62..a77648a25 100644 --- a/features/backend/process_supervisor/main_tests_supervisor.feature +++ b/features/backend/process_supervisor/main_tests_supervisor.feature @@ -39,7 +39,7 @@ Feature: Process supervisor Resources Examples: | test_description | project | records | - | List users and groups available to be supervisors | 85794888452ceeef3675164057928956 | 24 | + | List users and groups available to be supervisors | 85794888452ceeef3675164057928956 | 23 | Scenario Outline: Get a List of available groups process supervisor of a project @@ -52,7 +52,7 @@ Feature: Process supervisor Resources Examples: | test_description | project | records | - | List the 23 groups available to be supervisors | 85794888452ceeef3675164057928956 | 23 | + | List the 23 groups available to be supervisors | 85794888452ceeef3675164057928956 | 22 | Scenario Outline: Get a List of available users elegible as process supervisor diff --git a/workflow/engine/src/BusinessModel/Task.php b/workflow/engine/src/BusinessModel/Task.php index 556c249de..f59716f86 100644 --- a/workflow/engine/src/BusinessModel/Task.php +++ b/workflow/engine/src/BusinessModel/Task.php @@ -656,6 +656,9 @@ class Task public function getTaskAssignees($sProcessUID, $sTaskUID, $filter, $start, $limit) { try { + require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RbacUsers.php"); + require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "TaskUser.php"); + require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "GroupUser.php"); $oProcess = \ProcessPeer::retrieveByPK( $sProcessUID ); if (is_null($oProcess)) { throw (new \Exception( 'This id for `prj_uid`: '. $sProcessUID .' do not correspond to a registered process')); @@ -697,7 +700,42 @@ class Task return $aUsers; } } - $result = $groups->getAllGroup($start, $limit, $filter); + $totalCount = 0; + $criteria = new \Criteria( 'workflow' ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UID ); + $criteria->addJoin( \GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::LEFT_JOIN ); + $criteria->add( \ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $criteria->add( \ContentPeer::CON_LANG, SYS_LANG ); + $criteria->addAscendingOrderByColumn( \ContentPeer::CON_VALUE ); + $totalRows = \GroupwfPeer::doCount( $criteria ); + $criteria = new \Criteria( 'workflow' ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UID ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_STATUS ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UX ); + $criteria->addAsColumn( 'GRP_TITLE', \ContentPeer::CON_VALUE ); + $criteria->addJoin( \GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::LEFT_JOIN ); + $criteria->add( \ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $criteria->add( \ContentPeer::CON_LANG, SYS_LANG ); + $criteria->addAscendingOrderByColumn( \ContentPeer::CON_VALUE ); + if ($start != '') { + $criteria->setOffset( $start ); + } + if ($limit != '') { + $criteria->setLimit( $limit ); + } + if ($filter != '') { + $criteria->add( \ContentPeer::CON_VALUE, '%' . $filter . '%', \Criteria::LIKE ); + } + $oDataset = \GroupwfPeer::doSelectRS( $criteria ); + $oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + $processes = Array (); + $uids = array (); + $groups = array (); + $aGroups = array (); + while ($oDataset->next()) { + $groups[] = $oDataset->getRow(); + } + $result = array ('rows' => $groups,'totalCount' => $totalRows); foreach ($result['rows'] as $results) { if (in_array($results['GRP_UID'], $aUIDS1)) { $c++; @@ -785,6 +823,9 @@ class Task public function getTaskAvailableAssignee($sProcessUID, $sTaskUID, $filter, $start, $limit) { try { + require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RbacUsers.php"); + require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "TaskUser.php"); + require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "GroupUser.php"); $oProcess = \ProcessPeer::retrieveByPK( $sProcessUID ); if (is_null($oProcess)) { throw (new \Exception( 'This id for `prj_uid`: '. $sProcessUID .' do not correspond to a registered process')); @@ -823,7 +864,42 @@ class Task return $aUsers; } } - $result = $groups->getAllGroup($start, $limit, $filter); + $totalCount = 0; + $criteria = new \Criteria( 'workflow' ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UID ); + $criteria->addJoin( \GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::LEFT_JOIN ); + $criteria->add( \ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $criteria->add( \ContentPeer::CON_LANG, SYS_LANG ); + $criteria->addAscendingOrderByColumn( \ContentPeer::CON_VALUE ); + $totalRows = \GroupwfPeer::doCount( $criteria ); + $criteria = new \Criteria( 'workflow' ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UID ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_STATUS ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UX ); + $criteria->addAsColumn( 'GRP_TITLE', \ContentPeer::CON_VALUE ); + $criteria->addJoin( \GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::LEFT_JOIN ); + $criteria->add( \ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $criteria->add( \ContentPeer::CON_LANG, SYS_LANG ); + $criteria->addAscendingOrderByColumn( \ContentPeer::CON_VALUE ); + if ($start != '') { + $criteria->setOffset( $start ); + } + if ($limit != '') { + $criteria->setLimit( $limit ); + } + if ($filter != '') { + $criteria->add( \ContentPeer::CON_VALUE, '%' . $filter . '%', \Criteria::LIKE ); + } + $oDataset = \GroupwfPeer::doSelectRS( $criteria ); + $oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + $processes = Array (); + $uids = array (); + $groups = array (); + $aGroups = array (); + while ($oDataset->next()) { + $groups[] = $oDataset->getRow(); + } + $result = array ('rows' => $groups,'totalCount' => $totalRows); foreach ($result['rows'] as $results) { if (! in_array($results['GRP_UID'], $aUIDS1)) { $c++; @@ -1129,6 +1205,9 @@ class Task public function getTaskAdhocAssignees($sProcessUID, $sTaskUID, $filter, $start, $limit) { try { + require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RbacUsers.php"); + require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "TaskUser.php"); + require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "GroupUser.php"); $oProcess = \ProcessPeer::retrieveByPK( $sProcessUID ); if (is_null($oProcess)) { throw (new \Exception( 'This id for `prj_uid`: '. $sProcessUID .' do not correspond to a registered process')); @@ -1170,7 +1249,42 @@ class Task return $aUsers; } } - $result = $groups->getAllGroup($start, $limit, $filter); + $totalCount = 0; + $criteria = new \Criteria( 'workflow' ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UID ); + $criteria->addJoin( \GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::LEFT_JOIN ); + $criteria->add( \ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $criteria->add( \ContentPeer::CON_LANG, SYS_LANG ); + $criteria->addAscendingOrderByColumn( \ContentPeer::CON_VALUE ); + $totalRows = \GroupwfPeer::doCount( $criteria ); + $criteria = new \Criteria( 'workflow' ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UID ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_STATUS ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UX ); + $criteria->addAsColumn( 'GRP_TITLE', \ContentPeer::CON_VALUE ); + $criteria->addJoin( \GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::LEFT_JOIN ); + $criteria->add( \ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $criteria->add( \ContentPeer::CON_LANG, SYS_LANG ); + $criteria->addAscendingOrderByColumn( \ContentPeer::CON_VALUE ); + if ($start != '') { + $criteria->setOffset( $start ); + } + if ($limit != '') { + $criteria->setLimit( $limit ); + } + if ($filter != '') { + $criteria->add( \ContentPeer::CON_VALUE, '%' . $filter . '%', \Criteria::LIKE ); + } + $oDataset = \GroupwfPeer::doSelectRS( $criteria ); + $oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + $processes = Array (); + $uids = array (); + $groups = array (); + $aGroups = array (); + while ($oDataset->next()) { + $groups[] = $oDataset->getRow(); + } + $result = array ('rows' => $groups,'totalCount' => $totalRows); foreach ($result['rows'] as $results) { if (in_array($results['GRP_UID'], $aUIDS1)) { $c++; @@ -1255,6 +1369,9 @@ class Task public function getTaskAvailableAdhocAssignee($sProcessUID, $sTaskUID, $filter, $start, $limit) { try { + require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RbacUsers.php"); + require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "TaskUser.php"); + require_once (PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "GroupUser.php"); $oProcess = \ProcessPeer::retrieveByPK( $sProcessUID ); if (is_null($oProcess)) { throw (new \Exception( 'This id for `prj_uid`: '. $sProcessUID .' do not correspond to a registered process')); @@ -1293,7 +1410,42 @@ class Task return $aUsers; } } - $result = $groups->getAllGroup($start, $limit, $filter); + $totalCount = 0; + $criteria = new \Criteria( 'workflow' ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UID ); + $criteria->addJoin( \GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::LEFT_JOIN ); + $criteria->add( \ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $criteria->add( \ContentPeer::CON_LANG, SYS_LANG ); + $criteria->addAscendingOrderByColumn( \ContentPeer::CON_VALUE ); + $totalRows = \GroupwfPeer::doCount( $criteria ); + $criteria = new \Criteria( 'workflow' ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UID ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_STATUS ); + $criteria->addSelectColumn( \GroupwfPeer::GRP_UX ); + $criteria->addAsColumn( 'GRP_TITLE', \ContentPeer::CON_VALUE ); + $criteria->addJoin( \GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::LEFT_JOIN ); + $criteria->add( \ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $criteria->add( \ContentPeer::CON_LANG, SYS_LANG ); + $criteria->addAscendingOrderByColumn( \ContentPeer::CON_VALUE ); + if ($start != '') { + $criteria->setOffset( $start ); + } + if ($limit != '') { + $criteria->setLimit( $limit ); + } + if ($filter != '') { + $criteria->add( \ContentPeer::CON_VALUE, '%' . $filter . '%', \Criteria::LIKE ); + } + $oDataset = \GroupwfPeer::doSelectRS( $criteria ); + $oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + $processes = Array (); + $uids = array (); + $groups = array (); + $aGroups = array (); + while ($oDataset->next()) { + $groups[] = $oDataset->getRow(); + } + $result = array ('rows' => $groups,'totalCount' => $totalRows); foreach ($result['rows'] as $results) { if (! in_array($results['GRP_UID'], $aUIDS1)) { $c++; From 47f991034f58a52db0fa49e29c88d422010f7d8f Mon Sep 17 00:00:00 2001 From: Erik Amaru Ortiz Date: Wed, 5 Feb 2014 11:39:15 -0400 Subject: [PATCH 2/4] More Bpmn/Workflow handling layer refactoring and improve unit tests --- gulliver/system/class.bootstrap.php | 1 + gulliver/system/class.g.php | 8 +- gulliver/system/class.soapNtlm.php | 50 +- workflow/engine/classes/class.system.php | 2 +- .../Exception/ProjectNotFound.php | 20 + .../Project/{BpmnProject.php => Bpmn.php} | 19 +- .../{ProjectHandler.php => Handler.php} | 14 +- .../Project/ProjectHandlerInterface.php | 10 - .../src/ProcessMaker/Project/Workflow.php | 530 ++++++++++++++++++ .../ProcessMaker/Project/WorkflowProject.php | 312 ----------- .../BpmnTest.php} | 52 +- .../WorkflowTest.php} | 48 +- 12 files changed, 662 insertions(+), 404 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Exception/ProjectNotFound.php rename workflow/engine/src/ProcessMaker/Project/{BpmnProject.php => Bpmn.php} (95%) rename workflow/engine/src/ProcessMaker/Project/{ProjectHandler.php => Handler.php} (68%) delete mode 100644 workflow/engine/src/ProcessMaker/Project/ProjectHandlerInterface.php create mode 100644 workflow/engine/src/ProcessMaker/Project/Workflow.php delete mode 100644 workflow/engine/src/ProcessMaker/Project/WorkflowProject.php rename workflow/engine/src/Tests/ProcessMaker/{BpmnProjectTest.php => Project/BpmnTest.php} (82%) rename workflow/engine/src/Tests/ProcessMaker/{WorkflowProjectTest.php => Project/WorkflowTest.php} (85%) diff --git a/gulliver/system/class.bootstrap.php b/gulliver/system/class.bootstrap.php index 257948e94..3ecb98f08 100644 --- a/gulliver/system/class.bootstrap.php +++ b/gulliver/system/class.bootstrap.php @@ -382,6 +382,7 @@ class Bootstrap self::registerClass("IsoLocation", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "IsoLocation.php"); self::registerClass("Users", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Users.php"); self::registerClass("UsersPeer", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "UsersPeer.php"); + self::registerClass("ReportTables", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "class.reportTables.php"); self::registerClass("Xml_Node", PATH_GULLIVER . "class.xmlDocument.php"); diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index b7216c8a9..765e54827 100755 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -303,7 +303,7 @@ class G /** * ************* path functions **************** */ - public function mk_dir ($strPath, $rights = 0770) + public static function mk_dir ($strPath, $rights = 0770) { $folder_path = array ($strPath); $oldumask = umask( 0 ); @@ -444,7 +444,7 @@ class G * @param string $strPath * @return string */ - public function expandPath ($strPath = '') + public static function expandPath ($strPath = '') { $res = ""; $res = PATH_CORE; @@ -462,7 +462,7 @@ class G * @param string $strClass * @return void */ - public function LoadSystem ($strClass) + public static function LoadSystem ($strClass) { require_once (PATH_GULLIVER . 'class.' . $strClass . '.php'); } @@ -689,7 +689,7 @@ class G * @param string $strClass * @return void */ - public function LoadClass ($strClass) + public static function LoadClass ($strClass) { $classfile = G::ExpandPath( "classes" ) . 'class.' . $strClass . '.php'; if (! file_exists( $classfile )) { diff --git a/gulliver/system/class.soapNtlm.php b/gulliver/system/class.soapNtlm.php index dfc850a0d..28ff4a933 100644 --- a/gulliver/system/class.soapNtlm.php +++ b/gulliver/system/class.soapNtlm.php @@ -25,9 +25,9 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ -/* SOAP NTLM - * This class is used to extend SoapClient native PHP - * to allow NTLM authentication throw soap connection +/* SOAP NTLM + * This class is used to extend SoapClient native PHP + * to allow NTLM authentication throw soap connection */ /** @@ -64,8 +64,8 @@ class soapNtlm */ public function stream_open ($path, $mode, $options, $opened_path) { - //echo "[NTLMStream::stream_open] $path , mode=$mode
"; - //G::pr($options); + //echo "[NTLMStream::stream_open] $path , mode=$mode
"; + //G::pr($options); $this->path = $path; $this->mode = $mode; $this->options = $options; @@ -79,7 +79,7 @@ class soapNtlm */ public function stream_close () { - //echo "[NTLMStream::stream_close]
"; + //echo "[NTLMStream::stream_close]
"; curl_close( $this->ch ); } @@ -91,7 +91,7 @@ class soapNtlm */ public function stream_read ($count) { - //echo "[NTLMStream::stream_read] $count
"; + //echo "[NTLMStream::stream_read] $count
"; if (strlen( $this->buffer ) == 0) { return false; } @@ -108,7 +108,7 @@ class soapNtlm */ public function stream_write ($data) { - //echo "[NTLMStream::stream_write]
"; + //echo "[NTLMStream::stream_write]
"; if (strlen( $this->buffer ) == 0) { return false; } @@ -121,12 +121,12 @@ class soapNtlm */ public function stream_eof () { - //echo "[NTLMStream::stream_eof] "; + //echo "[NTLMStream::stream_eof] "; if ($this->pos > strlen( $this->buffer )) { - //echo "true
"; + //echo "true
"; return true; } - //echo "false
"; + //echo "false
"; return false; } @@ -136,7 +136,7 @@ class soapNtlm */ public function stream_tell () { - //echo "[NTLMStream::stream_tell]
"; + //echo "[NTLMStream::stream_tell]
"; return $this->pos; } @@ -145,7 +145,7 @@ class soapNtlm */ public function stream_flush () { - //echo "[NTLMStream::stream_flush]
"; + //echo "[NTLMStream::stream_flush]
"; $this->buffer = null; $this->pos = null; } @@ -157,7 +157,7 @@ class soapNtlm */ public function stream_stat () { - //echo "[NTLMStream::stream_stat]
"; + //echo "[NTLMStream::stream_stat]
"; $this->createBuffer( $this->path ); $stat = array ('size' => strlen( $this->buffer )); return $stat; @@ -170,8 +170,8 @@ class soapNtlm */ public function url_stat ($path, $flags) { - //G::pr($this->options); - //echo "[NTLMStream::url_stat] -> $path
"; + //G::pr($this->options); + //echo "[NTLMStream::url_stat] -> $path
"; $this->createBuffer( $path ); $stat = array ('size' => strlen( $this->buffer )); return $stat; @@ -188,14 +188,14 @@ class soapNtlm return; } - //echo "[NTLMStream::createBuffer] create buffer from : $path
"; + //echo "[NTLMStream::createBuffer] create buffer from : $path
"; $this->ch = curl_init( $path ); curl_setopt( $this->ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $this->ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 ); curl_setopt( $this->ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM ); - //curl_setopt($this->ch, CURLOPT_USERPWD, $this->options['auth']); // Hugo's code - curl_setopt( $this->ch, CURLOPT_USERPWD, $this->getuser() . ':' . $this->getpassword() ); // Ankit's code - //Apply proxy settings + //curl_setopt($this->ch, CURLOPT_USERPWD, $this->options['auth']); // Hugo's code + curl_setopt( $this->ch, CURLOPT_USERPWD, $this->getuser() . ':' . $this->getpassword() ); // Ankit's code + //Apply proxy settings if (class_exists( 'System' )) { $sysConf = System::getSystemConfiguration(); if ($sysConf['proxy_host'] != '') { @@ -210,7 +210,7 @@ class soapNtlm } } echo $this->buffer = curl_exec( $this->ch ); - //echo "[NTLMStream::createBuffer] buffer size : " . strlen($this->buffer) . "bytes
"; + //echo "[NTLMStream::createBuffer] buffer size : " . strlen($this->buffer) . "bytes
"; $this->pos = 0; } @@ -218,7 +218,7 @@ class soapNtlm class NTLMSoapClient extends SoapClient { - function __doRequest ($request, $location, $action, $version) + function __doRequest ($request, $location, $action, $version, $one_way = 0) { $headers = array ('Method: POST','Connection: Keep-Alive','User-Agent: PHP-SOAP-CURL','Content-Type: text/xml; charset=utf-8','SOAPAction: "' . $action . '"'); @@ -232,10 +232,10 @@ class NTLMSoapClient extends SoapClient curl_setopt( $ch, CURLOPT_POSTFIELDS, $request ); curl_setopt( $ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 ); curl_setopt( $ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM ); - //curl_setopt($ch, CURLOPT_USERPWD, $this->options['auth']); //Hugo's Code - curl_setopt( $ch, CURLOPT_USERPWD, $this->user . ':' . $this->password ); //Ankit's Code + //curl_setopt($ch, CURLOPT_USERPWD, $this->options['auth']); //Hugo's Code + curl_setopt( $ch, CURLOPT_USERPWD, $this->user . ':' . $this->password ); //Ankit's Code - //Apply proxy settings + //Apply proxy settings if (class_exists( 'System' )) { $sysConf = System::getSystemConfiguration(); if ($sysConf['proxy_host'] != '') { diff --git a/workflow/engine/classes/class.system.php b/workflow/engine/classes/class.system.php index 337558632..6b1452f49 100755 --- a/workflow/engine/classes/class.system.php +++ b/workflow/engine/classes/class.system.php @@ -1141,7 +1141,7 @@ class System return $result; } - public function solrEnv ($sysName = '') + public static function solrEnv ($sysName = '') { if (empty( $sysName )) { $conf = System::getSystemConfiguration(); diff --git a/workflow/engine/src/ProcessMaker/Exception/ProjectNotFound.php b/workflow/engine/src/ProcessMaker/Exception/ProjectNotFound.php new file mode 100644 index 000000000..5e017eb67 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Exception/ProjectNotFound.php @@ -0,0 +1,20 @@ +code}]: {$this->message}\n"; + } +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Project/BpmnProject.php b/workflow/engine/src/ProcessMaker/Project/Bpmn.php similarity index 95% rename from workflow/engine/src/ProcessMaker/Project/BpmnProject.php rename to workflow/engine/src/ProcessMaker/Project/Bpmn.php index 6e6221375..066d83200 100644 --- a/workflow/engine/src/ProcessMaker/Project/BpmnProject.php +++ b/workflow/engine/src/ProcessMaker/Project/Bpmn.php @@ -27,20 +27,11 @@ use \BpmnArtifactPeer as ArtifactPeer; use \BasePeer; -use ProcessMaker\Project\ProjectHandler; use ProcessMaker\Util\Hash; +use ProcessMaker\Exception; -class BpmnProject //extends ProjectHandler +class Bpmn extends Handler { - protected static $diagramElements = array( - 'activities' => 'act_uid', - 'events' => 'evn_uid', - 'flows' => 'flo_uid', - 'artifacts' => 'art_uid', - 'laneset' => 'lns_uid', - 'lanes' => 'lan_uid' - ); - /** * @var \BpmnProject */ @@ -68,13 +59,13 @@ class BpmnProject //extends ProjectHandler public static function load($prjUid) { + $me = new self(); $project = ProjectPeer::retrieveByPK($prjUid); if (! is_object($project)) { - return null; + throw new Exception\ProjectNotFound($me, $prjUid); } - $me = new BpmnProject(); $me->project = $project; $me->prjUid = $me->project->getPrjUid(); @@ -82,7 +73,7 @@ class BpmnProject //extends ProjectHandler } /** - * @param array|null $data optional array attributes to create and initialize a BpmnProject + * @param array| $data array attributes to create and initialize a BpmnProject */ public function create($data) { diff --git a/workflow/engine/src/ProcessMaker/Project/ProjectHandler.php b/workflow/engine/src/ProcessMaker/Project/Handler.php similarity index 68% rename from workflow/engine/src/ProcessMaker/Project/ProjectHandler.php rename to workflow/engine/src/ProcessMaker/Project/Handler.php index 93e9e1cf3..3d402aff4 100644 --- a/workflow/engine/src/ProcessMaker/Project/ProjectHandler.php +++ b/workflow/engine/src/ProcessMaker/Project/Handler.php @@ -3,11 +3,17 @@ namespace ProcessMaker\Project; use ProcessMaker\Util\Logger; -abstract class ProjectHandler //implements ProjectHandlerInterface +abstract class Handler { - public abstract function save(); - public abstract function update(); - public abstract function delete(); + public static function load($uid) + { // This method must be implemented on children classes, this is not declared abstract since PHP 5.3.x + // don't allow any more static abstract methods. + return null; + } + + public abstract function create($data); + //public abstract function update(); + public abstract function remove(); /** * Log in ProcessMaker Standard Output if debug mode is enabled. diff --git a/workflow/engine/src/ProcessMaker/Project/ProjectHandlerInterface.php b/workflow/engine/src/ProcessMaker/Project/ProjectHandlerInterface.php deleted file mode 100644 index 536db30b4..000000000 --- a/workflow/engine/src/ProcessMaker/Project/ProjectHandlerInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -create($data); + } + } + + public function setProperties($properties) + { + $this->properties = $properties; + } + + public function getProcess() + { + if (empty($this->proUid)) { + throw new \Exception("Error: There is not an initialized project."); + } + + $process = new Process(); + + return $process->load($this->proUid); + } + + public function getUid() + { + return $this->proUid; + } + + public function create($data) + { + try { + // setting defaults + $data['PRO_UID'] = array_key_exists('PRO_UID', $data) ? $data['PRO_UID'] : Hash::generateUID(); + $data['USR_UID'] = array_key_exists('PRO_CREATE_USER', $data) ? $data['PRO_CREATE_USER'] : null; + $data['PRO_CATEGORY'] = array_key_exists('PRO_CATEGORY', $data) ? $data['PRO_CATEGORY'] : ''; + + // Create project + $process = new Process(); + $this->proUid = $process->create($data, false); + + } catch (Exception $e) { + throw new \RuntimeException($e); + } + } + + public function update() + { + // TODO: Implement update() method. + } + + public function remove() + { + $this->deleteProcess($this->proUid); + } + + public static function load($proUid) + { + $me = new self(); + + try { + $process = new Process(); + $processData = $process->load($proUid); + } catch (\Exception $e) { + throw new Exception\ProjectNotFound($me, $proUid); + } + + $me->process = $processData; + $me->proUid = $processData["PRO_UID"]; + + return $me; + } + + /* + * Projects elements handlers + */ + + public function addTask($taskData) + { + // Setting defaults + $taskData['TAS_UID'] = array_key_exists('TAS_UID', $taskData) ? $taskData['TAS_UID'] : Hash::generateUID(); + $taskData['PRO_UID'] = $this->proUid; + + $task = new Task(); + + return $task->create($taskData, false); + } + + public function updateTask($tasUid, $taskData) + { + $task = new Task(); + $taskData['TAS_UID'] = $tasUid; + + return $task->update($taskData); + } + + public function removeTask($tasUid) + { + $task = new Task(); + $task->remove($tasUid); + } + + public function getTask($tasUid) + { + $task = new Task(); + return $task->load($tasUid); + } + + + public function getTasks() + { + if (empty($this->proUid)) { + return null; + } + + $tasks = new Tasks(); + + return $tasks->getAllTasks($this->proUid); + } + + public function setStartTask($tasUid) + { + $task = \TaskPeer::retrieveByPK($tasUid); + $task->setTasStart("TRUE"); + $task->save(); + } + + public function setEndTask($tasUid) + { + $this->addSequentialRoute($tasUid, "-1", "SEQUENTIAL", true); + } + + public function addSequentialRoute($fromTasUid, $toTasUid, $delete = null) + { + $this->addRoute($fromTasUid, $toTasUid, "SEQUENTIAL", $delete); + } + + public function addSelectRoute($fromTasUid, array $toTasks, $delete = null) + { + foreach ($toTasks as $toTasUid) { + $this->addRoute($fromTasUid, $toTasUid, "SELECT", $delete); + } + } + + public function addRoute($fromTasUid, $toTasUid, $type, $delete = null) + { + + /*switch ($type) { + case 0: + $sType = 'SEQUENTIAL'; + break; + case 1: + $sType = 'SELECT'; + break; + case 2: + $sType = 'EVALUATE'; + break; + case 3: + $sType = 'PARALLEL'; + break; + case 4: + $sType = 'PARALLEL-BY-EVALUATION'; + break; + case 5: + $sType = 'SEC-JOIN'; + break; + case 8: + $sType = 'DISCRIMINATOR'; + break; + default: + throw new \Exception("Invalid type code, given: $type, expected: integer [1...8]"); + } + }*/ + + $validTypes = array("SEQUENTIAL", "SELECT", "EVALUATE", "PARALLEL", "PARALLEL-BY-EVALUATION", "SEC-JOIN", "DISCRIMINATOR"); + + if (! in_array($type, $validTypes)) { + throw new \Exception("Invalid Route type, given: $type, expected: [".implode(",", $validTypes)."]"); + } + + //if ($type != 0 && $type != 5 && $type != 8) { + if ($type != 'SEQUENTIAL' && $type != 'SEC-JOIN' && $type != 'DISCRIMINATOR') { + if ($this->getNumberOfRoutes($this->proUid, $fromTasUid, $toTasUid, $type) > 0) { + // die(); ???? + throw new \RuntimeException("Unexpected behaviour"); + } + //unset($aRow); + } + //if ($delete || $type == 0 || $type == 5 || $type == 8) { + if ($delete || $type == 'SEQUENTIAL' || $type == 'SEC-JOIN' || $type == 'DISCRIMINATOR') { + $oTasks = new Tasks(); + + $oTasks->deleteAllRoutesOfTask($this->proUid, $fromTasUid); + //$oTasks->deleteAllGatewayOfTask($this->proUid, $fromTasUid); + } + return $this->saveNewPattern($this->proUid, $fromTasUid, $toTasUid, $type, $delete); + } + + public function updateRoute($rouUid, $routeData) + { + $route = new Route(); + $routeData['ROU_UID'] = $rouUid; + $route->update($routeData); + } + + public function removeRoute($rouUid) + { + $route = new Route(); + + return $route->remove($rouUid); + } + + public function getRoute($rouUid) + { + $route = new Route(); + + return $route->load($rouUid); + } + + + /**************************************************************************************************** + * Migrated Methods from class.processMap.php class * + ****************************************************************************************************/ + + private function getNumberOfRoutes($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '') + { + try { + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn('COUNT(*) AS ROUTE_NUMBER'); + $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); + $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); + $oCriteria->add(RoutePeer::ROU_NEXT_TASK, $sNextTask); + $oCriteria->add(RoutePeer::ROU_TYPE, $sType); + $oDataset = RoutePeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + return (int) $aRow['ROUTE_NUMBER']; + } catch (Exception $oError) { + throw ($oError); + } + } + + private function saveNewPattern($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '', $sDelete = '') + { + try { + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn('COUNT(*) AS ROUTE_NUMBER'); + //$oCriteria->addSelectColumn('GAT_UID AS GATEWAY_UID'); + $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); + $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); + $oCriteria->add(RoutePeer::ROU_TYPE, $sType); + + $oDataset = RoutePeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + $aFields['PRO_UID'] = $sProcessUID; + $aFields['TAS_UID'] = $sTaskUID; + $aFields['ROU_NEXT_TASK'] = $sNextTask; + $aFields['ROU_TYPE'] = $sType; + $aFields['ROU_CASE'] = (int) $aRow['ROUTE_NUMBER'] + 1; + + //$sGatewayUID = $aRow['GATEWAY_UID']; + + //if ($sDelete && $sGatewayUID != '') { + // $oGateway = new Gateway(); + // $oGateway->remove($sGatewayUID); + //} + //Getting Gateway UID after saving gateway + //if($sType != 'SEQUENTIAL' && $sGatewayUID == '' && $sDelete == '1') + + /*??? Maybe this is deprecated + if ($sType != 'SEQUENTIAL') { + $oProcessMap = new processMap(); + $sGatewayUID = $this->saveNewGateway($sProcessUID, $sTaskUID, $sNextTask); + }*/ + + //$aFields['GAT_UID'] = (isset($sGatewayUID)) ? $sGatewayUID : ''; + + $oRoute = new Route(); + + return $oRoute->create($aFields); + } catch (Exception $oError) { + throw ($oError); + } + } + + public function deleteProcess($sProcessUID) + { + try { + //G::LoadClass('case'); + //G::LoadClass('reportTables'); + + //Instance all classes necesaries + $oProcess = new \Process(); + $oDynaform = new \Dynaform(); + $oInputDocument = new \InputDocument(); + $oOutputDocument = new \OutputDocument(); + $oTrigger = new \Triggers(); + $oRoute = new \Route(); + $oGateway = new \Gateway(); + $oEvent = new \Event(); + $oSwimlaneElement = new \SwimlanesElements(); + $oConfiguration = new \Configuration(); + $oDbSource = new \DbSource(); + $oReportTable = new \ReportTables(); + $oCaseTracker = new \CaseTracker(); + $oCaseTrackerObject = new \CaseTrackerObject(); + //Delete the applications of process + $oCriteria = new \Criteria('workflow'); + $oCriteria->add(\ApplicationPeer::PRO_UID, $sProcessUID); + $oDataset = \ApplicationPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $oCase = new \Cases(); + + while ($aRow = $oDataset->getRow()) { + $oCase->removeCase($aRow['APP_UID']); + $oDataset->next(); + } + + //Delete the tasks of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\TaskPeer::PRO_UID, $sProcessUID); + $oDataset = \TaskPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + //$this->deleteTask($aRow['TAS_UID']); + $oTasks = new \Tasks(); + $oTasks->deleteTask($aRow['TAS_UID']); + + $oDataset->next(); + } + //Delete the dynaforms of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\DynaformPeer::PRO_UID, $sProcessUID); + $oDataset = \DynaformPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oDynaform->remove($aRow['DYN_UID']); + $oDataset->next(); + } + //Delete the input documents of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\InputDocumentPeer::PRO_UID, $sProcessUID); + $oDataset = \InputDocumentPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oInputDocument->remove($aRow['INP_DOC_UID']); + $oDataset->next(); + } + //Delete the output documents of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\OutputDocumentPeer::PRO_UID, $sProcessUID); + $oDataset = \OutputDocumentPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oOutputDocument->remove($aRow['OUT_DOC_UID']); + $oDataset->next(); + } + + //Delete the triggers of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\TriggersPeer::PRO_UID, $sProcessUID); + $oDataset = \TriggersPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oTrigger->remove($aRow['TRI_UID']); + $oDataset->next(); + } + + //Delete the routes of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\RoutePeer::PRO_UID, $sProcessUID); + $oDataset = \RoutePeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oRoute->remove($aRow['ROU_UID']); + $oDataset->next(); + } + + //Delete the gateways of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\GatewayPeer::PRO_UID, $sProcessUID); + $oDataset = \GatewayPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oGateway->remove($aRow['GAT_UID']); + $oDataset->next(); + } + + //Delete the Event of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\EventPeer::PRO_UID, $sProcessUID); + $oDataset = \EventPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oEvent->remove($aRow['EVN_UID']); + $oDataset->next(); + } + + //Delete the swimlanes elements of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\SwimlanesElementsPeer::PRO_UID, $sProcessUID); + $oDataset = \SwimlanesElementsPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oSwimlaneElement->remove($aRow['SWI_UID']); + $oDataset->next(); + } + //Delete the configurations of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\ConfigurationPeer::PRO_UID, $sProcessUID); + $oDataset = \ConfigurationPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oConfiguration->remove($aRow['CFG_UID'], $aRow['OBJ_UID'], $aRow['PRO_UID'], $aRow['USR_UID'], $aRow['APP_UID']); + $oDataset->next(); + } + //Delete the DB sources of process + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\DbSourcePeer::PRO_UID, $sProcessUID); + $oDataset = \DbSourcePeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + + /** + * note added by gustavo cruz gustavo-at-colosa-dot-com 27-01-2010 + * in order to solve the bug 0004389, we use the validation function Exists + * inside the remove function in order to verify if the DbSource record + * exists in the Database, however there is a strange behavior within the + * propel engine, when the first record is erased somehow the "_deleted" + * attribute of the next row is set to true, so when propel tries to erase + * it, obviously it can't and trows an error. With the "Exist" function + * we ensure that if there is the record in the database, the _delete attribute must be false. + * + * note added by gustavo cruz gustavo-at-colosa-dot-com 28-01-2010 + * I have just identified the source of the issue, when is created a $oDbSource DbSource object + * it's used whenever a record is erased or removed in the db, however the problem + * it's that the same object is used every time, and the delete method invoked + * sets the _deleted attribute to true when its called, of course as we use + * the same object, the first time works fine but trowns an error with the + * next record, cos it's the same object and the delete method checks if the _deleted + * attribute it's true or false, the attrib _deleted is setted to true the + * first time and later is never changed, the issue seems to be part of + * every remove function in the model classes, not only DbSource + * i recommend that a more general solution must be achieved to resolve + * this issue in every model class, to prevent future problems. + */ + $oDbSource->remove($aRow['DBS_UID'], $sProcessUID); + $oDataset->next(); + } + //Delete the supervisors + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\ProcessUserPeer::PRO_UID, $sProcessUID); + \ProcessUserPeer::doDelete($oCriteria); + //Delete the object permissions + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\ObjectPermissionPeer::PRO_UID, $sProcessUID); + \ObjectPermissionPeer::doDelete($oCriteria); + //Delete the step supervisors + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\StepSupervisorPeer::PRO_UID, $sProcessUID); + \StepSupervisorPeer::doDelete($oCriteria); + //Delete the report tables + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\ReportTablePeer::PRO_UID, $sProcessUID); + $oDataset = \ReportTablePeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $oReportTable->deleteReportTable($aRow['REP_TAB_UID']); + $oDataset->next(); + } + //Delete case tracker configuration + $oCaseTracker->remove($sProcessUID); + //Delete case tracker objects + $oCriteria = new Criteria('workflow'); + $oCriteria->add(\CaseTrackerObjectPeer::PRO_UID, $sProcessUID); + \ProcessUserPeer::doDelete($oCriteria); + //Delete the process + try { + $oProcess->remove($sProcessUID); + } catch (Exception $oError) { + throw ($oError); + } + return true; + } catch (Exception $oError) { + throw ($oError); + } + } + +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Project/WorkflowProject.php b/workflow/engine/src/ProcessMaker/Project/WorkflowProject.php deleted file mode 100644 index 6d3cad07f..000000000 --- a/workflow/engine/src/ProcessMaker/Project/WorkflowProject.php +++ /dev/null @@ -1,312 +0,0 @@ -setProperties($data); - $this->create(); - } - } - - public function setProperties($properties) - { - $this->properties = $properties; - } - - public function getProperties() - { - $process = new Process(); - return $process->load($this->proUid); - } - - public function getUid() - { - return $this->proUid; - } - - public function create() - { - try { - // setting defaults - $this->properties['PRO_UID'] = array_key_exists('PRO_UID', $this->properties) - ? $this->properties['PRO_UID'] : Hash::generateUID(); - - $this->properties['USR_UID'] = array_key_exists('PRO_CREATE_USER', $this->properties) - ? $this->properties['PRO_CREATE_USER'] : null; - - $this->properties['PRO_CATEGORY'] = array_key_exists('PRO_CATEGORY', $this->properties) - ? $this->properties['PRO_CATEGORY'] : ''; - - - // Create project - $process = new Process(); - $this->proUid = $process->create($this->properties, false); - - } catch (Exception $e) { - //throw new \RuntimeException($e); - echo $e->getMessage() . PHP_EOL; - echo $e->getTraceAsString() . PHP_EOL; - die; - } - } - - public function update() - { - // TODO: Implement update() method. - } - - public function delete() - { - // TODO: Implement delete() method. - } - - public static function load($prjUid) - { - $process = new Process(); - return $process->load($prjUid); - } - - /* - * Projects elements handlers - */ - - public function addTask($taskData) - { - // Setting defaults - $taskData['TAS_UID'] = array_key_exists('TAS_UID', $taskData) ? $taskData['TAS_UID'] : Hash::generateUID(); - $taskData['PRO_UID'] = $this->proUid; - - $task = new Task(); - - return $task->create($taskData, false); - } - - public function updateTask($tasUid, $taskData) - { - $task = new Task(); - $taskData['TAS_UID'] = $tasUid; - - return $task->update($taskData); - } - - public function removeTask($tasUid) - { - $task = new Task(); - $task->remove($tasUid); - } - - public function getTask($tasUid) - { - $task = new Task(); - return $task->load($tasUid); - } - - - public function getTasks() - { - if (empty($this->proUid)) { - return null; - } - - $tasks = new Tasks(); - - return $tasks->getAllTasks($this->proUid); - } - - public function setStartTask($tasUid) - { - $task = \TaskPeer::retrieveByPK($tasUid); - $task->setTasStart("TRUE"); - $task->save(); - } - - public function setEndTask($tasUid) - { - $this->addSequentialRoute($tasUid, "-1", "SEQUENTIAL", true); - } - - public function addSequentialRoute($fromTasUid, $toTasUid, $delete = null) - { - $this->addRoute($fromTasUid, $toTasUid, "SEQUENTIAL", $delete); - } - - public function addSelectRoute($fromTasUid, array $toTasks, $delete = null) - { - foreach ($toTasks as $toTasUid) { - $this->addRoute($fromTasUid, $toTasUid, "SELECT", $delete); - } - } - - public function addRoute($fromTasUid, $toTasUid, $type, $delete = null) - { - - /*switch ($type) { - case 0: - $sType = 'SEQUENTIAL'; - break; - case 1: - $sType = 'SELECT'; - break; - case 2: - $sType = 'EVALUATE'; - break; - case 3: - $sType = 'PARALLEL'; - break; - case 4: - $sType = 'PARALLEL-BY-EVALUATION'; - break; - case 5: - $sType = 'SEC-JOIN'; - break; - case 8: - $sType = 'DISCRIMINATOR'; - break; - default: - throw new \Exception("Invalid type code, given: $type, expected: integer [1...8]"); - } - }*/ - - $validTypes = array("SEQUENTIAL", "SELECT", "EVALUATE", "PARALLEL", "PARALLEL-BY-EVALUATION", "SEC-JOIN", "DISCRIMINATOR"); - - if (! in_array($type, $validTypes)) { - throw new \Exception("Invalid Route type, given: $type, expected: [".implode(",", $validTypes)."]"); - } - - //if ($type != 0 && $type != 5 && $type != 8) { - if ($type != 'SEQUENTIAL' && $type != 'SEC-JOIN' && $type != 'DISCRIMINATOR') { - if ($this->getNumberOfRoutes($this->proUid, $fromTasUid, $toTasUid, $type) > 0) { - // die(); ???? - throw new \RuntimeException("Unexpected behaviour"); - } - //unset($aRow); - } - //if ($delete || $type == 0 || $type == 5 || $type == 8) { - if ($delete || $type == 'SEQUENTIAL' || $type == 'SEC-JOIN' || $type == 'DISCRIMINATOR') { - $oTasks = new Tasks(); - - $oTasks->deleteAllRoutesOfTask($this->proUid, $fromTasUid); - //$oTasks->deleteAllGatewayOfTask($this->proUid, $fromTasUid); - } - return $this->saveNewPattern($this->proUid, $fromTasUid, $toTasUid, $type, $delete); - } - - public function updateRoute($rouUid, $routeData) - { - $route = new Route(); - $routeData['ROU_UID'] = $rouUid; - $route->update($routeData); - } - - public function removeRoute($rouUid) - { - $route = new Route(); - - return $route->remove($rouUid); - } - - public function getRoute($rouUid) - { - $route = new Route(); - - return $route->load($rouUid); - } - - ///////////////////////////////// - /* - * Migrated from class.processMap.php class - */ - private function getNumberOfRoutes($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '') - { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS ROUTE_NUMBER'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); - $oCriteria->add(RoutePeer::ROU_NEXT_TASK, $sNextTask); - $oCriteria->add(RoutePeer::ROU_TYPE, $sType); - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - return (int) $aRow['ROUTE_NUMBER']; - } catch (Exception $oError) { - throw ($oError); - } - } - - private function saveNewPattern($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '', $sDelete = '') - { - try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS ROUTE_NUMBER'); - //$oCriteria->addSelectColumn('GAT_UID AS GATEWAY_UID'); - $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); - $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); - $oCriteria->add(RoutePeer::ROU_TYPE, $sType); - - $oDataset = RoutePeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - $aFields['PRO_UID'] = $sProcessUID; - $aFields['TAS_UID'] = $sTaskUID; - $aFields['ROU_NEXT_TASK'] = $sNextTask; - $aFields['ROU_TYPE'] = $sType; - $aFields['ROU_CASE'] = (int) $aRow['ROUTE_NUMBER'] + 1; - - //$sGatewayUID = $aRow['GATEWAY_UID']; - - //if ($sDelete && $sGatewayUID != '') { - // $oGateway = new Gateway(); - // $oGateway->remove($sGatewayUID); - //} - //Getting Gateway UID after saving gateway - //if($sType != 'SEQUENTIAL' && $sGatewayUID == '' && $sDelete == '1') - - /*??? Maybe this is deprecated - if ($sType != 'SEQUENTIAL') { - $oProcessMap = new processMap(); - $sGatewayUID = $this->saveNewGateway($sProcessUID, $sTaskUID, $sNextTask); - }*/ - - //$aFields['GAT_UID'] = (isset($sGatewayUID)) ? $sGatewayUID : ''; - - $oRoute = new Route(); - - return $oRoute->create($aFields); - } catch (Exception $oError) { - throw ($oError); - } - } - - - -} \ No newline at end of file diff --git a/workflow/engine/src/Tests/ProcessMaker/BpmnProjectTest.php b/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php similarity index 82% rename from workflow/engine/src/Tests/ProcessMaker/BpmnProjectTest.php rename to workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php index 1305351fc..50ac2b3dc 100644 --- a/workflow/engine/src/Tests/ProcessMaker/BpmnProjectTest.php +++ b/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php @@ -1,19 +1,25 @@ remove(); + //cleaning DB + foreach (self::$prjUids as $prjUid) { + $bp = Project\Bpmn::load($prjUid); + $bp->remove(); + } + } public function testCreate() @@ -24,10 +30,10 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase "PRJ_AUTHOR" => "00000000000000000000000000000001" ); - // Create a new BpmnProject and save to DB - $bp = new BpmnProject($data); + // Create a new Project\Bpmn and save to DB + $bp = new Project\Bpmn($data); $projectData = $bp->getProject(); - self::$prjUid = $bp->getUid(); + self::$prjUids[] = $bp->getUid(); foreach ($data as $key => $value) { $this->assertEquals($value, $projectData[$key]); @@ -38,7 +44,7 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase /** * @depends testCreate - * @var $bp \ProcessMaker\Project\BpmnProject + * @var $bp \ProcessMaker\Project\Bpmn */ public function testAddDiagram($bp) { @@ -58,7 +64,7 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase /** * @depends testCreate - * @var $bp \ProcessMaker\Project\BpmnProject + * @var $bp \ProcessMaker\Project\Bpmn */ public function testAddProcess($bp) { @@ -81,7 +87,7 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase /** * @depends testCreate - * @var $bp \ProcessMaker\Project\BpmnProject + * @var $bp \ProcessMaker\Project\Bpmn */ public function testAddActivity($bp) { @@ -112,7 +118,7 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase /** * @depends testCreate - * @param $bp \ProcessMaker\Project\BpmnProject + * @param $bp \ProcessMaker\Project\Bpmn * @return array */ public function testAddActivityWithUid($bp) @@ -146,7 +152,7 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase /** * @depends testCreate * @depends testAddActivityWithUid - * @param $bp \ProcessMaker\Project\BpmnProject + * @param $bp \ProcessMaker\Project\Bpmn * @param $data */ public function testGetActivity($bp, $data) @@ -166,7 +172,7 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase /** * @depends testCreate * @depends testAddActivityWithUid - * @param $bp \ProcessMaker\Project\BpmnProject + * @param $bp \ProcessMaker\Project\Bpmn * @param $data */ public function testRemoveActivity($bp, $data) @@ -180,8 +186,8 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase public function testGetActivities() { - // Create a new BpmnProject and save to DB - $bp = new BpmnProject(array( + // Create a new Project\Bpmn and save to DB + $bp = new Project\Bpmn(array( "PRJ_NAME" => "Test BPMN Project #2", "PRJ_DESCRIPTION" => "Description for - Test BPMN Project #1", "PRJ_AUTHOR" => "00000000000000000000000000000001" @@ -211,13 +217,13 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase /** * @depends testGetActivities - * @param $bp \ProcessMaker\Project\BpmnProject - * @return null|\ProcessMaker\Project\BpmnProject + * @param $bp \ProcessMaker\Project\Bpmn + * @return null|\ProcessMaker\Project\Bpmn */ public function testLoad($bp) { $prjUid = $bp->getUid(); - $bp2 = BpmnProject::load($prjUid); + $bp2 = Project\Bpmn::load($prjUid); $this->assertNotNull($bp2); $this->assertEquals($bp->getActivities(), $bp2->getActivities()); @@ -229,14 +235,16 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase /** * @depends testLoad - * @param $bp \ProcessMaker\Project\BpmnProject + * @param $bp \ProcessMaker\Project\Bpmn + * @expectedException \ProcessMaker\Exception\ProjectNotFound + * @expectedExceptionCode 20 */ public function testRemove($bp) { $prjUid = $bp->getUid(); $bp->remove(); - $this->assertNull(BpmnProject::load($prjUid)); + Project\Bpmn::load($prjUid); } } diff --git a/workflow/engine/src/Tests/ProcessMaker/WorkflowProjectTest.php b/workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php similarity index 85% rename from workflow/engine/src/Tests/ProcessMaker/WorkflowProjectTest.php rename to workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php index a3a5a12cd..4d144e229 100644 --- a/workflow/engine/src/Tests/ProcessMaker/WorkflowProjectTest.php +++ b/workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php @@ -1,19 +1,23 @@ workflowProject = new WorkflowProject(); + //cleaning DB + foreach (self::$proUids as $proUid) { + $wp = Project\Workflow::load($proUid); + $wp->remove(); + } } public function testCreate() @@ -25,9 +29,10 @@ class WorkflowProjectTest extends PHPUnit_Framework_TestCase "PRO_CREATE_USER" => "00000000000000000000000000000001" ); - $wp = new WorkflowProject($data); + $wp = new Project\Workflow($data); + self::$proUids[] = $wp->getUid(); - $processData = $wp->getProperties(); + $processData = $wp->getProcess(); foreach ($data as $key => $value) { $this->assertEquals($data[$key], $processData[$key]); @@ -149,11 +154,13 @@ class WorkflowProjectTest extends PHPUnit_Framework_TestCase */ public function testAddRoute() { - $wp = new WorkflowProject(array( + $wp = new Project\Workflow(array( "PRO_TITLE" => "Test Project #2 (Sequential)", "PRO_CREATE_USER" => "00000000000000000000000000000001" )); + self::$proUids[] = $wp->getUid(); + $tasUid1 = $wp->addTask(array( "TAS_TITLE" => "task #1", "TAS_POSX" => "410", @@ -176,10 +183,11 @@ class WorkflowProjectTest extends PHPUnit_Framework_TestCase public function testAddSelectRoute() { - $wp = new WorkflowProject(array( + $wp = new Project\Workflow(array( "PRO_TITLE" => "Test Project #3 (Select)", "PRO_CREATE_USER" => "00000000000000000000000000000001" )); + self::$proUids[] = $wp->getUid(); $tasUid1 = $wp->addTask(array( "TAS_TITLE" => "task #1", @@ -202,7 +210,7 @@ class WorkflowProjectTest extends PHPUnit_Framework_TestCase public function testCompleteWorkflowProject() { - $wp = new WorkflowProject(array( + $wp = new Project\Workflow(array( "PRO_TITLE" => "Test Complete Project #4", "PRO_CREATE_USER" => "00000000000000000000000000000001" )); @@ -253,5 +261,21 @@ class WorkflowProjectTest extends PHPUnit_Framework_TestCase $wp->setEndTask($tasUid4); $wp->setEndTask($tasUid6); + + return $wp; + } + + /** + * @depends testCompleteWorkflowProject + * @param $wp \ProcessMaker\Project\WorkflowProject + * @expectedException \ProcessMaker\Exception\ProjectNotFound + * @expectedExceptionCode 20 + */ + public function testRemove($wp) + { + $proUid = $wp->getUid(); + $wp->remove(); + + Project\Workflow::load($proUid); } } \ No newline at end of file From 0063597e08b1911b0445395c506f3f3fa9427ed4 Mon Sep 17 00:00:00 2001 From: Erik Amaru Ortiz Date: Wed, 5 Feb 2014 12:33:36 -0400 Subject: [PATCH 3/4] Enabling to use GET method for Project endpoint -> Request GET: /projects, and some updates --- .../engine/classes/model/BpmnActivity.php | 22 +--- workflow/engine/classes/model/BpmnProject.php | 14 ++ .../Project/Adapter/BpmnWorkflow.php | 11 ++ .../Project/Adapter/WorkflowBpmnProject.php | 11 -- .../engine/src/ProcessMaker/Project/Bpmn.php | 122 +++++++++++------- .../src/ProcessMaker/Project/Workflow.php | 49 ++++--- .../src/Services/Api/ProcessMaker/Project.php | 11 +- .../Tests/ProcessMaker/Project/BpmnTest.php | 29 ++++- 8 files changed, 163 insertions(+), 106 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php delete mode 100644 workflow/engine/src/ProcessMaker/Project/Adapter/WorkflowBpmnProject.php diff --git a/workflow/engine/classes/model/BpmnActivity.php b/workflow/engine/classes/model/BpmnActivity.php index d6b5a820f..0787d165c 100644 --- a/workflow/engine/classes/model/BpmnActivity.php +++ b/workflow/engine/classes/model/BpmnActivity.php @@ -60,7 +60,7 @@ class BpmnActivity extends BaseBpmnActivity return BpmnActivityPeer::doSelect($c); } - public static function getAll($prjUid = null, $start = null, $limit = null, $filter = '', $returnType = null, $changeCaseTo=CASE_UPPER) + public static function getAll($prjUid = null, $start = null, $limit = null, $filter = '', $changeCaseTo = CASE_UPPER) { $c = new Criteria('workflow'); $c->addSelectColumn("BPMN_ACTIVITY.*"); @@ -71,23 +71,13 @@ class BpmnActivity extends BaseBpmnActivity $c->add(BpmnActivityPeer::PRJ_UID, $prjUid, Criteria::EQUAL); } - $returnType = ($returnType != 'array' && $returnType != 'object') ? 'array' : $returnType; + $rs = BpmnActivityPeer::doSelectRS($c); + $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $activities = array(); - - switch ($returnType) { - case 'object': - $activities = BpmnActivityPeer::doSelect($c); - break; - - case 'array': - $rs = BpmnActivityPeer::doSelectRS($c); - $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - while ($rs->next()) { - $activities[] = $changeCaseTo !== CASE_UPPER ? array_change_key_case($rs->getRow(), CASE_LOWER) : $rs->getRow(); - } - - break; + while ($rs->next()) { + $activities[] = $changeCaseTo !== CASE_UPPER ? array_change_key_case($rs->getRow(), CASE_LOWER) : $rs->getRow(); } return $activities; diff --git a/workflow/engine/classes/model/BpmnProject.php b/workflow/engine/classes/model/BpmnProject.php index 75f95a38d..9e55d5180 100644 --- a/workflow/engine/classes/model/BpmnProject.php +++ b/workflow/engine/classes/model/BpmnProject.php @@ -16,6 +16,20 @@ require_once 'classes/model/om/BaseBpmnProject.php'; */ class BpmnProject extends BaseBpmnProject { + public static function getAll($start = null, $limit = null, $filter = "", $changeCaseTo = CASE_UPPER) + { + $c = new Criteria("workflow"); + $bpmnProjects = array(); + + $rs = BpmnProjectPeer::doSelectRS($c); + $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + while ($rs->next()) { + $bpmnProjects[] = $changeCaseTo !== CASE_UPPER ? array_change_key_case($rs->getRow(), CASE_LOWER) : $rs->getRow(); + } + + return $bpmnProjects; + } // Overrides diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php new file mode 100644 index 000000000..a26657f47 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -0,0 +1,11 @@ +delete(); } + public function update() + { + + } + + public static function getList($start = null, $limit = null, $filter = "", $changeCaseTo = CASE_UPPER) + { + return Project::getAll($start, $limit, $filter, $changeCaseTo); + } + + public function getUid() + { + if (empty($this->project)) { + throw new \RuntimeException("Error: There is not an initialized project."); + } + + return $this->prjUid; + } + + public function getProject($retType = "array") + { + if (empty($this->project)) { + throw new \RuntimeException("Error: There is not an initialized project."); + } + + return $retType == "array" ? $this->project->toArray() : $this->project; + } + + /* + * Projects elements handlers + */ + public function addDiagram($data = array()) { if (empty($this->project)) { @@ -127,6 +159,20 @@ class Bpmn extends Handler $this->diagram->save(); } + public function getDiagram($retType = "array") + { + if (empty($this->diagram)) { + $diagrams = Diagram::findAllByProUid($this->getUid()); + + if (! empty($diagrams)) { + //NOTICE for ProcessMaker we're just handling a "one to one" relationship between project and process + $this->diagram = $diagrams[0]; + } + } + + return $retType == "array" ? $this->diagram->toArray() : $this->diagram; + } + public function addProcess($data = array()) { if (empty($this->diagram)) { @@ -144,6 +190,20 @@ class Bpmn extends Handler $this->process->save(); } + public function getProcess($retType = "array") + { + if (empty($this->process)) { + $processes = Process::findAllByProUid($this->getUid()); + + if (! empty($processes)) { + //NOTICE for ProcessMaker we're just handling a "one to one" relationship between project and process + $this->process = $processes[0]; + } + } + + return $retType == "array" ? $this->process->toArray() : $this->process; + } + public function addActivity($data) { if (empty($this->diagram)) { @@ -173,9 +233,21 @@ class Bpmn extends Handler return $activity; } - public function getActivities($retType = 'array') + public function getActivities() { - return Activity::getAll($this->getUid(), null, null, '', $retType); + return Activity::getAll($this->getUid()); + } + + public function updateActivity($actUid, $data) + { + $activity = ActivityPeer::retrieveByPk($actUid); + + // fixing data + //$data['ELEMENT_UID'] = $data['BOU_ELEMENT_UID']; + //unset($data['BOU_ELEMENT_UID']); + + $activity->fromArray($data); + $activity->save(); } public function removeActivity($actUid) @@ -329,50 +401,4 @@ class Bpmn extends Handler { // TODO: Implement update() method. } - - - - // getters - - public function getUid() - { - if (empty($this->project)) { - throw new \Exception("Error: There is not an initialized project."); - } - - return $this->prjUid; - } - - public function getProject($retType = "array") - { - return $retType == "array" ? $this->project->toArray() : $this->project; - } - - public function getDiagram($retType = "array") - { - if (empty($this->diagram)) { - $diagrams = Diagram::findAllByProUid($this->getUid()); - - if (! empty($diagrams)) { - //NOTICE for ProcessMaker we're just handling a "one to one" relationship between project and process - $this->diagram = $diagrams[0]; - } - } - - return $retType == "array" ? $this->diagram->toArray() : $this->diagram; - } - - public function getProcess($retType = "array") - { - if (empty($this->process)) { - $processes = Process::findAllByProUid($this->getUid()); - - if (! empty($processes)) { - //NOTICE for ProcessMaker we're just handling a "one to one" relationship between project and process - $this->process = $processes[0]; - } - } - - return $retType == "array" ? $this->process->toArray() : $this->process; - } } \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php index feda5c272..6bc33544c 100644 --- a/workflow/engine/src/ProcessMaker/Project/Workflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php @@ -29,25 +29,21 @@ class Workflow extends Handler } } - public function setProperties($properties) + public static function load($proUid) { - $this->properties = $properties; - } + $me = new self(); - public function getProcess() - { - if (empty($this->proUid)) { - throw new \Exception("Error: There is not an initialized project."); + try { + $process = new Process(); + $processData = $process->load($proUid); + } catch (\Exception $e) { + throw new Exception\ProjectNotFound($me, $proUid); } - $process = new Process(); + $me->process = $processData; + $me->proUid = $processData["PRO_UID"]; - return $process->load($this->proUid); - } - - public function getUid() - { - return $this->proUid; + return $me; } public function create($data) @@ -77,21 +73,24 @@ class Workflow extends Handler $this->deleteProcess($this->proUid); } - public static function load($proUid) + public function getUid() { - $me = new self(); - - try { - $process = new Process(); - $processData = $process->load($proUid); - } catch (\Exception $e) { - throw new Exception\ProjectNotFound($me, $proUid); + if (empty($this->project)) { + throw new \RuntimeException("Error: There is not an initialized project."); } - $me->process = $processData; - $me->proUid = $processData["PRO_UID"]; + return $this->proUid; + } - return $me; + public function getProcess() + { + if (empty($this->proUid)) { + throw new \Exception("Error: There is not an initialized project."); + } + + $process = new Process(); + + return $process->load($this->proUid); } /* diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project.php b/workflow/engine/src/Services/Api/ProcessMaker/Project.php index 37495a337..b9909aee1 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Project.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project.php @@ -4,7 +4,6 @@ namespace Services\Api\ProcessMaker; use Luracast\Restler\RestException; use ProcessMaker\Services\Api; use ProcessMaker\Adapter\Bpmn\Model as BpmnModel; -use ProcessMaker\Adapter\Workflow; /** * Class Project @@ -19,9 +18,11 @@ class Project extends Api public function index() { try { - $projects = BpmnModel::loadProjects(); + $start = null; + $limit = null; + $filter = ""; - return $projects; + return \ProcessMaker\Project\Bpmn::getList($start, $limit, $filter, CASE_LOWER); } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } @@ -30,9 +31,9 @@ class Project extends Api public function get($prjUid) { try { - $project = BpmnModel::loadProject($prjUid); + $projects = \ProcessMaker\Project\Bpmn::getList(); - return $project; + return $projects; } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } diff --git a/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php b/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php index 50ac2b3dc..73c45b3c3 100644 --- a/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php +++ b/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php @@ -14,6 +14,8 @@ class BpmnTest extends \PHPUnit_Framework_TestCase public static function tearDownAfterClass() { + return; + //cleaning DB foreach (self::$prjUids as $prjUid) { $bp = Project\Bpmn::load($prjUid); @@ -160,7 +162,7 @@ class BpmnTest extends \PHPUnit_Framework_TestCase // Load from DB $activityData = $bp->getActivity($data["ACT_UID"]); - // in data is set the determinated UID for activity created in previous step + // in data is set a determined UID for activity created in previous step foreach ($data as $key => $value) { $this->assertEquals($value, $activityData[$key]); } @@ -169,6 +171,31 @@ class BpmnTest extends \PHPUnit_Framework_TestCase $this->assertNull($bp->getActivity("INVALID-UID")); } + /** + * @depends testCreate + * @depends testAddActivityWithUid + * @param $bp \ProcessMaker\Project\Bpmn + * @param $data + */ + public function testUpdateActivity($bp, $data) + { + $updateData = array( + "ACT_NAME" => "Activity #X (Updated)", + "BOU_X" => "251", + "BOU_Y" => "252" + ); + + // Save to DB + $bp->updateActivity($data["ACT_UID"], $updateData); + + // Load from DB + $activityData = $bp->getActivity($data["ACT_UID"]); + + foreach ($updateData as $key => $value) { + $this->assertEquals($value, $activityData[$key]); + } + } + /** * @depends testCreate * @depends testAddActivityWithUid From aa399794f3eda8499eefb365e6837f9b957c1dc0 Mon Sep 17 00:00:00 2001 From: Erik Amaru Ortiz Date: Wed, 5 Feb 2014 14:09:48 -0400 Subject: [PATCH 4/4] Adding Override Methods to Adapter Bpmn->Workflow Projects --- .../Project/Adapter/BpmnWorkflow.php | 61 ++++++++++++++++ .../engine/src/ProcessMaker/Project/Bpmn.php | 28 +++---- .../src/ProcessMaker/Project/Workflow.php | 12 ++- .../src/Services/Api/ProcessMaker/Project.php | 7 +- .../Project/Adapter/BpmnWorkflowTest.php | 73 +++++++++++++++++++ .../Tests/ProcessMaker/Project/BpmnTest.php | 4 +- .../ProcessMaker/Project/WorkflowTest.php | 4 +- 7 files changed, 168 insertions(+), 21 deletions(-) create mode 100644 workflow/engine/src/Tests/ProcessMaker/Project/Adapter/BpmnWorkflowTest.php diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index a26657f47..fb8dba522 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -7,5 +7,66 @@ use ProcessMaker\Util\Hash; class BpmnWorkflow extends Project\Bpmn { + /** + * OVERRIDES + */ + public function create($data) + { + try { + parent::create($data); + } catch (\Exception $e) { + throw new \RuntimeException(sprintf("Can't create Bpmn Project." . PHP_EOL . $e->getMessage())); + } + + try { + $wpData = array(); + $wpData["PRO_UID"] = $this->getUid(); + + if (array_key_exists("PRJ_NAME", $data)) { + $wpData["PRO_TITLE"] = $data["PRJ_NAME"]; + } + if (array_key_exists("PRJ_DESCRIPTION", $data)) { + $wpData["PRO_DESCRIPTION"] = $data["PRJ_DESCRIPTION"]; + } + if (array_key_exists("PRJ_AUTHOR", $data)) { + $wpData["PRO_CREATE_USER"] = $data["PRJ_AUTHOR"]; + } + + $wp = new Project\Workflow(); + $wp->create($wpData); + + } catch (\Exception $e) { + $prjUid = $this->getUid(); + $this->remove(); + + throw new \RuntimeException(sprintf( + "Can't create Bpmn Project with prj_uid: %s, workflow creation fails." . PHP_EOL . $e->getMessage() + , $prjUid + )); + } + } + + public static function getList($start = null, $limit = null, $filter = "", $changeCaseTo = CASE_UPPER) + { + $bpmnProjects = parent::getList($start, $limit, $filter, $changeCaseTo); + $workflowProjects = Project\Workflow::getList($start, $limit, "", ""); + + $workflowProjectsUids = array(); + + foreach ($workflowProjects as $workflowProject) { + $workflowProjectsUids[] = $workflowProject["PRO_UID"]; + } + + $prjUidKey = $changeCaseTo == CASE_UPPER ? "PRJ_UID" : "prj_uid"; + $list = array(); + + foreach ($bpmnProjects as $bpmnProject) { + if (in_array($bpmnProject[$prjUidKey], $workflowProjectsUids)) { + $list[] = $bpmnProject; + } + } + + return $list; + } } \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Project/Bpmn.php b/workflow/engine/src/ProcessMaker/Project/Bpmn.php index 8a342414e..ed226951e 100644 --- a/workflow/engine/src/ProcessMaker/Project/Bpmn.php +++ b/workflow/engine/src/ProcessMaker/Project/Bpmn.php @@ -88,6 +88,11 @@ class Bpmn extends Handler $this->prjUid = $this->project->getPrjUid(); } + public function update() + { + + } + public function remove() { /* @@ -100,20 +105,15 @@ class Bpmn extends Handler foreach ($activities as $activity) { $this->removeActivity($activity["ACT_UID"]); } - - $process = ProcessPeer::retrieveByPK($this->getProcess("object")->getProUid()); - $process->delete(); - - $diagram = DiagramPeer::retrieveByPK($this->getDiagram("object")->getDiaUid()); - $diagram->delete(); - - $project = ProjectPeer::retrieveByPK($this->getUid()); - $project->delete(); - } - - public function update() - { - + if ($process = $this->getProcess("object")) { + $process->delete(); + } + if ($diagram = $this->getDiagram("object")) { + $diagram->delete(); + } + if ($project = $this->getProject("object")) { + $project->delete(); + } } public static function getList($start = null, $limit = null, $filter = "", $changeCaseTo = CASE_UPPER) diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php index 6bc33544c..0f9dba7da 100644 --- a/workflow/engine/src/ProcessMaker/Project/Workflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php @@ -73,9 +73,19 @@ class Workflow extends Handler $this->deleteProcess($this->proUid); } + public static function getList($start = null, $limit = null, $filter = "", $changeCaseTo = CASE_UPPER) + { + //return Project::getAll($start, $limit, $filter, $changeCaseTo); + $process = new Process(); + $processes = $process->getAllProcesses( $start, $limit, "", ""); + //$processes = $process->getAll(); + + return $processes; + } + public function getUid() { - if (empty($this->project)) { + if (empty($this->proUid)) { throw new \RuntimeException("Error: There is not an initialized project."); } diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project.php b/workflow/engine/src/Services/Api/ProcessMaker/Project.php index b9909aee1..5a2a9810e 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Project.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project.php @@ -22,7 +22,10 @@ class Project extends Api $limit = null; $filter = ""; - return \ProcessMaker\Project\Bpmn::getList($start, $limit, $filter, CASE_LOWER); + $projects = \ProcessMaker\Project\Adapter\BpmnWorkflow::getList($start, $limit, $filter, CASE_LOWER); + + return $projects; + } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } @@ -31,7 +34,7 @@ class Project extends Api public function get($prjUid) { try { - $projects = \ProcessMaker\Project\Bpmn::getList(); + $projects = new \StdClass(); //TODO return $projects; } catch (\Exception $e) { diff --git a/workflow/engine/src/Tests/ProcessMaker/Project/Adapter/BpmnWorkflowTest.php b/workflow/engine/src/Tests/ProcessMaker/Project/Adapter/BpmnWorkflowTest.php new file mode 100644 index 000000000..a6619c44c --- /dev/null +++ b/workflow/engine/src/Tests/ProcessMaker/Project/Adapter/BpmnWorkflowTest.php @@ -0,0 +1,73 @@ + "Test BPMN Project #1", + "PRJ_DESCRIPTION" => "Description for - Test BPMN Project #1", + "PRJ_AUTHOR" => "00000000000000000000000000000001" + ); + + $bwap = new Project\Adapter\BpmnWorkflow($data); + + try { + $bp = Project\Bpmn::load($bwap->getUid()); + } catch (\Exception $e){} + + try { + $wp = Project\Workflow::load($bwap->getUid()); + } catch (\Exception $e){} + + $this->assertNotEmpty($bp); + $this->assertNotEmpty($wp); + $this->assertEquals($bp->getUid(), $wp->getUid()); + + $project = $bp->getProject(); + $process = $wp->getProcess(); + + $this->assertEquals($project["PRJ_NAME"], $process["PRO_TITLE"]); + $this->assertEquals($project["PRJ_DESCRIPTION"], $process["PRO_DESCRIPTION"]); + $this->assertEquals($project["PRJ_AUTHOR"], $process["PRO_CREATE_USER"]); + } + + function testCreate() + { + $data = array( + "PRJ_NAME" => "Test BPMN Project #2", + "PRJ_DESCRIPTION" => "Description for - Test BPMN Project #2", + "PRJ_AUTHOR" => "00000000000000000000000000000001" + ); + + $bwap = new Project\Adapter\BpmnWorkflow(); + $bwap->create($data); + + try { + $bp = Project\Bpmn::load($bwap->getUid()); + } catch (\Exception $e){} + + try { + $wp = Project\Workflow::load($bwap->getUid()); + } catch (\Exception $e){} + + $this->assertNotEmpty($bp); + $this->assertNotEmpty($wp); + $this->assertEquals($bp->getUid(), $wp->getUid()); + + $project = $bp->getProject(); + $process = $wp->getProcess(); + + $this->assertEquals($project["PRJ_NAME"], $process["PRO_TITLE"]); + $this->assertEquals($project["PRJ_DESCRIPTION"], $process["PRO_DESCRIPTION"]); + $this->assertEquals($project["PRJ_AUTHOR"], $process["PRO_CREATE_USER"]); + } +} \ No newline at end of file diff --git a/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php b/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php index 73c45b3c3..e6bc64e67 100644 --- a/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php +++ b/workflow/engine/src/Tests/ProcessMaker/Project/BpmnTest.php @@ -4,7 +4,7 @@ namespace Tests\ProcessMaker\Project; use \ProcessMaker\Project; if (! class_exists("Propel")) { - include_once __DIR__ . "/../bootstrap.php"; + include_once __DIR__ . "/../../bootstrap.php"; } @@ -14,7 +14,7 @@ class BpmnTest extends \PHPUnit_Framework_TestCase public static function tearDownAfterClass() { - return; + //return; //cleaning DB foreach (self::$prjUids as $prjUid) { diff --git a/workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php b/workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php index 4d144e229..cced3ac4d 100644 --- a/workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php +++ b/workflow/engine/src/Tests/ProcessMaker/Project/WorkflowTest.php @@ -4,10 +4,10 @@ namespace Tests\ProcessMaker\Project; use \ProcessMaker\Project; if (! class_exists("Propel")) { - include_once __DIR__ . "/../bootstrap.php"; + include_once __DIR__ . "/../../bootstrap.php"; } -class ProcessMakerProjectWorkflowTest extends \PHPUnit_Framework_TestCase +class WorkflowTest extends \PHPUnit_Framework_TestCase { protected static $proUids = array();