Merge branch 'master' of bitbucket.org:colosa/processmaker

This commit is contained in:
Brayan Osmar Pereyra Suxo
2014-12-09 14:19:07 -04:00
13 changed files with 365 additions and 233 deletions

View File

@@ -8,9 +8,9 @@ default:
client_secret: 179ad45c6ce2cb97cf1029e212046e81 client_secret: 179ad45c6ce2cb97cf1029e212046e81
#uploadFilesFolder: /opt/uploadfiles #uploadFilesFolder: /opt/uploadfiles
#cd5cff9b2e3ebabf49e276e47e977fab5988c00e #cd5cff9b2e3ebabf49e276e47e977fab5988c00e
login_url: http://processmaker-ip-or-domaint/sys[workspace]/en/neoclassic/login/login login_url: http://processmaker-ip-or-domain/sys[workspace]/en/neoclassic/login/login
authentication_url: http://processmaker-ip-or-domain/sys[workspace]/en/neoclassic/login/authentication.php authentication_url: http://processmaker-ip-or-domain/sys[workspace]/en/neoclassic/login/authentication.php
oauth_app_url: http://processmaker-ip-or-domaint/sys[workspace]/en/neoclassic/oauth2/clientSetupAjax oauth_app_url: http://processmaker-ip-or-domain/sys[workspace]/en/neoclassic/oauth2/clientSetupAjax
oauth_authorization_url: http://processmaker-ip-or-domain/[workspace]/oauth2/authorize oauth_authorization_url: http://processmaker-ip-or-domain/[workspace]/oauth2/authorize
user_name: <your-admin-username> user_name: <your-admin-username>
user_password: <your-admin-password> user_password: <your-admin-password>

View File

@@ -5,11 +5,13 @@ Feature: DataBase Connections Main Tests Mysql
and workspace with the project 87648819953a85c0abc01d3080475981 ("testExecutionOfDerivationScreen") already loaded and workspace with the project 87648819953a85c0abc01d3080475981 ("testExecutionOfDerivationScreen") already loaded
there are zero Database Connections in the processes. there are zero Database Connections in the processes.
# MySQL is tagged like 1
Background: Background:
Given that I have a valid access_token Given that I have a valid access_token
And database tagged like 1
# GET /api/1.0/{workspace}/project/<project-id>/database-connections # GET /api/1.0/{workspace}/project/<project-id>/database-connections
# Get list DataBase| dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | Connections # Get list DataBase| dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | Connections
Scenario Outline: Get the DataBase Connections List when there are exactly zero DataBase Connections Scenario Outline: Get the DataBase Connections List when there are exactly zero DataBase Connections
Given I request "project/<project>/database-connections" Given I request "project/<project>/database-connections"
@@ -19,8 +21,8 @@ Feature: DataBase Connections Main Tests Mysql
Examples: Examples:
| project | record | | project | record |
| 106912358530c9b14ac15d3001790900 | 0 | | 74737540052e1641ab88249082085472 | 0 |
| 1265557095225ff5c688f46031700471 | 0 | | 87648819953a85c0abc01d3080475981 | 0 |
# POST /api/1.0/{workspace}/project/<project-id>/database-connection/test # POST /api/1.0/{workspace}/project/<project-id>/database-connection/test
@@ -48,8 +50,8 @@ Feature: DataBase Connections Main Tests Mysql
Examples: Examples:
| dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | | dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description |
| 1 | 106912358530c9b14ac15d3001790900 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> | | 1 | 74737540052e1641ab88249082085472 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> |
| 2 | 1265557095225ff5c688f46031700471 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> | | 2 | 87648819953a85c0abc01d3080475981 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> |
# POST /api/1.0/{workspace}/project/<project-id>/database-connection # POST /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -79,8 +81,8 @@ Feature: DataBase Connections Main Tests Mysql
Examples: Examples:
| dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | | dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description |
| 1 | 106912358530c9b14ac15d3001790900 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> | | 1 | 74737540052e1641ab88249082085472 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> |
| 2 | 1265557095225ff5c688f46031700471 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> | | 2 | 87648819953a85c0abc01d3080475981 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> |
# GET /api/1.0/{workspace}/project/<project-id>/database-connection # GET /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -94,8 +96,8 @@ Feature: DataBase Connections Main Tests Mysql
Examples: Examples:
| project | record | dbs_uid_number | | project | record | dbs_uid_number |
| 106912358530c9b14ac15d3001790900 | 1 | 1 | | 74737540052e1641ab88249082085472 | 1 | 1 |
| 1265557095225ff5c688f46031700471 | 1 | 2 | | 87648819953a85c0abc01d3080475981 | 1 | 2 |
# PUT /api/1.0/{workspace}/project/<project-id>/database-connection # PUT /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -124,8 +126,8 @@ Feature: DataBase Connections Main Tests Mysql
Examples: Examples:
| dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | | dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description |
| 1 | 106912358530c9b14ac15d3001790900 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> | | 1 | 74737540052e1641ab88249082085472 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> |
| 2 | 1265557095225ff5c688f46031700471 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> | | 2 | 87648819953a85c0abc01d3080475981 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> |
# GET /api/1.0/{workspace}/project/<project-id>/database-connection # GET /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -149,8 +151,8 @@ Feature: DataBase Connections Main Tests Mysql
Examples: Examples:
| dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | | dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description |
| 1 | 106912358530c9b14ac15d3001790900 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> | | 1 | 74737540052e1641ab88249082085472 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> |
| 2 | 1265557095225ff5c688f46031700471 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> | | 2 | 87648819953a85c0abc01d3080475981 | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> |
# DELETE /api/1.0/{workspace}/project/<project-id>/database-connection # DELETE /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -165,8 +167,8 @@ Feature: DataBase Connections Main Tests Mysql
Examples: Examples:
| project | dbs_uid_number | | project | dbs_uid_number |
| 106912358530c9b14ac15d3001790900 | 1 | | 74737540052e1641ab88249082085472 | 1 |
| 1265557095225ff5c688f46031700471 | 2 | | 87648819953a85c0abc01d3080475981 | 2 |
# GET /api/1.0/{workspace}/project/<project-id>/database-connection # GET /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -180,5 +182,5 @@ Feature: DataBase Connections Main Tests Mysql
Examples: Examples:
| project | record | dbs_uid_number | | project | record | dbs_uid_number |
| 106912358530c9b14ac15d3001790900 | 0 | 1 | | 74737540052e1641ab88249082085472 | 0 | 1 |
| 1265557095225ff5c688f46031700471 | 0 | 2 | | 87648819953a85c0abc01d3080475981 | 0 | 2 |

View File

@@ -5,9 +5,10 @@ Feature: DataBase Connections Main Tests SQL Server
and workspace with the project 87648819953a85c0abc01d3080475981 ("testExecutionOfDerivationScreen") already loaded and workspace with the project 87648819953a85c0abc01d3080475981 ("testExecutionOfDerivationScreen") already loaded
there are zero Database Connections in the processes. there are zero Database Connections in the processes.
# Microsoft SQL Server is tagged like 2
Background: Background:
Given that I have a valid access_token Given that I have a valid access_token
And database tagged like 2
# GET /api/1.0/{workspace}/project/<project-id>/database-connections # GET /api/1.0/{workspace}/project/<project-id>/database-connections
# Get list DataBase Connections # Get list DataBase Connections
@@ -19,8 +20,8 @@ Feature: DataBase Connections Main Tests SQL Server
Examples: Examples:
| project | record | | project | record |
| 106912358530c9b14ac15d3001790900 | 0 | | 74737540052e1641ab88249082085472 | 0 |
| 1265557095225ff5c688f46031700471 | 0 | | 87648819953a85c0abc01d3080475981 | 0 |
# POST /api/1.0/{workspace}/project/<project-id>/database-connection/test # POST /api/1.0/{workspace}/project/<project-id>/database-connection/test
@@ -48,8 +49,8 @@ Feature: DataBase Connections Main Tests SQL Server
Examples: Examples:
| dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | | dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description |
| 1 | 106912358530c9b14ac15d3001790900 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> | | 1 | 74737540052e1641ab88249082085472 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> |
| 2 | 1265557095225ff5c688f46031700471 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> | | 2 | 87648819953a85c0abc01d3080475981 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> |
# POST /api/1.0/{workspace}/project/<project-id>/database-connection # POST /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -79,8 +80,8 @@ Feature: DataBase Connections Main Tests SQL Server
Examples: Examples:
| dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | | dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description |
| 1 | 106912358530c9b14ac15d3001790900 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> | | 1 | 74737540052e1641ab88249082085472 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> |
| 2 | 1265557095225ff5c688f46031700471 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> | | 2 | 87648819953a85c0abc01d3080475981 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> |
# GET /api/1.0/{workspace}/project/<project-id>/database-connection # GET /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -94,8 +95,8 @@ Feature: DataBase Connections Main Tests SQL Server
Examples: Examples:
| project | record | dbs_uid_number | | project | record | dbs_uid_number |
| 106912358530c9b14ac15d3001790900 | 1 | 1 | | 74737540052e1641ab88249082085472 | 1 | 1 |
| 1265557095225ff5c688f46031700471 | 1 | 2 | | 87648819953a85c0abc01d3080475981 | 1 | 2 |
# PUT /api/1.0/{workspace}/project/<project-id>/database-connection # PUT /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -124,8 +125,8 @@ Feature: DataBase Connections Main Tests SQL Server
Examples: Examples:
| dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | | dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description |
| 1 | 106912358530c9b14ac15d3001790900 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> | | 1 | 74737540052e1641ab88249082085472 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> |
| 2 | 1265557095225ff5c688f46031700471 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> | | 2 | 87648819953a85c0abc01d3080475981 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> |
# GET /api/1.0/{workspace}/project/<project-id>/database-connection # GET /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -149,8 +150,8 @@ Feature: DataBase Connections Main Tests SQL Server
Examples: Examples:
| dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | | dbs_uid_number | project | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description |
| 1 | 106912358530c9b14ac15d3001790900 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> | | 1 | 74737540052e1641ab88249082085472 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> |
| 2 | 1265557095225ff5c688f46031700471 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> | | 2 | 87648819953a85c0abc01d3080475981 | <sqlsrv_db_type> | <sqlsrv_db_server> | <sqlsrv_db_name> | <sqlsrv_db_username> | <sqlsrv_db_password> | <sqlsrv_db_port> | <sqlsrv_db_encode> | <sqlsrv_db_description> |
# DELETE /api/1.0/{workspace}/project/<project-id>/database-connection # DELETE /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -165,8 +166,8 @@ Feature: DataBase Connections Main Tests SQL Server
Examples: Examples:
| project | dbs_uid_number | | project | dbs_uid_number |
| 106912358530c9b14ac15d3001790900 | 1 | | 74737540052e1641ab88249082085472 | 1 |
| 1265557095225ff5c688f46031700471 | 2 | | 87648819953a85c0abc01d3080475981 | 2 |
# GET /api/1.0/{workspace}/project/<project-id>/database-connection # GET /api/1.0/{workspace}/project/<project-id>/database-connection
@@ -180,5 +181,5 @@ Feature: DataBase Connections Main Tests SQL Server
Examples: Examples:
| project | record | dbs_uid_number | | project | record | dbs_uid_number |
| 106912358530c9b14ac15d3001790900 | 0 | 1 | | 74737540052e1641ab88249082085472 | 0 | 1 |
| 1265557095225ff5c688f46031700471 | 0 | 2 | | 87648819953a85c0abc01d3080475981 | 0 | 2 |

View File

@@ -51,5 +51,5 @@ Feature: DataBase Connections Negative Tests
Examples: Examples:
| dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description | | dbs_type | dbs_server | dbs_database_name | dbs_username | dbs_password | dbs_port | dbs_encode | dbs_description |
| <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> | | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | 33O6 | <mys_db_encode> | <mys_db_description> |
| <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | <mys_db_port> | <mys_db_encode> | <mys_db_description> | | <mys_db_type> | <mys_db_server> | <mys_db_name> | <mys_db_username> | <mys_db_password> | 33O6 | <mys_db_encode> | <mys_db_description> |

View File

@@ -87,6 +87,42 @@ class RestContext extends BehatContext
} }
} }
/**
* @BeforeScenario @DbConnection
*/
public function verifyAllRequiredDataToConnectDB($db_type)
{
$db_parameters = null;
if ($db_type === 1){
$db_parameters = array(
'mys_db_type',
'mys_db_server',
'mys_db_name',
'mys_db_username',
'mys_db_password',
'mys_db_port',
'mys_db_encode',
'mys_db_description');
}elseif($db_type === 2){
$db_parameters = array(
'sqlsrv_db_type',
'sqlsrv_db_server',
'sqlsrv_db_name',
'sqlsrv_db_username',
'sqlsrv_db_password',
'sqlsrv_db_port',
'sqlsrv_db_encode',
'sqlsrv_db_description');
}
foreach ($db_parameters as $value) {
$param = $this->getParameter($value);
if (!isset($param)){
throw new PendingException("Parameter ".$value." is not defined or is empty, please review behat.yml file!");
}
}
}
/** /**
* @BeforeScenario @MysqlDbConnection * @BeforeScenario @MysqlDbConnection
*/ */
@@ -1725,7 +1761,7 @@ class RestContext extends BehatContext
/** /**
* @Given /^that "([^"]*)" property in object "([^"]*)" equals "([^"]*)"$/ * @Given /^that "([^"]*)" property in object "([^"]*)" equals "([^"]*)"$/
*/ */
public function thatPropertyInObjectEquals($propertyName, $propertyParent, $value) public function thatPropertyInObjectEquals($propertyName, $propertyParent, $propertyValue)
{ {
$data = $this->_data; $data = $this->_data;
if (empty($data)) { if (empty($data)) {
@@ -1899,7 +1935,6 @@ class RestContext extends BehatContext
$sessionData = new StdClass(); $sessionData = new StdClass();
} }
$sessionData = new StdClass();
if(!$sessionData->dbconnectionStatus->$dbConnectionId){ if(!$sessionData->dbconnectionStatus->$dbConnectionId){
throw new PendingException("Skip inactive dbconnection: $dbConnectionId"); throw new PendingException("Skip inactive dbconnection: $dbConnectionId");
} }

View File

@@ -50,75 +50,73 @@ class Derivation
var $case; var $case;
/** /**
* prepareInformationTaskDerivation * prepareInformationTask
* *
* @param array $arrayDerivation Derivation * @param array $arrayTaskData Task data (derivation)
* *
* return array Return array * return array Return array
*/ */
public function prepareInformationTaskDerivation(array $arrayDerivation) public function prepareInformationTask(array $arrayTaskData)
{ {
try { try {
$task = new Task(); $task = new Task();
$taskFields = $task->load($arrayDerivation["TAS_UID"]); $arrayTaskData = G::array_merges($arrayTaskData, $task->load($arrayTaskData["TAS_UID"]));
$arrayDerivation = G::array_merges($arrayDerivation, $taskFields); //2. If next case is an special case
if ((int)($arrayTaskData["ROU_NEXT_TASK"]) < 0) {
$arrayTaskData["NEXT_TASK"]["TAS_UID"] = (int)($arrayTaskData["ROU_NEXT_TASK"]);
$arrayTaskData["NEXT_TASK"]["TAS_ASSIGN_TYPE"] = "nobody";
$arrayTaskData["NEXT_TASK"]["TAS_PRIORITY_VARIABLE"] = "";
$arrayTaskData["NEXT_TASK"]["TAS_DEF_PROC_CODE"] = "";
$arrayTaskData["NEXT_TASK"]["TAS_PARENT"] = "";
$arrayTaskData["NEXT_TASK"]["TAS_TRANSFER_FLY"] = "";
//2. if next case is an special case switch ($arrayTaskData["ROU_NEXT_TASK"]) {
if ((int)($arrayDerivation["ROU_NEXT_TASK"]) < 0) {
$arrayDerivation["NEXT_TASK"]["TAS_UID"] = (int)($arrayDerivation["ROU_NEXT_TASK"]);
$arrayDerivation["NEXT_TASK"]["TAS_ASSIGN_TYPE"] = "nobody";
$arrayDerivation["NEXT_TASK"]["TAS_PRIORITY_VARIABLE"] = "";
$arrayDerivation["NEXT_TASK"]["TAS_DEF_PROC_CODE"] = "";
$arrayDerivation["NEXT_TASK"]["TAS_PARENT"] = "";
$arrayDerivation["NEXT_TASK"]["TAS_TRANSFER_FLY"] = "";
switch ($arrayDerivation["ROU_NEXT_TASK"]) {
case -1: case -1:
$arrayDerivation["NEXT_TASK"]["TAS_TITLE"] = G::LoadTranslation("ID_END_OF_PROCESS"); $arrayTaskData["NEXT_TASK"]["TAS_TITLE"] = G::LoadTranslation("ID_END_OF_PROCESS");
break; break;
case -2: case -2:
$arrayDerivation["NEXT_TASK"]["TAS_TITLE"] = G::LoadTranslation("ID_TAREA_COLGANTE"); $arrayTaskData["NEXT_TASK"]["TAS_TITLE"] = G::LoadTranslation("ID_TAREA_COLGANTE");
break; break;
} }
$arrayDerivation["NEXT_TASK"]["USR_UID"] = ""; $arrayTaskData["NEXT_TASK"]["USR_UID"] = "";
$arrayDerivation["NEXT_TASK"]["USER_ASSIGNED"] = array("USR_UID" => ""); $arrayTaskData["NEXT_TASK"]["USER_ASSIGNED"] = array("USR_UID" => "");
} else { } else {
//3. load the task information of normal NEXT_TASK //3. Load the task information of normal NEXT_TASK
$arrayDerivation["NEXT_TASK"] = $task->load($arrayDerivation["ROU_NEXT_TASK"]); //print $arrayDerivation["ROU_NEXT_TASK"]." **** ".$arrayDerivation["NEXT_TASK"]["TAS_TYPE"]."<hr>"; $arrayTaskData["NEXT_TASK"] = $task->load($arrayTaskData["ROU_NEXT_TASK"]); //print $arrayTaskData["ROU_NEXT_TASK"]." **** ".$arrayTaskData["NEXT_TASK"]["TAS_TYPE"]."<hr>";
if ($arrayDerivation["NEXT_TASK"]["TAS_TYPE"] == "SUBPROCESS") { if ($arrayTaskData["NEXT_TASK"]["TAS_TYPE"] == "SUBPROCESS") {
$sTaskParent = $arrayDerivation["NEXT_TASK"]["TAS_UID"]; $taskParent = $arrayTaskData["NEXT_TASK"]["TAS_UID"];
$criteria = new Criteria("workflow"); $criteria = new Criteria("workflow");
$criteria->add(SubProcessPeer::PRO_PARENT, $arrayDerivation["PRO_UID"]); $criteria->add(SubProcessPeer::PRO_PARENT, $arrayTaskData["PRO_UID"]);
$criteria->add(SubProcessPeer::TAS_PARENT, $arrayDerivation["NEXT_TASK"]["TAS_UID"]); $criteria->add(SubProcessPeer::TAS_PARENT, $arrayTaskData["NEXT_TASK"]["TAS_UID"]);
$rsCriteria = SubProcessPeer::doSelectRS($criteria); $rsCriteria = SubProcessPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rsCriteria->next(); $rsCriteria->next();
$row = $rsCriteria->getRow(); $row = $rsCriteria->getRow();
$arrayDerivation["ROU_NEXT_TASK"] = $row["TAS_UID"]; //print "<hr>Life is just a lonely highway"; $arrayTaskData["ROU_NEXT_TASK"] = $row["TAS_UID"]; //print "<hr>Life is just a lonely highway";
$arrayDerivation["NEXT_TASK"] = $task->load($arrayDerivation["ROU_NEXT_TASK"]); //print "<hr>Life is just a lonely highway";print"<hr>"; $arrayTaskData["NEXT_TASK"] = $task->load($arrayTaskData["ROU_NEXT_TASK"]); //print "<hr>Life is just a lonely highway";print"<hr>";
$process = new Process(); $process = new Process();
$row = $process->load($row["PRO_UID"]); $row = $process->load($row["PRO_UID"]);
$arrayDerivation["NEXT_TASK"]["TAS_TITLE"] .= " (" . $row["PRO_TITLE"] . ")"; $arrayTaskData["NEXT_TASK"]["TAS_TITLE"] .= " (" . $row["PRO_TITLE"] . ")";
$arrayDerivation["NEXT_TASK"]["TAS_PARENT"] = $sTaskParent; $arrayTaskData["NEXT_TASK"]["TAS_PARENT"] = $taskParent;
//unset($task, $process, $row, $sTaskParent); //unset($task, $process, $row, $taskParent);
} else { } else {
$arrayDerivation["NEXT_TASK"]["TAS_PARENT"] = ""; $arrayTaskData["NEXT_TASK"]["TAS_PARENT"] = "";
} }
$arrayDerivation["NEXT_TASK"]["USER_ASSIGNED"] = $this->getNextAssignedUser($arrayDerivation); $arrayTaskData["NEXT_TASK"]["USER_ASSIGNED"] = ($arrayTaskData["NEXT_TASK"]["TAS_TYPE"] != "GATEWAYTOGATEWAY")? $this->getNextAssignedUser($arrayTaskData) : array("USR_UID" => "");
} }
//Return //Return
return $arrayDerivation; return $arrayTaskData;
} catch (Exception $e) { } catch (Exception $e) {
throw $e; throw $e;
} }
@@ -127,92 +125,129 @@ class Derivation
/** /**
* prepareInformation * prepareInformation
* *
* @param array $aData * @param array $arrayData Data
* @return $taskInfo * @param string $taskUid Unique id of Task
*
* return array Return array
*/ */
function prepareInformation ($aData) public function prepareInformation(array $arrayData, $taskUid = "")
{ {
$oTask = new Task(); try {
//SELECT * if (!class_exists("Cases")) {
//FROM APP_DELEGATION AS A G::LoadClass("case");
//LEFT JOIN TASK AS T ON(T.TAS_UID = A.TAS_UID)
//LEFT JOIN ROUTE AS R ON(R.TAS_UID = A.TAS_UID)
//WHERE
//APP_UID = '$aData['APP_UID']'
//AND DEL_INDEX = '$aData['DEL_INDEX']'
$c = new Criteria( 'workflow' );
$c->clearSelectColumns();
$c->addSelectColumn(AppDelegationPeer::TAS_UID);
$c->addSelectColumn(RoutePeer::ROU_NEXT_TASK);
$c->addSelectColumn(RoutePeer::ROU_TYPE);
$c->addSelectColumn(RoutePeer::ROU_DEFAULT);
$c->addSelectColumn(RoutePeer::ROU_CONDITION);
$c->addJoin( AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN );
$c->addJoin( AppDelegationPeer::TAS_UID, RoutePeer::TAS_UID, Criteria::LEFT_JOIN );
$c->add( AppDelegationPeer::APP_UID, $aData['APP_UID'] );
$c->add( AppDelegationPeer::DEL_INDEX, $aData['DEL_INDEX'] );
$c->addAscendingOrderByColumn( RoutePeer::ROU_CASE );
$rs = AppDelegationPeer::doSelectRs( $c );
$rs->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$rs->next();
$aDerivation = $rs->getRow();
$i = 0;
$taskInfo = array();
$arrayDerivationDefault = array();
$oUser = new Users();
if (!class_exists('Cases')) {
G::LoadClass('case');
}
$this->case = new Cases();
// 1. there is no rule
if (is_null( $aDerivation['ROU_NEXT_TASK'] )) {
throw (new Exception( G::LoadTranslation( 'ID_NO_DERIVATION_RULE' ) ));
}
while (is_array( $aDerivation )) {
$aDerivation = G::array_merges($aDerivation, $aData);
if ((int)($aDerivation["ROU_DEFAULT"]) == 1) {
$arrayDerivationDefault = $aDerivation;
} }
$bContinue = true; $this->case = new Cases();
$task = new Task();
//evaluate the condition if there are conditions defined. $arrayNextTask = array();
if (isset( $aDerivation['ROU_CONDITION'] ) && trim( $aDerivation['ROU_CONDITION'] ) != '' && ($aDerivation['ROU_TYPE'] != 'SELECT' || $aDerivation['ROU_TYPE'] == 'PARALLEL-BY-EVALUATION')) { $arrayNextTaskDefault = array();
$AppFields = $this->case->loadCase( $aData['APP_UID'] ); $i = 0;
G::LoadClass( 'pmScript' );
$oPMScript = new PMScript(); //SELECT *
$oPMScript->setFields( $AppFields['APP_DATA'] ); //FROM APP_DELEGATION AS A
$oPMScript->setScript( $aDerivation['ROU_CONDITION'] ); //LEFT JOIN TASK AS T ON(T.TAS_UID = A.TAS_UID)
$bContinue = $oPMScript->evaluate(); //LEFT JOIN ROUTE AS R ON(R.TAS_UID = A.TAS_UID)
//WHERE
//APP_UID = '$arrayData["APP_UID"]'
//AND DEL_INDEX = '$arrayData["DEL_INDEX"]'
$criteria = new Criteria("workflow");
$criteria->addSelectColumn(RoutePeer::TAS_UID);
$criteria->addSelectColumn(RoutePeer::ROU_NEXT_TASK);
$criteria->addSelectColumn(RoutePeer::ROU_TYPE);
$criteria->addSelectColumn(RoutePeer::ROU_DEFAULT);
$criteria->addSelectColumn(RoutePeer::ROU_CONDITION);
if ($taskUid != "") {
$criteria->add(RoutePeer::TAS_UID, $taskUid, Criteria::EQUAL);
$criteria->addAscendingOrderByColumn(RoutePeer::ROU_CASE);
$rsCriteria = RoutePeer::doSelectRS($criteria);
} else {
$criteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN);
$criteria->addJoin(AppDelegationPeer::TAS_UID, RoutePeer::TAS_UID, Criteria::LEFT_JOIN);
$criteria->add(AppDelegationPeer::APP_UID, $arrayData["APP_UID"], Criteria::EQUAL);
$criteria->add(AppDelegationPeer::DEL_INDEX, $arrayData["DEL_INDEX"], Criteria::EQUAL);
$criteria->addAscendingOrderByColumn(RoutePeer::ROU_CASE);
$rsCriteria = AppDelegationPeer::doSelectRS($criteria);
} }
if ($aDerivation['ROU_TYPE'] == 'EVALUATE') { $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
if (count( $taskInfo ) >= 1) {
$bContinue = false; while ($rsCriteria->next()) {
$arrayRouteData = G::array_merges($rsCriteria->getRow(), $arrayData);
if ((int)($arrayRouteData["ROU_DEFAULT"]) == 1) {
$arrayNextTaskDefault = $arrayRouteData;
}
$flagContinue = true;
//Evaluate the condition if there are conditions defined
if (isset($arrayRouteData["ROU_CONDITION"]) && trim($arrayRouteData["ROU_CONDITION"]) != "" && ($arrayRouteData["ROU_TYPE"] != "SELECT" || $arrayRouteData["ROU_TYPE"] == "PARALLEL-BY-EVALUATION")) {
G::LoadClass("pmScript");
$arrayApplicationData = $this->case->loadCase($arrayData["APP_UID"]);
$pmScript = new PMScript();
$pmScript->setFields($arrayApplicationData["APP_DATA"]);
$pmScript->setScript($arrayRouteData["ROU_CONDITION"]);
$flagContinue = $pmScript->evaluate();
}
if (isset($arrayRouteData["ROU_CONDITION"]) && trim($arrayRouteData["ROU_CONDITION"]) == "" && $arrayRouteData["ROU_NEXT_TASK"] != "-1") {
$arrayTaskData = $task->load($arrayRouteData["ROU_NEXT_TASK"]);
if ($arrayTaskData["TAS_TYPE"] == "GATEWAYTOGATEWAY") {
$flagContinue = false;
}
}
if ($arrayRouteData["ROU_TYPE"] == "EVALUATE" && count($arrayNextTask) > 0) {
$flagContinue = false;
}
if ($flagContinue) {
$arrayNextTask[++$i] = $this->prepareInformationTask($arrayRouteData);
} }
} }
if ($bContinue) { if (count($arrayNextTask) == 0 && count($arrayNextTaskDefault) > 0) {
$i++; $arrayNextTask[++$i] = $this->prepareInformationTask($arrayNextTaskDefault);
$taskInfo[$i] = $this->prepareInformationTaskDerivation($aDerivation);
} }
$rs->next(); //Check Task GATEWAYTOGATEWAY
$aDerivation = $rs->getRow(); $arrayNextTaskBk = $arrayNextTask;
$arrayNextTask = array();
$i = 0;
foreach ($arrayNextTaskBk as $value) {
$arrayNextTaskData = $value;
if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] != "-1" && $arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"] == "GATEWAYTOGATEWAY") {
$arrayAux = $this->prepareInformation($arrayData, $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]);
foreach ($arrayAux as $value2) {
$arrayNextTask[++$i] = $value2;
}
} else {
$arrayNextTask[++$i] = $arrayNextTaskData;
}
}
//1. There is no rule
if (count($arrayNextTask) == 0) {
throw new Exception(G::LoadTranslation("ID_NO_DERIVATION_RULE"));
}
//Return
return $arrayNextTask;
} catch (Exception $e) {
throw $e;
} }
if (count($taskInfo) == 0 && count($arrayDerivationDefault) > 0) {
$i++;
$taskInfo[$i] = $this->prepareInformationTaskDerivation($arrayDerivationDefault);
}
//Return
return $taskInfo;
} }
/** /**

View File

@@ -68,7 +68,8 @@ class PMLicensedFeatures
if (!class_exists("pmLicenseManager")) { if (!class_exists("pmLicenseManager")) {
require_once ("classes" . PATH_SEP . "class.pmLicenseManager.php"); require_once ("classes" . PATH_SEP . "class.pmLicenseManager.php");
} }
$licenseManager = pmLicenseManager::getSingleton();
$licenseManager = pmLicenseManager::getSingleton(false);
$_SESSION['__sw__'] = true; $_SESSION['__sw__'] = true;
$padl = new padl(); $padl = new padl();

View File

@@ -10,7 +10,7 @@ class pmLicenseManager
private static $instance = null; private static $instance = null;
public function __construct() public function __construct($flagActivatePlugins = true)
{ {
G::LoadClass('serverConfiguration'); G::LoadClass('serverConfiguration');
$oServerConf = &serverConf::getSingleton(); $oServerConf = &serverConf::getSingleton();
@@ -109,13 +109,15 @@ class pmLicenseManager
$oServerConf->setProperty ( 'LICENSE_INFO', $licInfoA ); $oServerConf->setProperty ( 'LICENSE_INFO', $licInfoA );
} }
$this->activateFeatures (); if ($flagActivatePlugins) {
$this->activateFeatures();
}
} }
public static function getSingleton() public static function getSingleton($flagActivatePlugins = true)
{ {
if (self::$instance == null) { if (self::$instance == null) {
self::$instance = new pmLicenseManager(); self::$instance = new pmLicenseManager($flagActivatePlugins);
} }
return self::$instance; return self::$instance;
} }

View File

@@ -159,7 +159,7 @@ class TaskMapBuilder
$tMap->addColumn('TAS_SELFSERVICE_EXECUTION', 'TasSelfserviceExecution', 'string', CreoleTypes::VARCHAR, false, 15); $tMap->addColumn('TAS_SELFSERVICE_EXECUTION', 'TasSelfserviceExecution', 'string', CreoleTypes::VARCHAR, false, 15);
$tMap->addValidator('TAS_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'NORMAL|ADHOC|SUBPROCESS|HIDDEN', 'Please select a valid value for TAS_TYPE.'); $tMap->addValidator('TAS_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'NORMAL|ADHOC|SUBPROCESS|HIDDEN|GATEWAYTOGATEWAY', 'Please enter a valid value for TAS_TYPE');
$tMap->addValidator('TAS_TIMEUNIT', 'validValues', 'propel.validator.ValidValuesValidator', 'MINUTES|HOURS|DAYS|WEEKS|MONTHS', 'Please select a valid value for TAS_TIMEUNIT.'); $tMap->addValidator('TAS_TIMEUNIT', 'validValues', 'propel.validator.ValidValuesValidator', 'MINUTES|HOURS|DAYS|WEEKS|MONTHS', 'Please select a valid value for TAS_TIMEUNIT.');

View File

@@ -1248,7 +1248,7 @@
<column name="TAS_SELFSERVICE_EXECUTION" type="VARCHAR" size="15" default="EVERY_TIME"/> <column name="TAS_SELFSERVICE_EXECUTION" type="VARCHAR" size="15" default="EVERY_TIME"/>
<validator column="TAS_TYPE"> <validator column="TAS_TYPE">
<rule name="validValues" value="NORMAL|ADHOC|SUBPROCESS|HIDDEN" message="Please select a valid value for TAS_TYPE."/> <rule name="validValues" value="NORMAL|ADHOC|SUBPROCESS|HIDDEN|GATEWAYTOGATEWAY" message="Please enter a valid value for TAS_TYPE"/>
</validator> </validator>
<validator column="TAS_TIMEUNIT"> <validator column="TAS_TIMEUNIT">
<rule name="validValues" value="MINUTES|HOURS|DAYS|WEEKS|MONTHS" message="Please select a valid value for TAS_TIMEUNIT."/> <rule name="validValues" value="MINUTES|HOURS|DAYS|WEEKS|MONTHS" message="Please select a valid value for TAS_TIMEUNIT."/>

View File

@@ -91,7 +91,7 @@ if ($userData['USR_EMAIL'] != '' && $userData['USR_EMAIL'] === $data['USR_EMAIL'
G::SendTemporalMessage ($e->getMessage(), "warning", 'string'); G::SendTemporalMessage ($e->getMessage(), "warning", 'string');
} }
} else { } else {
if ($userData['USR_AUTH_TYPE'] === '') { if ($userData['USR_AUTH_TYPE'] === '' || $userData['USR_AUTH_TYPE'] === 'MYSQL') {
$msg = G::LoadTranslation('ID_USER') . ' ' . htmlentities($data['USR_USERNAME'], ENT_QUOTES, 'UTF-8') . ' '. G::LoadTranslation('ID_IS_NOT_REGISTERED'); $msg = G::LoadTranslation('ID_USER') . ' ' . htmlentities($data['USR_USERNAME'], ENT_QUOTES, 'UTF-8') . ' '. G::LoadTranslation('ID_IS_NOT_REGISTERED');
} else { } else {
$msg = G::LoadTranslation('ID_USER_NOT_FUNCTIONALITY'); $msg = G::LoadTranslation('ID_USER_NOT_FUNCTIONALITY');

View File

@@ -436,104 +436,132 @@ class BpmnWorkflow extends Project\Bpmn
} }
} }
public function mapBpmnGatewayToWorkflowRoutes($activityUid, $gatewayUid)
{
try {
$arrayGatewayData = \BpmnGateway::findOneBy(\BpmnGatewayPeer::GAT_UID, $gatewayUid)->toArray();
switch ($arrayGatewayData["GAT_TYPE"]) {
//case "SELECTION":
case self::BPMN_GATEWAY_COMPLEX:
$routeType = "SELECT";
break;
//case "EVALUATION":
case self::BPMN_GATEWAY_EXCLUSIVE:
$routeType = "EVALUATE";
break;
//case "PARALLEL":
case self::BPMN_GATEWAY_PARALLEL:
if ($arrayGatewayData["GAT_DIRECTION"] == "DIVERGING") {
$routeType = "PARALLEL";
} else {
if ($arrayGatewayData["GAT_DIRECTION"] == "CONVERGING") {
$routeType = "SEC-JOIN";
} else {
throw new \LogicException(
"Invalid Gateway direction, accepted values: [DIVERGING|CONVERGING], given: " . $arrayGatewayData["GAT_DIRECTION"]
);
}
}
break;
//case "PARALLEL_EVALUATION":
case self::BPMN_GATEWAY_INCLUSIVE:
if ($arrayGatewayData["GAT_DIRECTION"] == "DIVERGING") {
$routeType = "PARALLEL-BY-EVALUATION";
} else {
if ($arrayGatewayData["GAT_DIRECTION"] == "CONVERGING") {
$routeType = "SEC-JOIN";
} else {
throw new \LogicException(
"Invalid Gateway direction, accepted values: [DIVERGING|CONVERGING], given: " . $arrayGatewayData["GAT_DIRECTION"]
);
}
}
break;
default:
throw new \LogicException("Unsupported Gateway type: " . $arrayGatewayData["GAT_TYPE"]);
break;
}
$arrayGatewayFlowData = \BpmnFlow::findAllBy(array(
\BpmnFlowPeer::FLO_ELEMENT_ORIGIN => $gatewayUid,
\BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE => "bpmnGateway"
));
if ($arrayGatewayFlowData > 0) {
$this->wp->resetTaskRoutes($activityUid);
}
foreach ($arrayGatewayFlowData as $value) {
$arrayFlowData = $value->toArray();
$routeDefault = (array_key_exists("FLO_TYPE", $arrayFlowData) && $arrayFlowData["FLO_TYPE"] == "DEFAULT")? 1 : 0;
$routeCondition = (array_key_exists("FLO_CONDITION", $arrayFlowData))? $arrayFlowData["FLO_CONDITION"] : "";
switch ($arrayFlowData["FLO_ELEMENT_DEST_TYPE"]) {
case "bpmnActivity":
case "bpmnEvent":
//Gateway ----> Activity
//Gateway ----> Event
if ($arrayFlowData["FLO_ELEMENT_DEST_TYPE"] == "bpmnEvent") {
$event = \BpmnEventPeer::retrieveByPK($arrayFlowData["FLO_ELEMENT_DEST"]);
if ($event->getEvnType() == "END") {
$result = $this->wp->addRoute($activityUid, -1, $routeType, $routeCondition, $routeDefault);
}
} else {
$result = $this->wp->addRoute($activityUid, $arrayFlowData["FLO_ELEMENT_DEST"], $routeType, $routeCondition, $routeDefault);
}
break;
case "bpmnGateway":
//Gateway ----> Gateway
$taskUid = $this->wp->addTask(array(
"TAS_TYPE" => "GATEWAYTOGATEWAY",
"TAS_TITLE" => "GATEWAYTOGATEWAY",
"TAS_POSX" => (int)($arrayFlowData["FLO_X1"]),
"TAS_POSY" => (int)($arrayFlowData["FLO_Y1"])
));
$result = $this->wp->addRoute($activityUid, $taskUid, $routeType, $routeCondition, $routeDefault);
$this->mapBpmnGatewayToWorkflowRoutes($taskUid, $arrayFlowData["FLO_ELEMENT_DEST"]);
break;
default:
//For processmaker is only allowed flows between: "gateway -> activity", "gateway -> gateway"
//any another flow is considered invalid
throw new \LogicException(
"For ProcessMaker is only allowed flows between: \"gateway -> activity\", \"gateway -> gateway\" " . PHP_EOL .
"Given: bpmnGateway -> " . $arrayFlowData["FLO_ELEMENT_DEST_TYPE"]
);
}
}
} catch (\Exception $e) {
throw $e;
}
}
public function mapBpmnFlowsToWorkflowRoutes() public function mapBpmnFlowsToWorkflowRoutes()
{ {
$this->wp->deleteTaskGatewayToGateway($this->wp->getUid());
$activities = $this->getActivities(); $activities = $this->getActivities();
foreach ($activities as $activity) { foreach ($activities as $activity) {
$flows = \BpmnFlow::findAllBy(array( $flows = \BpmnFlow::findAllBy(array(
\BpmnFlowPeer::FLO_ELEMENT_ORIGIN => $activity["ACT_UID"], \BpmnFlowPeer::FLO_ELEMENT_ORIGIN => $activity["ACT_UID"],
\BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE => "bpmnActivity" \BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE => "bpmnActivity"
)); ));
//
foreach ($flows as $flow) { foreach ($flows as $flow) {
switch ($flow->getFloElementDestType()) { switch ($flow->getFloElementDestType()) {
case "bpmnActivity": case "bpmnActivity":
// (activity -> activity) // (activity -> activity)
$this->wp->addRoute($activity["ACT_UID"], $flow->getFloElementDest(), "SEQUENTIAL"); $this->wp->addRoute($activity["ACT_UID"], $flow->getFloElementDest(), "SEQUENTIAL");
break; break;
case "bpmnGateway": case "bpmnGateway":
// (activity -> gateway) // (activity -> gateway)
// we must find the related flows: gateway -> <object> // we must find the related flows: gateway -> <object>
$gatUid = $flow->getFloElementDest(); $this->mapBpmnGatewayToWorkflowRoutes($activity["ACT_UID"], $flow->getFloElementDest());
$gatewayFlows = \BpmnFlow::findAllBy(array(
\BpmnFlowPeer::FLO_ELEMENT_ORIGIN => $gatUid,
\BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE => "bpmnGateway"
));
if ($gatewayFlows > 0) {
$this->wp->resetTaskRoutes($activity["ACT_UID"]);
}
foreach ($gatewayFlows as $gatewayFlow) {
$gatewayFlow = $gatewayFlow->toArray();
switch ($gatewayFlow['FLO_ELEMENT_DEST_TYPE']) {
case 'bpmnEvent':
case 'bpmnActivity':
// (gateway -> activity)
$gateway = \BpmnGateway::findOneBy(\BpmnGatewayPeer::GAT_UID, $gatUid)->toArray();
switch ($gateway["GAT_TYPE"]) {
//case 'SELECTION':
case self::BPMN_GATEWAY_COMPLEX:
$routeType = "SELECT";
break;
//case 'EVALUATION':
case self::BPMN_GATEWAY_EXCLUSIVE:
$routeType = "EVALUATE";
break;
//case 'PARALLEL':
case self::BPMN_GATEWAY_PARALLEL:
if ($gateway["GAT_DIRECTION"] == "DIVERGING") {
$routeType = "PARALLEL";
} elseif ($gateway["GAT_DIRECTION"] == "CONVERGING") {
$routeType = "SEC-JOIN";
} else {
throw new \LogicException(sprintf(
"Invalid Gateway direction, accepted values: [%s|%s], given: %s.",
"DIVERGING", "CONVERGING", $gateway["GAT_DIRECTION"]
));
}
break;
//case 'PARALLEL_EVALUATION':
case self::BPMN_GATEWAY_INCLUSIVE:
if ($gateway["GAT_DIRECTION"] == "DIVERGING") {
$routeType = "PARALLEL-BY-EVALUATION";
} elseif ($gateway["GAT_DIRECTION"] == "CONVERGING") {
$routeType = "SEC-JOIN";
} else {
throw new \LogicException(sprintf(
"Invalid Gateway direction, accepted values: [%s|%s], given: %s.",
"DIVERGING", "CONVERGING", $gateway["GAT_DIRECTION"]
));
}
break;
default:
throw new \LogicException(sprintf("Unsupported Gateway type: %s", $gateway['GAT_TYPE']));
}
$condition = array_key_exists('FLO_CONDITION', $gatewayFlow) ? $gatewayFlow["FLO_CONDITION"] : '';
if ($gatewayFlow['FLO_ELEMENT_DEST_TYPE'] == 'bpmnEvent') {
$event = \BpmnEventPeer::retrieveByPK($gatewayFlow['FLO_ELEMENT_DEST']);
if ($event->getEvnType() == "END") {
$this->wp->addRoute($activity["ACT_UID"], -1, $routeType, $condition);
}
} else {
$this->wp->addRoute($activity["ACT_UID"], $gatewayFlow["FLO_ELEMENT_DEST"], $routeType, $condition, ($gatewayFlow["FLO_TYPE"] == "DEFAULT")? 1 : 0);
}
break;
default:
// for processmaker is only allowed flows between "gateway -> activity"
// any another flow is considered invalid
throw new \LogicException(sprintf(
"For ProcessMaker is only allowed flows between \"gateway -> activity\" " . PHP_EOL .
"Given: bpmnGateway -> " . $gatewayFlow['FLO_ELEMENT_DEST_TYPE']
));
}
}
break; break;
} }
} }

View File

@@ -1161,5 +1161,33 @@ class Workflow extends Handler
throw $e; throw $e;
} }
} }
public function deleteTaskGatewayToGateway($processUid)
{
try {
$task = new \Tasks();
$criteria = new \Criteria("workflow");
$criteria->addSelectColumn(\TaskPeer::TAS_UID);
$criteria->add(\TaskPeer::PRO_UID, $processUid, \Criteria::EQUAL);
$criteria->add(\TaskPeer::TAS_TYPE, "GATEWAYTOGATEWAY", \Criteria::EQUAL);
$rsCriteria = \TaskPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$taskUid = $row["TAS_UID"];
$task->deleteTask($taskUid);
}
} catch (\Exception $e) {
self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());
throw $e;
}
}
} }