Merge branch 'feature/HOR-3559' of https://bitbucket.org/colosa/processmaker into bugfix/HOR-3485-A
This commit is contained in:
@@ -8,7 +8,8 @@ require __DIR__ . '/../vendor/autoload.php';
|
||||
set_include_path(
|
||||
get_include_path() . PATH_SEPARATOR
|
||||
. __DIR__ . '/../thirdparty/' . PATH_SEPARATOR
|
||||
. __DIR__ . '/../thirdparty/pear/' . PATH_SEPARATOR
|
||||
. __DIR__ . '/../thirdparty/propel-generator/classes/' . PATH_SEPARATOR
|
||||
. __DIR__ . '/../thirdparty/pear/' . PATH_SEPARATOR
|
||||
. __DIR__ . '/../workflow/engine/' . PATH_SEPARATOR
|
||||
. __DIR__ . '/../rbac/engine/'
|
||||
);
|
||||
|
||||
@@ -1386,35 +1386,44 @@ class Cases
|
||||
*
|
||||
* @name searchOpenPreviousTasks,
|
||||
* @param string $taskUid
|
||||
* @param string $sAppUid
|
||||
* @param array $aPreviousTasks optional array that serves to trace the task routes and avoid infinite loops.
|
||||
* @return $aThreads
|
||||
* @param string $appUid
|
||||
* @param array $previousTasks, optional array that serves to trace the task routes and avoid infinite loops.
|
||||
* @return array, information about the threads in the case
|
||||
*/
|
||||
public function searchOpenPreviousTasks($taskUid, $sAppUid, $aPreviousTasks = array())
|
||||
public function searchOpenPreviousTasks($taskUid, $appUid, $previousTasks = array())
|
||||
{
|
||||
//in this array we are storing all open delegation rows.
|
||||
$aTaskReviewed = array();
|
||||
//In this array we are storing all open delegation rows.
|
||||
$threads = array();
|
||||
|
||||
//check if this task ( $taskUid ) has open delegations
|
||||
$delegations = $this->getReviewedTasks($taskUid, $sAppUid);
|
||||
//Check if this $taskUid has open delegations, this is a single review
|
||||
$threads = $this->getReviewedTasks($taskUid, $appUid);
|
||||
|
||||
if ($delegations !== false) {
|
||||
if (count($delegations['open']) > 0) {
|
||||
//there is an open delegation, so we need to return the delegation row
|
||||
return $delegations['open'];
|
||||
if ($threads !== false) {
|
||||
if (count($threads['open']) > 0) {
|
||||
//There is an open delegation, so we need to return the delegation row
|
||||
return $threads['open'];
|
||||
} else {
|
||||
if(count($delegations['paused']) > 0){
|
||||
if (count($threads['paused']) > 0) {
|
||||
//there is an paused delegation, so we need to return the delegation row
|
||||
return $delegations['paused'];
|
||||
}else{
|
||||
return array(); //returning empty array
|
||||
return $threads['paused'];
|
||||
}
|
||||
}
|
||||
}
|
||||
// if not we check previous tasks
|
||||
// until here this task has not appdelegations records.
|
||||
// get all previous task from $taskUid, and return open delegations rows, if there are
|
||||
//Search the open delegations in the previous task, this is a recursive review
|
||||
$threads = $this->getReviewedTasksRecursive($taskUid, $appUid, $previousTasks);
|
||||
return $threads;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function get the last open task
|
||||
* Usually is used when we have a SEC-JOIN and need to review if we need to route the case
|
||||
* @param string $taskUid
|
||||
* @param string $appUid
|
||||
* @param array $previousTasks
|
||||
* @return array $taskReviewed
|
||||
*/
|
||||
public function getReviewedTasksRecursive($taskUid, $appUid, $previousTasks) {
|
||||
$taskReviewed = array();
|
||||
$oCriteria = new Criteria('workflow');
|
||||
$oCriteria->add(RoutePeer::ROU_NEXT_TASK, $taskUid);
|
||||
$oDataset = RoutePeer::doSelectRs($oCriteria);
|
||||
@@ -1422,33 +1431,27 @@ class Cases
|
||||
|
||||
while ($oDataset->next()) {
|
||||
$aRow = $oDataset->getRow();
|
||||
|
||||
$delegations = $this->getReviewedTasks($aRow['TAS_UID'], $sAppUid);
|
||||
$delegations = $this->getReviewedTasks($aRow['TAS_UID'], $appUid);
|
||||
|
||||
if ($delegations !== false) {
|
||||
if (count($delegations['open']) > 0) {
|
||||
//there is an open delegation, so we need to return the delegation row
|
||||
$aTaskReviewed = array_merge($aTaskReviewed, $delegations['open']);
|
||||
} else {
|
||||
if ($aRow['ROU_TYPE'] == 'PARALLEL-BY-EVALUATION') {
|
||||
$aTaskReviewed = array();
|
||||
} else {
|
||||
//$aTaskReviewed = array_merge($aTaskReviewed, $delegations['closed']);
|
||||
}
|
||||
$taskReviewed = array_merge($taskReviewed, $delegations['open']);
|
||||
} elseif ($aRow['ROU_TYPE'] == 'PARALLEL-BY-EVALUATION') {
|
||||
$taskReviewed = array();
|
||||
}
|
||||
} else {
|
||||
if (!in_array($aRow['TAS_UID'], $aPreviousTasks)) {
|
||||
// storing the current task uid of the task currently checked
|
||||
$aPreviousTasks[] = $aRow['TAS_UID'];
|
||||
// passing the array of previous tasks in oprder to avoid an infinite loop that prevents
|
||||
$openPreviousTask = $this->searchOpenPreviousTasks($aRow['TAS_UID'], $sAppUid, $aPreviousTasks);
|
||||
if (count($aPreviousTasks) > 0) {
|
||||
$aTaskReviewed = array_merge($aTaskReviewed, $openPreviousTask);
|
||||
}
|
||||
} elseif (!in_array($aRow['TAS_UID'], $previousTasks)) {
|
||||
//Storing the current task uid of the task currently checked
|
||||
$previousTasks[] = $aRow['TAS_UID'];
|
||||
//Passing the array of previous tasks in order to avoid an infinite loop that prevents
|
||||
$openPreviousTask = $this->searchOpenPreviousTasks($aRow['TAS_UID'], $appUid, $previousTasks);
|
||||
if (count($previousTasks) > 0) {
|
||||
$taskReviewed = array_merge($taskReviewed, $openPreviousTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aTaskReviewed;
|
||||
|
||||
return $taskReviewed;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,40 +1,4 @@
|
||||
<?php
|
||||
/**
|
||||
* class.derivation.php
|
||||
*
|
||||
* @package workflow.engine.ProcessMaker
|
||||
*
|
||||
* ProcessMaker Open Source Edition
|
||||
* Copyright (C) 2004 - 2011 Colosa Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||
*
|
||||
*/
|
||||
require_once ("classes/model/Task.php");
|
||||
require_once ("classes/model/Process.php");
|
||||
require_once ("classes/model/Step.php");
|
||||
require_once ("classes/model/Application.php");
|
||||
require_once ('classes/model/Groupwf.php');
|
||||
require_once ("classes/model/GroupUser.php");
|
||||
require_once ("classes/model/AppDelegation.php");
|
||||
require_once ("classes/model/Route.php");
|
||||
require_once ('classes/model/SubApplication.php');
|
||||
require_once ('classes/model/SubProcess.php');
|
||||
require_once ("classes/model/Users.php");
|
||||
|
||||
/**
|
||||
* derivation - derivation class
|
||||
@@ -87,6 +51,7 @@ class Derivation
|
||||
* @param array $arrayTaskData Task data (derivation)
|
||||
*
|
||||
* @return array Return array
|
||||
* @throws Exception
|
||||
*/
|
||||
protected function prepareInformationTask(array $arrayTaskData)
|
||||
{
|
||||
@@ -161,7 +126,8 @@ class Derivation
|
||||
* @param array $arrayData Data
|
||||
* @param string $taskUid Unique id of Task
|
||||
*
|
||||
* @return array Return array
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function prepareInformation(array $arrayData, $taskUid = "")
|
||||
{
|
||||
|
||||
@@ -80,36 +80,42 @@ class Installer extends Controller
|
||||
G::RenderPage( 'publish', 'extJs' );
|
||||
}
|
||||
|
||||
/**
|
||||
* This function can be create a new workspace
|
||||
* The user need permission PM_SETUP_ADVANCE for this action
|
||||
* @return void
|
||||
*/
|
||||
public function newSite ()
|
||||
{
|
||||
$textStep1 = G::LoadTranslation('ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP4_1');
|
||||
$textStep2 = G::LoadTranslation('ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP5');
|
||||
if (!$this->pmIsInstalled()) {
|
||||
$textStep1 = G::LoadTranslation('ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP4_1');
|
||||
$textStep2 = G::LoadTranslation('ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP5');
|
||||
|
||||
$this->includeExtJS( 'installer/CardLayout', false );
|
||||
$this->includeExtJS( 'installer/Wizard', false );
|
||||
$this->includeExtJS( 'installer/Header', false );
|
||||
$this->includeExtJS( 'installer/Card', false );
|
||||
$this->includeExtJS( 'installer/newSite', false );
|
||||
$this->includeExtJS('installer/CardLayout', false);
|
||||
$this->includeExtJS('installer/Wizard', false);
|
||||
$this->includeExtJS('installer/Header', false);
|
||||
$this->includeExtJS('installer/Card', false);
|
||||
$this->includeExtJS('installer/newSite', false);
|
||||
$this->setJSVar('textStep1', $textStep1);
|
||||
$this->setJSVar('textStep2', $textStep2);
|
||||
$this->setJSVar('DB_ADAPTER', DB_ADAPTER);
|
||||
$aux = explode(':', DB_HOST);
|
||||
$this->setJSVar('DB_HOST', $aux[0]);
|
||||
$this->setJSVar('DB_PORT', isset( $aux[1] ) ? $aux[1] : (DB_ADAPTER == 'mssql' ? '1433' : '3306'));
|
||||
$this->setJSVar('DB_NAME', 'workflow');
|
||||
$this->setJSVar('DB_USER', '');
|
||||
$this->setJSVar('DB_PASS', '');
|
||||
$this->setJSVar('pathConfig', PATH_CORE . 'config' . PATH_SEP);
|
||||
$this->setJSVar('pathLanguages', PATH_LANGUAGECONT);
|
||||
$this->setJSVar('pathPlugins', PATH_PLUGINS);
|
||||
$this->setJSVar('pathXmlforms', PATH_XMLFORM);
|
||||
$this->setJSVar('pathShared', PATH_DATA);
|
||||
$this->setView('installer/newSite');
|
||||
|
||||
$this->setJSVar( 'textStep1', $textStep1 );
|
||||
$this->setJSVar( 'textStep2', $textStep2 );
|
||||
|
||||
$this->setJSVar( 'DB_ADAPTER', DB_ADAPTER );
|
||||
$aux = explode( ':', DB_HOST );
|
||||
$this->setJSVar( 'DB_HOST', $aux[0] );
|
||||
$this->setJSVar( 'DB_PORT', isset( $aux[1] ) ? $aux[1] : (DB_ADAPTER == 'mssql' ? '1433' : '3306') );
|
||||
$this->setJSVar( 'DB_NAME', 'workflow' );
|
||||
$this->setJSVar( 'DB_USER', '' );
|
||||
$this->setJSVar( 'DB_PASS', '' );
|
||||
$this->setJSVar( 'pathConfig', PATH_CORE . 'config' . PATH_SEP );
|
||||
$this->setJSVar( 'pathLanguages', PATH_LANGUAGECONT );
|
||||
$this->setJSVar( 'pathPlugins', PATH_PLUGINS );
|
||||
$this->setJSVar( 'pathXmlforms', PATH_XMLFORM );
|
||||
$this->setJSVar( 'pathShared', PATH_DATA );
|
||||
|
||||
$this->setView( 'installer/newSite' );
|
||||
|
||||
G::RenderPage( 'publish', 'extJs' );
|
||||
G::RenderPage('publish', 'extJs');
|
||||
} else {
|
||||
$this->displayError();
|
||||
}
|
||||
}
|
||||
|
||||
public function getSystemInfo ()
|
||||
@@ -414,22 +420,49 @@ class Installer extends Controller
|
||||
/**
|
||||
* function to create a workspace
|
||||
* in fact this function is calling appropiate functions for mysql and mssql
|
||||
* need permission PM_SETUP_ADVANCE for this action
|
||||
* @return void
|
||||
*/
|
||||
public function createWorkspace ()
|
||||
{
|
||||
$pathSharedPartner = trim( $_REQUEST['pathShared'] );
|
||||
if (file_exists(trim($pathSharedPartner,PATH_SEP). PATH_SEP .'partner.info')) {
|
||||
$this->systemName = $this->getSystemName($pathSharedPartner);
|
||||
$_REQUEST["PARTNER_FLAG"] = true;
|
||||
}
|
||||
$this->setResponseType( 'json' );
|
||||
if ($_REQUEST['db_engine'] == 'mysql') {
|
||||
$info = $this->createMySQLWorkspace();
|
||||
} else {
|
||||
$info = $this->createMSSQLWorkspace();
|
||||
}
|
||||
if (!$this->pmIsInstalled()) {
|
||||
$pathSharedPartner = trim($_REQUEST['pathShared']);
|
||||
if (file_exists(trim($pathSharedPartner, PATH_SEP) . PATH_SEP . 'partner.info')) {
|
||||
$this->systemName = $this->getSystemName($pathSharedPartner);
|
||||
$_REQUEST["PARTNER_FLAG"] = true;
|
||||
}
|
||||
$this->setResponseType('json');
|
||||
if ($_REQUEST['db_engine'] == 'mysql') {
|
||||
$info = $this->createMySQLWorkspace();
|
||||
} else {
|
||||
$info = $this->createMSSQLWorkspace();
|
||||
}
|
||||
|
||||
return $info;
|
||||
return $info;
|
||||
} else {
|
||||
$this->displayError();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* We check if processMaker is not installed
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function pmIsInstalled(){
|
||||
return file_exists(FILE_PATHS_INSTALLED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display an error when processMaker is already installed
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function displayError(){
|
||||
$this->setJSVar('messageError', G::LoadTranslation('ID_PROCESSMAKER_ALREADY_INSTALLED'));
|
||||
$this->includeExtJS('installer/stopInstall');
|
||||
$this->setView('installer/mainStopInstall');
|
||||
G::RenderPage('publish', 'extJs');
|
||||
}
|
||||
|
||||
public function forceTogenerateTranslationsFiles ($url)
|
||||
|
||||
@@ -1,26 +1,7 @@
|
||||
<?php
|
||||
/**
|
||||
* installServer.php
|
||||
*
|
||||
* ProcessMaker Open Source Edition
|
||||
* Copyright (C) 2004 - 2008 Colosa Inc.23
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||
*/
|
||||
|
||||
global $RBAC;
|
||||
$RBAC->allows(basename(__FILE__), basename(__FILE__));
|
||||
|
||||
if (isset( $_POST['form']['NW_TITLE'] )) {
|
||||
$action = (isset( $_POST['form']['ACTION'] )) ? trim( $_POST['form']['ACTION'] ) : 'test';
|
||||
|
||||
Reference in New Issue
Block a user