Merge branch 'master' of bitbucket.org:colosa/processmaker
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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=<filter>&start=<start>&limit=<limit>"
|
||||
|
||||
@@ -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/<project>/activity/<activity>/available-assignee?filter=<filter>&start=<start>&limit=<limit>"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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 )) {
|
||||
|
||||
@@ -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 <br>";
|
||||
//G::pr($options);
|
||||
//echo "[NTLMStream::stream_open] $path , mode=$mode <br>";
|
||||
//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] <br>";
|
||||
//echo "[NTLMStream::stream_close] <br>";
|
||||
curl_close( $this->ch );
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ class soapNtlm
|
||||
*/
|
||||
public function stream_read ($count)
|
||||
{
|
||||
//echo "[NTLMStream::stream_read] $count <br>";
|
||||
//echo "[NTLMStream::stream_read] $count <br>";
|
||||
if (strlen( $this->buffer ) == 0) {
|
||||
return false;
|
||||
}
|
||||
@@ -108,7 +108,7 @@ class soapNtlm
|
||||
*/
|
||||
public function stream_write ($data)
|
||||
{
|
||||
//echo "[NTLMStream::stream_write] <br>";
|
||||
//echo "[NTLMStream::stream_write] <br>";
|
||||
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 <br>";
|
||||
//echo "true <br>";
|
||||
return true;
|
||||
}
|
||||
//echo "false <br>";
|
||||
//echo "false <br>";
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ class soapNtlm
|
||||
*/
|
||||
public function stream_tell ()
|
||||
{
|
||||
//echo "[NTLMStream::stream_tell] <br>";
|
||||
//echo "[NTLMStream::stream_tell] <br>";
|
||||
return $this->pos;
|
||||
}
|
||||
|
||||
@@ -145,7 +145,7 @@ class soapNtlm
|
||||
*/
|
||||
public function stream_flush ()
|
||||
{
|
||||
//echo "[NTLMStream::stream_flush] <br>";
|
||||
//echo "[NTLMStream::stream_flush] <br>";
|
||||
$this->buffer = null;
|
||||
$this->pos = null;
|
||||
}
|
||||
@@ -157,7 +157,7 @@ class soapNtlm
|
||||
*/
|
||||
public function stream_stat ()
|
||||
{
|
||||
//echo "[NTLMStream::stream_stat] <br>";
|
||||
//echo "[NTLMStream::stream_stat] <br>";
|
||||
$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 <br>";
|
||||
//G::pr($this->options);
|
||||
//echo "[NTLMStream::url_stat] -> $path <br>";
|
||||
$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 <br>";
|
||||
//echo "[NTLMStream::createBuffer] create buffer from : $path <br>";
|
||||
$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<br>";
|
||||
//echo "[NTLMStream::createBuffer] buffer size : " . strlen($this->buffer) . "bytes<br>";
|
||||
$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'] != '') {
|
||||
|
||||
@@ -1141,7 +1141,7 @@ class System
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function solrEnv ($sysName = '')
|
||||
public static function solrEnv ($sysName = '')
|
||||
{
|
||||
if (empty( $sysName )) {
|
||||
$conf = System::getSystemConfiguration();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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++;
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Exception;
|
||||
|
||||
use ProcessMaker\Project;
|
||||
|
||||
class ProjectNotFound extends \RuntimeException
|
||||
{
|
||||
const EXCEPTION_CODE = 20;
|
||||
|
||||
public function __construct(Project\Handler $obj, $uid, $message = "", \Exception $previous = null) {
|
||||
$message = empty($message) ? sprintf("Project \"%s\" with UID: %s, does not exist.", get_class($obj), $uid) : $message;
|
||||
|
||||
parent::__construct($message, self::EXCEPTION_CODE, $previous);
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Project\Adapter;
|
||||
|
||||
use ProcessMaker\Project;
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Project\Adapter;
|
||||
|
||||
use ProcessMaker\Project\Adapter\BpmnHandler;
|
||||
use ProcessMaker\Util\Hash;
|
||||
|
||||
|
||||
class BpmnWorkflowProject extends BpmnHandler
|
||||
{
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
{
|
||||
@@ -97,6 +88,11 @@ class BpmnProject //extends ProjectHandler
|
||||
$this->prjUid = $this->project->getPrjUid();
|
||||
}
|
||||
|
||||
public function update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function remove()
|
||||
{
|
||||
/*
|
||||
@@ -109,17 +105,44 @@ class BpmnProject //extends ProjectHandler
|
||||
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();
|
||||
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)
|
||||
{
|
||||
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)) {
|
||||
@@ -136,6 +159,20 @@ class BpmnProject //extends ProjectHandler
|
||||
$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)) {
|
||||
@@ -153,6 +190,20 @@ class BpmnProject //extends ProjectHandler
|
||||
$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)) {
|
||||
@@ -182,9 +233,21 @@ class BpmnProject //extends ProjectHandler
|
||||
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)
|
||||
@@ -338,50 +401,4 @@ class BpmnProject //extends ProjectHandler
|
||||
{
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Project;
|
||||
|
||||
interface ProjectHandlerInterface
|
||||
{
|
||||
public function save();
|
||||
public function update();
|
||||
public function delete();
|
||||
public static function load();
|
||||
}
|
||||
539
workflow/engine/src/ProcessMaker/Project/Workflow.php
Normal file
539
workflow/engine/src/ProcessMaker/Project/Workflow.php
Normal file
@@ -0,0 +1,539 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Project;
|
||||
|
||||
use \Criteria;
|
||||
use \ResultSet;
|
||||
|
||||
use \Process;
|
||||
use \Tasks;
|
||||
use \Task;
|
||||
use \Route;
|
||||
use \RoutePeer;
|
||||
|
||||
use ProcessMaker\Util\Hash;
|
||||
use ProcessMaker\Exception;
|
||||
|
||||
class Workflow extends Handler
|
||||
{
|
||||
protected $process;
|
||||
protected $proUid;
|
||||
|
||||
protected $tasks = array();
|
||||
protected $routes = array();
|
||||
|
||||
|
||||
public function __construct($data = null)
|
||||
{
|
||||
if (! is_null($data)) {
|
||||
$this->create($data);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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 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->proUid)) {
|
||||
throw new \RuntimeException("Error: There is not an initialized project.");
|
||||
}
|
||||
|
||||
return $this->proUid;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,312 +0,0 @@
|
||||
<?php
|
||||
namespace ProcessMaker\Project;
|
||||
|
||||
use \Criteria;
|
||||
use \ResultSet;
|
||||
|
||||
use \Process;
|
||||
use \Tasks;
|
||||
use \Task;
|
||||
use \Route;
|
||||
use \RoutePeer;
|
||||
|
||||
|
||||
use ProcessMaker\Project\ProjectHandler;
|
||||
use ProcessMaker\Util\Hash;
|
||||
|
||||
class WorkflowProject //extends ProjectHandler
|
||||
{
|
||||
protected $process;
|
||||
protected $proUid;
|
||||
|
||||
protected $properties = array();
|
||||
|
||||
protected $tasks = array();
|
||||
protected $routes = array();
|
||||
|
||||
|
||||
public function __construct($data = null)
|
||||
{
|
||||
if (! is_null($data)) {
|
||||
$this->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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -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,14 @@ class Project extends Api
|
||||
public function index()
|
||||
{
|
||||
try {
|
||||
$projects = BpmnModel::loadProjects();
|
||||
$start = null;
|
||||
$limit = null;
|
||||
$filter = "";
|
||||
|
||||
$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());
|
||||
}
|
||||
@@ -30,9 +34,9 @@ class Project extends Api
|
||||
public function get($prjUid)
|
||||
{
|
||||
try {
|
||||
$project = BpmnModel::loadProject($prjUid);
|
||||
$projects = new \StdClass(); //TODO
|
||||
|
||||
return $project;
|
||||
return $projects;
|
||||
} catch (\Exception $e) {
|
||||
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
|
||||
}
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
namespace Tests\ProcessMaker\Project\Adapter;
|
||||
|
||||
use \ProcessMaker\Project;
|
||||
|
||||
if (! class_exists("Propel")) {
|
||||
include_once __DIR__ . "/../../../bootstrap.php";
|
||||
}
|
||||
|
||||
|
||||
class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
function testNew()
|
||||
{
|
||||
$data = array(
|
||||
"PRJ_NAME" => "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"]);
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,27 @@
|
||||
<?php
|
||||
namespace Tests\ProcessMaker\Project;
|
||||
|
||||
use \ProcessMaker\Project;
|
||||
|
||||
if (! class_exists("Propel")) {
|
||||
include_once __DIR__ . "/../bootstrap.php";
|
||||
include_once __DIR__ . "/../../bootstrap.php";
|
||||
}
|
||||
|
||||
use ProcessMaker\Project\BpmnProject;
|
||||
|
||||
|
||||
class BpmnProjectTest extends PHPUnit_Framework_TestCase
|
||||
class BpmnTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
protected static $prjUid;
|
||||
protected static $prjUids = array();
|
||||
|
||||
public static function tearDownAfterClass()
|
||||
{
|
||||
$bp = BpmnProject::load(self::$prjUid);
|
||||
$bp->remove();
|
||||
//return;
|
||||
|
||||
//cleaning DB
|
||||
foreach (self::$prjUids as $prjUid) {
|
||||
$bp = Project\Bpmn::load($prjUid);
|
||||
$bp->remove();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function testCreate()
|
||||
@@ -24,10 +32,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 +46,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 +66,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 +89,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 +120,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 +154,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)
|
||||
@@ -154,7 +162,7 @@ class BpmnProjectTest 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]);
|
||||
}
|
||||
@@ -166,7 +174,32 @@ class BpmnProjectTest extends PHPUnit_Framework_TestCase
|
||||
/**
|
||||
* @depends testCreate
|
||||
* @depends testAddActivityWithUid
|
||||
* @param $bp \ProcessMaker\Project\BpmnProject
|
||||
* @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
|
||||
* @param $bp \ProcessMaker\Project\Bpmn
|
||||
* @param $data
|
||||
*/
|
||||
public function testRemoveActivity($bp, $data)
|
||||
@@ -180,8 +213,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 +244,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 +262,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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
<?php
|
||||
namespace Tests\ProcessMaker\Project;
|
||||
|
||||
use \ProcessMaker\Project;
|
||||
|
||||
if (! class_exists("Propel")) {
|
||||
include_once __DIR__ . "/../bootstrap.php";
|
||||
include_once __DIR__ . "/../../bootstrap.php";
|
||||
}
|
||||
|
||||
use \ProcessMaker\Project\WorkflowProject;
|
||||
|
||||
|
||||
class WorkflowProjectTest extends PHPUnit_Framework_TestCase
|
||||
class WorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
protected $workflowProject;
|
||||
protected static $proUids = array();
|
||||
|
||||
protected function setUp()
|
||||
public static function tearDownAfterClass()
|
||||
{
|
||||
$this->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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user