2010-12-02 23:34:41 +00:00
< ? php
/**
* class . case . php
2011-02-01 12:49:40 +00:00
* @ package workflow . engine . classes
2010-12-02 23:34:41 +00:00
*
* 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 .
2012-07-13 06:27:36 -04:00
*
2010-12-02 23:34:41 +00:00
*/
2012-09-11 16:41:05 -04:00
G :: LoadClass ( " pmScript " );
2010-12-02 23:34:41 +00:00
/**
* A Cases object where you can do start , load , update , refresh about cases
* This object is applied to Task
2011-02-03 11:13:21 +00:00
* @ package workflow . engine . classes
2010-12-02 23:34:41 +00:00
*/
2012-07-13 06:27:36 -04:00
class Cases
{
2013-03-05 14:11:12 -04:00
2012-07-13 06:27:36 -04:00
private $appSolr = null ;
2013-11-15 12:03:58 -04:00
public $dir = 'ASC' ;
public $sort = 'APP_MSG_DATE' ;
2016-07-19 14:26:51 -04:00
public $arrayTriggerExecutionTime = [];
2012-07-13 06:27:36 -04:00
public function __construct ()
{
//get Solr initialization variables
if (( $solrConf = System :: solrEnv ()) !== false ) {
2012-07-16 14:19:52 -04:00
G :: LoadClass ( 'AppSolr' );
$this -> appSolr = new AppSolr ( $solrConf [ 'solr_enabled' ], $solrConf [ 'solr_host' ], $solrConf [ 'solr_instance' ]);
}
2012-05-15 17:41:12 -04:00
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* Ask if an user can start a case
* @ param string $sUIDUser
* @ return boolean
2013-03-05 14:11:12 -04:00
*/
2012-09-05 13:01:19 -04:00
public function canStartCase ( $sUIDUser = '' , $processUid = '' )
2012-07-16 14:19:52 -04:00
{
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'COUNT(*)' );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
2012-10-11 14:26:03 -04:00
$c -> add ( ProcessPeer :: PRO_SUBPROCESS , '0' );
2012-07-16 14:19:52 -04:00
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $sUIDUser );
2016-04-19 15:52:05 -04:00
$c -> add ( TaskUserPeer :: TU_TYPE , 1 );
2012-09-05 13:01:19 -04:00
if ( $processUid != '' ) {
2013-03-05 14:11:12 -04:00
$c -> add ( TaskPeer :: PRO_UID , $processUid );
2012-09-05 13:01:19 -04:00
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> next ();
$row = $rs -> getRow ();
$count = $row [ 0 ];
if ( $count > 0 ) {
2012-07-16 19:00:47 -04:00
return true ;
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
//check groups
G :: LoadClass ( 'groups' );
$group = new Groups ();
$aGroups = $group -> getActiveGroupsForAnUser ( $sUIDUser );
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'COUNT(*)' );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
2012-10-11 14:26:03 -04:00
$c -> add ( ProcessPeer :: PRO_SUBPROCESS , '0' );
2012-07-16 14:19:52 -04:00
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $aGroups , Criteria :: IN );
2016-04-19 15:52:05 -04:00
$c -> add ( TaskUserPeer :: TU_TYPE , 1 );
2012-09-05 13:01:19 -04:00
if ( $processUid != '' ) {
2013-03-05 14:11:12 -04:00
$c -> add ( TaskPeer :: PRO_UID , $processUid );
2012-09-05 13:01:19 -04:00
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> next ();
$row = $rs -> getRow ();
$count = $row [ 0 ];
return ( $count > 0 );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* get user starting tasks
* @ param string $sUIDUser
* @ return $rows
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getStartCases ( $sUIDUser = '' )
{
$rows [] = array ( 'uid' => 'char' , 'value' => 'char' );
$tasks = array ();
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $sUIDUser );
2016-04-19 15:52:05 -04:00
$c -> add ( TaskUserPeer :: TU_TYPE , 1 );
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
//check groups
G :: LoadClass ( 'groups' );
$group = new Groups ();
$aGroups = $group -> getActiveGroupsForAnUser ( $sUIDUser );
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $aGroups , Criteria :: IN );
2016-04-19 15:52:05 -04:00
$c -> add ( TaskUserPeer :: TU_TYPE , 1 );
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$c = new Criteria ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
2016-06-28 10:59:43 -04:00
$c -> addSelectColumn ( TaskPeer :: TAS_TITLE );
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
2016-06-20 16:50:57 -04:00
$c -> addSelectColumn ( ProcessPeer :: PRO_TITLE );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
2012-07-16 14:19:52 -04:00
$c -> add ( TaskPeer :: TAS_UID , $tasks , Criteria :: IN );
2016-07-18 14:13:01 -04:00
$c -> addAscendingOrderByColumn ( ProcessPeer :: PRO_TITLE );
2016-06-28 10:59:43 -04:00
$c -> addAscendingOrderByColumn ( TaskPeer :: TAS_TITLE );
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
while ( $row = $rs -> getRow ()) {
2012-07-16 19:00:47 -04:00
$rows [] = array (
'uid' => $row [ 'TAS_UID' ],
'value' => $row [ 'PRO_TITLE' ] . ' (' . $row [ 'TAS_TITLE' ] . ')' ,
'pro_uid' => $row [ 'PRO_UID' ]
);
2012-07-16 14:19:52 -04:00
$rs -> next ();
$row = $rs -> getRow ();
}
return $rows ;
2010-12-02 23:34:41 +00:00
}
2012-02-10 18:35:05 -04:00
2012-07-16 14:19:52 -04:00
/*
* get user starting tasks , but per type ( dropdown , radio and category type )
* @ param string $sUIDUser
* @ return $rows
2013-03-05 14:11:12 -04:00
*/
2012-07-16 19:00:47 -04:00
public function getStartCasesPerType ( $sUIDUser = '' , $typeView = null )
2012-07-16 14:19:52 -04:00
{
$rows [] = array ( 'uid' => 'char' , 'value' => 'char' );
$tasks = array ();
2010-12-02 23:34:41 +00:00
2015-06-30 12:04:53 -04:00
$arrayTaskTypeToExclude = array ( " WEBENTRYEVENT " , " END-MESSAGE-EVENT " , " START-MESSAGE-EVENT " , " INTERMEDIATE-THROW-MESSAGE-EVENT " , " INTERMEDIATE-CATCH-MESSAGE-EVENT " , " SCRIPT-TASK " , " START-TIMER-EVENT " , " INTERMEDIATE-CATCH-TIMER-EVENT " );
2015-02-20 17:12:49 -04:00
2012-07-16 14:19:52 -04:00
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
2016-03-15 13:13:44 -04:00
$c -> add ( ProcessPeer :: PRO_SUBPROCESS , '0' );
2015-02-20 17:12:49 -04:00
$c -> add ( TaskPeer :: TAS_TYPE , $arrayTaskTypeToExclude , Criteria :: NOT_IN );
2012-07-16 14:19:52 -04:00
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $sUIDUser );
2016-04-19 15:52:05 -04:00
$c -> add ( TaskUserPeer :: TU_TYPE , 1 );
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2010-12-02 23:34:41 +00:00
$rs -> next ();
$row = $rs -> getRow ();
2012-07-16 14:19:52 -04:00
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
//check groups
G :: LoadClass ( 'groups' );
$group = new Groups ();
$aGroups = $group -> getActiveGroupsForAnUser ( $sUIDUser );
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
2016-11-09 14:40:56 -05:00
$c -> add ( ProcessPeer :: PRO_SUBPROCESS , '0' );
2015-02-20 17:12:49 -04:00
$c -> add ( TaskPeer :: TAS_TYPE , $arrayTaskTypeToExclude , Criteria :: NOT_IN );
2012-07-16 14:19:52 -04:00
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $aGroups , Criteria :: IN );
2016-04-19 15:52:05 -04:00
$c -> add ( TaskUserPeer :: TU_TYPE , 1 );
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2010-12-02 23:34:41 +00:00
$rs -> next ();
$row = $rs -> getRow ();
2012-07-16 14:19:52 -04:00
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$c = new Criteria ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
2016-06-28 10:59:43 -04:00
$c -> addSelectColumn ( TaskPeer :: TAS_TITLE );
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
2016-06-20 16:50:57 -04:00
$c -> addSelectColumn ( ProcessPeer :: PRO_TITLE );
2012-07-16 14:19:52 -04:00
if ( $typeView == 'category' ) {
$c -> addAsColumn ( 'PRO_CATEGORY' , 'PCS.PRO_CATEGORY' );
$c -> addAsColumn ( 'CATEGORY_NAME' , 'PCSCAT.CATEGORY_NAME' );
$c -> addAlias ( 'PCS' , 'PROCESS' );
$c -> addAlias ( 'PCSCAT' , 'PROCESS_CATEGORY' );
$aConditions = array ();
$aConditions [] = array ( TaskPeer :: PRO_UID , 'PCS.PRO_UID' );
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$aConditions = array ();
$aConditions [] = array ( 'PCS.PRO_CATEGORY' , 'PCSCAT.CATEGORY_UID' );
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
2010-12-02 23:34:41 +00:00
}
2016-06-20 16:50:57 -04:00
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
2012-07-16 14:19:52 -04:00
$c -> add ( TaskPeer :: TAS_UID , $tasks , Criteria :: IN );
2016-11-09 14:40:56 -05:00
$c -> add ( ProcessPeer :: PRO_SUBPROCESS , '0' );
2012-07-16 14:19:52 -04:00
2016-07-18 14:13:01 -04:00
$c -> addAscendingOrderByColumn ( ProcessPeer :: PRO_TITLE );
$c -> addAscendingOrderByColumn ( TaskPeer :: TAS_TITLE );
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
2015-04-01 16:57:11 -04:00
$countTaskLabel = 1 ;
2012-07-16 14:19:52 -04:00
while ( $row = $rs -> getRow ()) {
2015-04-01 16:57:11 -04:00
if ( $row [ 'TAS_TITLE' ] != '' ){
$taskTitleLabel = $row [ 'TAS_TITLE' ];
} else {
$taskTitleLabel = G :: LoadTranslation ( 'ID_UNTITLED_TASK' ) . ' ' . $countTaskLabel ;
$countTaskLabel ++ ;
}
2012-07-16 14:19:52 -04:00
if ( $typeView == 'category' ) {
$taskTitle = TaskPeer :: retrieveByPK ( $row [ 'TAS_UID' ]);
2013-03-05 14:11:12 -04:00
$row [ 'TAS_TITLE' ] = $taskTitle -> getTasTitle ();
2012-07-16 19:00:47 -04:00
$row [ 'CATEGORY_NAME' ] = ( $row [ 'CATEGORY_NAME' ] == '' ) ?
2013-03-05 14:11:12 -04:00
G :: LoadTranslation ( 'ID_PROCESS_NOCATEGORY' ) : $row [ 'CATEGORY_NAME' ];
2012-07-16 19:00:47 -04:00
$rows [] = array (
'uid' => $row [ 'TAS_UID' ],
2015-04-01 16:57:11 -04:00
'value' => $row [ 'PRO_TITLE' ] . ' (' . $taskTitleLabel . ')' ,
2012-07-16 19:00:47 -04:00
'pro_uid' => $row [ 'PRO_UID' ],
'cat' => $row [ 'PRO_CATEGORY' ],
'catname' => $row [ 'CATEGORY_NAME' ]
);
2012-07-16 14:19:52 -04:00
} else {
2012-07-16 19:00:47 -04:00
$rows [] = array (
'uid' => $row [ 'TAS_UID' ],
2015-04-01 16:57:11 -04:00
'value' => $row [ 'PRO_TITLE' ] . ' (' . $taskTitleLabel . ')' ,
2012-07-16 19:00:47 -04:00
'pro_uid' => $row [ 'PRO_UID' ]
);
2012-07-16 14:19:52 -04:00
}
$rs -> next ();
$row = $rs -> getRow ();
2010-12-02 23:34:41 +00:00
}
2016-03-08 16:27:42 -04:00
$rowsToReturn = $rows ;
if ( $typeView === 'category' ) {
$rowsToReturn = $this -> orderStartCasesByCategoryAndName ( $rows );
}
return $rowsToReturn ;
2012-07-16 14:19:52 -04:00
}
/*
* get user ' s SelfService tasks
* @ param string $sUIDUser
* @ return $rows
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getSelfServiceTasks ( $sUIDUser = '' )
{
$rows [] = array ( 'uid' => '' , 'value' => '' );
$tasks = array ();
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_ASSIGN_TYPE , 'SELF_SERVICE' );
$c -> add ( TaskUserPeer :: USR_UID , $sUIDUser );
2016-04-19 15:52:05 -04:00
$c -> add ( TaskUserPeer :: TU_TYPE , 1 );
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
//check groups
G :: LoadClass ( 'groups' );
$group = new Groups ();
$aGroups = $group -> getActiveGroupsForAnUser ( $sUIDUser );
2010-12-02 23:34:41 +00:00
$c = new Criteria ();
$c -> clearSelectColumns ();
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_ASSIGN_TYPE , 'SELF_SERVICE' );
$c -> add ( TaskUserPeer :: USR_UID , $aGroups , Criteria :: IN );
2016-04-19 15:52:05 -04:00
$c -> add ( TaskUserPeer :: TU_TYPE , 1 );
2010-12-02 23:34:41 +00:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
2012-07-16 14:19:52 -04:00
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
2010-12-02 23:34:41 +00:00
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
$c = new Criteria ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
2016-06-28 10:59:43 -04:00
$c -> addSelectColumn ( TaskPeer :: TAS_TITLE );
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
2016-06-20 16:50:57 -04:00
$c -> addSelectColumn ( ProcessPeer :: PRO_TITLE );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
2012-07-16 14:19:52 -04:00
$c -> add ( TaskPeer :: TAS_UID , $tasks , Criteria :: IN );
2016-07-18 14:13:01 -04:00
$c -> addAscendingOrderByColumn ( ProcessPeer :: PRO_TITLE );
$c -> addAscendingOrderByColumn ( TaskPeer :: TAS_TITLE );
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
while ( $row = $rs -> getRow ()) {
2012-07-16 19:00:47 -04:00
$rows [] = array (
'uid' => $row [ 'TAS_UID' ],
'value' => $row [ 'PRO_TITLE' ] . ' (' . $row [ 'TAS_TITLE' ] . ')' ,
'pro_uid' => $row [ 'PRO_UID' ]
);
2012-07-16 14:19:52 -04:00
$rs -> next ();
$row = $rs -> getRow ();
}
return $rows ;
2010-12-02 23:34:41 +00:00
}
2012-10-05 11:16:37 -04:00
public function isSelfService ( $USR_UID , $TAS_UID , $APP_UID = '' )
2012-07-16 14:19:52 -04:00
{
$tasks = $this -> getSelfServiceTasks ( $USR_UID );
2012-05-15 17:41:12 -04:00
2012-07-16 14:19:52 -04:00
foreach ( $tasks as $key => $val ) {
if ( $TAS_UID == $val [ 'uid' ]) {
return true ;
}
}
2012-10-05 11:16:37 -04:00
if ( $APP_UID != '' ) {
2015-09-26 12:42:53 -04:00
$task = new Task ();
$arrayTaskData = $task -> load ( $TAS_UID );
2015-09-01 14:57:25 -04:00
2015-09-26 12:42:53 -04:00
$taskGroupVariable = trim ( $arrayTaskData [ " TAS_GROUP_VARIABLE " ], " @# " );
2015-09-01 14:57:25 -04:00
2015-09-26 12:42:53 -04:00
$caseData = $this -> loadCase ( $APP_UID );
if ( isset ( $caseData [ " APP_DATA " ][ $taskGroupVariable ])) {
$dataVariable = $caseData [ " APP_DATA " ][ $taskGroupVariable ];
2015-09-01 14:57:25 -04:00
if ( is_array ( $dataVariable )) {
//UIDs of Users
if ( ! empty ( $dataVariable ) && in_array ( $USR_UID , $dataVariable )) {
return true ;
}
} else {
//UID of Group
$dataVariable = trim ( $dataVariable );
$group = new Groups ();
if ( ! empty ( $dataVariable ) && in_array ( $dataVariable , $group -> getActiveGroupsForAnUser ( $USR_UID ))) {
2013-03-05 14:11:12 -04:00
return true ;
2015-09-26 12:42:53 -04:00
} else {
//UID of User
if ( ! empty ( $dataVariable ) && $dataVariable == $USR_UID ) {
return true ;
}
2013-03-05 14:11:12 -04:00
}
2012-10-05 11:16:37 -04:00
}
}
}
2012-07-16 14:19:52 -04:00
return false ;
2010-12-02 23:34:41 +00:00
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
/*
* Load an user existing case , this info is used in CaseResume
* @ param string $sAppUid
* @ param integer $iDelIndex > 0 //get the Delegation fields
* @ return Fields
2013-03-05 14:11:12 -04:00
*/
2014-04-23 16:28:02 -04:00
public function loadCase ( $sAppUid , $iDelIndex = 0 , $jump = '' )
2012-07-16 14:19:52 -04:00
{
try {
$oApp = new Application ;
$aFields = $oApp -> Load ( $sAppUid );
2014-06-26 15:25:06 -04:00
$appData = self :: unserializeData ( $aFields [ 'APP_DATA' ]);
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
$aFields [ 'APP_DATA' ] = G :: array_merges ( G :: getSystemConstants (), $appData );
2014-06-26 15:25:06 -04:00
2012-07-16 14:19:52 -04:00
switch ( $oApp -> getAppStatus ()) {
case 'COMPLETED' :
$aFields [ 'STATUS' ] = G :: LoadTranslation ( 'ID_COMPLETED' );
break ;
case 'CANCELLED' :
$aFields [ 'STATUS' ] = G :: LoadTranslation ( 'ID_CANCELLED' );
break ;
case 'PAUSED' :
$aFields [ 'STATUS' ] = G :: LoadTranslation ( 'ID_PAUSED' );
break ;
case 'DRAFT' :
$aFields [ 'STATUS' ] = G :: LoadTranslation ( 'ID_DRAFT' );
break ;
case 'TO_DO' :
$aFields [ 'STATUS' ] = G :: LoadTranslation ( 'ID_TO_DO' );
2012-07-16 19:00:47 -04:00
break ;
2012-07-16 14:19:52 -04:00
}
$oUser = new Users ();
try {
$oUser -> load ( $oApp -> getAppInitUser ());
$uFields = $oUser -> toArray ( BasePeer :: TYPE_FIELDNAME );
$aFields [ 'TITLE' ] = $aFields [ 'APP_TITLE' ];
2012-08-09 17:06:24 -04:00
$aFields [ 'DESCRIPTION' ] = $aFields [ 'APP_DESCRIPTION' ];
2012-07-16 14:19:52 -04:00
$aFields [ 'CREATOR' ] = $oUser -> getUsrFirstname () . ' ' . $oUser -> getUsrLastname ();
$aFields [ 'CREATE_DATE' ] = $oApp -> getAppCreateDate ();
$aFields [ 'UPDATE_DATE' ] = $oApp -> getAppUpdateDate ();
} catch ( Exception $oError ) {
$aFields [ 'TITLE' ] = $oApp -> getAppTitle ();
2012-08-09 17:06:24 -04:00
$aFields [ 'DESCRIPTION' ] = '' ;
2012-07-16 14:19:52 -04:00
$aFields [ 'CREATOR' ] = '(USER_DELETED)' ;
$aFields [ 'CREATE_DATE' ] = $oApp -> getAppCreateDate ();
$aFields [ 'UPDATE_DATE' ] = $oApp -> getAppUpdateDate ();
}
2012-07-13 06:27:36 -04:00
2012-07-16 19:00:47 -04:00
if ( $iDelIndex > 0 ) {
//get the Delegation fields,
2012-07-16 14:19:52 -04:00
$oAppDel = new AppDelegation ();
$oAppDel -> Load ( $sAppUid , $iDelIndex );
$aAppDel = $oAppDel -> toArray ( BasePeer :: TYPE_FIELDNAME );
$aFields [ 'TAS_UID' ] = $aAppDel [ 'TAS_UID' ];
$aFields [ 'DEL_INDEX' ] = $aAppDel [ 'DEL_INDEX' ];
$aFields [ 'DEL_PREVIOUS' ] = $aAppDel [ 'DEL_PREVIOUS' ];
$aFields [ 'DEL_TYPE' ] = $aAppDel [ 'DEL_TYPE' ];
$aFields [ 'DEL_PRIORITY' ] = $aAppDel [ 'DEL_PRIORITY' ];
$aFields [ 'DEL_THREAD_STATUS' ] = $aAppDel [ 'DEL_THREAD_STATUS' ];
$aFields [ 'DEL_THREAD' ] = $aAppDel [ 'DEL_THREAD' ];
$aFields [ 'DEL_DELEGATE_DATE' ] = $aAppDel [ 'DEL_DELEGATE_DATE' ];
$aFields [ 'DEL_INIT_DATE' ] = $aAppDel [ 'DEL_INIT_DATE' ];
$aFields [ 'DEL_TASK_DUE_DATE' ] = $aAppDel [ 'DEL_TASK_DUE_DATE' ];
$aFields [ 'DEL_FINISH_DATE' ] = $aAppDel [ 'DEL_FINISH_DATE' ];
$aFields [ 'CURRENT_USER_UID' ] = $aAppDel [ 'USR_UID' ];
2017-03-10 16:55:43 -04:00
2017-02-20 14:26:32 -04:00
//Update the global variables
$aFields [ 'TASK' ] = $aAppDel [ 'TAS_UID' ];
$aFields [ 'INDEX' ] = $aAppDel [ 'DEL_INDEX' ];
2017-01-10 17:51:08 -04:00
$aFields [ 'PRO_ID' ] = $aAppDel [ 'PRO_ID' ];
2012-07-16 14:19:52 -04:00
try {
2012-07-16 19:00:47 -04:00
$oCurUser = new Users ();
2014-04-23 16:28:02 -04:00
if ( $jump != '' ) {
$aCases = $oAppDel -> LoadParallel ( $sAppUid );
$aFields [ 'TAS_UID' ] = '' ;
2014-07-08 10:46:55 -04:00
$aFields [ 'CURRENT_USER' ] = array ();
2014-04-23 16:28:02 -04:00
foreach ( $aCases as $key => $value ) {
$oCurUser -> load ( $value [ 'USR_UID' ]);
$aFields [ 'CURRENT_USER' ][] = $oCurUser -> getUsrFirstname () . ' ' . $oCurUser -> getUsrLastname ();
2016-08-22 14:09:23 -04:00
$aFields [ 'TAS_UID' ] .= (( $aFields [ 'TAS_UID' ] != '' ) ? '|' : '' ) . $value [ 'TAS_UID' ];
2014-04-23 16:28:02 -04:00
}
2015-07-03 10:43:53 -04:00
$aFields [ 'CURRENT_USER' ] = implode ( " - " , array_values ( $aFields [ 'CURRENT_USER' ]));
2016-08-22 14:09:23 -04:00
$tasksArray = array_filter ( explode ( '|' , $aFields [ 'TAS_UID' ]));
2015-07-03 10:43:53 -04:00
if ( count ( $tasksArray ) == 1 ) {
$aFields [ 'TAS_UID' ] = $tasksArray [ 0 ];
}
2014-04-23 16:28:02 -04:00
} else {
$oCurUser -> load ( $aAppDel [ 'USR_UID' ]);
$aFields [ 'CURRENT_USER' ] = $oCurUser -> getUsrFirstname () . ' ' . $oCurUser -> getUsrLastname ();
}
2012-07-16 14:19:52 -04:00
} catch ( Exception $oError ) {
2012-07-16 19:00:47 -04:00
$aFields [ 'CURRENT_USER' ] = '' ;
2012-07-16 14:19:52 -04:00
}
}
return $aFields ;
} catch ( exception $e ) {
throw ( $e );
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* LoadCaseByNumber
* @ param string $caseNumber
* @ return $aCases
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function loadCaseByNumber ( $sCaseNumber )
{
//('SELECT * FROM APP_DELEGATION WHERE APP_PROC_CODE="'.$sCaseNumber.'" ');
try {
$aCases = array ();
$c = new Criteria ();
$c -> add ( ApplicationPeer :: APP_PROC_CODE , $sCaseNumber );
$rs = ApplicationPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$case [ 'APP_UID' ] = $row [ 'APP_UID' ];
$case [ 'APP_NUMBER' ] = $row [ 'APP_NUMBER' ];
$case [ 'APP_STATUS' ] = $row [ 'APP_STATUS' ];
$case [ 'PRO_UID' ] = $row [ 'PRO_UID' ];
$case [ 'APP_PARALLEL' ] = $row [ 'APP_PARALLEL' ];
$case [ 'APP_CUR_USER' ] = $row [ 'APP_CUR_USER' ];
$aCases [] = $case ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aCases ;
} catch ( exception $e ) {
throw ( $e );
}
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* This function loads the label case
* PROCESO :
* If there is a label then it is loaded
* To get APP_DELEGATIONS that they are opened in the case
* To look for APP_DELEGATIONS wich TASK in it , It has a label defined ( CASE_TITLE )
* We need to read the last APP_DELEGATION -> TASK
* @ param string $sAppUid
* @ param string $aAppData
* @ param string $sLabel
* @ return $appLabel
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function refreshCaseLabel ( $sAppUid , $aAppData , $sLabel )
{
$getAppLabel = " getApp $sLabel " ;
$getTasDef = " getTasDef $sLabel " ;
$oApplication = new Application ;
if ( ! $oApplication -> exists ( $sAppUid )) {
return null ;
} else {
$oApplication -> load ( $sAppUid );
$appLabel = $oApplication -> $getAppLabel ();
2012-03-06 18:48:47 -04:00
}
2012-07-16 14:19:52 -04:00
$cri = new Criteria ;
$cri -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$cri -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , " OPEN " );
$currentDelegations = AppDelegationPeer :: doSelect ( $cri );
for ( $r = count ( $currentDelegations ) - 1 ; $r >= 0 ; $r -- ) {
$task = TaskPeer :: retrieveByPk ( $currentDelegations [ $r ] -> getTasUid ());
$caseLabel = $task -> $getTasDef ();
if ( $caseLabel != '' ) {
$appLabel = G :: replaceDataField ( $caseLabel , $aAppData );
break ;
}
2012-03-06 18:48:47 -04:00
}
2012-07-16 14:19:52 -04:00
return $appLabel ;
}
/*
* This function loads the title and description label in a case
* PROCESO :
* If there is a label then it is loaded
* To get APP_DELEGATIONS that they are opened in the case
* To look for APP_DELEGATIONS wich TASK in it , It has a label defined ( CASE_TITLE )
* We need to read the last APP_DELEGATION -> TASK
* @ param string $sAppUid
* @ param array $aAppData
* @ return $res
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function refreshCaseTitleAndDescription ( $sAppUid , $aAppData )
{
$res [ 'APP_TITLE' ] = null ;
$res [ 'APP_DESCRIPTION' ] = null ;
//$res['APP_PROC_CODE'] = null;
$oApplication = new Application ;
try {
$fields = $oApplication -> load ( $sAppUid );
} catch ( Exception $e ) {
return $res ;
2010-12-02 23:34:41 +00:00
}
2013-03-05 14:11:12 -04:00
$res [ 'APP_TITLE' ] = $fields [ 'APP_TITLE' ]; // $oApplication->$getAppLabel();
2012-07-16 14:19:52 -04:00
$res [ 'APP_DESCRIPTION' ] = $fields [ 'APP_DESCRIPTION' ];
$lang = defined ( 'SYS_LANG' ) ? SYS_LANG : 'en' ;
$bUpdatedDefTitle = false ;
$bUpdatedDefDescription = false ;
$cri = new Criteria ;
$cri -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$cri -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , " OPEN " );
$currentDelegations = AppDelegationPeer :: doSelect ( $cri );
//load only the tas_def fields, because these three or two values are needed
for ( $r = count ( $currentDelegations ) - 1 ; $r >= 0 ; $r -- ) {
$c = new Criteria ();
$c -> clearSelectColumns ();
2016-06-28 10:59:43 -04:00
$c -> addSelectColumn ( TaskPeer :: TAS_DEF_TITLE );
$c -> addSelectColumn ( TaskPeer :: TAS_DEF_DESCRIPTION );
$c -> add ( TaskPeer :: TAS_UID , $currentDelegations [ $r ] -> getTasUid ());
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2016-06-28 10:59:43 -04:00
while ( $rs -> next ()) {
2012-07-16 14:19:52 -04:00
$row = $rs -> getRow ();
2016-06-28 10:59:43 -04:00
$tasDefTitle = $row [ 'TAS_DEF_TITLE' ];
if ( $tasDefTitle != '' && ! $bUpdatedDefTitle ) {
$res [ 'APP_TITLE' ] = G :: replaceDataField ( $tasDefTitle , $aAppData );
$bUpdatedDefTitle = true ;
}
$tasDefDescription = $row [ 'TAS_DEF_DESCRIPTION' ];
if ( $tasDefDescription != '' && ! $bUpdatedDefDescription ) {
$res [ 'APP_DESCRIPTION' ] = G :: replaceDataField ( $tasDefDescription , $aAppData );
$bUpdatedDefDescription = true ;
}
2012-07-16 14:19:52 -04:00
}
}
return $res ;
2010-12-02 23:34:41 +00:00
}
2012-03-06 18:48:47 -04:00
2012-07-16 14:19:52 -04:00
/*
* optimized for speed . This function loads the title and description label in a case
* If there is a label then it is loaded
* Get Open APP_DELEGATIONS in the case
* To look for APP_DELEGATIONS wich TASK in it , It has a label defined ( CASE_TITLE )
* We need to read the last APP_DELEGATION -> TASK
* @ param string $sAppUid
* @ param array $aAppData
* @ return $res
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function newRefreshCaseTitleAndDescription ( $sAppUid , $fields , $aAppData )
{
$res = array ();
$lang = defined ( 'SYS_LANG' ) ? SYS_LANG : 'en' ;
$bUpdatedDefTitle = false ;
$bUpdatedDefDescription = false ;
$cri = new Criteria ;
$cri -> clearSelectColumns ();
2013-03-05 14:11:12 -04:00
$cri -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
2012-07-16 14:19:52 -04:00
$cri -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$cri -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , " OPEN " );
2016-08-04 16:38:54 -04:00
if ( isset ( $fields [ 'DEL_INDEX' ])){
$cri -> add ( AppDelegationPeer :: DEL_INDEX , $fields [ 'DEL_INDEX' ]);
}
2012-07-16 14:19:52 -04:00
$rsCri = AppDelegationPeer :: doSelectRS ( $cri );
$rsCri -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rsCri -> next ();
$rowCri = $rsCri -> getRow ();
//load only the tas_def fields, because these three or two values are needed
while ( is_array ( $rowCri )) {
$c = new Criteria ();
$c -> clearSelectColumns ();
2016-06-28 10:59:43 -04:00
$c -> addSelectColumn ( TaskPeer :: TAS_DEF_TITLE );
$c -> addSelectColumn ( TaskPeer :: TAS_DEF_DESCRIPTION );
$c -> add ( TaskPeer :: TAS_UID , $rowCri [ 'TAS_UID' ]);
2012-07-16 14:19:52 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2015-04-30 12:18:41 -04:00
while ( $rs -> next ()) {
$row = $rs -> getRow ();
2016-06-28 10:59:43 -04:00
$tasDefTitle = trim ( $row [ 'TAS_DEF_TITLE' ]);
if ( $tasDefTitle != '' && ! $bUpdatedDefTitle ) {
$newAppTitle = G :: replaceDataField ( $tasDefTitle , $aAppData );
$res [ 'APP_TITLE' ] = $newAppTitle ;
if ( ! ( isset ( $fields [ 'APP_TITLE' ]) && $fields [ 'APP_TITLE' ] == $newAppTitle )) {
$bUpdatedDefTitle = true ;
2016-10-07 11:30:32 -04:00
$appData = array ();
$appData [ 'APP_UID' ] = $sAppUid ;
$appData [ 'APP_TITLE' ] = $newAppTitle ;
$oApplication = new Application ();
$oApplication -> update ( $appData );
2016-06-28 10:59:43 -04:00
}
}
$tasDefDescription = trim ( $row [ 'TAS_DEF_DESCRIPTION' ]);
if ( $tasDefDescription != '' && ! $bUpdatedDefDescription ) {
$newAppDescription = G :: replaceDataField ( $tasDefDescription , $aAppData );
$res [ 'APP_DESCRIPTION' ] = $newAppDescription ;
if ( ! ( isset ( $fields [ 'APP_DESCRIPTION' ]) && $fields [ 'APP_DESCRIPTION' ] == $newAppDescription )) {
$bUpdatedDefDescription = true ;
2016-10-07 11:30:32 -04:00
$appData = array ();
$appData [ 'APP_UID' ] = $sAppUid ;
$appData [ 'APP_DESCRIPTION' ] = $newAppDescription ;
$oApplication = new Application ();
$oApplication -> update ( $appData );
2016-06-28 10:59:43 -04:00
}
2012-07-16 14:19:52 -04:00
}
}
$rsCri -> next ();
$rowCri = $rsCri -> getRow ();
}
return $res ;
2012-03-06 18:48:47 -04:00
}
2012-07-16 14:19:52 -04:00
/**
* Small function , it uses to return the title from a case
*
*
* @ name refreshCaseTitle
* @ param string $sAppUid
* @ param array $aAppData
* @ access public
* @ return $appLabel
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function refreshCaseTitle ( $sAppUid , $aAppData )
{
return $this -> refreshCaseLabel ( $sAppUid , $aAppData , " Title " );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/**
* Small function , it uses to return the description from a case
*
*
* @ name refreshCaseDescription
* @ param string $sAppUid
* @ param array $aAppData
* @ access public
* @ return $appLabel
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function refreshCaseDescription ( $sAppUid , $aAppData )
{
return $this -> refreshCaseLabel ( $sAppUid , $aAppData , " Description " );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/**
* Small function , it uses to return the code process from a case
*
*
* @ name refreshCaseDescription
* @ param string $sAppUid
* @ param array $aAppData
* @ access public
* @ return $appLabel
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function refreshCaseStatusCode ( $sAppUid , $aAppData )
{
return $this -> refreshCaseLabel ( $sAppUid , $aAppData , " ProcCode " );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/**
* This function return an array without difference
*
*
* @ name arrayRecursiveDiff
* @ param array $aArray1
* @ param array $aArray2
* @ access public
* @ return $appLabel
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function arrayRecursiveDiff ( $aArray1 , $aArray2 )
{
$aReturn = array ();
foreach ( $aArray1 as $mKey => $mValue ) {
2017-03-14 09:24:19 -04:00
if ( is_array ( $aArray2 ) && array_key_exists ( $mKey , $aArray2 )) {
2012-07-16 14:19:52 -04:00
if ( is_array ( $mValue )) {
$aRecursiveDiff = $this -> arrayRecursiveDiff ( $mValue , $aArray2 [ $mKey ]);
if ( count ( $aRecursiveDiff )) {
$aReturn [ $mKey ] = $aRecursiveDiff ;
}
} else {
if ( $mValue != $aArray2 [ $mKey ]) {
$aReturn [ $mKey ] = $aArray2 [ $mKey ];
}
}
} else {
2013-02-19 12:43:24 -04:00
$aReturn [ $mKey ] = isset ( $aArray2 [ $mKey ]) ? $aArray2 [ $mKey ] : null ;
2012-07-16 14:19:52 -04:00
}
}
return $aReturn ;
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
2016-11-17 06:54:34 -05:00
public function array_key_intersect ( & $a , & $b ) {
$array = array ();
while ( list ( $key , $value ) = each ( $a )) {
if ( isset ( $b [ $key ])) {
if ( is_object ( $b [ $key ]) && is_object ( $value )) {
if ( serialize ( $b [ $key ]) === serialize ( $value )) {
$array [ $key ] = $value ;
}
} else {
if ( $b [ $key ] === $value ) {
$array [ $key ] = $value ;
}
}
}
}
return $array ;
}
2012-07-16 14:19:52 -04:00
/*
* Update an existing case , this info is used in CaseResume
*
* @ name updateCase
* @ param string $sAppUid
* @ param integer $iDelIndex > 0 //get the Delegation fields
* @ return Fields
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function updateCase ( $sAppUid , $Fields = array ())
{
2012-07-16 19:00:47 -04:00
try {
2015-05-12 13:20:05 -04:00
$oApplication = new Application ;
if ( ! $oApplication -> exists ( $sAppUid )) {
return false ;
}
2012-07-16 19:00:47 -04:00
$aApplicationFields = $Fields [ 'APP_DATA' ];
2013-03-05 14:11:12 -04:00
$Fields [ 'APP_UID' ] = $sAppUid ;
2012-07-16 19:00:47 -04:00
$Fields [ 'APP_UPDATE_DATE' ] = 'now' ;
2013-03-05 14:11:12 -04:00
$Fields [ 'APP_DATA' ] = serialize ( $Fields [ 'APP_DATA' ]);
2012-07-16 19:00:47 -04:00
/*
2013-03-05 14:11:12 -04:00
$oApp = new Application ;
$appFields = $oApp -> load ( $sAppUid );
*/
$oApp = ApplicationPeer :: retrieveByPk ( $sAppUid );
2012-07-16 19:00:47 -04:00
$appFields = $oApp -> toArray ( BasePeer :: TYPE_FIELDNAME );
if ( isset ( $Fields [ 'APP_TITLE' ])) {
2013-03-05 14:11:12 -04:00
$appFields [ 'APP_TITLE' ] = $Fields [ 'APP_TITLE' ];
2012-07-16 14:19:52 -04:00
}
2012-07-16 19:00:47 -04:00
if ( isset ( $Fields [ 'APP_DESCRIPTION' ])) {
$appFields [ 'APP_DESCRIPTION' ] = $Fields [ 'APP_DESCRIPTION' ];
2012-07-16 14:19:52 -04:00
}
2016-08-04 16:38:54 -04:00
if ( isset ( $Fields [ 'DEL_INDEX' ])){
$appFields [ 'DEL_INDEX' ] = $Fields [ 'DEL_INDEX' ];
}
2015-04-30 12:18:41 -04:00
$arrayNewCaseTitleAndDescription = $this -> newRefreshCaseTitleAndDescription ( $sAppUid , $appFields , $aApplicationFields );
2012-07-16 19:00:47 -04:00
//Start: Save History --By JHL
if ( isset ( $Fields [ 'CURRENT_DYNAFORM' ])) {
//only when that variable is set.. from Save
2013-03-05 14:11:12 -04:00
$FieldsBefore = $this -> loadCase ( $sAppUid );
2012-07-16 19:00:47 -04:00
$FieldsDifference = $this -> arrayRecursiveDiff ( $FieldsBefore [ 'APP_DATA' ], $aApplicationFields );
2016-11-17 06:54:34 -05:00
$fieldsOnBoth = $this -> array_key_intersect ( $FieldsBefore [ 'APP_DATA' ], $aApplicationFields );
2012-07-16 19:00:47 -04:00
//Add fields that weren't in previous version
foreach ( $aApplicationFields as $key => $value ) {
2016-04-29 18:36:39 -04:00
if ( is_array ( $value ) && isset ( $fieldsOnBoth [ $key ]) && is_array ( $fieldsOnBoth [ $key ])) {
2016-04-29 14:06:05 -04:00
$afieldDifference = $this -> arrayRecursiveDiff ( $value , $fieldsOnBoth [ $key ]);
$dfieldDifference = $this -> arrayRecursiveDiff ( $fieldsOnBoth [ $key ], $value );
if ( $afieldDifference || $dfieldDifference ){
$FieldsDifference [ $key ] = $value ;
}
} else {
if ( ! ( isset ( $fieldsOnBoth [ $key ]))) {
$FieldsDifference [ $key ] = $value ;
}
2012-07-16 19:00:47 -04:00
}
}
if (( is_array ( $FieldsDifference )) && ( count ( $FieldsDifference ) > 0 )) {
2015-12-09 18:53:28 -04:00
$oCurrentDynaform = new Dynaform ();
2015-12-10 15:42:32 -04:00
try {
$currentDynaform = $oCurrentDynaform -> Load ( $Fields [ 'CURRENT_DYNAFORM' ]);
} catch ( Exception $e ) {
$currentDynaform [ " DYN_CONTENT " ] = " " ;
}
2012-07-16 19:00:47 -04:00
//There are changes
2013-07-09 16:53:42 -04:00
$Fields [ 'APP_STATUS' ] = ( isset ( $Fields [ 'APP_STATUS' ])) ? $Fields [ 'APP_STATUS' ] : $FieldsBefore [ 'APP_STATUS' ];
2012-07-16 19:00:47 -04:00
$appHistory = new AppHistory ();
$aFieldsHistory = $Fields ;
2015-12-09 18:53:28 -04:00
$FieldsDifference [ 'DYN_CONTENT_HISTORY' ] = base64_encode ( $currentDynaform [ " DYN_CONTENT " ]);
2012-07-16 19:00:47 -04:00
$aFieldsHistory [ 'APP_DATA' ] = serialize ( $FieldsDifference );
$appHistory -> insertHistory ( $aFieldsHistory );
}
}
//End Save History
//we are removing the app_title and app_description from this array,
//because they already be updated in newRefreshCaseTitleAndDescription function
if ( isset ( $Fields [ 'APP_TITLE' ])) {
2013-03-05 14:11:12 -04:00
unset ( $Fields [ 'APP_TITLE' ]);
2012-07-16 19:00:47 -04:00
}
if ( isset ( $Fields [ 'APP_DESCRIPTION' ])) {
2013-03-05 14:11:12 -04:00
unset ( $Fields [ 'APP_DESCRIPTION' ]);
2012-07-16 19:00:47 -04:00
}
2014-11-07 17:19:35 -04:00
if ( isset ( $Fields [ " APP_STATUS " ]) && $Fields [ " APP_STATUS " ] == " COMPLETED " ) {
2014-12-11 14:14:57 -04:00
if ( isset ( $Fields [ 'CURRENT_USER_UID' ])) {
$Fields [ 'USR_UID' ] = $Fields [ 'CURRENT_USER_UID' ];
}
2015-03-06 18:06:31 -04:00
/*----------------------------------********---------------------------------*/
$completed = new ListCompleted ();
2015-04-30 12:18:41 -04:00
$completed -> create ( array_merge ( $Fields , $arrayNewCaseTitleAndDescription ));
2015-03-06 18:06:31 -04:00
/*----------------------------------********---------------------------------*/
2014-11-07 17:19:35 -04:00
}
2012-07-16 19:00:47 -04:00
$oApp -> update ( $Fields );
$DEL_INDEX = isset ( $Fields [ 'DEL_INDEX' ]) ? $Fields [ 'DEL_INDEX' ] : '' ;
2013-03-05 14:11:12 -04:00
$TAS_UID = isset ( $Fields [ 'TAS_UID' ]) ? $Fields [ 'TAS_UID' ] : '' ;
2012-07-16 19:00:47 -04:00
G :: LoadClass ( 'reportTables' );
require_once 'classes/model/AdditionalTables.php' ;
$oReportTables = new ReportTables ();
$addtionalTables = new additionalTables ();
2013-04-15 15:49:27 -04:00
2013-03-12 18:31:17 -04:00
if ( ! isset ( $Fields [ 'APP_NUMBER' ])) {
$Fields [ 'APP_NUMBER' ] = $appFields [ 'APP_NUMBER' ];
}
if ( ! isset ( $Fields [ 'APP_STATUS' ])) {
$Fields [ 'APP_STATUS' ] = $appFields [ 'APP_STATUS' ];
}
2012-07-16 14:19:52 -04:00
2012-07-16 19:00:47 -04:00
$oReportTables -> updateTables ( $appFields [ 'PRO_UID' ], $sAppUid , $Fields [ 'APP_NUMBER' ], $aApplicationFields );
$addtionalTables -> updateReportTables (
2013-03-05 14:11:12 -04:00
$appFields [ 'PRO_UID' ], $sAppUid , $Fields [ 'APP_NUMBER' ], $aApplicationFields , $Fields [ 'APP_STATUS' ]
2012-07-16 19:00:47 -04:00
);
//now update the priority in appdelegation table, using the defined variable in task
if ( trim ( $DEL_INDEX ) != '' && trim ( $TAS_UID ) != '' ) {
//optimized code to avoid load task content row.
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_PRIORITY_VARIABLE );
2013-03-05 14:11:12 -04:00
$c -> add ( TaskPeer :: TAS_UID , $TAS_UID );
2012-07-16 19:00:47 -04:00
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
$VAR_PRI = substr ( $row [ 'TAS_PRIORITY_VARIABLE' ], 2 );
//end optimized code.
$x = unserialize ( $Fields [ 'APP_DATA' ]);
if ( isset ( $x [ $VAR_PRI ])) {
if ( trim ( $x [ $VAR_PRI ]) != '' ) {
$oDel = new AppDelegation ;
$array = array ();
$array [ 'APP_UID' ] = $sAppUid ;
$array [ 'DEL_INDEX' ] = $DEL_INDEX ;
$array [ 'TAS_UID' ] = $TAS_UID ;
$array [ 'DEL_PRIORITY' ] = ( isset ( $x [ $VAR_PRI ]) ?
2013-03-05 14:11:12 -04:00
( $x [ $VAR_PRI ] >= 1 && $x [ $VAR_PRI ] <= 5 ? $x [ $VAR_PRI ] : '3' ) : '3' );
2012-07-16 19:00:47 -04:00
$oDel -> update ( $array );
}
}
}
//Update Solr Index
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sAppUid );
}
2014-10-27 11:25:17 -04:00
if ( $Fields [ " APP_STATUS " ] == " COMPLETED " ) {
//Delete records of the table APP_ASSIGN_SELF_SERVICE_VALUE
$appAssignSelfServiceValue = new AppAssignSelfServiceValue ();
$appAssignSelfServiceValue -> remove ( $sAppUid );
}
2015-04-30 12:18:41 -04:00
2015-02-27 16:27:11 -04:00
/*----------------------------------********---------------------------------*/
if ( ! isset ( $Fields [ 'DEL_INDEX' ])){
$Fields [ 'DEL_INDEX' ] = 1 ;
}
$inbox = new ListInbox ();
2015-05-29 17:31:16 -04:00
unset ( $Fields [ 'DEL_INIT_DATE' ]);
2016-04-18 21:30:22 -04:00
unset ( $Fields [ 'DEL_DELEGATE_DATE' ]);
2015-04-30 12:18:41 -04:00
$inbox -> update ( array_merge ( $Fields , $arrayNewCaseTitleAndDescription ));
2015-02-27 16:27:11 -04:00
/*----------------------------------********---------------------------------*/
2014-10-27 11:25:17 -04:00
//Return
2012-07-16 19:00:47 -04:00
return $Fields ;
} catch ( exception $e ) {
throw ( $e );
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* Remove an existing case ,
*
* @ name removeCase
* @ param string $sAppUid
* @ return Fields
2013-03-05 14:11:12 -04:00
*/
2016-03-02 17:08:45 -04:00
public function removeCase ( $sAppUid , $deleteDelegation = true )
2012-07-16 14:19:52 -04:00
{
2012-07-16 19:00:47 -04:00
try {
2012-10-16 00:29:52 -04:00
$this -> getExecuteTriggerProcess ( $sAppUid , 'DELETED' );
2012-07-16 19:00:47 -04:00
$oAppDocument = new AppDocument ();
2012-09-11 16:41:05 -04:00
2016-03-02 17:08:45 -04:00
if ( $deleteDelegation ) {
//Delete the delegations of a application
$this -> deleteDelegation ( $sAppUid );
2012-07-16 19:00:47 -04:00
}
//Delete the documents assigned to a application
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDocumentPeer :: APP_UID , $sAppUid );
$oDataset2 = AppDocumentPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
while ( $aRow2 = $oDataset2 -> getRow ()) {
$oAppDocument -> remove ( $aRow2 [ 'APP_DOC_UID' ], $aRow2 [ 'DOC_VERSION' ]);
$oDataset2 -> next ();
}
//Delete the actions from a application
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelayPeer :: APP_UID , $sAppUid );
AppDelayPeer :: doDelete ( $oCriteria2 );
//Delete the messages from a application
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppMessagePeer :: APP_UID , $sAppUid );
AppMessagePeer :: doDelete ( $oCriteria2 );
//Delete the threads from a application
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppThreadPeer :: APP_UID , $sAppUid );
AppThreadPeer :: doDelete ( $oCriteria2 );
2012-09-11 16:41:05 -04:00
//Delete the events from a application
$criteria = new Criteria ( " workflow " );
$criteria -> add ( AppEventPeer :: APP_UID , $sAppUid );
AppEventPeer :: doDelete ( $criteria );
//Delete the histories from a application
$criteria = new Criteria ( " workflow " );
$criteria -> add ( AppHistoryPeer :: APP_UID , $sAppUid );
AppHistoryPeer :: doDelete ( $criteria );
//Delete the notes from a application
$criteria = new Criteria ( " workflow " );
$criteria -> add ( AppNotesPeer :: APP_UID , $sAppUid );
AppNotesPeer :: doDelete ( $criteria );
//Delete the owners from a application
$criteria = new Criteria ( " workflow " );
$criteria -> add ( AppOwnerPeer :: APP_UID , $sAppUid );
AppOwnerPeer :: doDelete ( $criteria );
//Delete the SolrQueue from a application
$criteria = new Criteria ( " workflow " );
$criteria -> add ( AppSolrQueuePeer :: APP_UID , $sAppUid );
AppSolrQueuePeer :: doDelete ( $criteria );
2016-08-18 16:23:25 -04:00
try {
//Before delete verify if is a child case
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( SubApplicationPeer :: APP_UID , $sAppUid );
$oCriteria2 -> add ( SubApplicationPeer :: SA_STATUS , 'ACTIVE' );
if ( SubApplicationPeer :: doCount ( $oCriteria2 ) > 0 ) {
G :: LoadClass ( 'derivation' );
$oDerivation = new Derivation ();
$oDerivation -> verifyIsCaseChild ( $sAppUid );
}
} catch ( Exception $e ) {
Bootstrap :: registerMonolog ( 'DeleteCases' , 200 , 'Error in sub-process when trying to route a child case related to the case' , [ 'application_uid' => $sAppUid , 'error' => $e -> getMessage ()], SYS_SYS , 'processmaker.log' );
2012-07-16 19:00:47 -04:00
}
2016-08-18 16:23:25 -04:00
2012-07-16 19:00:47 -04:00
//Delete the registries in the table SUB_APPLICATION
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( SubApplicationPeer :: APP_UID , $sAppUid );
SubApplicationPeer :: doDelete ( $oCriteria2 );
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( SubApplicationPeer :: APP_PARENT , $sAppUid );
SubApplicationPeer :: doDelete ( $oCriteria2 );
2012-09-11 16:41:05 -04:00
2014-10-27 11:25:17 -04:00
//Delete records of the table APP_ASSIGN_SELF_SERVICE_VALUE
$appAssignSelfServiceValue = new AppAssignSelfServiceValue ();
$appAssignSelfServiceValue -> remove ( $sAppUid );
2013-07-10 10:02:21 -04:00
//Delete records of the Report Table
$this -> reportTableDeleteRecord ( $sAppUid );
2012-09-11 16:41:05 -04:00
//Delete record of the APPLICATION table (trigger: delete records of the APP_CACHE_VIEW table)
$application = new Application ();
$result = $application -> remove ( $sAppUid );
2012-07-16 19:00:47 -04:00
//delete application from index
if ( $this -> appSolr != null ) {
$this -> appSolr -> deleteApplicationSearchIndex ( $sAppUid );
}
2015-03-12 17:55:58 -04:00
/*----------------------------------********---------------------------------*/
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ListInboxPeer :: APP_UID , $sAppUid );
ListInboxPeer :: doDelete ( $oCriteria );
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ListParticipatedLastPeer :: APP_UID , $sAppUid );
ListParticipatedLastPeer :: doDelete ( $oCriteria );
2016-03-02 17:08:45 -04:00
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ListPausedPeer :: APP_UID , $sAppUid );
ListPausedPeer :: doDelete ( $oCriteria );
2016-03-30 16:04:55 -04:00
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ListMyInboxPeer :: APP_UID , $sAppUid );
ListMyInboxPeer :: doDelete ( $oCriteria );
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ListParticipatedHistoryPeer :: APP_UID , $sAppUid );
ListParticipatedHistoryPeer :: doDelete ( $oCriteria );
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ListCompletedPeer :: APP_UID , $sAppUid );
ListCompletedPeer :: doDelete ( $oCriteria );
2016-08-01 15:47:42 -04:00
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ListUnassignedPeer :: APP_UID , $sAppUid );
ListUnassignedPeer :: doDelete ( $oCriteria );
2015-03-12 17:55:58 -04:00
/*----------------------------------********---------------------------------*/
2017-03-10 10:31:01 -04:00
//Logger deleteCase
$nameFiles = '' ;
2017-03-10 11:32:56 -04:00
foreach ( debug_backtrace () as $node ) {
$nameFiles .= $node [ 'file' ] . " : " . $node [ 'function' ] . " ( " . $node [ 'line' ] . " ) \n " ;
2017-03-10 10:31:01 -04:00
}
$dataLog = \Bootstrap :: getDefaultContextLog ();
2017-03-10 11:32:56 -04:00
$dataLog [ 'usrUid' ] = isset ( $_SESSION [ 'USER_LOGGED' ]) ? $_SESSION [ 'USER_LOGGED' ] : G :: LoadTranslation ( 'UID_UNDEFINED_USER' );
2017-03-10 10:31:01 -04:00
$dataLog [ 'appUid' ] = $sAppUid ;
$dataLog [ 'request' ] = $nameFiles ;
$dataLog [ 'action' ] = 'DeleteCases' ;
Bootstrap :: registerMonolog ( 'DeleteCases' , 200 , 'Delete Case' , $dataLog , $dataLog [ 'workspace' ], 'processmaker.log' );
2012-07-16 19:00:47 -04:00
return $result ;
} catch ( exception $e ) {
throw ( $e );
2010-12-02 23:34:41 +00:00
}
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
/*
* Set the DEL_INIT_DATE
*
* @ name setDelInitDate
* @ param string $sAppUid
* @ param string $iDelIndex
* @ return Fields
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function setDelInitDate ( $sAppUid , $iDelIndex )
{
BUG 0000 herbert> SOLR implementation in PMOS2
Solr support in PMOS2 includes:
Functionality:
- Implementation of Home views (Inbox, Draft, Participated, Unassigned). The views return fast results.
- Include read, unread, all, and process filter in inbox View.
- Include process filter in draft view.
- Include started by me, completed by me, all, process, and status filter in participated view.
- Include process filter in unassigned view.
- Improved search functionality (search in user defined variables): Use the following syntax to search in process (user defined) variables. {variable_name}:{search_word} ex1:"causal:20*" where causal is the variable defined by the user.
+ Use of wildcards in search: Use * as wildcard at the begin or end of word
+ Multiple conditions in search: Separate multiple conditions by space ex2:"Materiales causal:20*" means that we are searching for the word Materiales and the causal that begin with 20.
+ Search in dates (interval ): Format=> {variable_date}:[yyyy-mm-dd TO yyyy-mm-dd]
Local date not UTC date required
ex: FechaRegistro:[2011-04-15 TO 2011-04-30] //registros con fecha entre el 2011-04-15 y el 2011-04-30.
+ we can use the wildcard *:
ex: FechaRegistro:[* TO 2011-04-30] //registros con fecha menor o igual a 2011-04-30.
FechaRegistro:[2011-04-15 TO *] //registros con fecha mayor o igual a 2011-04-15.
+ Search of exact phrases. format: {variable}:"frase a buscar"
ex: Cliente:"Jesus Marin"
- Application update function.
+ The function is called every time a change is detected in the application's data including the related delegations.
- Use of cache to improve performance
Not included:
- Order of task, sent by, and due date columns.
Pending:
- Advanced search view using faceted lists.
2012-05-15 10:56:48 -04:00
try {
2012-07-16 14:19:52 -04:00
$oAppDel = AppDelegationPeer :: retrieveByPk ( $sAppUid , $iDelIndex );
$oAppDel -> setDelInitDate ( " now " );
$oAppDel -> save ();
2015-02-27 16:27:11 -04:00
/*----------------------------------********---------------------------------*/
2014-11-07 17:19:35 -04:00
$inbox = new ListInbox ();
$inbox -> update ( array ( 'APP_UID' => $sAppUid , 'DEL_INDEX' => $iDelIndex , 'DEL_INIT_DATE' => Date ( " Y-m-d H:i:s " )));
2015-02-27 16:27:11 -04:00
/*----------------------------------********---------------------------------*/
2012-07-16 14:19:52 -04:00
//update searchindex
2012-07-16 19:00:47 -04:00
if ( $this -> appSolr != null ) {
2012-07-16 14:19:52 -04:00
$this -> appSolr -> updateApplicationSearchIndex ( $sAppUid );
}
} catch ( exception $e ) {
throw ( $e );
}
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* Set user who is claim ( ex - catch ) a self service routing
*
* @ name setCatchUser
* @ param string $sAppUid
* @ param string $iDelIndex
* @ param string $usrId
* @ return Fields
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function setCatchUser ( $sAppUid , $iDelIndex , $usrId )
{
try {
2017-01-13 19:21:52 -04:00
$user = UsersPeer :: retrieveByPk ( $usrId );
2017-01-19 16:41:59 -04:00
2012-07-16 14:19:52 -04:00
$oAppDel = AppDelegationPeer :: retrieveByPk ( $sAppUid , $iDelIndex );
$oAppDel -> setDelInitDate ( " now " );
$oAppDel -> setUsrUid ( $usrId );
2017-01-13 19:21:52 -04:00
$oAppDel -> setUsrId ( $user -> getUsrId ());
2012-07-16 14:19:52 -04:00
$oAppDel -> save ();
//update searchindex
2012-07-16 19:00:47 -04:00
if ( $this -> appSolr != null ) {
2012-07-16 14:19:52 -04:00
$this -> appSolr -> updateApplicationSearchIndex ( $sAppUid );
}
2014-10-27 11:25:17 -04:00
//Delete record of the table APP_ASSIGN_SELF_SERVICE_VALUE
$appAssignSelfServiceValue = new AppAssignSelfServiceValue ();
$appAssignSelfServiceValue -> remove ( $sAppUid , $iDelIndex );
2015-03-09 15:23:38 -04:00
/*----------------------------------********---------------------------------*/
2016-07-19 14:26:51 -04:00
//Delete record of the table LIST_UNASSIGNED
$unassigned = new ListUnassigned ();
$unassigned -> remove ( $sAppUid , $iDelIndex );
2015-03-09 15:23:38 -04:00
$aFields = $oAppDel -> toArray ( BasePeer :: TYPE_FIELDNAME );
$aFields [ 'APP_STATUS' ] = 'TO_DO' ;
$inbox = new ListInbox ();
$inbox -> update ( $aFields , true );
/*----------------------------------********---------------------------------*/
2012-07-16 14:19:52 -04:00
} catch ( exception $e ) {
throw ( $e );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
2017-03-09 15:56:58 -04:00
/*
* Determines if the all threads of a multiinstance task are closed
*
* @ $appUid string appUid of the instance to be tested
* @ $tasUid string task uid of the multiinstance task
* @ $previousDelIndex int previous del index of the instance corresponding to the multiinstance task
*/
public function multiInstanceIsCompleted ( $appUid , $tasUid , $previousDelIndex )
{
2017-03-09 17:34:51 -04:00
$result = false ;
2017-03-09 15:56:58 -04:00
try {
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> add ( AppDelegationPeer :: APP_UID , $appUid );
$c -> add ( AppDelegationPeer :: TAS_UID , $tasUid );
$c -> add ( AppDelegationPeer :: DEL_PREVIOUS , $previousDelIndex );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$rs = AppDelegationPeer :: doSelectRs ( $c );
2017-03-09 17:34:51 -04:00
if ( $rs -> next ()) {
$result = false ;
} else {
$result = true ;
}
2017-03-09 15:56:58 -04:00
} catch ( exception $e ) {
throw ( $e );
2017-03-09 17:44:22 -04:00
} finally {
return $result ;
2017-03-09 15:56:58 -04:00
}
}
2012-07-16 14:19:52 -04:00
/*
* GetOpenThreads
*
* @ name GetOpenThreads
* @ param string $sAppUid
* @ return $row ( number of APP_DELEGATION rows )
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function GetOpenThreads ( $sAppUid )
{
try {
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'COUNT(*)' );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$rs = AppDelegationPeer :: doSelectRs ( $c );
$rs -> next ();
$row = $rs -> getRow ();
return intval ( $row [ 0 ]);
} catch ( exception $e ) {
throw ( $e );
}
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* this function returns SiblingThreads in a task
*
* @ name getSiblingThreads
* @ param string $sAppUid
* @ param string $iDelIndex
* @ return $aThreads
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getSiblingThreads ( $sAppUid , $iDelIndex )
{
2012-07-16 19:00:47 -04:00
try {
//get the parent thread
$c = new Criteria ();
$c -> add ( AppThreadPeer :: APP_UID , $sAppUid );
$c -> add ( AppThreadPeer :: DEL_INDEX , $iDelIndex );
$rs = AppThreadPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
$iParent = $row [ 'APP_THREAD_PARENT' ];
2010-12-02 23:34:41 +00:00
2012-07-16 19:00:47 -04:00
//get the sibling
$aThreads = array ();
$c = new Criteria ();
$c -> add ( AppThreadPeer :: APP_UID , $sAppUid );
$c -> add ( AppThreadPeer :: APP_THREAD_PARENT , $iParent );
$c -> add ( AppThreadPeer :: DEL_INDEX , $iDelIndex , Criteria :: NOT_EQUAL );
$rs = AppThreadPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$aThreads [] = $row ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aThreads ;
} catch ( exception $e ) {
throw ( $e );
2012-07-16 14:19:52 -04:00
}
}
2010-12-02 23:34:41 +00:00
2015-07-11 02:51:32 -04:00
/**
2012-07-16 14:19:52 -04:00
* This function returns the threads open in a task
* get an array with all sibling threads open from next task
*
2015-07-11 02:51:32 -04:00
* @ param string $nextTaskUid
* @ param string $applicationUid
* @ param string $delIndex
* @ param string $currentTaskUid
*
* return array Return $arrayThread
2013-03-05 14:11:12 -04:00
*/
2015-07-11 02:51:32 -04:00
public function getOpenSiblingThreads ( $nextTaskUid , $applicationUid , $delIndex , $currentTaskUid )
2012-07-16 14:19:52 -04:00
{
2012-07-16 19:00:47 -04:00
try {
//Get all tasks that are previous to my NextTask, we want to know if there are pending task for my nexttask
//we need to filter only seq joins going to my next task
//and we are removing the current task from the search
2015-07-11 02:51:32 -04:00
$arrayThread = array ();
$criteria = new Criteria ( " workflow " );
$criteria -> add ( RoutePeer :: TAS_UID , $currentTaskUid , Criteria :: NOT_EQUAL );
$criteria -> add ( RoutePeer :: ROU_NEXT_TASK , $nextTaskUid , Criteria :: EQUAL );
$criteria -> add ( RoutePeer :: ROU_TYPE , " SEC-JOIN " , Criteria :: EQUAL );
$rsCriteria = RoutePeer :: doSelectRS ( $criteria );
$rsCriteria -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2015-11-06 13:07:26 -04:00
2015-07-11 02:51:32 -04:00
while ( $rsCriteria -> next ()) {
$row = $rsCriteria -> getRow ();
$arrayPrevious = $this -> searchOpenPreviousTasks ( $row [ " TAS_UID " ], $applicationUid );
if ( is_array ( $arrayPrevious ) && ! empty ( $arrayPrevious )) {
$arrayThread = array_merge ( $arrayThread , $arrayPrevious );
2012-07-16 19:00:47 -04:00
}
}
2015-07-11 02:51:32 -04:00
//Return
return $arrayThread ;
} catch ( Exception $e ) {
throw $e ;
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/**
* This function looks for the open previous task
* get an array with all sibling previous threads open from next task
*
* @ name searchOpenPreviousTasks ,
* @ param string $taskUid
* @ param string $sAppUid
2012-07-16 19:00:47 -04:00
* @ param array $aPreviousTasks optional array that serves to trace the task routes and avoid infinite loops .
2012-07-16 14:19:52 -04:00
* @ return $aThreads
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function searchOpenPreviousTasks ( $taskUid , $sAppUid , $aPreviousTasks = array ())
{
2012-07-16 19:00:47 -04:00
//in this array we are storing all open delegation rows.
$aTaskReviewed = array ();
2010-12-02 23:34:41 +00:00
2012-07-16 19:00:47 -04:00
//check if this task ( $taskUid ) has open delegations
$delegations = $this -> getReviewedTasks ( $taskUid , $sAppUid );
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
if ( $delegations !== false ) {
2012-07-16 19:00:47 -04:00
if ( count ( $delegations [ 'open' ]) > 0 ) {
//there is an open delegation, so we need to return the delegation row
return $delegations [ 'open' ];
} else {
2016-03-04 13:08:33 -04:00
if ( count ( $delegations [ 'paused' ]) > 0 ){
//there is an paused delegation, so we need to return the delegation row
return $delegations [ 'paused' ];
} else {
return array (); //returning empty array
}
2010-12-02 23:34:41 +00:00
}
}
2012-07-16 19:00:47 -04:00
// 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
2010-12-02 23:34:41 +00:00
2012-07-16 19:00:47 -04:00
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( RoutePeer :: ROU_NEXT_TASK , $taskUid );
$oDataset = RoutePeer :: doSelectRs ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2010-12-02 23:34:41 +00:00
2015-07-11 02:51:32 -04:00
while ( $oDataset -> next ()) {
$aRow = $oDataset -> getRow ();
2012-07-16 19:00:47 -04:00
$delegations = $this -> getReviewedTasks ( $aRow [ 'TAS_UID' ], $sAppUid );
2015-07-11 02:51:32 -04:00
2012-07-16 19:00:47 -04:00
if ( $delegations !== false ) {
2013-03-05 14:11:12 -04:00
if ( count ( $delegations [ 'open' ]) > 0 ) {
2012-07-16 19:00:47 -04:00
//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 {
2015-07-11 02:51:32 -04:00
//$aTaskReviewed = array_merge($aTaskReviewed, $delegations['closed']);
2012-07-16 19:00:47 -04:00
}
}
} 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 );
}
}
}
}
return $aTaskReviewed ;
2010-12-02 23:34:41 +00:00
}
/**
2012-07-16 14:19:52 -04:00
* Get reviewed tasks ( delegations started )
* @ param string $taskUid
* @ param string $sAppUid
* @ return array within the open & closed tasks
* false -> when has not any delegation started for that task
2010-12-02 23:34:41 +00:00
*/
2012-07-16 14:19:52 -04:00
public function getReviewedTasks ( $taskUid , $sAppUid )
{
2016-03-04 13:08:33 -04:00
$openTasks = $closedTasks = $pausedTasks = array ();
2010-12-02 23:34:41 +00:00
2012-07-16 19:00:47 -04:00
// get all delegations fro this task
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$oCriteria2 -> add ( AppDelegationPeer :: TAS_UID , $taskUid );
2010-12-02 23:34:41 +00:00
2012-07-16 19:00:47 -04:00
$oDataset2 = AppDelegationPeer :: doSelectRs ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2010-12-02 23:34:41 +00:00
2012-07-16 19:00:47 -04:00
// loop and separate open & closed delegations in theirs respective arrays
while ( $oDataset2 -> next ()) {
$row = $oDataset2 -> getRow ();
if ( $row [ 'DEL_THREAD_STATUS' ] == 'OPEN' ) {
$openTasks [] = $row ;
} else {
2016-03-04 13:08:33 -04:00
//If exist paused cases
2012-07-16 19:00:47 -04:00
$closedTasks [] = $row ;
2016-03-04 13:08:33 -04:00
$aIndex [] = $row [ 'DEL_INDEX' ];
2016-07-19 14:26:51 -04:00
$res = $this -> GetAllOpenDelegation ( array ( 'APP_UID' => $sAppUid , 'APP_THREAD_PARENT' => $row [ 'DEL_PREVIOUS' ]), 'NONE' );
foreach ( $res as $in ) {
$aIndex [] = $in [ 'DEL_INDEX' ];
}
2016-03-04 13:08:33 -04:00
$pausedTasks = $this -> getReviewedTasksPaused ( $sAppUid , $aIndex );
2012-07-16 19:00:47 -04:00
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 19:00:47 -04:00
2016-03-04 13:08:33 -04:00
if ( count ( $openTasks ) === 0 && count ( $closedTasks ) === 0 && count ( $pausedTasks ) === 0 ) {
return false ; // return false because there is not any delegation for this task.
} else {
return array ( 'open' => $openTasks , 'closed' => $closedTasks , 'paused' => $pausedTasks );
}
}
/**
* Get reviewed tasks is Paused ( delegations started )
* @ param string $sAppUid
* @ param array $aDelIndex
* @ return array within the paused tasks
* false -> when has not any delegation started for that task
*/
public function getReviewedTasksPaused ( $sAppUid , $aDelIndex )
{
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDelayPeer :: APP_UID , $sAppUid );
$oCriteria -> add ( AppDelayPeer :: APP_DEL_INDEX , $aDelIndex , Criteria :: IN );
$oCriteria -> add ( AppDelayPeer :: APP_TYPE , 'PAUSE' );
$oCriteria -> add (
$oCriteria -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 , Criteria :: EQUAL ) -> addOr (
$oCriteria -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL ))
);
$oDataset = AppDelayPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$pausedTask = array ();
// loop and separate open & closed delegations in theirs respective arrays
while ( $oDataset -> next ()) {
$row = $oDataset -> getRow ();
$pausedTask [] = $row ;
}
2016-03-30 16:27:27 -04:00
if ( count ( $pausedTask ) === 0 ) {
return array (); // return false because there is not any delegation for this task.
2012-07-16 19:00:47 -04:00
} else {
2016-03-04 13:08:33 -04:00
return array ( 'pause' => $pausedTask );
2012-07-16 14:19:52 -04:00
}
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* This function returns the total number of previous task
*
* @ name CountTotalPreviousTasks
* @ param string $sTasUid $nextDel [ 'TAS_UID' ]
* @ return $row [ 0 ]
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function CountTotalPreviousTasks ( $sTasUid )
{
try {
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'COUNT(*)' );
$c -> add ( RoutePeer :: ROU_NEXT_TASK , $sTasUid );
$rs = RoutePeer :: doSelectRs ( $c );
$rs -> next ();
$row = $rs -> getRow ();
return intval ( $row [ 0 ]);
} catch ( exception $e ) {
throw ( $e );
}
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* This function gets open and null rows in delegation
*
* @ name getOpenNullDelegations
* @ param string $sAppUid $nextDel [ 'TAS_UID' ]
* @ param string $sTasUid
* @ return $pendingDel
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getOpenNullDelegations ( $sAppUid , $sTasUid )
{
2012-07-16 19:00:47 -04:00
$pendingDel = array ();
try {
//first query
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( AppDelegationPeer :: APP_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PREVIOUS );
$c -> addSelectColumn ( AppDelegationPeer :: PRO_UID );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: USR_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_TYPE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_THREAD );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_THREAD_STATUS );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_DELEGATE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_TASK_DUE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( RoutePeer :: ROU_UID );
$c -> addSelectColumn ( RoutePeer :: ROU_PARENT );
$c -> addSelectColumn ( RoutePeer :: ROU_NEXT_TASK );
$c -> addSelectColumn ( RoutePeer :: ROU_CASE );
$c -> addSelectColumn ( RoutePeer :: ROU_TYPE );
$c -> addSelectColumn ( RoutePeer :: ROU_CONDITION );
$c -> addSelectColumn ( RoutePeer :: ROU_TO_LAST_USER );
$c -> addSelectColumn ( RoutePeer :: ROU_OPTIONAL );
$c -> addSelectColumn ( RoutePeer :: ROU_SEND_EMAIL );
$c -> addJoin ( AppDelegationPeer :: TAS_UID , RoutePeer :: TAS_UID );
$c -> add ( RoutePeer :: ROU_NEXT_TASK , $sTasUid );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$rs = RoutePeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2012-07-16 14:19:52 -04:00
$rs -> next ();
$row = $rs -> getRow ();
2012-07-16 19:00:47 -04:00
while ( is_array ( $row )) {
if ( $row [ 'DEL_THREAD_STATUS' ] == 'OPEN' && $row [ 'APP_UID' ] = $sAppUid ) {
$pendingDel [] = $row ;
}
$rs -> next ();
$row = $rs -> getRow ();
}
return $pendingDel ;
2012-07-16 14:19:52 -04:00
} catch ( exception $e ) {
2012-07-16 19:00:47 -04:00
throw ( $e );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* This function looks for some open rows in delegation
*
* @ name isRouteOpen
* @ param string $sAppUid $nextDel [ 'APP_UID' ]
* @ param string $sTasUid $nextDel [ 'TAS_UID' ]
* @ return true or false
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function isRouteOpen ( $sAppUid , $sTasUid )
{
2012-07-16 19:00:47 -04:00
try {
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'COUNT(*)' );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: TAS_UID , $sTasUid );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$rs = RoutePeer :: doSelectRs ( $c );
$rs -> next ();
$row = $rs -> getRow ();
$open = ( $row [ 0 ] >= 1 );
if ( $open ) {
return true ;
}
$c -> clearSelectColumns ();
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: USR_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_TYPE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_THREAD );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_THREAD_STATUS );
$c -> addSelectColumn ( RoutePeer :: ROU_UID );
$c -> addSelectColumn ( RoutePeer :: ROU_NEXT_TASK );
$c -> addSelectColumn ( RoutePeer :: ROU_CASE );
$c -> addSelectColumn ( RoutePeer :: ROU_TYPE );
$c -> addJoin ( AppDelegationPeer :: TAS_UID , RoutePeer :: TAS_UID );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( RoutePeer :: ROU_NEXT_TASK , $sTasUid );
$rs = RoutePeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
$sql = 'SELECT D.*,R.* ' .
2013-03-05 14:11:12 -04:00
'FROM ROUTE R LEFT JOIN APP_DELEGATION D ON (R.TAS_UID=D.TAS_UID) WHERE APP_UID="' .
$sAppUid . '" AND ROU_NEXT_TASK="' . $sTasUid . '"' ;
2012-07-16 14:19:52 -04:00
2012-07-16 19:00:47 -04:00
while ( is_array ( $row )) {
switch ( $row [ 'DEL_THREAD_STATUS' ]) {
case 'OPEN' :
//case 'NONE':
$open = true ;
break ;
case 'CLOSED' :
//case 'DONE':
//case 'NOTDONE':
break ;
case '' :
case null :
default :
$open = $this -> isRouteOpen ( $sAppUid , $row [ 'TAS_UID' ]);
break ;
}
if ( $open ) {
return true ;
}
$rs -> next ();
$row = $rs -> getRow ();
}
return false ;
} catch ( exception $e ) {
throw ( $e );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* This function creates a new row into APP_DELEGATION
*
* @ name newAppDelegation
* @ param string $sProUid ,
* @ param string $sAppUid ,
* @ param string $sTasUid ,
* @ param string $sUsrUid
* @ param string $sPrevious
* @ param string $iPriority
* @ param string $sDelType
* @ param string $iAppThreadIndex
2017-01-10 17:51:08 -04:00
* @ param string $nextDel
* @ param boolean $flagControl
* @ param boolean $flagControlMulInstance
* @ param int $delPrevious
* @ param int $appNumber
* @ param int $proId
* @ param int $tasId
2012-07-16 14:19:52 -04:00
* @ return void
*/
2010-12-02 23:34:41 +00:00
2017-01-10 17:51:08 -04:00
public function newAppDelegation ( $sProUid , $sAppUid , $sTasUid , $sUsrUid , $sPrevious , $iPriority , $sDelType , $iAppThreadIndex = 1 , $nextDel = null , $flagControl = false , $flagControlMulInstance = false , $delPrevious = 0 , $appNumber = 0 , $proId = 0 , $tasId = 0 )
2013-03-05 14:11:12 -04:00
{
2012-07-16 19:00:47 -04:00
try {
2017-01-10 17:51:08 -04:00
$user = UsersPeer :: retrieveByPK ( $sUsrUid );
2012-07-16 19:00:47 -04:00
$appDel = new AppDelegation ();
$result = $appDel -> createAppDelegation (
2017-01-10 17:51:08 -04:00
$sProUid ,
$sAppUid ,
$sTasUid ,
$sUsrUid ,
$iAppThreadIndex ,
$iPriority ,
false ,
$sPrevious ,
$nextDel ,
$flagControl ,
$flagControlMulInstance ,
$delPrevious ,
$appNumber ,
$tasId ,
2017-01-13 19:11:14 -04:00
( empty ( $user )) ? 0 : $user -> getUsrId (),
2017-01-10 17:51:08 -04:00
$proId
2012-07-16 19:00:47 -04:00
);
//update searchindex
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sAppUid );
}
return $result ;
} catch ( exception $e ) {
throw ( $e );
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* this function is used to update a row in APP_DELEGATION
*
*
* @ name updateAppDelegation
* @ param string $sAppUid ,
* @ param string $iDelIndex
* @ param string $iAppThreadIndex ,
* @ return true
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function updateAppDelegation ( $sAppUid , $iDelIndex , $iAppThreadIndex )
{
try {
$appDelegation = new AppDelegation ();
$aData = array ();
$aData [ 'APP_UID' ] = $sAppUid ;
$aData [ 'DEL_INDEX' ] = $iDelIndex ;
$aData [ 'DEL_THREAD' ] = $iAppThreadIndex ;
$appDelegation -> update ( $aData );
//update searchindex
2012-07-16 19:00:47 -04:00
if ( $this -> appSolr != null ) {
2012-07-16 14:19:52 -04:00
$this -> appSolr -> updateApplicationSearchIndex ( $sAppUid );
}
return true ;
} catch ( exception $e ) {
throw ( $e );
}
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* This function gets all rows in APP_DELEGATION
*
* @ name GetAllDelegations
* @ param string $sAppUid
* @ return $aDelegations
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function GetAllDelegations ( $sAppUid )
{
2012-07-16 19:00:47 -04:00
//('SELECT * FROM APP_DELEGATION WHERE APP_UID="'.$currentDelegation['APP_UID'].'" ');
2012-07-16 14:19:52 -04:00
try {
$aDelegations = array ();
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$rs = AppDelegationPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$aDelegations [] = $row ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aDelegations ;
} catch ( exception $e ) {
throw ( $e );
2010-12-02 23:34:41 +00:00
}
}
2012-07-16 14:19:52 -04:00
/*
* We ' re getting all threads in a task
*
* @ name GetAllDelegations
* @ param string $sAppUid
* @ return $aThreads
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function GetAllThreads ( $sAppUid )
{
//('SELECT * FROM APP_DELEGATION WHERE APP_UID="'.$currentDelegation['APP_UID'].'" ');
try {
$aThreads = array ();
$c = new Criteria ();
$c -> add ( AppThreadPeer :: APP_UID , $sAppUid );
$rs = AppThreadPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$aThreads [] = $row ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aThreads ;
} catch ( exception $e ) {
2012-07-16 19:00:47 -04:00
throw ( $e );
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
2012-07-13 06:27:36 -04:00
/*
2012-07-16 14:19:52 -04:00
* With this function we can do update in AppThread
*
* @ name updateAppThread
* @ param string $sAppUid ,
* @ param string $iAppThreadIndex ,
* @ param string $iNewDelIndex
* @ return $iNewDelIndex ;
*/
public function updateAppThread ( $sAppUid , $iAppThreadIndex , $iNewDelIndex )
{
2012-07-16 19:00:47 -04:00
try {
/// updating the DEL_INDEX value in the APP_THREAD
$con = Propel :: getConnection ( 'workflow' );
$c1 = new Criteria ( 'workflow' );
2013-03-05 14:11:12 -04:00
$c1 -> add ( AppThreadPeer :: APP_UID , $sAppUid );
2012-07-16 19:00:47 -04:00
$c1 -> add ( AppThreadPeer :: APP_THREAD_INDEX , $iAppThreadIndex );
// update set
$c2 = new Criteria ( 'workflow' );
2013-03-05 14:11:12 -04:00
$c2 -> add ( AppThreadPeer :: DEL_INDEX , $iNewDelIndex );
BasePeer :: doUpdate ( $c1 , $c2 , $con );
2012-07-16 19:00:47 -04:00
//update searchindex
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sAppUid );
}
return $iNewDelIndex ;
} catch ( exception $e ) {
throw ( $e );
}
2011-02-18 16:19:08 +00:00
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
/*
* This function changes the status to CLOSED in appThread
*
* @ name closeAppThread
* @ param string $sAppUid ,
* @ param string $iAppThreadIndex ,
* @ return true
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function closeAppThread ( $sAppUid , $iAppThreadIndex )
{
try {
$appThread = new AppThread ();
$aData = array ();
$aData [ 'APP_UID' ] = $sAppUid ;
$aData [ 'APP_THREAD_INDEX' ] = $iAppThreadIndex ;
$aData [ 'APP_THREAD_STATUS' ] = 'CLOSED' ;
$appThread -> update ( $aData );
return true ;
} catch ( exception $e ) {
throw ( $e );
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* This function updates a row in APP_DELEGATION
*
* @ name closeAllDelegations
* @ param string $sAppUid
* @ return void
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function closeAllThreads ( $sAppUid )
{
try {
$c = new Criteria ();
$c -> add ( AppThreadPeer :: APP_UID , $sAppUid );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$rowObj = AppThreadPeer :: doSelect ( $c );
foreach ( $rowObj as $appThread ) {
$appThread -> setAppThreadStatus ( 'CLOSED' );
if ( $appThread -> Validate ()) {
$appThread -> Save ();
} else {
$msg = '' ;
2012-07-16 19:00:47 -04:00
foreach ( $this -> getValidationFailures () as $objValidationFailure ) {
2012-07-16 14:19:52 -04:00
$msg .= $objValidationFailure -> getMessage () . " <br/> " ;
}
2012-07-16 19:00:47 -04:00
throw ( new PropelException ( 'The row cannot be created!' , new PropelException ( $msg )));
2012-07-16 14:19:52 -04:00
}
2012-07-16 19:00:47 -04:00
}
//update searchindex
if ( $this -> appSolr != null ) {
2012-07-16 14:19:52 -04:00
$this -> appSolr -> updateApplicationSearchIndex ( $sAppUid );
}
} catch ( exception $e ) {
throw ( $e );
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* This function creates a new row in appThread
*
* @ name newAppThread
* @ param string $sAppUid ,
* @ param string $iNewDelIndex
* @ param string $iAppParent
2017-01-10 17:51:08 -04:00
* @ param string $appNumber
2012-07-16 14:19:52 -04:00
* @ return $iAppThreadIndex $iNewDelIndex , $iAppThreadIndex );
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function newAppThread ( $sAppUid , $iNewDelIndex , $iAppParent )
{
2012-07-16 19:00:47 -04:00
try {
$appThread = new AppThread ();
$result = $appThread -> createAppThread ( $sAppUid , $iNewDelIndex , $iAppParent );
//update searchindex
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sAppUid );
}
return $result ;
} catch ( exception $e ) {
throw ( $e );
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* With this function we can change status to CLOSED in APP_DELEGATION
*
* @ name closeAllDelegations
* @ param string $sAppUid
* @ return
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function closeAllDelegations ( $sAppUid )
{
2012-07-16 19:00:47 -04:00
try {
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$rowObj = AppDelegationPeer :: doSelect ( $c );
foreach ( $rowObj as $appDel ) {
$appDel -> setDelThreadStatus ( 'CLOSED' );
if ( $appDel -> Validate ()) {
$appDel -> Save ();
} else {
$msg = '' ;
foreach ( $this -> getValidationFailures () as $objValidationFailure ) {
$msg .= $objValidationFailure -> getMessage () . " <br/> " ;
}
throw ( new PropelException ( 'The row cannot be created!' , new PropelException ( $msg )));
}
}
//update searchindex
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sAppUid );
}
} catch ( exception $e ) {
throw ( $e );
2010-12-02 23:34:41 +00:00
}
}
2012-07-16 14:19:52 -04:00
/*
* With this we can change the status to CLOSED in APP_DELEGATION
*
* @ name CloseCurrentDelegation
* @ param string $sAppUid
* @ param string $iDelIndex
* @ return Fields
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function CloseCurrentDelegation ( $sAppUid , $iDelIndex )
{
2012-07-16 19:00:47 -04:00
try {
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iDelIndex );
$rowObj = AppDelegationPeer :: doSelect ( $c );
2015-03-13 15:53:14 -04:00
$user = '' ;
2012-07-16 19:00:47 -04:00
foreach ( $rowObj as $appDel ) {
$appDel -> setDelThreadStatus ( 'CLOSED' );
$appDel -> setDelFinishDate ( 'now' );
2015-03-13 15:53:14 -04:00
$user = $appDel -> getUsrUid ();
2012-07-16 19:00:47 -04:00
if ( $appDel -> Validate ()) {
$appDel -> Save ();
} else {
$msg = '' ;
foreach ( $this -> getValidationFailures () as $objValidationFailure ) {
$msg .= $objValidationFailure -> getMessage () . " <br/> " ;
}
throw ( new PropelException ( 'The row cannot be created!' , new PropelException ( $msg )));
}
}
2015-02-27 16:27:11 -04:00
/*----------------------------------********---------------------------------*/
2014-11-07 17:19:35 -04:00
$inbox = new ListInbox ();
$inbox -> remove ( $sAppUid , $iDelIndex );
2015-02-27 16:27:11 -04:00
$data [ 'DEL_THREAD_STATUS' ] = 'CLOSED' ;
$data [ 'APP_UID' ] = $sAppUid ;
$data [ 'DEL_INDEX' ] = $iDelIndex ;
2015-03-13 15:53:14 -04:00
$data [ 'USR_UID' ] = $user ;
2015-02-27 16:27:11 -04:00
$listParticipatedLast = new ListParticipatedLast ();
$listParticipatedLast -> refresh ( $data );
/*----------------------------------********---------------------------------*/
2012-07-16 19:00:47 -04:00
} catch ( exception $e ) {
throw ( $e );
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* This function creates a new row in APP_DELEGATION whether it has status closed
*
* @ name ReactivateCurrentDelegation
* @ Description : This function reativate the case previously cancelled from to do
* @ param string $sAppUid
* @ param string $iDelIndex
* @ return Fields
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function ReactivateCurrentDelegation ( $sAppUid , $iDelegation )
{
2012-07-16 19:00:47 -04:00
try {
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iDelegation );
$rowObj = AppDelegationPeer :: doSelect ( $c );
foreach ( $rowObj as $appDel ) {
$appDel -> setDelThreadStatus ( 'OPEN' );
$appDel -> setDelFinishDate ( null );
if ( $appDel -> Validate ()) {
$appDel -> Save ();
} else {
$msg = '' ;
foreach ( $this -> getValidationFailures () as $objValidationFailure ) {
$msg .= $objValidationFailure -> getMessage () . " <br/> " ;
}
throw ( new PropelException ( 'The row cannot be created!' , new PropelException ( $msg )));
}
}
} catch ( exception $e ) {
throw ( $e );
2012-07-16 14:19:52 -04:00
}
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* This function start a case using the task for the user $sUsrUid
* With this function we can Start a case
*
* @ name startCase
* @ param string $sTasUid
* @ param string $sUsrUid
* @ return Fields
2013-03-05 14:11:12 -04:00
*/
2017-02-21 16:36:51 -04:00
public function startCase ( $sTasUid , $sUsrUid , $isSubprocess = false , $dataPreviusApplication = array (), $isSelfService = false )
2012-07-16 14:19:52 -04:00
{
2012-07-16 19:00:47 -04:00
if ( $sTasUid != '' ) {
try {
2015-07-07 11:51:12 -04:00
$task = TaskPeer :: retrieveByPK ( $sTasUid );
2017-01-10 17:51:08 -04:00
$user = UsersPeer :: retrieveByPK ( $sUsrUid );
2015-07-07 11:51:12 -04:00
if ( is_null ( $task )) {
throw new Exception ( G :: LoadTranslation ( " ID_TASK_NOT_EXIST " , array ( " TAS_UID " , $sTasUid )));
}
2012-07-16 19:00:47 -04:00
//To allow Self Service as the first task
2015-07-07 11:51:12 -04:00
$arrayTaskTypeToExclude = array ( " START-TIMER-EVENT " );
if ( ! is_null ( $task ) && ! in_array ( $task -> getTasType (), $arrayTaskTypeToExclude ) && $task -> getTasAssignType () != " SELF_SERVICE " && $sUsrUid == " " ) {
2013-03-05 14:11:12 -04:00
throw ( new Exception ( 'You tried to start a new case without send the USER UID!' ));
2012-07-16 19:00:47 -04:00
}
//Process
2015-07-07 11:51:12 -04:00
$sProUid = $task -> getProUid ();
2012-07-16 19:00:47 -04:00
$this -> Process = new Process ;
$proFields = $this -> Process -> Load ( $sProUid );
//application
$Application = new Application ;
$sAppUid = $Application -> create ( $sProUid , $sUsrUid );
//appDelegation
$AppDelegation = new AppDelegation ;
$iAppThreadIndex = 1 ; // Start Thread
$iAppDelPrio = 3 ; // Priority
$iDelIndex = $AppDelegation -> createAppDelegation (
2017-01-10 17:51:08 -04:00
$sProUid ,
$sAppUid ,
$sTasUid ,
$sUsrUid ,
$iAppThreadIndex ,
$iAppDelPrio ,
$isSubprocess ,
- 1 ,
null ,
false ,
false ,
0 ,
$Application -> getAppNumber (),
$task -> getTasId (),
2017-01-24 16:25:54 -04:00
( empty ( $user )) ? 0 : $user -> getUsrId (),
2017-01-10 17:51:08 -04:00
$this -> Process -> getProId ()
2012-07-16 19:00:47 -04:00
);
//appThread
$AppThread = new AppThread ;
$iAppThreadIndex = $AppThread -> createAppThread ( $sAppUid , $iDelIndex , 0 );
2015-11-19 14:49:15 -04:00
G :: LoadClass ( 'derivation' );
$oDerivation = new Derivation ();
//Multiple Instance
$aUserFields = array ();
$taskAssignType = $task -> getTasAssignType ();
$nextTaskAssignVariable = $task -> getTasAssignVariable ();
if ( $taskAssignType == " MULTIPLE_INSTANCE " || $taskAssignType == " MULTIPLE_INSTANCE_VALUE_BASED " ){
switch ( $taskAssignType ) {
case 'MULTIPLE_INSTANCE' :
$userFields = $oDerivation -> getUsersFullNameFromArray ( $oDerivation -> getAllUsersFromAnyTask ( $sTasUid ));
break ;
default :
throw ( new Exception ( 'Invalid Task Assignment method' ));
break ;
}
$userFields = $oDerivation -> getUsersFullNameFromArray ( $oDerivation -> getAllUsersFromAnyTask ( $sTasUid ));
$count = 0 ;
foreach ( $userFields as $rowUser ){
if ( $rowUser [ " USR_UID " ] != $sUsrUid ){
2017-01-24 16:25:54 -04:00
//appDelegation
$AppDelegation = new AppDelegation ;
$iAppThreadIndex ++ ; // Start Thread
$iAppDelPrio = 3 ; // Priority
$user = UsersPeer :: retrieveByPK ( $rowUser [ " USR_UID " ]);
$iDelIndex1 = $AppDelegation -> createAppDelegation (
2017-01-10 17:51:08 -04:00
$sProUid ,
$sAppUid ,
$sTasUid ,
$rowUser [ " USR_UID " ],
$iAppThreadIndex ,
$iAppDelPrio ,
$isSubprocess ,
- 1 ,
null ,
false ,
false ,
0 ,
$Application -> getAppNumber (),
$task -> getTasId (),
2017-01-24 16:25:54 -04:00
( empty ( $user )) ? 0 : $user -> getUsrId (),
2017-01-10 17:51:08 -04:00
$this -> Process -> getProId ()
2015-11-19 14:49:15 -04:00
);
//appThread
$AppThread = new AppThread ;
$iAppThreadIndex = $AppThread -> createAppThread ( $sAppUid , $iDelIndex1 , 0 );
//Save Information
$aUserFields [ $count ] = $rowUser ;
$aUserFields [ $count ][ " DEL_INDEX " ] = $iDelIndex1 ;
$count ++ ;
}
}
}
2012-07-16 19:00:47 -04:00
//DONE: Al ya existir un delegation, se puede "calcular" el caseTitle.
$Fields = $Application -> toArray ( BasePeer :: TYPE_FIELDNAME );
$aApplicationFields = $Fields [ 'APP_DATA' ];
2016-08-04 16:38:54 -04:00
$Fields [ 'DEL_INDEX' ] = $iDelIndex ;
2013-03-05 14:11:12 -04:00
$newValues = $this -> newRefreshCaseTitleAndDescription ( $sAppUid , $Fields , $aApplicationFields );
if ( ! isset ( $newValues [ 'APP_TITLE' ])) {
$newValues [ 'APP_TITLE' ] = '' ;
2012-07-16 19:00:47 -04:00
}
$caseNumber = $Fields [ 'APP_NUMBER' ];
$Application -> update ( $Fields );
//Update the task last assigned (for web entry and web services)
$oDerivation -> setTasLastAssigned ( $sTasUid , $sUsrUid );
2013-06-26 16:37:07 -04:00
// Execute Events
require_once 'classes/model/Event.php' ;
$event = new Event ();
$event -> createAppEvents ( $sProUid , $sAppUid , $iDelIndex , $sTasUid );
2012-07-16 19:00:47 -04:00
//update searchindex
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sAppUid );
}
2015-03-06 18:06:31 -04:00
/*----------------------------------********---------------------------------*/
$Fields [ 'TAS_UID' ] = $sTasUid ;
$Fields [ 'USR_UID' ] = $sUsrUid ;
$Fields [ 'DEL_INDEX' ] = $iDelIndex ;
$Fields [ 'APP_STATUS' ] = 'TO_DO' ;
2015-03-09 15:23:38 -04:00
$Fields [ 'DEL_DELEGATE_DATE' ] = $Fields [ 'APP_INIT_DATE' ];
2015-03-06 18:06:31 -04:00
if ( ! $isSubprocess ){
$Fields [ 'APP_STATUS' ] = 'DRAFT' ;
}
2017-02-21 16:36:51 -04:00
2015-03-06 18:06:31 -04:00
$inbox = new ListInbox ();
2017-02-21 16:36:51 -04:00
$inbox -> newRow ( $Fields , $sUsrUid , $isSelfService );
2015-11-19 14:49:15 -04:00
//Multiple Instance
foreach ( $aUserFields as $rowUser ){
$Fields [ " USR_UID " ] = $rowUser [ " USR_UID " ];
$Fields [ " DEL_INDEX " ] = $rowUser [ " DEL_INDEX " ];
$inbox = new ListInbox ();
2017-02-21 16:36:51 -04:00
$inbox -> newRow ( $Fields , $sUsrUid , $isSelfService );
2015-11-19 14:49:15 -04:00
}
2015-03-06 18:06:31 -04:00
/*----------------------------------********---------------------------------*/
2012-07-16 19:00:47 -04:00
} catch ( exception $e ) {
throw ( $e );
}
} else {
throw ( new Exception ( 'You tried to start a new case without send the USER UID or TASK UID!' ));
}
2016-11-08 14:25:29 -04:00
//Log
$data = [
" appUid " => $sAppUid ,
" usrUid " => $sUsrUid ,
" tasUid " => $sTasUid ,
" isSubprocess " => $isSubprocess ,
" appNumber " => $caseNumber ,
" delIndex " => $iDelIndex ,
" appInitDate " => $Fields [ 'APP_INIT_DATE' ]
];
Bootstrap :: registerMonolog ( 'CreateCase' , 200 , " Create case " , $data , SYS_SYS , 'processmaker.log' );
2012-07-16 19:00:47 -04:00
//call plugin
if ( class_exists ( 'folderData' )) {
$folderData = new folderData (
2013-03-05 14:11:12 -04:00
$sProUid ,
$proFields [ 'PRO_TITLE' ],
$sAppUid ,
$newValues [ 'APP_TITLE' ],
$sUsrUid
2012-07-16 19:00:47 -04:00
);
$oPluginRegistry = & PMPluginRegistry :: getSingleton ();
$oPluginRegistry -> executeTriggers ( PM_CREATE_CASE , $folderData );
2010-12-02 23:34:41 +00:00
}
2016-11-11 12:15:22 -04:00
$this -> getExecuteTriggerProcess ( $sAppUid , 'CREATE' );
2012-07-16 19:00:47 -04:00
//end plugin
return array (
'APPLICATION' => $sAppUid ,
'INDEX' => $iDelIndex ,
'PROCESS' => $sProUid ,
'CASE_NUMBER' => $caseNumber
);
2012-07-16 14:19:52 -04:00
}
/*
* Get the next step
*
* @ name getNextStep
* @ param string $sProUid
* @ param string $sAppUid
* @ param integer $iDelIndex
* @ param integer $iPosition
* @ return array
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getNextStep ( $sProUid = '' , $sAppUid = '' , $iDelIndex = 0 , $iPosition = 0 )
{
2012-07-16 19:00:47 -04:00
G :: LoadClass ( 'pmScript' );
$oPMScript = new PMScript ();
$oApplication = new Application ();
2017-04-25 12:13:42 -04:00
$aFields = $oApplication -> Load ( $sAppUid );
2012-07-16 19:00:47 -04:00
if ( ! is_array ( $aFields [ 'APP_DATA' ])) {
$aFields [ 'APP_DATA' ] = G :: array_merges ( G :: getSystemConstants (), unserialize ( $aFields [ 'APP_DATA' ]));
}
$oPMScript -> setFields ( $aFields [ 'APP_DATA' ]);
2012-07-16 14:19:52 -04:00
2012-07-16 19:00:47 -04:00
try {
//get the current Delegation, and TaskUID
$c = new Criteria ( 'workflow' );
$c -> add ( AppDelegationPeer :: PRO_UID , $sProUid );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iDelIndex );
$aRow = AppDelegationPeer :: doSelect ( $c );
2012-07-16 14:19:52 -04:00
2012-07-16 19:00:47 -04:00
if ( ! isset ( $aRow [ 0 ])) {
return false ;
}
2012-07-16 14:19:52 -04:00
2012-07-16 19:00:47 -04:00
$sTaskUid = $aRow [ 0 ] -> getTasUid ();
2012-07-16 14:19:52 -04:00
2012-07-16 19:00:47 -04:00
//get max step for this task
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'MAX(' . StepPeer :: STEP_POSITION . ')' );
$c -> add ( StepPeer :: PRO_UID , $sProUid );
$c -> add ( StepPeer :: TAS_UID , $sTaskUid );
$rs = StepPeer :: doSelectRS ( $c );
$rs -> next ();
$row = $rs -> getRow ();
$iLastStep = intval ( $row [ 0 ]);
2017-05-08 13:33:34 -04:00
if ( $iPosition != 10000 && $iPosition > $iLastStep ) {
2017-04-25 09:49:02 -04:00
throw ( new Exception ( G :: LoadTranslation ( 'ID_STEP_DOES_NOT_EXIST' , array ( G :: LoadTranslation ( 'ID_POSITION' ), $iPosition ))));
2017-04-24 09:42:47 -04:00
}
2012-07-16 19:00:47 -04:00
$iPosition += 1 ;
$aNextStep = null ;
if ( $iPosition <= $iLastStep ) {
//to do: $oApplication = new Application($this->_dbc);
//to do: $oApplication->load($sApplicationUID);
//to do: G::LoadClass('pmScript');
//to do: $oPMScript = new PMScript();
//to do: $oPMScript->setFields($oApplication->Fields['APP_DATA']);
while ( $iPosition <= $iLastStep ) {
$bAccessStep = false ;
//step
$oStep = new Step ;
$oStep = $oStep -> loadByProcessTaskPosition ( $sProUid , $sTaskUid , $iPosition );
if ( $oStep ) {
if ( trim ( $oStep -> getStepCondition ()) !== '' ) {
$oPMScript -> setScript ( $oStep -> getStepCondition ());
$bAccessStep = $oPMScript -> evaluate ();
} else {
$bAccessStep = true ;
}
if ( $bAccessStep ) {
switch ( $oStep -> getStepTypeObj ()) {
case 'DYNAFORM' :
$sAction = 'EDIT' ;
break ;
case 'OUTPUT_DOCUMENT' :
$sAction = 'GENERATE' ;
break ;
case 'INPUT_DOCUMENT' :
$sAction = 'ATTACH' ;
break ;
case 'EXTERNAL' :
$sAction = 'EDIT' ;
break ;
case 'MESSAGE' :
$sAction = '' ;
break ;
}
2015-11-20 16:02:38 -04:00
if ( array_key_exists ( 'gmail' , $_SESSION ) || ( array_key_exists ( 'gmail' , $_GET ) && $_GET [ 'gmail' ] == 1 )){
2015-11-27 10:09:02 -04:00
$aNextStep = array (
'TYPE' => $oStep -> getStepTypeObj (),
'UID' => $oStep -> getStepUidObj (),
'POSITION' => $oStep -> getStepPosition (),
'PAGE' => 'cases_Step?TYPE=' . $oStep -> getStepTypeObj () . '&UID=' .
$oStep -> getStepUidObj () . '&POSITION=' . $oStep -> getStepPosition () .
2015-11-18 14:56:53 -04:00
'&ACTION=' . $sAction .
2015-11-27 10:09:02 -04:00
'&gmail=1'
2015-11-18 14:56:53 -04:00
);
} else {
$aNextStep = array (
'TYPE' => $oStep -> getStepTypeObj (),
'UID' => $oStep -> getStepUidObj (),
'POSITION' => $oStep -> getStepPosition (),
'PAGE' => 'cases_Step?TYPE=' . $oStep -> getStepTypeObj () . '&UID=' .
$oStep -> getStepUidObj () . '&POSITION=' . $oStep -> getStepPosition () .
'&ACTION=' . $sAction
);
}
2012-07-16 19:00:47 -04:00
$iPosition = $iLastStep ;
}
}
$iPosition += 1 ;
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 19:00:47 -04:00
if ( ! $aNextStep ) {
2015-11-20 16:02:38 -04:00
if ( array_key_exists ( 'gmail' , $_SESSION ) || ( array_key_exists ( 'gmail' , $_GET ) && $_GET [ 'gmail' ] == 1 )){
2015-11-18 14:56:53 -04:00
$aNextStep = array (
'TYPE' => 'DERIVATION' ,
'UID' => - 1 ,
'POSITION' => ( $iLastStep + 1 ),
'PAGE' => 'cases_Step?TYPE=ASSIGN_TASK&UID=-1&POSITION=10000&ACTION=ASSIGN&gmail=1'
);
} else {
2015-11-27 10:09:02 -04:00
$aNextStep = array (
'TYPE' => 'DERIVATION' ,
'UID' => - 1 ,
'POSITION' => ( $iLastStep + 1 ),
'PAGE' => 'cases_Step?TYPE=ASSIGN_TASK&UID=-1&POSITION=10000&ACTION=ASSIGN'
2015-11-18 14:56:53 -04:00
);
}
2012-07-16 19:00:47 -04:00
}
return $aNextStep ;
} catch ( exception $e ) {
throw ( $e );
2012-07-16 14:19:52 -04:00
}
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* Get the previous step
*
* @ name getPreviousStep
* @ param string $sProUid
* @ param string $sAppUid
* @ param integer $iDelIndex
* @ param integer $iPosition
* @ return array
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getPreviousStep ( $sProUid = '' , $sAppUid = '' , $iDelIndex = 0 , $iPosition = 0 )
{
2012-07-16 19:00:47 -04:00
//Note: Depreciated, delete in the future
G :: LoadClass ( 'pmScript' );
$oPMScript = new PMScript ();
$oApplication = new Application ();
//$aFields = $oApplication->load($sAppUid);
$oApplication = ApplicationPeer :: retrieveByPk ( $sAppUid );
$aFields = $oApplication -> toArray ( BasePeer :: TYPE_FIELDNAME );
if ( ! is_array ( $aFields [ 'APP_DATA' ])) {
$aFields [ 'APP_DATA' ] = G :: array_merges ( G :: getSystemConstants (), unserialize ( $aFields [ 'APP_DATA' ]));
2010-12-02 23:34:41 +00:00
}
2012-07-16 19:00:47 -04:00
$oPMScript -> setFields ( $aFields [ 'APP_DATA' ]);
2010-12-02 23:34:41 +00:00
2012-07-16 19:00:47 -04:00
try {
//get the current Delegation, and TaskUID
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: PRO_UID , $sProUid );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iDelIndex );
$aRow = AppDelegationPeer :: doSelect ( $c );
$sTaskUid = $aRow [ 0 ] -> getTasUid ();
$iFirstStep = 1 ;
if ( $iPosition == 10000 ) {
//get max step for this task
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'MAX(' . StepPeer :: STEP_POSITION . ')' );
$c -> add ( StepPeer :: PRO_UID , $sProUid );
$c -> add ( StepPeer :: TAS_UID , $sTaskUid );
$rs = StepPeer :: doSelectRS ( $c );
$rs -> next ();
$row = $rs -> getRow ();
$iPosition = intval ( $row [ 0 ]);
} else {
$iPosition -= 1 ;
2012-07-16 14:19:52 -04:00
}
2012-07-16 19:00:47 -04:00
$aPreviousStep = null ;
if ( $iPosition >= 1 ) {
while ( $iPosition >= $iFirstStep ) {
$bAccessStep = false ;
//step
$oStep = new Step ;
$oStep = $oStep -> loadByProcessTaskPosition ( $sProUid , $sTaskUid , $iPosition );
if ( $oStep ) {
if ( trim ( $oStep -> getStepCondition ()) !== '' ) {
$oPMScript -> setScript ( $oStep -> getStepCondition ());
$bAccessStep = $oPMScript -> evaluate ();
} else {
$bAccessStep = true ;
}
if ( $bAccessStep ) {
switch ( $oStep -> getStepTypeObj ()) {
case 'DYNAFORM' :
$sAction = 'EDIT' ;
break ;
case 'OUTPUT_DOCUMENT' :
$sAction = 'GENERATE' ;
break ;
case 'INPUT_DOCUMENT' :
$sAction = 'ATTACH' ;
break ;
case 'EXTERNAL' :
$sAction = 'EDIT' ;
break ;
case 'MESSAGE' :
$sAction = '' ;
break ;
}
$aPreviousStep = array ( 'TYPE' => $oStep -> getStepTypeObj (),
'UID' => $oStep -> getStepUidObj (),
'POSITION' => $oStep -> getStepPosition (),
'PAGE' => 'cases_Step?TYPE=' . $oStep -> getStepTypeObj () . '&UID=' .
$oStep -> getStepUidObj () . '&POSITION=' .
$oStep -> getStepPosition () . '&ACTION=' . $sAction
);
$iPosition = $iFirstStep ;
}
}
$iPosition -= 1 ;
}
}
if ( ! $aPreviousStep ) {
$aPreviousStep = false ;
}
return $aPreviousStep ;
} catch ( exception $e ) {
throw ( $e );
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* Get the next supervisor step
*
* @ name getNextSupervisorStep
* @ param string $sProcessUID
* @ param string $iPosition
* @ param integer $sType
* @ return $aNextStep
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getNextSupervisorStep ( $sProcessUID , $iPosition , $sType = 'DYNAFORM' )
{
$oCriteria = new Criteria ();
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $sProcessUID );
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , $sType );
$oCriteria -> add ( StepSupervisorPeer :: STEP_POSITION , $iPosition );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
if ( ! $aRow ) {
$oCriteria = new Criteria ();
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $sProcessUID );
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , $sType );
2015-09-24 16:17:57 -04:00
$oCriteria -> add ( StepSupervisorPeer :: STEP_POSITION , ( $iPosition + 1 ));
2012-07-16 14:19:52 -04:00
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
}
$aNextStep = array ( 'UID' => $aRow [ 'STEP_UID_OBJ' ], 'POSITION' => $aRow [ 'STEP_POSITION' ]);
return $aNextStep ;
2010-12-02 23:34:41 +00:00
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
/*
* Get the previous supervisor step
*
* @ name getPreviousSupervisorStep
* @ param string $sProcessUID
* @ param string $iPosition
* @ param integer $sType
* @ return $aNextStep
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getPreviousSupervisorStep ( $sProcessUID , $iPosition , $sType = 'DYNAFORM' )
{
$iPosition -= 1 ;
if ( $iPosition > 0 ) {
$oCriteria = new Criteria ();
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $sProcessUID );
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , $sType );
$oCriteria -> add ( StepSupervisorPeer :: STEP_POSITION , $iPosition );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
if ( ! $aRow ) {
$oCriteria = new Criteria ();
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $sProcessUID );
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , $sType );
$oCriteria -> add ( StepSupervisorPeer :: STEP_POSITION , 1 );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
}
$aNextStep = array ( 'UID' => $aRow [ 'STEP_UID_OBJ' ], 'POSITION' => $aRow [ 'STEP_POSITION' ]);
return $aNextStep ;
} else {
return false ;
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* Get the transfer History
*
* @ name getTransferHistoryCriteria
* @ param string $sAppUid
* @ return array
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getTransferHistoryCriteria ( $sAppUid )
{
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$c -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_DELEGATE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: PRO_UID );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: APP_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
///-- $c->addAsColumn('USR_NAME', "CONCAT(USR_LASTNAME, ' ', USR_FIRSTNAME)");
$sDataBase = 'database_' . strtolower ( DB_ADAPTER );
if ( G :: LoadSystemExist ( $sDataBase )) {
G :: LoadSystem ( $sDataBase );
$oDataBase = new database ();
$c -> addAsColumn ( 'USR_NAME' , $oDataBase -> concatString ( " USR_LASTNAME " , " ' ' " , " USR_FIRSTNAME " ));
2012-07-16 19:00:47 -04:00
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'DEL_FINISH_DATE' , $oDataBase -> getCaseWhen ( " DEL_FINISH_DATE IS NULL " , " '-' " , AppDelegationPeer :: DEL_FINISH_DATE )
2012-07-16 19:00:47 -04:00
);
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'APP_TYPE' , $oDataBase -> getCaseWhen ( " DEL_FINISH_DATE IS NULL " , " 'IN_PROGRESS' " , AppDelayPeer :: APP_TYPE )
2012-07-16 19:00:47 -04:00
);
2012-07-16 14:19:52 -04:00
}
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelayPeer :: APP_ENABLE_ACTION_DATE );
$c -> addSelectColumn ( AppDelayPeer :: APP_DISABLE_ACTION_DATE );
2016-07-18 14:13:01 -04:00
$c -> addSelectColumn ( TaskPeer :: TAS_TITLE );
2012-07-16 14:19:52 -04:00
//APP_DELEGATION LEFT JOIN USERS
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
//APP_DELAY FOR MORE DESCRIPTION
//$c->addJoin(AppDelegationPeer::DEL_INDEX, AppDelayPeer::APP_DEL_INDEX, Criteria::LEFT_JOIN);
//$c->addJoin(AppDelegationPeer::APP_UID, AppDelayPeer::APP_UID, Criteria::LEFT_JOIN);
$del = DBAdapter :: getStringDelimiter ();
$app = array ();
$app [] = array ( AppDelegationPeer :: DEL_INDEX , AppDelayPeer :: APP_DEL_INDEX );
$app [] = array ( AppDelegationPeer :: APP_UID , AppDelayPeer :: APP_UID );
$c -> addJoinMC ( $app , Criteria :: LEFT_JOIN );
2010-12-02 23:34:41 +00:00
2016-07-18 14:13:01 -04:00
//LEFT JOIN TASK TAS_TITLE
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
2012-07-16 14:19:52 -04:00
//WHERE
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
//ORDER BY
$c -> clearOrderByColumns ();
$c -> addAscendingOrderByColumn ( AppDelegationPeer :: DEL_DELEGATE_DATE );
return $c ;
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* Get the Criteria for To Do Cases List
* @ param string $sUIDUserLogged
* @ return array ( 'where' => Criteria , 'group' => Criteria )
* @ return array
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function prepareCriteriaForToDo ( $sUIDUserLogged )
{
// NEW QUERY
$c = new Criteria ( 'workflow' );
//$gf->clearSelectColumns();DEL_INIT_DATE
$c -> addSelectColumn ( AppCacheViewPeer :: APP_UID );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_NUMBER );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_STATUS );
$c -> addSelectColumn ( AppCacheViewPeer :: USR_UID );
$c -> addSelectColumn ( AppCacheViewPeer :: PREVIOUS_USR_UID );
$c -> addSelectColumn ( AppCacheViewPeer :: TAS_UID );
$c -> addSelectColumn ( AppCacheViewPeer :: PRO_UID );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_DELEGATE_DATE );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_INIT_DATE );
//$c->addSelectColumn(AppCacheViewPeer::DEL_TASK_DUE_DATE );
2012-07-16 19:00:47 -04:00
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'DEL_TASK_DUE_DATE' , " IF ( " . AppCacheViewPeer :: DEL_TASK_DUE_DATE . " <= NOW(), CONCAT('<span style= \ 'color:red \ ';>', " .
AppCacheViewPeer :: DEL_TASK_DUE_DATE . " , '</span>'), " . AppCacheViewPeer :: DEL_TASK_DUE_DATE . " ) "
2012-07-16 19:00:47 -04:00
);
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_THREAD_STATUS );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_THREAD_STATUS );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_TITLE );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_PRO_TITLE );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_TAS_TITLE );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_CURRENT_USER );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_DEL_PREVIOUS_USER );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_PRIORITY );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_DURATION );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_QUEUE_DURATION );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_DELAY_DURATION );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_STARTED );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_FINISHED );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_DELAYED );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_CREATE_DATE );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_FINISH_DATE );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_UPDATE_DATE );
$c -> add ( AppCacheViewPeer :: USR_UID , $sUIDUserLogged );
$c -> add ( AppCacheViewPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppCacheViewPeer :: APP_STATUS , 'TO_DO' );
$c -> add ( AppCacheViewPeer :: APP_THREAD_STATUS , 'OPEN' );
//call cleanup session vars
return $c ;
//return array ( 'where' => $cf, 'whereFilter' => $cf, 'group' => $g , 'groupFilter' => $gf );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
//DEPRECATED
/**
* Get the condition for Cases List
*
* @ name getConditionCasesList
* @ param string $sTypeList
* @ param string $sUIDUserLogged
* @ param string $ClearSession
* @ param string $aAdditionalFilter
* @ return array
2013-03-05 14:11:12 -04:00
*/
public function getConditionCasesList ( $sTypeList = 'all' , $sUIDUserLogged = '' , $ClearSession = true , $aAdditionalFilter = null )
{
2012-07-16 14:19:52 -04:00
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_UID );
2016-06-30 14:23:53 -04:00
$c -> addSelectColumn ( ApplicationPeer :: APP_TITLE );
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$c -> addSelectColumn ( ApplicationPeer :: APP_UPDATE_DATE );
$c -> addSelectColumn ( ApplicationPeer :: PRO_UID );
$c -> addSelectColumn ( ApplicationPeer :: APP_INIT_USER );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
//$c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
2012-07-16 19:00:47 -04:00
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'DEL_TASK_DUE_DATE' , " IF ( " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " <= NOW(), CONCAT('<span style= \ 'color:red \ ';>', " .
AppDelegationPeer :: DEL_TASK_DUE_DATE . " , '</span>'), " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " ) "
2012-07-16 19:00:47 -04:00
);
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
global $RBAC ;
2013-03-05 14:11:12 -04:00
//seems the PM_SUPERVISOR can delete a completed case
2012-07-16 14:19:52 -04:00
if ( $sTypeList == " completed " && $RBAC -> userCanAccess ( 'PM_SUPERVISOR' ) == 1 ) {
$c -> addAsColumn ( " DEL_LINK " , " CONCAT(' " . G :: LoadTranslation ( 'ID_DELETE' ) . " ') " );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addAsColumn ( 'APP_CURRENT_USER' , " CONCAT(USERS.USR_LASTNAME, ' ', USERS.USR_FIRSTNAME) " );
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
2016-07-18 14:13:01 -04:00
$c -> addAsColumn ( 'APP_PRO_TITLE' , ProcessPeer :: PRO_TITLE );
2016-06-28 10:59:43 -04:00
$c -> addAsColumn ( 'APP_TAS_TITLE' , TaskPeer :: TAS_TITLE );
2012-07-16 14:19:52 -04:00
//$c->addAsColumn('APP_DEL_PREVIOUS_USER', 'APP_LAST_USER.USR_USERNAME');
2012-07-16 19:00:47 -04:00
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'APP_DEL_PREVIOUS_USER' , " CONCAT(APP_LAST_USER.USR_LASTNAME,
2012-07-16 19:00:47 -04:00
' ' ,
APP_LAST_USER . USR_FIRSTNAME ) "
);
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$c -> addAlias ( " APP_PREV_DEL " , 'APP_DELEGATION' );
$c -> addAlias ( " APP_LAST_USER " , 'USERS' );
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
2016-07-18 14:13:01 -04:00
$c -> addJoin ( ApplicationPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
2012-07-16 14:19:52 -04:00
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$appThreadConds [] = array ( ApplicationPeer :: APP_UID , AppThreadPeer :: APP_UID );
$appThreadConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppThreadPeer :: DEL_INDEX );
$c -> addJoinMC ( $appThreadConds , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$prevConds = array ();
$prevConds [] = array ( ApplicationPeer :: APP_UID , 'APP_PREV_DEL.APP_UID' );
$prevConds [] = array ( 'APP_PREV_DEL.DEL_INDEX' , AppDelegationPeer :: DEL_PREVIOUS );
$c -> addJoinMC ( $prevConds , Criteria :: LEFT_JOIN );
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$usrConds = array ();
$usrConds [] = array ( 'APP_PREV_DEL.USR_UID' , 'APP_LAST_USER.USR_UID' );
$c -> addJoinMC ( $usrConds , Criteria :: LEFT_JOIN );
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$c -> add ( TaskPeer :: TAS_TYPE , 'SUBPROCESS' , Criteria :: NOT_EQUAL );
//gral, to_revise, to_reassign dont have userid in the query
2012-07-16 19:00:47 -04:00
if ( $sTypeList != 'gral' && $sTypeList != 'to_revise' && $sTypeList != 'to_reassign' &&
2013-03-05 14:11:12 -04:00
$sTypeList != 'my_started' && $sTypeList != 'sent' ) {
2012-07-16 14:19:52 -04:00
$c -> add ( UsersPeer :: USR_UID , $sUIDUserLogged );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/**
* Additional filters
* By Erik < erik @ colosa . com >
*/
if ( isset ( $aAdditionalFilter ) && is_array ( $aAdditionalFilter )) {
foreach ( $aAdditionalFilter as $sFilter => $sValue ) {
switch ( $sFilter ) {
case 'PRO_UID' :
if ( $sValue != " 0 " ) {
$c -> add ( ApplicationPeer :: PRO_UID , $sValue , Criteria :: EQUAL );
}
break ;
case 'READ' :
$c -> add ( AppDelegationPeer :: DEL_INIT_DATE , null , Criteria :: ISNOTNULL );
break ;
case 'UNREAD' :
$c -> add ( AppDelegationPeer :: DEL_INIT_DATE , null , Criteria :: ISNULL );
break ;
}
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
$filesList = array (
//7 standard list
'to_do' => 'cases/cases_ListTodo' ,
'draft' => 'cases/cases_ListDraft' ,
'paused' => 'cases/cases_ListOnHold' ,
'cancelled' => 'cases/cases_ListCancelled' ,
'completed' => 'cases/cases_ListCompleted' ,
'sent' => 'cases/cases_ListSent' ,
'selfservice' => 'cases/cases_ListSelfService' ,
//5 admin list
'all' => 'cases/cases_ListAll' ,
'to_revise' => 'cases/cases_ListToRevise' ,
'to_reassign' => 'cases/cases_ListAll_Reassign' ,
'my_started' => 'cases/cases_ListStarted' ,
'Alldelete' => 'cases/cases_ListAllDelete'
2010-12-02 23:34:41 +00:00
);
2012-07-16 14:19:52 -04:00
switch ( $sTypeList ) {
case 'all' :
$c -> add (
2013-03-05 14:11:12 -04:00
$c -> getNewCriterion (
AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' ) ->
addOr ( $c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'COMPLETED' ) ->
addAnd ( $c -> getNewCriterion ( AppDelegationPeer :: DEL_PREVIOUS , 0 )
)
)
2012-07-16 14:19:52 -04:00
);
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'my_started' :
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( AppDelayPeer :: APP_UID );
$oCriteria -> add (
2013-03-05 14:11:12 -04:00
$oCriteria -> getNewCriterion (
AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL
) -> addOr (
$oCriteria -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 )
)
2012-07-16 14:19:52 -04:00
);
//$oCriteria->add(AppDelayPeer::APP_DISABLE_ACTION_USER, null, Criteria::ISNULL);
$oDataset = AppDelayPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aProcesses = array ();
while ( $aRow = $oDataset -> getRow ()) {
$aProcesses [] = $aRow [ 'APP_UID' ];
$oDataset -> next ();
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
$c -> add ( $c -> getNewCriterion ( ApplicationPeer :: APP_INIT_USER , $sUIDUserLogged ));
$c -> add (
$c -> getNewCriterion (
2013-03-05 14:11:12 -04:00
AppThreadPeer :: APP_THREAD_STATUS , 'OPEN'
) -> addOr (
$c -> getNewCriterion (
ApplicationPeer :: APP_STATUS , 'COMPLETED'
) -> addAnd (
$c -> getNewCriterion ( AppDelegationPeer :: DEL_PREVIOUS , 0 )
)
2012-07-16 14:19:52 -04:00
)
);
$c -> add ( $c -> getNewCriterion ( ApplicationPeer :: APP_UID , $aProcesses , Criteria :: NOT_IN ));
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'to_do' :
$c -> add ( ApplicationPeer :: APP_STATUS , 'TO_DO' );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'draft' :
$c -> add ( ApplicationPeer :: APP_STATUS , 'DRAFT' );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'paused' :
$appDelayConds [] = array ( ApplicationPeer :: APP_UID , AppDelayPeer :: APP_UID );
$appDelayConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppDelayPeer :: APP_DEL_INDEX );
$c -> addJoinMC ( $appDelayConds , Criteria :: LEFT_JOIN );
$c -> add ( AppDelayPeer :: APP_DELAY_UID , null , Criteria :: ISNOTNULL );
$c -> add ( AppDelayPeer :: APP_TYPE , array ( " REASSIGN " , " ADHOC " , " CANCEL " ), Criteria :: NOT_IN );
2012-07-16 19:00:47 -04:00
$c -> add (
2013-03-05 14:11:12 -04:00
$c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL ) ->
addOr ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 ))
2012-07-16 19:00:47 -04:00
);
2012-07-16 14:19:52 -04:00
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'cancelled' :
2012-07-16 19:00:47 -04:00
$c -> add (
2013-03-05 14:11:12 -04:00
$c -> getNewCriterion ( AppThreadPeer :: APP_THREAD_STATUS , 'CLOSED' ) ->
addAnd ( $c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'CANCELLED' ))
2012-07-16 19:00:47 -04:00
);
2012-07-16 14:19:52 -04:00
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'completed' :
$c -> add ( ApplicationPeer :: APP_STATUS , 'COMPLETED' );
$c -> add ( AppDelegationPeer :: DEL_PREVIOUS , '0' , Criteria :: NOT_EQUAL );
//$c->addAsColumn('DEL_FINISH_DATE', 'max('.AppDelegationPeer::DEL_FINISH_DATE.')');
$c -> addGroupByColumn ( ApplicationPeer :: APP_UID );
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'gral' :
2012-07-16 19:00:47 -04:00
$c -> add (
2013-03-05 14:11:12 -04:00
$c -> getNewCriterion ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' ) ->
addOr ( $c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'COMPLETED' ) ->
addAnd ( $c -> getNewCriterion ( AppDelegationPeer :: DEL_PREVIOUS , 0 )))
2012-07-16 19:00:47 -04:00
);
2012-07-16 14:19:52 -04:00
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
$params = array ();
$sSql = BasePeer :: createSelectSql ( $c , $params );
break ;
case 'to_revise' :
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ProcessUserPeer :: USR_UID , $sUIDUserLogged );
$oCriteria -> add ( ProcessUserPeer :: PU_TYPE , 'SUPERVISOR' );
$oDataset = ProcessUserPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aProcesses = array ();
while ( $aRow = $oDataset -> getRow ()) {
$aProcesses [] = $aRow [ 'PRO_UID' ];
$oDataset -> next ();
}
$c -> add ( ApplicationPeer :: PRO_UID , $aProcesses , Criteria :: IN );
$c -> add ( ApplicationPeer :: APP_STATUS , 'TO_DO' );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'selfservice' :
//get the valid selfservice tasks for this user
$oCase = new Cases ();
$tasks = $oCase -> getSelfServiceTasks ( $_SESSION [ 'USER_LOGGED' ]);
$aTasks = array ();
foreach ( $tasks as $key => $val ) {
if ( strlen ( trim ( $val [ 'uid' ])) > 10 ) {
$aTasks [] = $val [ 'uid' ];
}
}
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_UID );
2016-06-30 14:23:53 -04:00
$c -> addSelectColumn ( ApplicationPeer :: APP_TITLE );
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$c -> addSelectColumn ( ApplicationPeer :: APP_UPDATE_DATE );
$c -> addSelectColumn ( ApplicationPeer :: PRO_UID );
$c -> addSelectColumn ( ApplicationPeer :: APP_INIT_USER );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
2012-07-16 19:00:47 -04:00
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'DEL_TASK_DUE_DATE' , " IF ( " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " <= NOW(),
2012-07-16 19:00:47 -04:00
CONCAT ( '<span style=\'color:red\';>' , " . AppDelegationPeer::DEL_TASK_DUE_DATE .
2013-03-05 14:11:12 -04:00
" , '</span>'), " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " ) "
2012-07-16 19:00:47 -04:00
);
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addAsColumn ( 'APP_CURRENT_USER' , " CONCAT(USERS.USR_LASTNAME, ' ', USERS.USR_FIRSTNAME) " );
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
2016-07-18 14:13:01 -04:00
$c -> addAsColumn ( 'APP_PRO_TITLE' , ProcessPeer :: PRO_TITLE );
2016-06-28 10:59:43 -04:00
$c -> addAsColumn ( 'APP_TAS_TITLE' , TaskPeer :: TAS_TITLE );
2012-07-16 14:19:52 -04:00
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
2016-07-18 14:13:01 -04:00
$c -> addJoin ( ApplicationPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
2012-07-16 14:19:52 -04:00
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$appThreadConds [] = array ( ApplicationPeer :: APP_UID , AppThreadPeer :: APP_UID );
$appThreadConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppThreadPeer :: DEL_INDEX );
$c -> addJoinMC ( $appThreadConds , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$c -> add ( AppDelegationPeer :: USR_UID , '' );
$c -> add ( AppDelegationPeer :: TAS_UID , $aTasks , Criteria :: IN );
break ;
case 'to_reassign' :
2012-07-16 19:00:47 -04:00
$c -> add (
2013-03-05 14:11:12 -04:00
$c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'TO_DO' ) ->
addOr ( $c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'DRAFT' ))
2012-07-16 19:00:47 -04:00
);
2012-07-16 14:19:52 -04:00
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'sent' :
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( AppDelayPeer :: APP_UID );
$oCriteria -> add (
2013-03-05 14:11:12 -04:00
$oCriteria -> getNewCriterion (
AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL
) -> addOr (
$oCriteria -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 )
)
2012-07-16 14:19:52 -04:00
);
$oDataset = AppDelayPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aProcesses = array ();
while ( $aRow = $oDataset -> getRow ()) {
$aProcesses [] = $aRow [ 'APP_UID' ];
$oDataset -> next ();
}
if ( isset ( $aAdditionalFilter ) && isset ( $aAdditionalFilter [ 'MINE' ])) {
$c -> add ( $c -> getNewCriterion ( ApplicationPeer :: APP_INIT_USER , $sUIDUserLogged ));
} else {
$c -> add (
$c -> getNewCriterion (
2013-03-05 14:11:12 -04:00
ApplicationPeer :: APP_INIT_USER , $sUIDUserLogged
) -> addOr (
$c -> getNewCriterion (
AppDelegationPeer :: USR_UID , $sUIDUserLogged
)
2012-07-16 14:19:52 -04:00
)
);
}
if ( isset ( $aAdditionalFilter ) && isset ( $aAdditionalFilter [ 'APP_STATUS_FILTER' ])) {
$c -> add ( ApplicationPeer :: APP_STATUS , $sValue , Criteria :: EQUAL );
} else {
$c -> add ( ApplicationPeer :: APP_STATUS , 'DRAFT' , Criteria :: NOT_EQUAL );
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
$c -> add (
$c -> getNewCriterion (
2013-03-05 14:11:12 -04:00
AppDelegationPeer :: DEL_THREAD_STATUS , 'CLOSED'
) -> addOr (
$c -> getNewCriterion (
ApplicationPeer :: APP_STATUS , 'COMPLETED'
) -> addAnd (
$c -> getNewCriterion ( AppDelegationPeer :: DEL_PREVIOUS , 0 )
)
2012-07-16 14:19:52 -04:00
)
);
$c -> add ( $c -> getNewCriterion ( ApplicationPeer :: APP_UID , $aProcesses , Criteria :: NOT_IN ));
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
//select the xmlList to show
if ( $sTypeList == 'gral' ) {
if ( $RBAC -> userCanAccess ( 'PM_DELETECASE' ) == 1 ) {
$xmlfile = $filesList [ 'Alldelete' ];
} else {
$xmlfile = $filesList [ 'all' ];
}
2010-12-02 23:34:41 +00:00
} else {
2012-07-16 14:19:52 -04:00
$xmlfile = $filesList [ $sTypeList ];
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
if ( $ClearSession ) {
//OPCION_1: claening the $_SESSION and updating the List.... only case List
foreach ( $filesList as $file ) {
$id = G :: createUID ( '' , $file . '.xml' );
unset ( $_SESSION [ 'pagedTable[' . $id . ']' ]);
unset ( $_SESSION [ $id ]);
}
//OPTION_2: cleaning the $_SESSION and whole List and xmls
$cur = array_keys ( $_SESSION );
foreach ( $cur as $key ) {
if ( substr ( $key , 0 , 11 ) === " pagedTable[ " ) {
unset ( $_SESSION [ $key ]);
} else {
$xml = G :: getUIDName ( $key , '' );
if ( strpos ( $xml , '.xml' ) !== false ) {
unset ( $_SESSION [ $key ]);
}
}
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
return array ( $c , $xmlfile );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/*
* Get a case in its current index
*
* @ name loadCaseInCurrentDelegation
* @ param string $sTypeList
* @ param string $sUIDUserLogged
* @ Author Erik Amaru Ortiz < erik @ colosa . com >
* @ return array
2013-03-05 14:11:12 -04:00
*/
Performance improvement in the reassign
- Improvement for the query:
SELECT APPLICATION.APP_UID, APPLICATION.APP_NUMBER, APPLICATION.APP_STATUS, APPLICATION.PRO_UID, APPLICATION.APP_CREATE_DATE, APPLICATION.APP_FINISH_DATE, APPLICATION.APP_UPDATE_DATE, APPLICATION.APP_DATA, ad.DEL_INDEX, ad.DEL_PREVIOUS, ad.TAS_UID, ad.USR_UID, ad.DEL_TYPE, ad.DEL_THREAD, ad.DEL_THREAD_STATUS, ad.DEL_PRIORITY, ad.DEL_DELEGATE_DATE, ad.DEL_INIT_DATE, ad.DEL_TASK_DUE_DATE, ad.DEL_FINISH_DATE, ad.DEL_DURATION, ad.DEL_QUEUE_DURATION, ad.DEL_DELAY_DURATION, ad.DEL_STARTED, ad.DEL_FINISHED, ad.DEL_DELAYED, ad.APP_OVERDUE_PERCENTAGE, at.APP_THREAD_INDEX, at.APP_THREAD_PARENT, at.APP_THREAD_STATUS, capp.CON_VALUE AS APP_TITLE, cpro.CON_VALUE AS PRO_TITLE FROM APPLICATION JOIN APP_DELEGATION ad ON (APPLICATION.APP_UID=ad.APP_UID) LEFT JOIN CONTENT capp ON (APPLICATION.APP_UID=capp.CON_ID AND capp.CON_CATEGORY='?' AND capp.CON_LANG='?') LEFT JOIN CONTENT cpro ON (APPLICATION.PRO_UID=cpro.CON_ID AND cpro.CON_CATEGORY='?' AND cpro.CON_LANG='?') JOIN APP_THREAD at ON (ad.APP_UID=at.APP_UID AND ad.DEL_THREAD=at.APP_THREAD_INDEX) WHERE APPLICATION.APP_UID='?'
2012-09-25 17:06:25 -04:00
public function loadCaseInCurrentDelegation ( $APP_UID , $titles = false )
2012-07-16 14:19:52 -04:00
{
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_UID );
$c -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$c -> addSelectColumn ( ApplicationPeer :: APP_UPDATE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
//$c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'DEL_TASK_DUE_DATE' , " IF ( " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " <= NOW(),
2012-07-16 14:19:52 -04:00
" . AppDelegationPeer::DEL_TASK_DUE_DATE . " ,
" . AppDelegationPeer::DEL_TASK_DUE_DATE . " ) "
);
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addAsColumn ( 'APP_CURRENT_USER' , " CONCAT(USERS.USR_LASTNAME, ' ', USERS.USR_FIRSTNAME) " );
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
Performance improvement in the reassign
- Improvement for the query:
SELECT APPLICATION.APP_UID, APPLICATION.APP_NUMBER, APPLICATION.APP_STATUS, APPLICATION.PRO_UID, APPLICATION.APP_CREATE_DATE, APPLICATION.APP_FINISH_DATE, APPLICATION.APP_UPDATE_DATE, APPLICATION.APP_DATA, ad.DEL_INDEX, ad.DEL_PREVIOUS, ad.TAS_UID, ad.USR_UID, ad.DEL_TYPE, ad.DEL_THREAD, ad.DEL_THREAD_STATUS, ad.DEL_PRIORITY, ad.DEL_DELEGATE_DATE, ad.DEL_INIT_DATE, ad.DEL_TASK_DUE_DATE, ad.DEL_FINISH_DATE, ad.DEL_DURATION, ad.DEL_QUEUE_DURATION, ad.DEL_DELAY_DURATION, ad.DEL_STARTED, ad.DEL_FINISHED, ad.DEL_DELAYED, ad.APP_OVERDUE_PERCENTAGE, at.APP_THREAD_INDEX, at.APP_THREAD_PARENT, at.APP_THREAD_STATUS, capp.CON_VALUE AS APP_TITLE, cpro.CON_VALUE AS PRO_TITLE FROM APPLICATION JOIN APP_DELEGATION ad ON (APPLICATION.APP_UID=ad.APP_UID) LEFT JOIN CONTENT capp ON (APPLICATION.APP_UID=capp.CON_ID AND capp.CON_CATEGORY='?' AND capp.CON_LANG='?') LEFT JOIN CONTENT cpro ON (APPLICATION.PRO_UID=cpro.CON_ID AND cpro.CON_CATEGORY='?' AND cpro.CON_LANG='?') JOIN APP_THREAD at ON (ad.APP_UID=at.APP_UID AND ad.DEL_THREAD=at.APP_THREAD_INDEX) WHERE APPLICATION.APP_UID='?'
2012-09-25 17:06:25 -04:00
if ( $titles ) {
2016-06-30 14:23:53 -04:00
$c -> addSelectColumn ( ApplicationPeer :: APP_TITLE );
2016-07-18 14:13:01 -04:00
$c -> addAsColumn ( 'APP_PRO_TITLE' , ProcessPeer :: PRO_TITLE );
2016-06-28 10:59:43 -04:00
$c -> addAsColumn ( 'APP_TAS_TITLE' , TaskPeer :: TAS_TITLE );
Performance improvement in the reassign
- Improvement for the query:
SELECT APPLICATION.APP_UID, APPLICATION.APP_NUMBER, APPLICATION.APP_STATUS, APPLICATION.PRO_UID, APPLICATION.APP_CREATE_DATE, APPLICATION.APP_FINISH_DATE, APPLICATION.APP_UPDATE_DATE, APPLICATION.APP_DATA, ad.DEL_INDEX, ad.DEL_PREVIOUS, ad.TAS_UID, ad.USR_UID, ad.DEL_TYPE, ad.DEL_THREAD, ad.DEL_THREAD_STATUS, ad.DEL_PRIORITY, ad.DEL_DELEGATE_DATE, ad.DEL_INIT_DATE, ad.DEL_TASK_DUE_DATE, ad.DEL_FINISH_DATE, ad.DEL_DURATION, ad.DEL_QUEUE_DURATION, ad.DEL_DELAY_DURATION, ad.DEL_STARTED, ad.DEL_FINISHED, ad.DEL_DELAYED, ad.APP_OVERDUE_PERCENTAGE, at.APP_THREAD_INDEX, at.APP_THREAD_PARENT, at.APP_THREAD_STATUS, capp.CON_VALUE AS APP_TITLE, cpro.CON_VALUE AS PRO_TITLE FROM APPLICATION JOIN APP_DELEGATION ad ON (APPLICATION.APP_UID=ad.APP_UID) LEFT JOIN CONTENT capp ON (APPLICATION.APP_UID=capp.CON_ID AND capp.CON_CATEGORY='?' AND capp.CON_LANG='?') LEFT JOIN CONTENT cpro ON (APPLICATION.PRO_UID=cpro.CON_ID AND cpro.CON_CATEGORY='?' AND cpro.CON_LANG='?') JOIN APP_THREAD at ON (ad.APP_UID=at.APP_UID AND ad.DEL_THREAD=at.APP_THREAD_INDEX) WHERE APPLICATION.APP_UID='?'
2012-09-25 17:06:25 -04:00
}
2012-07-16 14:19:52 -04:00
//$c->addAsColumn('APP_DEL_PREVIOUS_USER', 'APP_LAST_USER.USR_USERNAME');
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'APP_DEL_PREVIOUS_USER' , " CONCAT(APP_LAST_USER.USR_LASTNAME, ' ', APP_LAST_USER.USR_FIRSTNAME) " );
2012-07-16 14:19:52 -04:00
$c -> addAlias ( " APP_PREV_DEL " , 'APP_DELEGATION' );
$c -> addAlias ( " APP_LAST_USER " , 'USERS' );
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$appThreadConds [] = array ( ApplicationPeer :: APP_UID , AppThreadPeer :: APP_UID );
$appThreadConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppThreadPeer :: DEL_INDEX );
$c -> addJoinMC ( $appThreadConds , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
Performance improvement in the reassign
- Improvement for the query:
SELECT APPLICATION.APP_UID, APPLICATION.APP_NUMBER, APPLICATION.APP_STATUS, APPLICATION.PRO_UID, APPLICATION.APP_CREATE_DATE, APPLICATION.APP_FINISH_DATE, APPLICATION.APP_UPDATE_DATE, APPLICATION.APP_DATA, ad.DEL_INDEX, ad.DEL_PREVIOUS, ad.TAS_UID, ad.USR_UID, ad.DEL_TYPE, ad.DEL_THREAD, ad.DEL_THREAD_STATUS, ad.DEL_PRIORITY, ad.DEL_DELEGATE_DATE, ad.DEL_INIT_DATE, ad.DEL_TASK_DUE_DATE, ad.DEL_FINISH_DATE, ad.DEL_DURATION, ad.DEL_QUEUE_DURATION, ad.DEL_DELAY_DURATION, ad.DEL_STARTED, ad.DEL_FINISHED, ad.DEL_DELAYED, ad.APP_OVERDUE_PERCENTAGE, at.APP_THREAD_INDEX, at.APP_THREAD_PARENT, at.APP_THREAD_STATUS, capp.CON_VALUE AS APP_TITLE, cpro.CON_VALUE AS PRO_TITLE FROM APPLICATION JOIN APP_DELEGATION ad ON (APPLICATION.APP_UID=ad.APP_UID) LEFT JOIN CONTENT capp ON (APPLICATION.APP_UID=capp.CON_ID AND capp.CON_CATEGORY='?' AND capp.CON_LANG='?') LEFT JOIN CONTENT cpro ON (APPLICATION.PRO_UID=cpro.CON_ID AND cpro.CON_CATEGORY='?' AND cpro.CON_LANG='?') JOIN APP_THREAD at ON (ad.APP_UID=at.APP_UID AND ad.DEL_THREAD=at.APP_THREAD_INDEX) WHERE APPLICATION.APP_UID='?'
2012-09-25 17:06:25 -04:00
if ( $titles ) {
2016-07-18 14:13:01 -04:00
$c -> addJoin ( ApplicationPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
Performance improvement in the reassign
- Improvement for the query:
SELECT APPLICATION.APP_UID, APPLICATION.APP_NUMBER, APPLICATION.APP_STATUS, APPLICATION.PRO_UID, APPLICATION.APP_CREATE_DATE, APPLICATION.APP_FINISH_DATE, APPLICATION.APP_UPDATE_DATE, APPLICATION.APP_DATA, ad.DEL_INDEX, ad.DEL_PREVIOUS, ad.TAS_UID, ad.USR_UID, ad.DEL_TYPE, ad.DEL_THREAD, ad.DEL_THREAD_STATUS, ad.DEL_PRIORITY, ad.DEL_DELEGATE_DATE, ad.DEL_INIT_DATE, ad.DEL_TASK_DUE_DATE, ad.DEL_FINISH_DATE, ad.DEL_DURATION, ad.DEL_QUEUE_DURATION, ad.DEL_DELAY_DURATION, ad.DEL_STARTED, ad.DEL_FINISHED, ad.DEL_DELAYED, ad.APP_OVERDUE_PERCENTAGE, at.APP_THREAD_INDEX, at.APP_THREAD_PARENT, at.APP_THREAD_STATUS, capp.CON_VALUE AS APP_TITLE, cpro.CON_VALUE AS PRO_TITLE FROM APPLICATION JOIN APP_DELEGATION ad ON (APPLICATION.APP_UID=ad.APP_UID) LEFT JOIN CONTENT capp ON (APPLICATION.APP_UID=capp.CON_ID AND capp.CON_CATEGORY='?' AND capp.CON_LANG='?') LEFT JOIN CONTENT cpro ON (APPLICATION.PRO_UID=cpro.CON_ID AND cpro.CON_CATEGORY='?' AND cpro.CON_LANG='?') JOIN APP_THREAD at ON (ad.APP_UID=at.APP_UID AND ad.DEL_THREAD=at.APP_THREAD_INDEX) WHERE APPLICATION.APP_UID='?'
2012-09-25 17:06:25 -04:00
}
2012-07-16 14:19:52 -04:00
$prevConds = array ();
$prevConds [] = array ( ApplicationPeer :: APP_UID , 'APP_PREV_DEL.APP_UID' );
$prevConds [] = array ( 'APP_PREV_DEL.DEL_INDEX' , AppDelegationPeer :: DEL_PREVIOUS );
$c -> addJoinMC ( $prevConds , Criteria :: LEFT_JOIN );
$usrConds = array ();
$usrConds [] = array ( 'APP_PREV_DEL.USR_UID' , 'APP_LAST_USER.USR_UID' );
$c -> addJoinMC ( $usrConds , Criteria :: LEFT_JOIN );
$c -> add ( TaskPeer :: TAS_TYPE , 'SUBPROCESS' , Criteria :: NOT_EQUAL );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> add ( ApplicationPeer :: APP_UID , $APP_UID );
$oDataset = ApplicationPeer :: doSelectRS ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$row = $oDataset -> getRow ();
return $row ;
}
/**
* Get a case in its current index
*
* @ name loadCaseByDelegation
* @ param string $appUid ,
* @ param string $delIndex
* @ author gustavo cruz
* @ return array
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function loadCaseByDelegation ( $appUid , $delIndex )
{
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_UID );
2016-06-30 14:23:53 -04:00
$c -> addSelectColumn ( ApplicationPeer :: APP_TITLE );
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$c -> addSelectColumn ( ApplicationPeer :: APP_UPDATE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
//$c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'DEL_TASK_DUE_DATE' , " IF ( " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " <= NOW(), " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " ,
2012-07-16 14:19:52 -04:00
" . AppDelegationPeer::DEL_TASK_DUE_DATE . " ) "
);
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addAsColumn ( 'APP_CURRENT_USER' , " CONCAT(USERS.USR_LASTNAME, ' ', USERS.USR_FIRSTNAME) " );
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
2016-07-18 14:13:01 -04:00
$c -> addAsColumn ( 'APP_PRO_TITLE' , ProcessPeer :: PRO_TITLE );
2016-06-28 10:59:43 -04:00
$c -> addAsColumn ( 'APP_TAS_TITLE' , TaskPeer :: TAS_TITLE );
2012-07-16 14:19:52 -04:00
//$c->addAsColumn('APP_DEL_PREVIOUS_USER', 'APP_LAST_USER.USR_USERNAME');
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'APP_DEL_PREVIOUS_USER' , " CONCAT(APP_LAST_USER.USR_LASTNAME, ' ', APP_LAST_USER.USR_FIRSTNAME) " );
2012-07-16 14:19:52 -04:00
$c -> addAlias ( " APP_PREV_DEL " , 'APP_DELEGATION' );
$c -> addAlias ( " APP_LAST_USER " , 'USERS' );
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
2016-07-18 14:13:01 -04:00
$c -> addJoin ( ApplicationPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
2012-07-16 14:19:52 -04:00
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$appThreadConds [] = array ( ApplicationPeer :: APP_UID , AppThreadPeer :: APP_UID );
$appThreadConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppThreadPeer :: DEL_INDEX );
$c -> addJoinMC ( $appThreadConds , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$prevConds = array ();
$prevConds [] = array ( ApplicationPeer :: APP_UID , 'APP_PREV_DEL.APP_UID' );
$prevConds [] = array ( 'APP_PREV_DEL.DEL_INDEX' , AppDelegationPeer :: DEL_PREVIOUS );
$c -> addJoinMC ( $prevConds , Criteria :: LEFT_JOIN );
$usrConds = array ();
$usrConds [] = array ( 'APP_PREV_DEL.USR_UID' , 'APP_LAST_USER.USR_UID' );
$c -> addJoinMC ( $usrConds , Criteria :: LEFT_JOIN );
$c -> add ( TaskPeer :: TAS_TYPE , 'SUBPROCESS' , Criteria :: NOT_EQUAL );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> add ( ApplicationPeer :: APP_UID , $appUid );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $delIndex );
$oDataset = ApplicationPeer :: doSelectRS ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$row = $oDataset -> getRow ();
return $row ;
}
/**
*
* @ name ThrowUnpauseDaemon
* author : erik @ colosa . com
* Description : This method set all cases with the APP_DISABLE_ACTION_DATE for today
* @ return void
*/
2013-03-05 14:11:12 -04:00
public function ThrowUnpauseDaemon ( $today , $cron = 0 )
2012-07-16 14:19:52 -04:00
{
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> add (
2015-10-02 12:25:04 -04:00
$c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 , Criteria :: EQUAL ) -> addOr (
$c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL ))
2012-07-16 14:19:52 -04:00
);
$c -> add (
2015-10-02 12:25:04 -04:00
$c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_DATE , ( count ( explode ( " " , $today )) > 1 ) ? $today : $today . " 23:59:59 " , Criteria :: LESS_EQUAL ) -> addAnd (
$c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_DATE , null , Criteria :: ISNOTNULL ))
2012-07-16 14:19:52 -04:00
);
$d = AppDelayPeer :: doSelectRS ( $c );
$d -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$d -> next ();
2012-09-03 11:32:52 -04:00
2012-07-16 14:19:52 -04:00
while ( $aRow = $d -> getRow ()) {
2012-09-03 11:32:52 -04:00
if ( $cron == 1 ) {
$arrayCron = unserialize ( trim ( @ file_get_contents ( PATH_DATA . " cron " )));
$arrayCron [ " processcTimeStart " ] = time ();
@ file_put_contents ( PATH_DATA . " cron " , serialize ( $arrayCron ));
}
2012-07-16 14:19:52 -04:00
$this -> unpauseCase ( $aRow [ 'APP_UID' ], $aRow [ 'APP_DEL_INDEX' ], 'System Daemon' );
$d -> next ();
}
}
/*
* it Changes the date and APP_DISABLE_ACTION_USER to unpause cases
*
* @ name UnpauseRoutedCasesWithPauseFlagEnabled
* @ param string $usrLogged
* @ return void
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function UnpauseRoutedCasesWithPauseFlagEnabled ( $usrLogged )
{
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( AppDelayPeer :: APP_DELAY_UID );
$c -> add (
2013-03-05 14:11:12 -04:00
$c -> getNewCriterion (
AppDelayPeer :: APP_DELEGATION_USER , $usrLogged , Criteria :: EQUAL ) ->
addAnd ( $c -> getNewCriterion ( AppDelegationPeer :: DEL_THREAD_STATUS , 'CLOSED' , Criteria :: EQUAL )) ->
addAnd ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL ) ->
addOr ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 ))
)
2012-07-16 14:19:52 -04:00
);
$aConditions = array ();
$aConditions [] = array ( AppDelayPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDelayPeer :: APP_DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$rs = AppDelayPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
while ( $rs -> next ()) {
$row = $rs -> getRow ();
if ( is_array ( $row )) {
$con = Propel :: getConnection ( 'workflow' );
$c1 = new Criteria ( 'workflow' );
$c1 -> add ( AppDelayPeer :: APP_DELAY_UID , $row [ 'APP_DELAY_UID' ]);
// update set
$c2 = new Criteria ( 'workflow' );
$c2 -> add ( AppDelayPeer :: APP_DISABLE_ACTION_USER , $usrLogged );
$c2 -> add ( AppDelayPeer :: APP_DISABLE_ACTION_DATE , date ( 'Y-m-d' ));
2013-03-05 14:11:12 -04:00
BasePeer :: doUpdate ( $c1 , $c2 , $con );
2012-07-16 14:19:52 -04:00
}
}
}
/*
* Get the application UID by case number
*
* @ name getApplicationUIDByNumber
* @ param integer $iApplicationNumber
* @ return string
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getApplicationUIDByNumber ( $iApplicationNumber )
{
$oCriteria = new Criteria ();
$oCriteria -> add ( ApplicationPeer :: APP_NUMBER , $iApplicationNumber );
$oApplication = ApplicationPeer :: doSelectOne ( $oCriteria );
if ( ! is_null ( $oApplication )) {
return $oApplication -> getAppUid ();
} else {
return null ;
}
}
/*
* Get the current delegation of a user or a case
* @ name getCurrentDelegation
* @ param string $sApplicationUID
* @ param string $sUserUID
* @ return integer
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getCurrentDelegation ( $sApplicationUID = '' , $sUserUID = '' )
{
$oCriteria = new Criteria ();
$oCriteria -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDelegationPeer :: USR_UID , $sUserUID );
$oCriteria -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$oCriteria -> addDescendingOrderByColumn ( AppDelegationPeer :: DEL_DELEGATE_DATE );
$oApplication = AppDelegationPeer :: doSelectOne ( $oCriteria );
if ( ! is_null ( $oApplication )) {
return $oApplication -> getDelIndex ();
}
//if the user is not in the task, we need to return a valid del index, so we are returning the latest delindex
$oCriteria = new Criteria ();
$oCriteria -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria -> addDescendingOrderByColumn ( AppDelegationPeer :: DEL_DELEGATE_DATE );
$oApplication = AppDelegationPeer :: doSelectOne ( $oCriteria );
if ( ! is_null ( $oApplication )) {
return $oApplication -> getDelIndex ();
}
throw ( new Exception ( 'this case has 0 delegations' ) );
}
/*
* Get the current delegation of a user or a case
* @ name loadTriggers
* @ param string $sTasUid
* @ param string $sStepType
* @ param array $sStepUidObj
* @ param string $sTriggerType
* @ return integer
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function loadTriggers ( $sTasUid , $sStepType , $sStepUidObj , $sTriggerType )
{
$aTriggers = array ();
if (( $sStepUidObj != - 1 ) && ( $sStepUidObj != - 2 )) {
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( StepPeer :: STEP_UID );
$c -> add ( StepPeer :: TAS_UID , $sTasUid );
$c -> add ( StepPeer :: STEP_TYPE_OBJ , $sStepType );
$c -> add ( StepPeer :: STEP_UID_OBJ , $sStepUidObj );
$rs = StepPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
$sStepUid = $row [ 'STEP_UID' ];
} else {
$sStepUid = $sStepUidObj ;
}
2014-11-19 16:47:22 -04:00
2012-07-16 14:19:52 -04:00
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TriggersPeer :: TRI_UID );
2016-12-01 09:32:35 -05:00
$c -> addSelectColumn ( TriggersPeer :: TRI_TITLE );
2012-07-16 14:19:52 -04:00
$c -> addSelectColumn ( StepTriggerPeer :: ST_CONDITION );
$c -> addSelectColumn ( TriggersPeer :: TRI_TYPE );
$c -> addSelectColumn ( TriggersPeer :: TRI_WEBBOT );
2014-11-19 16:47:22 -04:00
2012-07-16 14:19:52 -04:00
$c -> add ( StepTriggerPeer :: STEP_UID , $sStepUid );
$c -> add ( StepTriggerPeer :: TAS_UID , $sTasUid );
$c -> add ( StepTriggerPeer :: ST_TYPE , $sTriggerType );
$c -> addJoin ( StepTriggerPeer :: TRI_UID , TriggersPeer :: TRI_UID , Criteria :: LEFT_JOIN );
$c -> addAscendingOrderByColumn ( StepTriggerPeer :: ST_POSITION );
$rs = TriggersPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2014-11-19 16:47:22 -04:00
while ( $rs -> next ()) {
2012-07-16 14:19:52 -04:00
$row = $rs -> getRow ();
2014-11-19 16:47:22 -04:00
$aTriggers [] = $row ;
2012-07-16 14:19:52 -04:00
}
2014-11-19 16:47:22 -04:00
2012-07-16 14:19:52 -04:00
return $aTriggers ;
}
/*
* Execute trigger in task
* @ name executeTriggers
* @ param string $sTasUid
* @ param string $sStepType
* @ param array $sStepUidObj
* @ param string $sTriggerType
* @ param array $aFields
* @ return integer
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function executeTriggers ( $sTasUid , $sStepType , $sStepUidObj , $sTriggerType , $aFields = array ())
{
2014-12-23 17:22:42 -04:00
/*----------------------------------********---------------------------------*/
2014-11-19 16:47:22 -04:00
G :: LoadClass ( " codeScanner " );
2014-12-23 17:22:42 -04:00
/*----------------------------------********---------------------------------*/
2014-11-19 16:47:22 -04:00
2012-07-16 14:19:52 -04:00
$aTriggers = $this -> loadTriggers ( $sTasUid , $sStepType , $sStepUidObj , $sTriggerType );
2014-11-19 16:47:22 -04:00
2012-07-16 14:19:52 -04:00
if ( count ( $aTriggers ) > 0 ) {
global $oPMScript ;
2014-11-19 16:47:22 -04:00
2012-07-16 14:19:52 -04:00
$oPMScript = new PMScript ();
$oPMScript -> setFields ( $aFields );
2014-11-19 16:47:22 -04:00
2014-12-23 17:22:42 -04:00
/*----------------------------------********---------------------------------*/
2016-07-19 14:26:51 -04:00
$cs = new CodeScanner ( SYS_SYS );
2015-06-01 14:15:53 -04:00
2014-11-19 16:47:22 -04:00
$strFoundDisabledCode = " " ;
2014-12-23 17:22:42 -04:00
/*----------------------------------********---------------------------------*/
2014-11-19 16:47:22 -04:00
2012-07-16 14:19:52 -04:00
foreach ( $aTriggers as $aTrigger ) {
2014-12-23 17:22:42 -04:00
/*----------------------------------********---------------------------------*/
2015-06-01 14:15:53 -04:00
if ( PMLicensedFeatures :: getSingleton () -> verifyfeature ( " B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4= " )) {
//Check disabled code
$arrayFoundDisabledCode = $cs -> checkDisabledCode ( " SOURCE " , $aTrigger [ " TRI_WEBBOT " ]);
2014-11-19 16:47:22 -04:00
2015-06-01 14:15:53 -04:00
if ( ! empty ( $arrayFoundDisabledCode )) {
$strCodeAndLine = " " ;
2014-11-19 16:47:22 -04:00
2015-06-01 14:15:53 -04:00
foreach ( $arrayFoundDisabledCode [ " source " ] as $key => $value ) {
$strCodeAndLine .= (( $strCodeAndLine != " " ) ? " , " : " " ) . G :: LoadTranslation ( " ID_DISABLED_CODE_CODE_AND_LINE " , array ( $key , implode ( " , " , $value )));
}
2014-11-19 16:47:22 -04:00
2015-06-01 14:15:53 -04:00
$strFoundDisabledCode .= " <br />- " . $aTrigger [ " TRI_TITLE " ] . " : " . $strCodeAndLine ;
continue ;
}
2014-11-19 16:47:22 -04:00
}
2014-12-23 17:22:42 -04:00
/*----------------------------------********---------------------------------*/
2015-06-01 14:15:53 -04:00
2014-11-19 16:47:22 -04:00
//Execute
2012-07-16 14:19:52 -04:00
$bExecute = true ;
2014-11-19 16:47:22 -04:00
2012-07-16 14:19:52 -04:00
if ( $aTrigger [ 'ST_CONDITION' ] !== '' ) {
$oPMScript -> setScript ( $aTrigger [ 'ST_CONDITION' ]);
$bExecute = $oPMScript -> evaluate ();
}
2014-11-19 16:47:22 -04:00
2012-07-16 14:19:52 -04:00
if ( $bExecute ) {
$oPMScript -> setScript ( $aTrigger [ 'TRI_WEBBOT' ]);
$oPMScript -> execute ();
2016-07-19 14:26:51 -04:00
$this -> arrayTriggerExecutionTime [ $aTrigger [ 'TRI_UID' ]] = $oPMScript -> scriptExecutionTime ;
2012-07-16 14:19:52 -04:00
}
}
2014-12-23 17:22:42 -04:00
/*----------------------------------********---------------------------------*/
2014-11-19 16:47:22 -04:00
if ( $strFoundDisabledCode != " " ) {
G :: SendTemporalMessage ( G :: LoadTranslation ( " ID_DISABLED_CODE_TRIGGER_TO_EXECUTE " , array ( $strFoundDisabledCode )), " " , " string " );
}
2014-12-23 17:22:42 -04:00
/*----------------------------------********---------------------------------*/
2014-11-19 16:47:22 -04:00
2012-07-16 14:19:52 -04:00
return $oPMScript -> aFields ;
} else {
return $aFields ;
}
}
/*
* Get the trigger ' s names
* @ name getTriggerNames
* @ param string $triggers
* @ return integer
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getTriggerNames ( $triggers )
{
2016-12-01 09:32:35 -05:00
$triggers_info = array ();
2012-07-16 14:19:52 -04:00
$aTriggers = array ();
foreach ( $triggers as $key => $val ) {
$aTriggers [] = $val [ 'TRI_UID' ];
}
$c = new Criteria ();
$c -> clearSelectColumns ();
2016-12-01 09:32:35 -05:00
$c -> addSelectColumn ( TriggersPeer :: TRI_TITLE );
$c -> add ( TriggersPeer :: TRI_UID , $aTriggers , Criteria :: IN );
2012-07-16 14:19:52 -04:00
$rs = TriggersPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
2016-12-01 09:32:35 -05:00
while ( $row = $rs -> getRow ()) {
$triggers_info [] = $row [ 'TRI_TITLE' ];
2012-07-16 14:19:52 -04:00
$rs -> next ();
}
return $triggers_info ;
}
/*
* Return the input documents list criteria object
*
* @ name getInputDocumentsCriteria
* @ param string $sApplicationUID
* @ param string $iDelegation
* @ param string $sDocumentUID
* @ param string $sAppDocuUID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getInputDocumentsCriteria ( $sApplicationUID , $iDelegation , $sDocumentUID , $sAppDocuUID = '' )
{
try {
2012-10-10 11:34:07 -04:00
$deletePermission = $this -> getAllObjectsFrom (
2013-03-05 14:11:12 -04:00
$_SESSION [ 'PROCESS' ], $sApplicationUID , $_SESSION [ 'TASK' ], $_SESSION [ 'USER_LOGGED' ], $ACTION = 'DELETE'
2012-10-10 11:34:07 -04:00
);
2012-07-16 14:19:52 -04:00
$listing = false ;
$oPluginRegistry = & PMPluginRegistry :: getSingleton ();
if ( $oPluginRegistry -> existsTrigger ( PM_CASE_DOCUMENT_LIST )) {
$folderData = new folderData ( null , null , $sApplicationUID , null , $_SESSION [ 'USER_LOGGED' ]);
$folderData -> PMType = " INPUT " ;
$folderData -> returnList = true ;
$listing = $oPluginRegistry -> executeTriggers ( PM_CASE_DOCUMENT_LIST , $folderData );
}
$oUser = new Users ();
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: DOC_UID , $sDocumentUID );
if ( $sAppDocuUID != " " ) {
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_UID , $sAppDocuUID );
}
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , array ( 'INPUT' , 'ATTACHED' ), CRITERIA :: IN );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_UID );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aInputDocuments = array ();
$aInputDocuments [] = array (
'APP_DOC_UID' => 'char' ,
'DOC_VERSION' => 'char' ,
'DOC_UID' => 'char' ,
'APP_DOC_COMMENT' => 'char' ,
'APP_DOC_FILENAME' => 'char' ,
'APP_DOC_INDEX' => 'integer'
);
2015-11-09 13:58:34 -04:00
2012-07-16 14:19:52 -04:00
while ( $aRow = $oDataset -> getRow ()) {
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$lastVersion = $oAppDocument -> getLastAppDocVersion ( $aRow [ 'APP_DOC_UID' ], $sApplicationUID );
$aFields = array (
'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_VERSION' => $aAux [ 'DOC_VERSION' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ]
);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'POSITION' ] = isset ( $_SESSION [ 'STEP_POSITION' ]) ? $_SESSION [ 'STEP_POSITION' ] : 1 ;
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_INPUT_AND_HISTORY' );
2012-10-10 11:30:32 -04:00
$aFields [ 'ID_DELETE' ] = '' ;
if ( in_array ( $aRow [ 'APP_DOC_UID' ], $deletePermission [ 'INPUT_DOCUMENTS' ])) {
$aFields [ 'ID_DELETE' ] = G :: LoadTranslation ( 'ID_DELETE' );
}
2012-07-16 14:19:52 -04:00
$aFields [ 'REPLACE_LABEL' ] = " " ;
if (( $aRow [ 'DOC_VERSION' ] == $lastVersion ) || ( $sAppDocuUID != " " )) {
$aFields [ 'REPLACE_LABEL' ] = G :: LoadTranslation ( 'ID_REPLACE' );
$oInputDocument = new InputDocument ();
$inputDocumentFields = $oInputDocument -> load ( $aRow [ 'DOC_UID' ]);
if ( $inputDocumentFields [ 'INP_DOC_VERSIONING' ]) {
$aFields [ 'NEWVERSION_LABEL' ] = G :: LoadTranslation ( 'ID_NEW_VERSION' );
}
}
if ( $aRow [ 'DOC_VERSION' ] > 1 ) {
$aFields [ 'VERSIONHISTORY_LABEL' ] = G :: LoadTranslation ( 'ID_VERSION_HISTORY' );
}
if ( $aRow [ 'USR_UID' ] != - 1 ) {
$aUser = $oUser -> load ( $aRow [ 'USR_UID' ]);
$aFields [ 'CREATOR' ] = $aUser [ 'USR_FIRSTNAME' ] . ' ' . $aUser [ 'USR_LASTNAME' ];
} else {
$aFields [ 'CREATOR' ] = '***' ;
}
$aFields [ 'APP_DOC_CREATE_DATE' ] = $aRow [ 'APP_DOC_CREATE_DATE' ];
$aFields [ 'DOC_VERSION_LABEL' ] = $aRow [ 'DOC_VERSION' ];
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_DOWNLOAD' );
$aFields [ 'DOWNLOAD_LINK' ] = " cases_ShowDocument?a= " .
2013-03-05 14:11:12 -04:00
$aRow [ 'APP_DOC_UID' ] . " &v= " . $aRow [ 'DOC_VERSION' ];
2012-07-16 14:19:52 -04:00
if ( is_array ( $listing )) {
foreach ( $listing as $folderitem ) {
if ( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) {
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' );
$aFields [ 'DOWNLOAD_LINK' ] = $folderitem -> downloadScript ;
continue ;
}
}
}
$aFields [ 'COMMENT' ] = $aFields [ 'APP_DOC_COMMENT' ];
if (( $aRow [ 'DOC_VERSION' ] == $lastVersion ) || ( $sAppDocuUID != " " )) {
$aInputDocuments [] = $aFields ;
}
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'inputDocuments' ] = $aInputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'inputDocuments' );
// $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_CREATE_DATE);
return $oCriteria ;
} catch ( exception $oException ) {
throw $oException ;
}
}
/*
* Return the input documents list to Review
*
* @ name getInputDocumentsCriteriaToRevise
* @ param string $sApplicationUID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getInputDocumentsCriteriaToRevise ( $sApplicationUID )
{
try {
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , array ( 'INPUT' , 'ATTACHED' ), CRITERIA :: IN );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aInputDocuments = array ();
$aInputDocuments [] = array (
'APP_DOC_UID' => 'char' ,
'DOC_UID' => 'char' ,
'APP_DOC_COMMENT' => 'char' ,
'APP_DOC_FILENAME' => 'char' ,
'APP_DOC_INDEX' => 'integer'
);
while ( $aRow = $oDataset -> getRow ()) {
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$aFields = array (
'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ]
);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'CREATE_DATE' ] = $aRow [ 'APP_DOC_CREATE_DATE' ];
$aFields [ 'TYPE' ] = $aRow [ 'APP_DOC_TYPE' ];
$aFields [ 'POSITION' ] = $_SESSION [ 'STEP_POSITION' ];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
$aInputDocuments [] = $aFields ;
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'inputDocuments' ] = $aInputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'inputDocuments' );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
return $oCriteria ;
} catch ( exception $oException ) {
throw $oException ;
}
}
2012-11-27 12:56:10 -04:00
/**
* Add a input document
*
* Return the application document ID
*
* @ param string $inputDocumentUid Input document ID
* @ param string $appDocUid Application document ID
* @ param int $docVersion Document version
* @ param string $appDocType Document type
* @ param string $appDocComment Document comment
* @ param string $inputDocumentAction Action , posible values : null or empty ( Add ), " R " ( Replace ), " NV " ( New Version )
* @ param string $applicationUid Application ID
* @ param int $delIndex Delegation index
* @ param string $taskUid Task ID
* @ param string $userUid User ID
* @ param string $option Option , posible values : " xmlform " , " file "
* @ param string $file File ( $_FILES [ " form " ][ " name " ][ " APP_DOC_FILENAME " ] or path to file )
* @ param int $fileError File error ( $_FILES [ " form " ][ " error " ][ " APP_DOC_FILENAME " ] or 0 )
* @ param string $fileTmpName File temporal name ( $_FILES [ " form " ][ " tmp_name " ][ " APP_DOC_FILENAME " ] or null )
2014-09-15 12:09:31 -04:00
* @ param string $fileSize File size ( $_FILES [ " form " ][ " size " ][ " APP_DOC_FILENAME " ] or 0 )
2012-11-27 12:56:10 -04:00
* @ return string Return application document ID
*/
2016-09-22 12:21:01 -04:00
public function addInputDocument ( $inputDocumentUid , $appDocUid , $docVersion , $appDocType , $appDocComment , $inputDocumentAction , $applicationUid , $delIndex , $taskUid , $userUid , $option , $file , $fileError = 0 , $fileTmpName = null , $fileSize = 0 , $isInputDocumentOfGrid = false )
2013-03-05 14:11:12 -04:00
{
2012-11-27 12:56:10 -04:00
$appDocFileName = null ;
$sw = 0 ;
switch ( $option ) {
case " xmlform " :
$appDocFileName = $file ;
if ( $fileError == 0 ) {
$sw = 1 ;
}
break ;
case " file " :
$appDocFileName = basename ( $file );
if ( file_exists ( $file ) && is_file ( $file )) {
$sw = 1 ;
}
break ;
}
if ( $sw == 0 ) {
return null ;
}
2016-09-22 12:21:01 -04:00
$folderId = '' ;
$tags = '' ;
2012-11-27 12:56:10 -04:00
2016-09-22 12:21:01 -04:00
if ( ! $isInputDocumentOfGrid ) {
//Info
$inputDocument = new InputDocument ();
$arrayInputDocumentData = $inputDocument -> load ( $inputDocumentUid );
2014-09-15 12:09:31 -04:00
2016-09-22 12:21:01 -04:00
//--- Validate Filesize of $_FILE
$inpDocMaxFilesize = $arrayInputDocumentData [ " INP_DOC_MAX_FILESIZE " ];
$inpDocMaxFilesizeUnit = $arrayInputDocumentData [ " INP_DOC_MAX_FILESIZE_UNIT " ];
2014-09-15 12:09:31 -04:00
2016-09-22 12:21:01 -04:00
$inpDocMaxFilesize = $inpDocMaxFilesize * (( $inpDocMaxFilesizeUnit == " MB " ) ? 1024 * 1024 : 1024 ); //Bytes
2014-09-15 12:09:31 -04:00
2016-09-22 12:21:01 -04:00
if ( $inpDocMaxFilesize > 0 && $fileSize > 0 ) {
if ( $fileSize > $inpDocMaxFilesize ) {
throw new Exception ( G :: LoadTranslation ( " ID_SIZE_VERY_LARGE_PERMITTED " ));
}
}
//Get the Custom Folder ID (create if necessary)
$appFolder = new AppFolder ();
$folderId = $appFolder -> createFromPath ( $arrayInputDocumentData [ " INP_DOC_DESTINATION_PATH " ], $applicationUid );
2012-11-27 12:56:10 -04:00
2016-09-22 12:21:01 -04:00
$tags = $appFolder -> parseTags ( $arrayInputDocumentData [ " INP_DOC_TAGS " ], $applicationUid );
}
2012-11-27 12:56:10 -04:00
$appDocument = new AppDocument ();
$arrayField = array ();
switch ( $inputDocumentAction ) {
case " R " :
//Replace
$arrayField = array (
" APP_DOC_UID " => $appDocUid ,
2013-03-05 14:11:12 -04:00
" APP_UID " => $applicationUid ,
2012-11-27 12:56:10 -04:00
" DOC_VERSION " => $docVersion ,
" DEL_INDEX " => $delIndex ,
2013-03-05 14:11:12 -04:00
" USR_UID " => $userUid ,
" DOC_UID " => $inputDocumentUid ,
" APP_DOC_TYPE " => $appDocType ,
2012-11-27 12:56:10 -04:00
" APP_DOC_CREATE_DATE " => date ( " Y-m-d H:i:s " ),
2013-03-05 14:11:12 -04:00
" APP_DOC_COMMENT " => $appDocComment ,
" APP_DOC_TITLE " => " " ,
2012-11-27 12:56:10 -04:00
" APP_DOC_FILENAME " => $appDocFileName ,
2013-03-05 14:11:12 -04:00
" FOLDER_UID " => $folderId ,
2012-11-27 12:56:10 -04:00
" APP_DOC_TAGS " => $tags
);
$appDocument -> update ( $arrayField );
break ;
case " NV " :
//New Version
$arrayField = array (
" APP_DOC_UID " => $appDocUid ,
2013-03-05 14:11:12 -04:00
" APP_UID " => $applicationUid ,
" DEL_INDEX " => $delIndex ,
2012-11-27 12:56:10 -04:00
" USR_UID " => $userUid ,
" DOC_UID " => $inputDocumentUid ,
2013-03-05 14:11:12 -04:00
" APP_DOC_TYPE " => $appDocType ,
2012-11-27 12:56:10 -04:00
" APP_DOC_CREATE_DATE " => date ( " Y-m-d H:i:s " ),
2013-03-05 14:11:12 -04:00
" APP_DOC_COMMENT " => $appDocComment ,
" APP_DOC_TITLE " => " " ,
2012-11-27 12:56:10 -04:00
" APP_DOC_FILENAME " => $appDocFileName ,
2013-03-05 14:11:12 -04:00
" FOLDER_UID " => $folderId ,
2012-11-27 12:56:10 -04:00
" APP_DOC_TAGS " => $tags
);
$appDocument -> create ( $arrayField );
break ;
default :
//New
$arrayField = array (
2013-03-05 14:11:12 -04:00
" APP_UID " => $applicationUid ,
2012-11-27 12:56:10 -04:00
" DEL_INDEX " => $delIndex ,
" USR_UID " => $userUid ,
" DOC_UID " => $inputDocumentUid ,
2013-03-05 14:11:12 -04:00
" APP_DOC_TYPE " => $appDocType ,
2012-11-27 12:56:10 -04:00
" APP_DOC_CREATE_DATE " => date ( " Y-m-d H:i:s " ),
2013-03-05 14:11:12 -04:00
" APP_DOC_COMMENT " => $appDocComment ,
" APP_DOC_TITLE " => " " ,
2012-11-27 12:56:10 -04:00
" APP_DOC_FILENAME " => $appDocFileName ,
2013-03-05 14:11:12 -04:00
" FOLDER_UID " => $folderId ,
2012-11-27 12:56:10 -04:00
" APP_DOC_TAGS " => $tags
);
$appDocument -> create ( $arrayField );
break ;
}
//Save the file
$appDocUid = $appDocument -> getAppDocUid ();
$docVersion = $appDocument -> getDocVersion ();
$arrayInfo = pathinfo ( $appDocument -> getAppDocFilename ());
2013-03-05 14:11:12 -04:00
$extension = ( isset ( $arrayInfo [ " extension " ])) ? $arrayInfo [ " extension " ] : null ;
2013-04-29 16:48:29 -04:00
$strPathName = PATH_DOCUMENT . G :: getPathFromUID ( $applicationUid ) . PATH_SEP ;
2012-11-27 12:56:10 -04:00
$strFileName = $appDocUid . " _ " . $docVersion . " . " . $extension ;
switch ( $option ) {
case " xmlform " :
G :: uploadFile ( $fileTmpName , $strPathName , $strFileName );
break ;
case " file " :
$umaskOld = umask ( 0 );
if ( ! is_dir ( $strPathName )) {
G :: verifyPath ( $strPathName , true );
}
2015-04-30 12:18:41 -04:00
2015-04-06 17:43:51 -04:00
G :: LoadSystem ( 'inputfilter' );
$filter = new InputFilter ();
$file = $filter -> xssFilterHard ( $file , 'path' );
2012-11-27 12:56:10 -04:00
copy ( $file , $strPathName . $strFileName );
chmod ( $strPathName . $strFileName , 0666 );
umask ( $umaskOld );
break ;
}
//Plugin Hook PM_UPLOAD_DOCUMENT for upload document
$pluginRegistry = & PMPluginRegistry :: getSingleton ();
if ( $pluginRegistry -> existsTrigger ( PM_UPLOAD_DOCUMENT ) && class_exists ( " uploadDocumentData " )) {
$triggerDetail = $pluginRegistry -> getTriggerInfo ( PM_UPLOAD_DOCUMENT );
$documentData = new uploadDocumentData (
2013-03-05 14:11:12 -04:00
$applicationUid ,
$userUid ,
$strPathName . $strFileName ,
$arrayField [ " APP_DOC_FILENAME " ],
$appDocUid ,
$docVersion
2012-11-27 12:56:10 -04:00
);
$uploadReturn = $pluginRegistry -> executeTriggers ( PM_UPLOAD_DOCUMENT , $documentData );
if ( $uploadReturn ) {
$arrayField [ " APP_DOC_PLUGIN " ] = $triggerDetail -> sNamespace ;
if ( ! isset ( $arrayField [ " APP_DOC_UID " ])) {
$arrayField [ " APP_DOC_UID " ] = $appDocUid ;
}
if ( ! isset ( $arrayField [ " DOC_VERSION " ])) {
$arrayField [ " DOC_VERSION " ] = $docVersion ;
}
$appDocument -> update ( $arrayField );
unlink ( $strPathName . $strFileName );
}
}
//End plugin
return $appDocUid ;
}
2012-07-16 14:19:52 -04:00
/*
* Return the input documents list to Review
*
* @ name getInputDocumentsCriteriaToRevise
* @ param string $sApplicationUID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getOutputDocumentsCriteriaToRevise ( $sApplicationUID )
{
try {
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , 'OUTPUT' );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aOutputDocuments = array ();
$aOutputDocuments [] = array (
'APP_DOC_UID' => 'char' ,
'DOC_UID' => 'char' ,
'APP_DOC_COMMENT' => 'char' ,
'APP_DOC_FILENAME' => 'char' ,
'APP_DOC_INDEX' => 'integer' ,
'APP_DOC_CREATE_DATE' => 'char'
);
while ( $aRow = $oDataset -> getRow ()) {
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$aFields = array (
'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ],
'APP_DOC_CREATE_DATE' => $aRow [ 'APP_DOC_CREATE_DATE' ]
);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aOutputDocuments [] = $aFields ;
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'outputDocuments' ] = $aOutputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'outputDocuments' );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
return $oCriteria ;
} catch ( exception $oException ) {
throw $oException ;
}
}
/*
* Return the ( Application ) Criteria object
*
* @ name getCriteriaProcessCases
* @ param string $status
* @ param string $PRO_UID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getCriteriaProcessCases ( $status , $PRO_UID )
{
$c = new Criteria ( 'workflow' );
$c -> add ( ApplicationPeer :: APP_STATUS , $status );
$c -> add ( ApplicationPeer :: PRO_UID , $PRO_UID );
return $c ;
}
2016-04-11 15:10:09 -04:00
/*
* Review is an unassigned Case
*
* @ name isUnassignedPauseCase
* @ param string $sAppUid
* @ param string $iDelegation
* @ return boolean
*/
public static function isUnassignedPauseCase ( $sAppUid , $iDelegation ){
$oAppDelegation = new AppDelegation ();
$aFieldsDel = $oAppDelegation -> Load ( $sAppUid , $iDelegation );
$usrUid = $aFieldsDel [ 'USR_UID' ];
if ( $usrUid === '' ){
return true ;
} else {
return false ;
}
}
2012-07-16 14:19:52 -04:00
/*
* pause a Case
*
* @ name pauseCase
* @ param string $sApplicationUID
* @ param string $iDelegation
* @ param string $sUserUID
* @ param string $sUnpauseDate
* @ return object
2013-03-05 14:11:12 -04:00
*/
2016-08-04 16:38:54 -04:00
public function pauseCase ( $sApplicationUID , $iDelegation , $sUserUID , $sUnpauseDate = null , $appTitle = null )
2012-07-16 14:19:52 -04:00
{
2016-04-11 15:10:09 -04:00
// Check if the case is unassigned
if ( $this -> isUnassignedPauseCase ( $sApplicationUID , $iDelegation )){
throw new Exception ( G :: LoadTranslation ( " ID_CASE_NOT_PAUSED " , array ( G :: LoadTranslation ( " ID_UNASSIGNED_STATUS " ))) );
}
2012-07-16 14:19:52 -04:00
$oApplication = new Application ();
$aFields = $oApplication -> Load ( $sApplicationUID );
//get the appthread row id ( APP_THREAD_INDEX' )
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> clearSelectColumns ();
$oCriteria -> addSelectColumn ( AppThreadPeer :: APP_THREAD_INDEX );
$oCriteria -> add ( AppThreadPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppThreadPeer :: DEL_INDEX , $iDelegation );
$oDataset = AppThreadPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
PM 934 "PMFPauseCase doesn't pause a case" SOLVED
Code Issue:
PMFPauseCase doesn't pause a case
Solution:
El trigger que se prentende ejecutar esta mal planteado, cuando se tiene un trigger en "After Routing" de una tarea el
INDEX se debe incrementar puesto que al derivar la tarea el INDEX tiene otro valor se sugiere los siguientes ejemplos:
1.-
@@FUTURE_DATE = date('Y-m-d', strtotime("+4 days"));
@@RET_VAL = PMFPauseCase(@@APPLICATION, @%INDEX+1, @@USER_LOGGED, @@FUTURE_DATE);
2.-
$delIndex = @%INDEX;
$criteria = new Criteria("workflow");
$criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX);
$criteria->add(AppDelegationPeer::APP_UID, @@APPLICATION, Criteria::EQUAL);
$criteria->add(AppDelegationPeer::DEL_LAST_INDEX, 1, Criteria::EQUAL);
$rsCriteria = AppDelegationPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
if($rsCriteria->next()){
$row = $rsCriteria->getRow();
$delIndex = $row["DEL_INDEX"];
}
@@FUTURE_DATE = date('Y-m-d', strtotime("+4 days"));
@@RET_VAL = PMFPauseCase(@@APPLICATION, $delIndex, @@USER_LOGGED, @@FUTURE_DATE);
2015-01-22 14:42:59 -04:00
if ( $oDataset -> next ()) {
$aRow = $oDataset -> getRow ();
} else {
2015-01-29 09:44:16 -04:00
throw new Exception ( G :: LoadTranslation ( " ID_CASE_STOPPED_TRIGGER " ));
PM 934 "PMFPauseCase doesn't pause a case" SOLVED
Code Issue:
PMFPauseCase doesn't pause a case
Solution:
El trigger que se prentende ejecutar esta mal planteado, cuando se tiene un trigger en "After Routing" de una tarea el
INDEX se debe incrementar puesto que al derivar la tarea el INDEX tiene otro valor se sugiere los siguientes ejemplos:
1.-
@@FUTURE_DATE = date('Y-m-d', strtotime("+4 days"));
@@RET_VAL = PMFPauseCase(@@APPLICATION, @%INDEX+1, @@USER_LOGGED, @@FUTURE_DATE);
2.-
$delIndex = @%INDEX;
$criteria = new Criteria("workflow");
$criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX);
$criteria->add(AppDelegationPeer::APP_UID, @@APPLICATION, Criteria::EQUAL);
$criteria->add(AppDelegationPeer::DEL_LAST_INDEX, 1, Criteria::EQUAL);
$rsCriteria = AppDelegationPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
if($rsCriteria->next()){
$row = $rsCriteria->getRow();
$delIndex = $row["DEL_INDEX"];
}
@@FUTURE_DATE = date('Y-m-d', strtotime("+4 days"));
@@RET_VAL = PMFPauseCase(@@APPLICATION, $delIndex, @@USER_LOGGED, @@FUTURE_DATE);
2015-01-22 14:42:59 -04:00
}
2012-07-16 14:19:52 -04:00
2015-12-18 15:59:47 -04:00
$this -> CloseCurrentDelegation ( $sApplicationUID , $iDelegation );
2012-07-16 14:19:52 -04:00
//now create a row in APP_DELAY with type PAUSE
$aData [ 'PRO_UID' ] = $aFields [ 'PRO_UID' ];
$aData [ 'APP_UID' ] = $sApplicationUID ;
$aData [ 'APP_THREAD_INDEX' ] = $aRow [ 'APP_THREAD_INDEX' ];
$aData [ 'APP_DEL_INDEX' ] = $iDelegation ;
$aData [ 'APP_TYPE' ] = 'PAUSE' ;
$aData [ 'APP_STATUS' ] = $aFields [ 'APP_STATUS' ];
$aData [ 'APP_DELEGATION_USER' ] = $sUserUID ;
$aData [ 'APP_ENABLE_ACTION_USER' ] = $sUserUID ;
$aData [ 'APP_ENABLE_ACTION_DATE' ] = date ( 'Y-m-d H:i:s' );
$aData [ 'APP_DISABLE_ACTION_DATE' ] = $sUnpauseDate ;
2017-01-10 17:51:08 -04:00
$aData [ 'APP_NUMBER' ] = $oApplication -> getAppNumber ();
2012-07-16 14:19:52 -04:00
$oAppDelay = new AppDelay ();
$oAppDelay -> create ( $aData );
$oApplication -> update ( $aFields );
//update searchindex
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sApplicationUID );
}
2012-10-16 00:29:52 -04:00
$this -> getExecuteTriggerProcess ( $sApplicationUID , 'PAUSED' );
2015-02-03 09:32:15 -04:00
2015-02-11 10:20:22 -04:00
/*----------------------------------********---------------------------------*/
2016-08-04 16:38:54 -04:00
$data = array (
'APP_UID' => $sApplicationUID ,
2015-02-03 09:32:15 -04:00
'DEL_INDEX' => $iDelegation ,
2016-08-04 16:38:54 -04:00
'USR_UID' => $sUserUID ,
'APP_RESTART_DATE' => $sUnpauseDate ,
'APP_TITLE' => ( $appTitle != null ) ? $appTitle : $aFields [ 'APP_TITLE' ]
2015-02-03 09:32:15 -04:00
);
$data = array_merge ( $aFields , $data );
$oListPaused = new ListPaused ();
$oListPaused -> create ( $data );
2015-02-11 10:20:22 -04:00
/*----------------------------------********---------------------------------*/
2012-07-16 14:19:52 -04:00
}
/*
* unpause a case
*
* @ name unpauseCase
* @ param string $sApplicationUID
* @ param string $iDelegation
* @ param string $sUserUID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function unpauseCase ( $sApplicationUID , $iDelegation , $sUserUID )
{
2013-08-07 16:06:23 -04:00
//Verify status of the case
$oDelay = new AppDelay ();
if ( method_exists ( $oDelay , 'isPaused' )) {
if ( $oDelay -> isPaused ( $sApplicationUID , $iDelegation ) === false ) {
return false ;
}
}
2012-07-16 14:19:52 -04:00
//get information about current $iDelegation row
$oAppDelegation = new AppDelegation ();
2017-01-13 19:21:52 -04:00
$user = UsersPeer :: retrieveByPK ( $sUserUID );
2012-07-16 14:19:52 -04:00
$aFieldsDel = $oAppDelegation -> Load ( $sApplicationUID , $iDelegation );
//and creates a new AppDelegation row with the same user, task, process, etc.
$proUid = $aFieldsDel [ 'PRO_UID' ];
$appUid = $aFieldsDel [ 'APP_UID' ];
$tasUid = $aFieldsDel [ 'TAS_UID' ];
$usrUid = $aFieldsDel [ 'USR_UID' ];
$delThread = $aFieldsDel [ 'DEL_THREAD' ];
2017-01-10 17:51:08 -04:00
$iIndex = $oAppDelegation -> createAppDelegation (
$proUid ,
$appUid ,
$tasUid ,
$usrUid ,
$delThread ,
3 ,
false ,
- 1 ,
null ,
false ,
false ,
0 ,
$aFieldsDel [ 'APP_NUMBER' ],
$aFieldsDel [ 'TAS_ID' ],
2017-01-13 19:21:52 -04:00
( empty ( $user )) ? 0 : $user -> getUsrId (),
2017-01-10 17:51:08 -04:00
$aFieldsDel [ 'PRO_ID' ]
);
2012-07-16 14:19:52 -04:00
//update other fields in the recent new appDelegation
$aData = array ();
$aData [ 'APP_UID' ] = $aFieldsDel [ 'APP_UID' ];
$aData [ 'DEL_INDEX' ] = $iIndex ;
$aData [ 'DEL_PREVIOUS' ] = $aFieldsDel [ 'DEL_PREVIOUS' ];
$aData [ 'DEL_TYPE' ] = $aFieldsDel [ 'DEL_TYPE' ];
$aData [ 'DEL_PRIORITY' ] = $aFieldsDel [ 'DEL_PRIORITY' ];
$aData [ 'DEL_DELEGATE_DATE' ] = $aFieldsDel [ 'DEL_DELEGATE_DATE' ];
$aData [ 'DEL_INIT_DATE' ] = date ( 'Y-m-d H:i:s' );
$aData [ 'DEL_FINISH_DATE' ] = null ;
$oAppDelegation -> update ( $aData );
//get the APP_DELAY row ( with app_uid, del_index and app_type=pause
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> clearSelectColumns ();
$oCriteria -> addSelectColumn ( AppDelayPeer :: APP_DELAY_UID );
$oCriteria -> addSelectColumn ( AppDelayPeer :: APP_THREAD_INDEX );
$oCriteria -> addSelectColumn ( AppDelayPeer :: APP_STATUS );
$oCriteria -> add ( AppDelayPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDelayPeer :: APP_DEL_INDEX , $iDelegation );
$oCriteria -> add ( AppDelayPeer :: APP_TYPE , 'PAUSE' );
$oCriteria -> add (
2015-10-02 12:25:04 -04:00
$oCriteria -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 , Criteria :: EQUAL ) -> addOr (
$oCriteria -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL ))
2013-03-05 14:11:12 -04:00
);
2015-10-02 12:25:04 -04:00
2012-07-16 14:19:52 -04:00
$oDataset = AppDelayPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
$oApplication = new Application ();
$aFields = $oApplication -> Load ( $sApplicationUID );
$aFields [ 'APP_STATUS' ] = $aRow [ 'APP_STATUS' ];
$oApplication -> update ( $aFields );
//update the DEL_INDEX ? in APP_THREAD table?
$aUpdate = array (
'APP_UID' => $sApplicationUID ,
'APP_THREAD_INDEX' => $aRow [ 'APP_THREAD_INDEX' ],
'DEL_INDEX' => $iIndex
);
$oAppThread = new AppThread ();
$oAppThread -> update ( $aUpdate );
$aData [ 'APP_DELAY_UID' ] = $aRow [ 'APP_DELAY_UID' ];
$aData [ 'APP_DISABLE_ACTION_USER' ] = $sUserUID ;
$aData [ 'APP_DISABLE_ACTION_DATE' ] = date ( 'Y-m-d H:i:s' );
$oAppDelay = new AppDelay ();
$aFieldsDelay = $oAppDelay -> update ( $aData );
//update searchindex
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sApplicationUID );
}
2014-08-20 13:20:08 -04:00
$this -> getExecuteTriggerProcess ( $sApplicationUID , " UNPAUSE " );
2015-02-03 09:32:15 -04:00
2015-02-11 10:20:22 -04:00
/*----------------------------------********---------------------------------*/
2015-03-11 16:04:13 -04:00
$aData = array_merge ( $aFieldsDel , $aData );
2015-02-03 09:32:15 -04:00
$oListPaused = new ListPaused ();
2015-03-11 16:04:13 -04:00
$oListPaused -> remove ( $sApplicationUID , $iDelegation , $aData );
2015-02-11 10:20:22 -04:00
/*----------------------------------********---------------------------------*/
2012-07-16 14:19:52 -04:00
}
/*
* cancel a case
*
* @ name cancelCase
* @ param string $sApplicationUID
* @ param string $iIndex
* @ param string $user_logged
* @ return void
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function cancelCase ( $sApplicationUID , $iIndex , $user_logged )
{
2012-10-16 00:29:52 -04:00
$this -> getExecuteTriggerProcess ( $sApplicationUID , 'CANCELED' );
2012-07-16 14:19:52 -04:00
$oApplication = new Application ();
$aFields = $oApplication -> load ( $sApplicationUID );
2015-04-23 12:06:04 -04:00
$appStatusCurrent = $aFields [ 'APP_STATUS' ];
2012-07-16 14:19:52 -04:00
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
2015-12-07 15:35:58 -04:00
$resAppDel = AppDelegationPeer :: doCount ( $oCriteria );
$this -> CloseCurrentDelegation ( $sApplicationUID , $iIndex );
if ( $resAppDel == 1 ) {
2012-07-16 14:19:52 -04:00
$aFields [ 'APP_STATUS' ] = 'CANCELLED' ;
$oApplication -> update ( $aFields );
2014-01-22 10:20:51 -04:00
G :: LoadClass ( 'reportTables' );
require_once 'classes/model/AdditionalTables.php' ;
2013-11-14 17:35:35 -04:00
$oReportTables = new ReportTables ();
2014-01-22 10:20:51 -04:00
$addtionalTables = new additionalTables ();
$oReportTables -> updateTables ( $aFields [ 'PRO_UID' ], $aFields [ 'APP_UID' ], $aFields [ 'APP_NUMBER' ], $aFields [ 'APP_DATA' ]);
2013-11-14 17:35:35 -04:00
$addtionalTables -> updateReportTables ( $aFields [ 'PRO_UID' ], $aFields [ 'APP_UID' ], $aFields [ 'APP_NUMBER' ], $aFields [ 'APP_DATA' ], $aFields [ 'APP_STATUS' ]);
2012-07-16 14:19:52 -04:00
}
$oAppDel = new AppDelegation ();
$oAppDel -> Load ( $sApplicationUID , $iIndex );
$aAppDel = $oAppDel -> toArray ( BasePeer :: TYPE_FIELDNAME );
$this -> closeAppThread ( $sApplicationUID , $aAppDel [ 'DEL_THREAD' ]);
$delay = new AppDelay ();
$array [ 'PRO_UID' ] = $aFields [ 'PRO_UID' ];
$array [ 'APP_UID' ] = $sApplicationUID ;
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( AppThreadPeer :: APP_THREAD_INDEX );
$c -> add ( AppThreadPeer :: APP_UID , $sApplicationUID );
$c -> add ( AppThreadPeer :: DEL_INDEX , $iIndex );
$oDataset = AppThreadPeer :: doSelectRS ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
$array [ 'APP_THREAD_INDEX' ] = $aRow [ 'APP_THREAD_INDEX' ];
$array [ 'APP_DEL_INDEX' ] = $iIndex ;
$array [ 'APP_TYPE' ] = 'CANCEL' ;
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
$c -> add ( ApplicationPeer :: APP_UID , $sApplicationUID );
$oDataset = ApplicationPeer :: doSelectRS ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow1 = $oDataset -> getRow ();
$array [ 'APP_STATUS' ] = $aRow1 [ 'APP_STATUS' ];
$array [ 'APP_DELEGATION_USER' ] = $user_logged ;
$array [ 'APP_ENABLE_ACTION_USER' ] = $user_logged ;
$array [ 'APP_ENABLE_ACTION_DATE' ] = date ( 'Y-m-d H:i:s' );
2017-01-10 17:51:08 -04:00
$array [ 'APP_NUMBER' ] = $oApplication -> getAppNumber ();
2012-07-16 14:19:52 -04:00
$delay -> create ( $array );
//Before cancel a case verify if is a child case
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( SubApplicationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( SubApplicationPeer :: SA_STATUS , 'ACTIVE' );
if ( SubApplicationPeer :: doCount ( $oCriteria2 ) > 0 ) {
G :: LoadClass ( 'derivation' );
$oDerivation = new Derivation ();
2014-07-03 15:42:28 -04:00
$oDerivation -> verifyIsCaseChild ( $sApplicationUID , $iIndex );
2012-07-16 14:19:52 -04:00
}
//update searchindex
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sApplicationUID );
}
2015-02-27 16:27:11 -04:00
/*----------------------------------********---------------------------------*/
2015-02-03 09:32:15 -04:00
$data = array (
2015-04-23 12:06:04 -04:00
'APP_UID' => $sApplicationUID ,
'DEL_INDEX' => $iIndex ,
'USR_UID' => $user_logged ,
'APP_STATUS_CURRENT' => $appStatusCurrent
2015-02-03 09:32:15 -04:00
);
$data = array_merge ( $aFields , $data );
$oListCanceled = new ListCanceled ();
$oListCanceled -> create ( $data );
2015-02-27 16:27:11 -04:00
/*----------------------------------********---------------------------------*/
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
2016-07-19 14:26:51 -04:00
/**
* Un cancel case
*
* @ param string $caseUID
* @ param string $userUID
* @ return int
*/
public function unCancelCase ( $appUID , $userUID )
{
try {
2016-09-21 15:36:59 -04:00
$oUser = new \ProcessMaker\BusinessModel\User ();
if ( ! $oUser -> checkPermission ( $userUID , 'PM_UNCANCELCASE' )) {
2016-07-19 14:26:51 -04:00
throw new Exception ( G :: LoadTranslation ( 'ID_YOU_DO_NOT_HAVE_PERMISSION' ));
}
$application = new Application ();
$rowApplication = $application -> load ( $appUID );
if ( $rowApplication [ " APP_STATUS " ] !== " CANCELLED " ) {
throw new Exception ( G :: LoadTranslation ( 'ID_THE_APPLICATION_IS_NOT_CANCELED' , [ $appUID ]));
}
$criteriaAppDelay = new Criteria ( 'workflow' );
$criteriaAppDelay -> add ( AppDelayPeer :: APP_UID , $appUID );
$criteriaAppDelay -> add ( AppDelayPeer :: APP_STATUS , 'CANCELLED' );
$criteriaAppDelay -> add ( AppDelayPeer :: PRO_UID , $rowApplication [ 'PRO_UID' ]);
$criteriaAppDelay -> addDescendingOrderByColumn ( AppDelayPeer :: APP_ENABLE_ACTION_DATE );
$resultSetAppDelay = AppDelayPeer :: doSelectRS ( $criteriaAppDelay );
$resultSetAppDelay -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$resultSetAppDelay -> next ();
$rowAppDelay = $resultSetAppDelay -> getRow ();
if ( ! isset ( $rowAppDelay [ 'APP_STATUS' ])) {
throw new Exception ( G :: LoadTranslation ( 'ID_THREAD_STATUS_DOES_NOT_EXIST_FOR_THE_APPLICATION.' , [ $appUID ]));
}
//Application
$rowApplication [ 'APP_STATUS' ] = 'TO_DO' ;
$rowApplication [ 'APP_UPDATE_DATE' ] = date ( 'Y-m-d H:i:s' );
$application -> update ( $rowApplication );
//AppDelegation
$appDelegation = new AppDelegation ();
$rowAppDelegation = $appDelegation -> Load ( $appUID , $rowAppDelay [ 'APP_DEL_INDEX' ]);
$appDelegation = new AppDelegation ();
$delIndex = $appDelegation -> createAppDelegation ( $rowAppDelegation [ 'PRO_UID' ], $rowAppDelegation [ 'APP_UID' ], $rowAppDelegation [ 'TAS_UID' ], $userUID , $rowAppDelay [ 'APP_THREAD_INDEX' ]);
//AppThread
$dataAppThread = [
'APP_UID' => $rowApplication [ 'APP_UID' ],
'APP_THREAD_INDEX' => $rowAppDelay [ 'APP_THREAD_INDEX' ],
'APP_THREAD_STATUS' => 'OPEN' ,
'DEL_INDEX' => $delIndex
];
$appThread = new AppThread ();
$appThread -> update ( $dataAppThread );
//AppDelay
$dataAppDelay = [
'PRO_UID' => $rowApplication [ 'PRO_UID' ],
'APP_UID' => $rowApplication [ 'APP_UID' ],
'APP_THREAD_INDEX' => $rowAppDelay [ 'APP_THREAD_INDEX' ],
'APP_DELINDEX' => $delIndex ,
'APP_TYPE' => 'UNCANCEL' ,
'APP_STATUS' => $rowApplication [ 'APP_STATUS' ],
'APP_NEXT_TASK' => 0 ,
'APP_DELEGATION_USER' => $userUID ,
'APP_ENABLE_ACTION_USER' => $userUID ,
'APP_ENABLE_ACTION_DATE' => date ( 'Y-m-d H:i:s' ),
'APP_DISABLE_ACTION_USER' => 0
];
$appDelay = new AppDelay ();
$appDelay -> create ( $dataAppDelay );
//ListCanceled
$criteriaListCanceled = new Criteria ( " workflow " );
$criteriaListCanceled -> add ( ListCanceledPeer :: APP_UID , $appUID );
$resultSetListCanceled = ListCanceledPeer :: doSelectRS ( $criteriaListCanceled );
$resultSetListCanceled -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$resultSetListCanceled -> next ();
$rowListCanceled = $resultSetListCanceled -> getRow ();
ListCanceledPeer :: doDelete ( $criteriaListCanceled );
//ListInbox
$rowListCanceled [ 'DEL_PREVIOUS_USR_USERNAME' ] = $rowListCanceled [ 'DEL_CURRENT_USR_USERNAME' ];
$rowListCanceled [ 'DEL_PREVIOUS_USR_FIRSTNAME' ] = $rowListCanceled [ 'DEL_CURRENT_USR_FIRSTNAME' ];
$rowListCanceled [ 'DEL_PREVIOUS_USR_LASTNAME' ] = $rowListCanceled [ 'DEL_CURRENT_USR_LASTNAME' ];
$rowListCanceled [ 'APP_STATUS' ] = 'TO_DO' ;
$rowListCanceled [ 'APP_UPDATE_DATE' ] = date ( 'Y-m-d H:i:s' );
$rowListCanceled [ 'DEL_RISK_DATE' ] = date ( 'Y-m-d H:i:s' );
$rowListCanceled [ 'DEL_INDEX' ] = $delIndex ;
unset ( $rowListCanceled [ 'DEL_CURRENT_USR_USERNAME' ]);
unset ( $rowListCanceled [ 'DEL_CURRENT_USR_FIRSTNAME' ]);
unset ( $rowListCanceled [ 'DEL_CURRENT_USR_LASTNAME' ]);
unset ( $rowListCanceled [ 'APP_CANCELED_DATE' ]);
$listInbox = new ListInbox ();
$listInbox -> create ( $rowListCanceled );
//ListParticipatedLast
$criteriaListParticipatedLast = new Criteria ( " workflow " );
$criteriaListParticipatedLast -> add ( ListParticipatedLastPeer :: APP_UID , $appUID );
$resultSetListParticipatedLast = ListParticipatedLastPeer :: doSelectRS ( $criteriaListParticipatedLast );
$resultSetListParticipatedLast -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$resultSetListParticipatedLast -> next ();
$rowListParticipatedLast = $resultSetListParticipatedLast -> getRow ();
$rowListParticipatedLast [ 'APP_STATUS' ] = 'TO_DO' ;
$rowListParticipatedLast [ 'DEL_THREAD_STATUS' ] = 'OPEN' ;
$rowListParticipatedLast [ 'DEL_INIT_DATE' ] = null ;
$listParticipatedLast = new ListParticipatedLast ();
$listParticipatedLast -> update ( $rowListParticipatedLast );
} catch ( Exception $oException ) {
throw $oException ;
}
}
2012-07-16 14:19:52 -04:00
/*
* reactive a case
*
* @ name reactivateCase
* @ param string $sApplicationUID
* @ param string $iIndex
* @ param string $user_logged
* @ return void
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function reactivateCase ( $sApplicationUID , $iIndex , $user_logged )
{
$oApplication = new Application ();
$aFields = $oApplication -> load (
2013-03-05 14:11:12 -04:00
( isset ( $_POST [ 'sApplicationUID' ]) ? $_POST [ 'sApplicationUID' ] : $_SESSION [ 'APPLICATION' ])
2012-07-16 14:19:52 -04:00
);
$aFields [ 'APP_STATUS' ] = 'TO_DO' ;
$oApplication -> update ( $aFields );
$this -> ReactivateCurrentDelegation ( $sApplicationUID , $iIndex );
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( AppDelayPeer :: APP_DELAY_UID );
$c -> add ( AppDelayPeer :: APP_UID , $sApplicationUID );
$c -> add ( AppDelayPeer :: PRO_UID , $aFields [ 'PRO_UID' ]);
$c -> add ( AppDelayPeer :: APP_DEL_INDEX , $iIndex );
$c -> add ( AppDelayPeer :: APP_TYPE , 'CANCEL' );
$c -> add ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 );
$c -> add ( AppDelayPeer :: APP_DISABLE_ACTION_DATE , null , Criteria :: ISNULL );
$oDataset = AppDelayPeer :: doSelectRS ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
//var_dump($aRow);
$aFields = array ();
$aFields [ 'APP_DELAY_UID' ] = $aRow [ 'APP_DELAY_UID' ];
$aFields [ 'APP_DISABLE_ACTION_USER' ] = $user_logged ;
$aFields [ 'APP_DISABLE_ACTION_DATE' ] = date ( 'Y-m-d H:i:s' );
$delay = new AppDelay ();
$delay -> update ( $aFields );
//$this->ReactivateCurrentDelegation($sApplicationUID);
$con = Propel :: getConnection ( 'workflow' );
$sql = " UPDATE APP_THREAD SET APP_THREAD_STATUS = 'OPEN' WHERE APP_UID = ' $sApplicationUID ' " .
2013-03-05 14:11:12 -04:00
" AND DEL_INDEX =' $iIndex ' " ;
2012-07-16 14:19:52 -04:00
$stmt = $con -> createStatement ();
$rs = $stmt -> executeQuery ( $sql , ResultSet :: FETCHMODE_ASSOC );
//update searchindex
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sApplicationUID );
}
}
/*
* reassign a case
*
* @ name reassignCase
* @ param string $sApplicationUID
* @ param string $iDelegation
* @ param string $sUserUID
* @ param string $newUserUID
* @ param string $sType
* @ return true
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function reassignCase ( $sApplicationUID , $iDelegation , $sUserUID , $newUserUID , $sType = 'REASSIGN' )
{
$this -> CloseCurrentDelegation ( $sApplicationUID , $iDelegation );
2017-01-13 19:21:52 -04:00
$user = UsersPeer :: retrieveByPK ( $newUserUID );
2012-07-16 14:19:52 -04:00
$oAppDelegation = new AppDelegation ();
$aFieldsDel = $oAppDelegation -> Load ( $sApplicationUID , $iDelegation );
$iIndex = $oAppDelegation -> createAppDelegation (
2017-01-10 17:51:08 -04:00
$aFieldsDel [ 'PRO_UID' ],
$aFieldsDel [ 'APP_UID' ],
$aFieldsDel [ 'TAS_UID' ],
2017-01-13 19:21:52 -04:00
( empty ( $user )) ? 0 : $user -> getUsrId (),
2017-01-10 17:51:08 -04:00
$aFieldsDel [ 'DEL_THREAD' ],
3 ,
false ,
- 1 ,
null ,
false ,
false ,
0 ,
$aFieldsDel [ 'APP_NUMBER' ],
$aFieldsDel [ 'TAS_ID' ],
2017-01-19 16:41:59 -04:00
( empty ( $user )) ? 0 : $user -> getUsrId (),
2017-01-10 17:51:08 -04:00
$aFieldsDel [ 'PRO_ID' ]
2012-07-16 14:19:52 -04:00
);
2015-12-08 11:58:34 -04:00
$newDelIndex = $iIndex ;
2012-07-16 14:19:52 -04:00
$aData = array ();
$aData [ 'APP_UID' ] = $aFieldsDel [ 'APP_UID' ];
$aData [ 'DEL_INDEX' ] = $iIndex ;
$aData [ 'DEL_PREVIOUS' ] = $aFieldsDel [ 'DEL_PREVIOUS' ];
$aData [ 'DEL_TYPE' ] = $aFieldsDel [ 'DEL_TYPE' ];
$aData [ 'DEL_PRIORITY' ] = $aFieldsDel [ 'DEL_PRIORITY' ];
$aData [ 'DEL_DELEGATE_DATE' ] = $aFieldsDel [ 'DEL_DELEGATE_DATE' ];
$aData [ 'USR_UID' ] = $newUserUID ;
$aData [ 'DEL_INIT_DATE' ] = null ;
$aData [ 'DEL_FINISH_DATE' ] = null ;
2017-01-13 19:21:52 -04:00
$aData [ 'USR_ID' ] = ( empty ( $user )) ? 0 : $user -> getUsrId ();
2012-07-16 14:19:52 -04:00
$oAppDelegation -> update ( $aData );
$oAppThread = new AppThread ();
$oAppThread -> update (
2013-03-05 14:11:12 -04:00
array (
'APP_UID' => $sApplicationUID ,
'APP_THREAD_INDEX' => $aFieldsDel [ 'DEL_THREAD' ],
'DEL_INDEX' => $iIndex )
);
2012-07-16 14:19:52 -04:00
//Save in APP_DELAY
$oApplication = new Application ();
$aFields = $oApplication -> Load ( $sApplicationUID );
$aData [ 'PRO_UID' ] = $aFieldsDel [ 'PRO_UID' ];
$aData [ 'APP_UID' ] = $sApplicationUID ;
$aData [ 'APP_THREAD_INDEX' ] = $aFieldsDel [ 'DEL_THREAD' ];
$aData [ 'APP_DEL_INDEX' ] = $iDelegation ;
$aData [ 'APP_TYPE' ] = ( $sType != '' ? $sType : 'REASSIGN' );
$aData [ 'APP_STATUS' ] = $aFields [ 'APP_STATUS' ];
$aData [ 'APP_DELEGATION_USER' ] = $sUserUID ;
$aData [ 'APP_ENABLE_ACTION_USER' ] = $sUserUID ;
$aData [ 'APP_ENABLE_ACTION_DATE' ] = date ( 'Y-m-d H:i:s' );
2017-01-10 17:51:08 -04:00
$aData [ 'APP_NUMBER' ] = $aFieldsDel [ 'APP_NUMBER' ];
2012-07-16 14:19:52 -04:00
$oAppDelay = new AppDelay ();
$oAppDelay -> create ( $aData );
//update searchindex
if ( $this -> appSolr != null ) {
$this -> appSolr -> updateApplicationSearchIndex ( $sApplicationUID );
}
2012-10-16 00:29:52 -04:00
2015-03-13 15:53:14 -04:00
/*----------------------------------********---------------------------------*/
2015-12-08 11:58:34 -04:00
$participated = new ListParticipatedLast ();
$participated -> remove ( $aData [ 'APP_UID' ], $newUserUID , $iDelegation );
2015-03-13 15:53:14 -04:00
$aFieldsDel = array_merge ( $aData , $aFieldsDel );
$aFieldsDel [ 'USR_UID' ] = $newUserUID ;
2015-12-08 11:58:34 -04:00
$aFieldsDel [ 'DEL_INDEX' ] = $newDelIndex ;
2015-03-13 15:53:14 -04:00
$inbox = new ListInbox ();
$inbox -> newRow ( $aFieldsDel , $sUserUID );
2015-03-20 11:44:35 -04:00
//Update - WHERE
$criteriaWhere = new Criteria ( " workflow " );
$criteriaWhere -> add ( ListInboxPeer :: APP_UID , $aFieldsDel [ " APP_UID " ], Criteria :: EQUAL );
$criteriaWhere -> add ( ListInboxPeer :: USR_UID , $aFieldsDel [ 'USR_UID' ], Criteria :: EQUAL );
$criteriaWhere -> add ( ListInboxPeer :: DEL_INDEX , $aFieldsDel [ 'DEL_INDEX' ], Criteria :: EQUAL );
//Update - SET
$criteriaSet = new Criteria ( " workflow " );
$criteriaSet -> add ( ListInboxPeer :: DEL_INDEX , $aData [ 'DEL_INDEX' ]);
BasePeer :: doUpdate ( $criteriaWhere , $criteriaSet , Propel :: getConnection ( " workflow " ));
2015-03-13 15:53:14 -04:00
/*----------------------------------********---------------------------------*/
2012-10-16 00:29:52 -04:00
$this -> getExecuteTriggerProcess ( $sApplicationUID , 'REASSIGNED' );
2017-02-21 16:36:51 -04:00
2017-01-31 17:43:50 -04:00
//Delete record of the table LIST_UNASSIGNED
$unassigned = new ListUnassigned ();
$unassigned -> remove ( $sApplicationUID , $iDelegation );
2017-02-21 16:36:51 -04:00
2012-07-16 14:19:52 -04:00
return true ;
}
/*
* get all dynaforms that they have send it
*
* @ name getAllDynaformsStepsToRevise
* @ param string $APP_UID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getAllDynaformsStepsToRevise ( $APP_UID )
{
$aCase = $this -> loadCase ( $APP_UID );
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_UID );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: PRO_UID );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_TYPE_OBJ );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_UID_OBJ );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_POSITION );
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $aCase [ 'PRO_UID' ]);
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , 'DYNAFORM' );
$oCriteria -> addAscendingOrderByColumn ( StepSupervisorPeer :: STEP_POSITION );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
return $oDataset ;
}
/*
* get all inputs that they have send it
*
* @ name getAllInputsStepsToRevise
* @ param string $APP_UID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getAllInputsStepsToRevise ( $APP_UID )
{
$aCase = $this -> loadCase ( $APP_UID );
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_UID );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: PRO_UID );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_TYPE_OBJ );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_UID_OBJ );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_POSITION );
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $aCase [ 'PRO_UID' ]);
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , 'INPUT_DOCUMENT' );
$oCriteria -> addAscendingOrderByColumn ( StepSupervisorPeer :: STEP_POSITION );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
return $oDataset ;
}
/*
* get all upload document that they have send it
*
* @ name getAllUploadedDocumentsCriteria
* @ param string $APP_UID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2016-04-01 13:02:38 -04:00
public function getAllUploadedDocumentsCriteria ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID , $delIndex = 0 )
2012-07-16 14:19:52 -04:00
{
2013-08-02 17:10:53 -04:00
G :: LoadClass ( " configuration " );
$conf = new Configurations ();
$confEnvSetting = $conf -> getFormats ();
2012-07-16 14:19:52 -04:00
$listing = false ;
$oPluginRegistry = & PMPluginRegistry :: getSingleton ();
if ( $oPluginRegistry -> existsTrigger ( PM_CASE_DOCUMENT_LIST )) {
$folderData = new folderData ( null , null , $sApplicationUID , null , $sUserUID );
$folderData -> PMType = " INPUT " ;
$folderData -> returnList = true ;
//$oPluginRegistry = & PMPluginRegistry::getSingleton();
$listing = $oPluginRegistry -> executeTriggers ( PM_CASE_DOCUMENT_LIST , $folderData );
}
2016-04-01 13:02:38 -04:00
$aObjectPermissions = $this -> getAllObjects ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID , $delIndex );
2012-07-16 14:19:52 -04:00
if ( ! is_array ( $aObjectPermissions )) {
$aObjectPermissions = array (
'DYNAFORMS' => array ( - 1 ),
'INPUT_DOCUMENTS' => array ( - 1 ),
'OUTPUT_DOCUMENTS' => array ( - 1 )
);
}
if ( ! isset ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
}
}
$aDelete = $this -> getAllObjectsFrom ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID , 'DELETE' );
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , array ( 'INPUT' ), Criteria :: IN );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
//$oCriteria->add(AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], Criteria::IN);
$oCriteria -> add (
2013-03-05 14:11:12 -04:00
$oCriteria -> getNewCriterion (
AppDocumentPeer :: APP_DOC_UID , $aObjectPermissions [ 'INPUT_DOCUMENTS' ], Criteria :: IN ) ->
addOr ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: USR_UID , array ( $sUserUID , '-1' ), Criteria :: IN ))
);
2012-07-16 14:19:52 -04:00
$aConditions = array ();
$aConditions [] = array ( AppDocumentPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDocumentPeer :: DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$oCriteria -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aInputDocuments = array ();
$aInputDocuments [] = array (
'APP_DOC_UID' => 'char' ,
'DOC_UID' => 'char' ,
'APP_DOC_COMMENT' => 'char' ,
'APP_DOC_FILENAME' => 'char' , 'APP_DOC_INDEX' => 'integer'
);
$oUser = new Users ();
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
}
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$lastVersion = $oAppDocument -> getLastAppDocVersion ( $aRow [ 'APP_DOC_UID' ], $sApplicationUID );
2013-08-02 17:10:53 -04:00
2012-07-16 14:19:52 -04:00
try {
$aAux1 = $oUser -> load ( $aAux [ 'USR_UID' ]);
2013-08-02 17:10:53 -04:00
$sUser = $conf -> usersNameFormatBySetParameters ( $confEnvSetting [ " format " ], $aAux1 [ " USR_USERNAME " ], $aAux1 [ " USR_FIRSTNAME " ], $aAux1 [ " USR_LASTNAME " ]);
2012-07-16 14:19:52 -04:00
} catch ( Exception $oException ) {
//$sUser = '(USER DELETED)';
$sUser = '***' ;
}
2013-08-02 17:10:53 -04:00
2012-07-16 14:19:52 -04:00
$aFields = array (
'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ],
'TYPE' => $aAux [ 'APP_DOC_TYPE' ],
'ORIGIN' => $aTask [ 'TAS_TITLE' ],
'CREATE_DATE' => $aAux [ 'APP_DOC_CREATE_DATE' ],
'CREATED_BY' => $sUser
);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'POSITION' ] = $_SESSION [ 'STEP_POSITION' ];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
if ( in_array ( $aRow [ 'APP_DOC_UID' ], $aDelete [ 'INPUT_DOCUMENTS' ])) {
$aFields [ 'ID_DELETE' ] = G :: LoadTranslation ( 'ID_DELETE' );
}
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_DOWNLOAD' );
$aFields [ 'DOWNLOAD_LINK' ] = " cases_ShowDocument?a= " . $aRow [ 'APP_DOC_UID' ] . " &v= " . $aRow [ 'DOC_VERSION' ];
$aFields [ 'DOC_VERSION' ] = $aRow [ 'DOC_VERSION' ];
if ( is_array ( $listing )) {
foreach ( $listing as $folderitem ) {
if ( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) {
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' );
$aFields [ 'DOWNLOAD_LINK' ] = $folderitem -> downloadScript ;
continue ;
}
}
}
if ( $lastVersion == $aRow [ 'DOC_VERSION' ]) {
//Show only last version
$aInputDocuments [] = $aFields ;
}
$oDataset -> next ();
}
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , array ( 'ATTACHED' ), Criteria :: IN );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> add (
2013-03-05 14:11:12 -04:00
$oCriteria -> getNewCriterion (
AppDocumentPeer :: APP_DOC_UID , $aObjectPermissions [ 'INPUT_DOCUMENTS' ], Criteria :: IN
) ->
addOr ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: USR_UID , array ( $sUserUID , '-1' ), Criteria :: IN )));
2012-07-16 14:19:52 -04:00
$aConditions = array ();
$aConditions [] = array ( AppDocumentPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDocumentPeer :: DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$oCriteria -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
}
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$lastVersion = $oAppDocument -> getLastAppDocVersion ( $aRow [ 'APP_DOC_UID' ], $sApplicationUID );
2013-08-02 17:10:53 -04:00
2012-07-16 14:19:52 -04:00
try {
$aAux1 = $oUser -> load ( $aAux [ 'USR_UID' ]);
2013-08-02 17:10:53 -04:00
$sUser = $conf -> usersNameFormatBySetParameters ( $confEnvSetting [ " format " ], $aAux1 [ " USR_USERNAME " ], $aAux1 [ " USR_FIRSTNAME " ], $aAux1 [ " USR_LASTNAME " ]);
2012-07-16 14:19:52 -04:00
} catch ( Exception $oException ) {
$sUser = '***' ;
}
2013-08-02 17:10:53 -04:00
2012-07-16 14:19:52 -04:00
$aFields = array (
'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ],
'TYPE' => $aAux [ 'APP_DOC_TYPE' ],
'ORIGIN' => $aTask [ 'TAS_TITLE' ],
'CREATE_DATE' => $aAux [ 'APP_DOC_CREATE_DATE' ],
'CREATED_BY' => $sUser
);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'POSITION' ] = $_SESSION [ 'STEP_POSITION' ];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
if ( in_array ( $aRow [ 'APP_DOC_UID' ], $aDelete [ 'INPUT_DOCUMENTS' ])) {
$aFields [ 'ID_DELETE' ] = G :: LoadTranslation ( 'ID_DELETE' );
}
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_DOWNLOAD' );
$aFields [ 'DOWNLOAD_LINK' ] = " cases_ShowDocument?a= " . $aRow [ 'APP_DOC_UID' ];
if ( $lastVersion == $aRow [ 'DOC_VERSION' ]) {
//Show only last version
$aInputDocuments [] = $aFields ;
}
$oDataset -> next ();
}
2013-01-03 15:32:54 -04:00
// Get input documents added/modified by a supervisor - Begin
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , array ( 'INPUT' ), Criteria :: IN );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> add ( AppDocumentPeer :: DEL_INDEX , 100000 );
$oCriteria -> addJoin ( AppDocumentPeer :: APP_UID , ApplicationPeer :: APP_UID , Criteria :: LEFT_JOIN );
$oCriteria -> add ( ApplicationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$oUser = new Users ();
while ( $aRow = $oDataset -> getRow ()) {
$aTask = array ( 'TAS_TITLE' => '[ ' . G :: LoadTranslation ( 'ID_SUPERVISOR' ) . ' ]' );
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$lastVersion = $oAppDocument -> getLastAppDocVersion ( $aRow [ 'APP_DOC_UID' ], $sApplicationUID );
2013-08-02 17:10:53 -04:00
2013-01-03 15:32:54 -04:00
try {
$aAux1 = $oUser -> load ( $aAux [ 'USR_UID' ]);
2013-08-02 17:10:53 -04:00
$sUser = $conf -> usersNameFormatBySetParameters ( $confEnvSetting [ " format " ], $aAux1 [ " USR_USERNAME " ], $aAux1 [ " USR_FIRSTNAME " ], $aAux1 [ " USR_LASTNAME " ]);
2013-01-03 15:32:54 -04:00
} catch ( Exception $oException ) {
$sUser = '***' ;
}
2013-08-02 17:10:53 -04:00
2013-01-03 15:32:54 -04:00
$aFields = array (
'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ],
'TYPE' => $aAux [ 'APP_DOC_TYPE' ],
'ORIGIN' => $aTask [ 'TAS_TITLE' ],
'CREATE_DATE' => $aAux [ 'APP_DOC_CREATE_DATE' ],
'CREATED_BY' => $sUser
);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'POSITION' ] = $_SESSION [ 'STEP_POSITION' ];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
if ( in_array ( $aRow [ 'APP_DOC_UID' ], $aDelete [ 'INPUT_DOCUMENTS' ])) {
$aFields [ 'ID_DELETE' ] = G :: LoadTranslation ( 'ID_DELETE' );
}
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_DOWNLOAD' );
$aFields [ 'DOWNLOAD_LINK' ] = " cases_ShowDocument?a= " . $aRow [ 'APP_DOC_UID' ] . " &v= " . $aRow [ 'DOC_VERSION' ];
$aFields [ 'DOC_VERSION' ] = $aRow [ 'DOC_VERSION' ];
if ( is_array ( $listing )) {
foreach ( $listing as $folderitem ) {
if ( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) {
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' );
$aFields [ 'DOWNLOAD_LINK' ] = $folderitem -> downloadScript ;
continue ;
}
}
}
if ( $lastVersion == $aRow [ 'DOC_VERSION' ]) {
//Show only last version
$aInputDocuments [] = $aFields ;
}
$oDataset -> next ();
}
// Get input documents added/modified by a supervisor - End
2012-07-16 14:19:52 -04:00
global $_DBArray ;
$_DBArray [ 'inputDocuments' ] = $aInputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'inputDocuments' );
$oCriteria -> addDescendingOrderByColumn ( 'CREATE_DATE' );
return $oCriteria ;
}
/*
* get all generate document
*
* @ name getAllGeneratedDocumentsCriteria
* @ param string $sProcessUID
* @ param string $sApplicationUID
* @ param string $sTasKUID
* @ param string $sUserUID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2016-04-01 13:02:38 -04:00
public function getAllGeneratedDocumentsCriteria ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID , $delIndex = 0 )
2012-07-16 14:19:52 -04:00
{
2013-08-02 17:10:53 -04:00
G :: LoadClass ( " configuration " );
$conf = new Configurations ();
$confEnvSetting = $conf -> getFormats ();
2013-03-05 14:11:12 -04:00
$listing = false ;
2012-07-16 14:19:52 -04:00
$oPluginRegistry = & PMPluginRegistry :: getSingleton ();
if ( $oPluginRegistry -> existsTrigger ( PM_CASE_DOCUMENT_LIST )) {
$folderData = new folderData ( null , null , $sApplicationUID , null , $sUserUID );
$folderData -> PMType = " OUTPUT " ;
$folderData -> returnList = true ;
//$oPluginRegistry = & PMPluginRegistry::getSingleton();
$listing = $oPluginRegistry -> executeTriggers ( PM_CASE_DOCUMENT_LIST , $folderData );
}
2016-04-01 13:02:38 -04:00
$aObjectPermissions = $this -> getAllObjects ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID , $delIndex );
2012-07-16 14:19:52 -04:00
if ( ! is_array ( $aObjectPermissions )) {
$aObjectPermissions = array (
'DYNAFORMS' => array ( - 1 ),
'INPUT_DOCUMENTS' => array ( - 1 ),
'OUTPUT_DOCUMENTS' => array ( - 1 )
);
}
if ( ! isset ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
}
}
$aDelete = $this -> getAllObjectsFrom ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID , 'DELETE' );
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , 'OUTPUT' );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
//$oCriteria->add(AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['OUTPUT_DOCUMENTS'], Criteria::IN);
$oCriteria -> add (
2013-03-05 14:11:12 -04:00
$oCriteria -> getNewCriterion (
AppDocumentPeer :: APP_DOC_UID , $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ], Criteria :: IN ) -> addOr ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: USR_UID , $sUserUID , Criteria :: EQUAL ))
);
2012-07-16 14:19:52 -04:00
$aConditions = array ();
$aConditions [] = array ( AppDocumentPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDocumentPeer :: DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$oCriteria -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aOutputDocuments = array ();
$aOutputDocuments [] = array (
'APP_DOC_UID' => 'char' ,
'DOC_UID' => 'char' ,
'APP_DOC_COMMENT' => 'char' ,
'APP_DOC_FILENAME' => 'char' ,
'APP_DOC_INDEX' => 'integer'
);
$oUser = new Users ();
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
}
$lastVersion = $oAppDocument -> getLastDocVersion ( $aRow [ 'DOC_UID' ], $sApplicationUID );
if ( $lastVersion == $aRow [ 'DOC_VERSION' ]) {
//Only show last document Version
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
//Get output Document information
$oOutputDocument = new OutputDocument ();
$aGields = $oOutputDocument -> load ( $aRow [ 'DOC_UID' ]);
//OUTPUTDOCUMENT
$outDocTitle = $aGields [ 'OUT_DOC_TITLE' ];
switch ( $aGields [ 'OUT_DOC_GENERATE' ]) {
//G::LoadTranslation(ID_DOWNLOAD)
case " PDF " :
$fileDoc = 'javascript:alert("NO DOC")' ;
$fileDocLabel = " " ;
$filePdf = 'cases_ShowOutputDocument?a=' .
2013-03-05 14:11:12 -04:00
$aRow [ 'APP_DOC_UID' ] . '&v=' . $aRow [ 'DOC_VERSION' ] . '&ext=pdf&random=' . rand ();
2012-07-16 14:19:52 -04:00
$filePdfLabel = " .pdf " ;
if ( is_array ( $listing )) {
foreach ( $listing as $folderitem ) {
if (( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) && ( $folderitem -> type == " PDF " )) {
$filePdfLabel = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' ) . " .pdf " ;
$filePdf = $folderitem -> downloadScript ;
continue ;
}
}
}
break ;
case " DOC " :
$fileDoc = 'cases_ShowOutputDocument?a=' .
2013-03-05 14:11:12 -04:00
$aRow [ 'APP_DOC_UID' ] . '&v=' . $aRow [ 'DOC_VERSION' ] . '&ext=doc&random=' . rand ();
2012-07-16 14:19:52 -04:00
$fileDocLabel = " .doc " ;
$filePdf = 'javascript:alert("NO PDF")' ;
$filePdfLabel = " " ;
if ( is_array ( $listing )) {
foreach ( $listing as $folderitem ) {
if (( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) && ( $folderitem -> type == " DOC " )) {
$fileDocLabel = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' ) . " .doc " ;
$fileDoc = $folderitem -> downloadScript ;
continue ;
}
}
}
break ;
case " BOTH " :
$fileDoc = 'cases_ShowOutputDocument?a=' .
2013-03-05 14:11:12 -04:00
$aRow [ 'APP_DOC_UID' ] . '&v=' . $aRow [ 'DOC_VERSION' ] . '&ext=doc&random=' . rand ();
2012-07-16 14:19:52 -04:00
$fileDocLabel = " .doc " ;
if ( is_array ( $listing )) {
foreach ( $listing as $folderitem ) {
if (( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) && ( $folderitem -> type == " DOC " )) {
$fileDocLabel = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' ) . " .doc " ;
$fileDoc = $folderitem -> downloadScript ;
continue ;
}
}
}
$filePdf = 'cases_ShowOutputDocument?a=' .
2013-03-05 14:11:12 -04:00
$aRow [ 'APP_DOC_UID' ] . '&v=' . $aRow [ 'DOC_VERSION' ] . '&ext=pdf&random=' . rand ();
2012-07-16 14:19:52 -04:00
$filePdfLabel = " .pdf " ;
if ( is_array ( $listing )) {
foreach ( $listing as $folderitem ) {
if (( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) && ( $folderitem -> type == " PDF " )) {
$filePdfLabel = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' ) . " .pdf " ;
$filePdf = $folderitem -> downloadScript ;
continue ;
}
}
}
break ;
}
2013-08-02 17:10:53 -04:00
2012-07-16 14:19:52 -04:00
try {
$aAux1 = $oUser -> load ( $aAux [ 'USR_UID' ]);
2013-08-02 17:10:53 -04:00
$sUser = $conf -> usersNameFormatBySetParameters ( $confEnvSetting [ " format " ], $aAux1 [ " USR_USERNAME " ], $aAux1 [ " USR_FIRSTNAME " ], $aAux1 [ " USR_LASTNAME " ]);
2012-07-16 14:19:52 -04:00
} catch ( Exception $oException ) {
$sUser = '(USER DELETED)' ;
}
//if both documents were generated, we choose the pdf one, only if doc was
//generate then choose the doc file.
$firstDocLink = $filePdf ;
$firstDocLabel = $filePdfLabel ;
if ( $aGields [ 'OUT_DOC_GENERATE' ] == 'DOC' ) {
$firstDocLink = $fileDoc ;
$firstDocLabel = $fileDocLabel ;
}
$aFields = array (
'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ],
'ORIGIN' => $aTask [ 'TAS_TITLE' ],
'CREATE_DATE' => $aAux [ 'APP_DOC_CREATE_DATE' ],
'CREATED_BY' => $sUser ,
'FILEDOC' => $fileDoc ,
'FILEPDF' => $filePdf ,
'OUTDOCTITLE' => $outDocTitle ,
'DOC_VERSION' => $aAux [ 'DOC_VERSION' ],
'TYPE' => $aAux [ 'APP_DOC_TYPE' ] . ' ' . $aGields [ 'OUT_DOC_GENERATE' ],
'DOWNLOAD_LINK' => $firstDocLink ,
'DOWNLOAD_FILE' => $aAux [ 'APP_DOC_FILENAME' ] . $firstDocLabel
);
2013-03-05 14:11:12 -04:00
if ( trim ( $fileDocLabel ) != '' ) {
2012-07-16 14:19:52 -04:00
$aFields [ 'FILEDOCLABEL' ] = $fileDocLabel ;
}
2013-03-05 14:11:12 -04:00
if ( trim ( $filePdfLabel ) != '' ) {
2012-07-16 14:19:52 -04:00
$aFields [ 'FILEPDFLABEL' ] = $filePdfLabel ;
}
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'POSITION' ] = $_SESSION [ 'STEP_POSITION' ];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
if ( in_array ( $aRow [ 'APP_DOC_UID' ], $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
if ( in_array ( $aRow [ 'APP_DOC_UID' ], $aDelete [ 'OUTPUT_DOCUMENTS' ])) {
$aFields [ 'ID_DELETE' ] = G :: LoadTranslation ( 'ID_DELETE' );
}
}
$aOutputDocuments [] = $aFields ;
}
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'outputDocuments' ] = $aOutputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'outputDocuments' );
$oCriteria -> addDescendingOrderByColumn ( 'CREATE_DATE' );
return $oCriteria ;
2012-07-13 06:27:36 -04:00
}
2012-07-16 14:19:52 -04:00
/*
* get all dynaforms in a task
*
* @ name getallDynaformsCriteria
* @ param string $sProcessUID
* @ param string $sApplicationUID
* @ param string $sTasKUID
* @ param string $sUserUID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2016-03-30 17:23:54 -04:00
public function getallDynaformsCriteria ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID , $delIndex = 0 )
2012-07-16 14:19:52 -04:00
{
2016-03-30 17:23:54 -04:00
$aObjectPermissions = $this -> getAllObjects ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID , $delIndex );
2012-07-16 14:19:52 -04:00
if ( ! is_array ( $aObjectPermissions )) {
$aObjectPermissions = array (
'DYNAFORMS' => array ( - 1 ),
'INPUT_DOCUMENTS' => array ( - 1 ),
'OUTPUT_DOCUMENTS' => array ( - 1 )
);
}
if ( ! isset ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
}
}
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ApplicationPeer :: APP_UID , $sApplicationUID );
$oCriteria -> addJoin ( ApplicationPeer :: PRO_UID , StepPeer :: PRO_UID );
$oCriteria -> addJoin ( StepPeer :: STEP_UID_OBJ , DynaformPeer :: DYN_UID );
$oCriteria -> add ( StepPeer :: STEP_TYPE_OBJ , 'DYNAFORM' );
$oCriteria -> add ( StepPeer :: STEP_UID_OBJ , $aObjectPermissions [ 'DYNAFORMS' ], Criteria :: IN );
//These fields are missing now is completed
$oCriteria -> addSelectColumn ( DynaformPeer :: DYN_UID );
2016-12-01 09:32:35 -05:00
$oCriteria -> addSelectColumn ( DynaformPeer :: DYN_TITLE );
2012-07-16 14:19:52 -04:00
$oCriteria -> addSelectColumn ( DynaformPeer :: DYN_TYPE );
$oCriteria -> addSelectColumn ( DynaformPeer :: DYN_FILENAME );
$oCriteria -> addSelectColumn ( ApplicationPeer :: PRO_UID );
///-- Adding column STEP_POSITION for standardization
$oCriteria -> addSelectColumn ( StepPeer :: STEP_POSITION );
$oCriteria -> addAscendingOrderByColumn ( StepPeer :: STEP_POSITION );
$oCriteria -> setDistinct ();
$oDataset = DynaformPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aInputDocuments = array ();
$aInputDocuments [] = array (
'DYN_TITLE' => 'char'
);
while ( $aRow = $oDataset -> getRow ()) {
2016-12-01 09:32:35 -05:00
$aFields [ 'DYN_TITLE' ] = $aRow [ 'DYN_TITLE' ];
2012-07-16 14:19:52 -04:00
$aFields [ 'DYN_UID' ] = $aRow [ 'DYN_UID' ];
$aFields [ 'EDIT' ] = G :: LoadTranslation ( 'ID_EDIT' );
$aFields [ 'PRO_UID' ] = $sProcessUID ;
$aFields [ 'APP_UID' ] = $sApplicationUID ;
$aFields [ 'TAS_UID' ] = $sTasKUID ;
$aInputDocuments [] = $aFields ;
$oDataset -> next ();
2011-06-01 15:53:57 -04:00
}
2012-07-16 14:19:52 -04:00
$distinctArray = $aInputDocuments ;
$distinctArrayBase = $aInputDocuments ;
$distinctOriginal = array ();
foreach ( $distinctArray as $distinctArrayKey => $distinctArrayValue ) {
$distinctOriginalPush = 1 ;
foreach ( $distinctOriginal as $distinctOriginalKey => $distinctOriginalValue ) {
if ( $distinctArrayValue == $distinctOriginalValue ) {
2013-03-05 14:11:12 -04:00
$distinctOriginalPush = 0 ;
2012-07-16 14:19:52 -04:00
}
}
2013-03-05 14:11:12 -04:00
if ( $distinctOriginalPush == 1 ) {
2012-07-16 14:19:52 -04:00
$distinctOriginal [] = $distinctArrayValue ;
}
2011-06-01 15:53:57 -04:00
}
2012-07-16 14:19:52 -04:00
$aInputDocuments = $distinctOriginal ;
global $_DBArray ;
$_DBArray [ 'Dynaforms' ] = $aInputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'Dynaforms' );
$oCriteria -> setDistinct ();
//$oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_CREATE_DATE);
return $oCriteria ;
2012-07-13 06:27:36 -04:00
}
2016-11-21 16:36:30 -04:00
/**
* @ param $aTaskInfo
* @ param $arrayData
* @ param $typeSend
* @ param $from
* @ return array
* @ throws Exception
2013-03-05 14:11:12 -04:00
*/
2016-11-21 16:36:30 -04:00
public function loadDataSendEmail ( $aTaskInfo , $arrayData , $from , $typeSend )
2012-07-16 14:19:52 -04:00
{
2016-11-21 16:36:30 -04:00
$eServer = new \ProcessMaker\BusinessModel\EmailServer ();
$dataLastEmail = array ();
2012-09-10 16:04:31 -04:00
2016-11-21 16:36:30 -04:00
switch ( $typeSend ) {
case 'LAST' :
if ( isset ( $aTaskInfo [ 'TAS_DEF_SUBJECT_MESSAGE' ]) && $aTaskInfo [ 'TAS_DEF_SUBJECT_MESSAGE' ] != '' ) {
$sSubject = G :: replaceDataField ( $aTaskInfo [ 'TAS_DEF_SUBJECT_MESSAGE' ], $arrayData );
} else {
$sSubject = G :: LoadTranslation ( 'ID_MESSAGE_SUBJECT_DERIVATION' );
}
2011-04-25 09:58:04 -04:00
2016-11-21 16:36:30 -04:00
G :: loadClass ( 'configuration' );
$oConf = new Configurations ;
$oConf -> loadConfig ( $x , 'TAS_EXTRA_PROPERTIES' , $aTaskInfo [ 'TAS_UID' ], '' , '' );
$conf = $oConf -> aConfig ;
2012-07-13 06:27:36 -04:00
2016-11-21 16:36:30 -04:00
$pathEmail = PATH_DATA_SITE . " mailTemplates " . PATH_SEP . $aTaskInfo [ " PRO_UID " ] . PATH_SEP ;
$swtplDefault = 0 ;
$sBody = null ;
2012-09-10 16:04:31 -04:00
2016-11-21 16:36:30 -04:00
if ( isset ( $conf [ " TAS_DEF_MESSAGE_TYPE " ]) &&
2013-03-05 14:11:12 -04:00
isset ( $conf [ " TAS_DEF_MESSAGE_TEMPLATE " ]) &&
$conf [ " TAS_DEF_MESSAGE_TYPE " ] == " template " &&
$conf [ " TAS_DEF_MESSAGE_TEMPLATE " ] != " "
2016-11-21 16:36:30 -04:00
) {
if ( $conf [ " TAS_DEF_MESSAGE_TEMPLATE " ] == " alert_message.html " ) {
$swtplDefault = 1 ;
2015-12-03 16:00:44 -04:00
}
2012-07-13 06:27:36 -04:00
2016-11-21 16:36:30 -04:00
$fileTemplate = $pathEmail . $conf [ " TAS_DEF_MESSAGE_TEMPLATE " ];
if ( ! file_exists ( $fileTemplate )) {
$tempale = PATH_CORE . " templates " . PATH_SEP . " mails " . PATH_SEP . " alert_message.html " ;
$copied = @ copy ( $tempale , $fileTemplate );
if ( $copied ) {
$dataTemplate = array ( " prf_filename " => $conf [ " TAS_DEF_MESSAGE_TEMPLATE " ],
" prf_path " => $fileTemplate ,
" pro_uid " => $aTaskInfo [ " PRO_UID " ],
" usr_uid " => " 00000000000000000000000000000001 " ,
" prf_uid " => G :: generateUniqueID (),
" prf_type " => " file " ,
" prf_create_date " => date ( " Y-m-d H:i:s " ));
$filesManager = new ProcessMaker\BusinessModel\FilesManager ();
$filesManager -> addProcessFilesManagerInDb ( $dataTemplate );
} else {
throw ( new Exception ( " Template file \" $fileTemplate\ " does not exist . " ));
}
2016-10-01 16:40:41 -04:00
}
2016-11-21 16:36:30 -04:00
$sBody = file_get_contents ( $fileTemplate );
} else {
$sBody = nl2br ( $aTaskInfo [ 'TAS_DEF_MESSAGE' ]);
2016-08-02 17:18:26 -04:00
}
2016-11-21 16:36:30 -04:00
if ( ! class_exists ( 'System' )) {
G :: LoadClass ( 'system' );
}
2017-03-16 09:37:12 -04:00
$aConfiguration = ( ! is_null ( \EmailServerPeer :: retrieveByPK ( $aTaskInfo [ 'TAS_EMAIL_SERVER_UID' ]))) ?
$eServer -> getEmailServer ( $aTaskInfo [ 'TAS_EMAIL_SERVER_UID' ], true ) :
$eServer -> getEmailServerDefault ();
2016-11-21 16:36:30 -04:00
$msgError = '' ;
if ( empty ( $aConfiguration )) {
$msgError = G :: LoadTranslation ( 'ID_THE_DEFAULT_CONFIGURATION' );
$aConfiguration [ 'MESS_ENGINE' ] = '' ;
2017-03-08 16:52:30 -04:00
} else {
$aConfiguration [ 'SMTPSecure' ] = $aConfiguration [ 'SMTPSECURE' ];
2016-11-21 16:36:30 -04:00
}
if ( $aTaskInfo [ 'TAS_NOT_EMAIL_FROM_FORMAT' ]) {
$fromName = $aConfiguration [ 'MESS_FROM_NAME' ];
$fromMail = $aConfiguration [ 'MESS_FROM_MAIL' ];
$from = $fromName . (( $fromMail != '' ) ? ' <' . $fromMail . '>' : '' );
2017-03-13 13:45:26 -04:00
//If the configuration was not configured correctly
if ( empty ( $fromMail )) {
$dataLog = \Bootstrap :: getDefaultContextLog ();
$dataLog [ 'appUid' ] = $arrayData [ 'APPLICATION' ];
$dataLog [ 'usrUid' ] = $arrayData [ 'USER_LOGGED' ];
$dataLog [ 'appNumber' ] = $arrayData [ 'APP_NUMBER' ];
$dataLog [ 'tasUid' ] = $arrayData [ 'TASK' ];
$dataLog [ 'proUid' ] = $aTaskInfo [ 'PRO_UID' ];
$dataLog [ 'appMessageStatus' ] = 'pending' ;
$dataLog [ 'subject' ] = $sSubject ;
$dataLog [ 'from' ] = $from ;
$dataLog [ 'action' ] = G :: LoadTranslation ( 'ID_EMAIL_SERVER_FROM_MAIL_EMPTY' );
Bootstrap :: registerMonolog ( 'EmailServer' , 300 , 'Email server' , $dataLog , $dataLog [ 'workspace' ], 'processmaker.log' );
}
2016-11-21 16:36:30 -04:00
}
$dataLastEmail [ 'msgError' ] = $msgError ;
$dataLastEmail [ 'configuration' ] = $aConfiguration ;
$dataLastEmail [ 'subject' ] = $sSubject ;
$dataLastEmail [ 'pathEmail' ] = $pathEmail ;
2017-02-07 16:18:17 -04:00
$dataLastEmail [ 'swtplDefault' ] = $swtplDefault ;
2016-11-21 16:36:30 -04:00
$dataLastEmail [ 'body' ] = $sBody ;
$dataLastEmail [ 'from' ] = $from ;
break ;
case 'RECEIVE' :
if ( isset ( $aTaskInfo [ 'TAS_RECEIVE_SUBJECT_MESSAGE' ]) && $aTaskInfo [ 'TAS_RECEIVE_SUBJECT_MESSAGE' ] != '' ) {
$sSubject = G :: replaceDataField ( $aTaskInfo [ 'TAS_RECEIVE_SUBJECT_MESSAGE' ], $arrayData );
2015-12-09 17:01:20 -04:00
} else {
2016-11-21 16:36:30 -04:00
$sSubject = G :: LoadTranslation ( 'ID_MESSAGE_SUBJECT_DERIVATION' );
2015-12-09 17:01:20 -04:00
}
2016-11-21 16:36:30 -04:00
$pathEmail = PATH_DATA_SITE . " mailTemplates " . PATH_SEP . $aTaskInfo [ " PRO_UID " ] . PATH_SEP ;
$swtplDefault = 0 ;
$sBody = null ;
if ( isset ( $aTaskInfo [ " TAS_RECEIVE_MESSAGE_TYPE " ]) &&
isset ( $aTaskInfo [ " TAS_RECEIVE_MESSAGE_TEMPLATE " ]) &&
$aTaskInfo [ " TAS_RECEIVE_MESSAGE_TYPE " ] == " template " &&
$aTaskInfo [ " TAS_RECEIVE_MESSAGE_TEMPLATE " ] != " "
) {
if ( $aTaskInfo [ " TAS_RECEIVE_MESSAGE_TEMPLATE " ] == " alert_message.html " ) {
$swtplDefault = 1 ;
}
2015-12-10 15:21:42 -04:00
2016-11-21 16:36:30 -04:00
$fileTemplate = $pathEmail . $aTaskInfo [ " TAS_RECEIVE_MESSAGE_TEMPLATE " ];
if ( ! file_exists ( $fileTemplate )) {
$tempale = PATH_CORE . " templates " . PATH_SEP . " mails " . PATH_SEP . " alert_message.html " ;
$copied = @ copy ( $tempale , $fileTemplate );
if ( $copied ) {
$dataTemplate = array ( " prf_filename " => $aTaskInfo [ " TAS_RECEIVE_MESSAGE_TEMPLATE " ],
" prf_path " => $fileTemplate ,
" pro_uid " => $aTaskInfo [ " PRO_UID " ],
" usr_uid " => " 00000000000000000000000000000001 " ,
" prf_uid " => G :: generateUniqueID (),
" prf_type " => " file " ,
" prf_create_date " => date ( " Y-m-d H:i:s " ));
$filesManager = new ProcessMaker\BusinessModel\FilesManager ();
$filesManager -> addProcessFilesManagerInDb ( $dataTemplate );
} else {
throw ( new Exception ( " Template file \" $fileTemplate\ " does not exist . " ));
}
}
2015-12-10 15:21:42 -04:00
2016-11-21 16:36:30 -04:00
$sBody = file_get_contents ( $fileTemplate );
2015-12-10 15:21:42 -04:00
} else {
2016-11-21 16:36:30 -04:00
$sBody = nl2br ( $aTaskInfo [ 'TAS_RECEIVE_MESSAGE' ]);
2015-12-10 15:21:42 -04:00
}
2016-11-21 16:36:30 -04:00
if ( ! class_exists ( 'System' )) {
G :: LoadClass ( 'system' );
}
2017-03-16 09:37:12 -04:00
$aConfiguration = ( ! is_null ( \EmailServerPeer :: retrieveByPK ( $aTaskInfo [ 'TAS_RECEIVE_SERVER_UID' ]))) ?
$eServer -> getEmailServer ( $aTaskInfo [ 'TAS_RECEIVE_SERVER_UID' ], true ) :
$eServer -> getEmailServerDefault ();
2016-11-21 16:36:30 -04:00
$msgError = '' ;
if ( empty ( $aConfiguration )) {
$msgError = G :: LoadTranslation ( 'ID_THE_DEFAULT_CONFIGURATION' );
$aConfiguration [ 'MESS_ENGINE' ] = '' ;
2017-03-11 15:51:51 -04:00
} else {
$aConfiguration [ 'SMTPSecure' ] = $aConfiguration [ 'SMTPSECURE' ];
2016-11-21 16:36:30 -04:00
}
if ( $aTaskInfo [ 'TAS_RECEIVE_EMAIL_FROM_FORMAT' ]) {
$fromName = $aConfiguration [ 'MESS_FROM_NAME' ];
$fromMail = $aConfiguration [ 'MESS_FROM_MAIL' ];
$from = $fromName . (( $fromMail != '' ) ? ' <' . $fromMail . '>' : '' );
2017-03-13 13:45:26 -04:00
//If the configuration was not configured correctly
if ( empty ( $fromMail )) {
$dataLog = \Bootstrap :: getDefaultContextLog ();
$dataLog [ 'appUid' ] = $arrayData [ 'APPLICATION' ];
$dataLog [ 'usrUid' ] = $arrayData [ 'USER_LOGGED' ];
$dataLog [ 'appNumber' ] = $arrayData [ 'APP_NUMBER' ];
$dataLog [ 'tasUid' ] = $arrayData [ 'TASK' ];
$dataLog [ 'proUid' ] = $aTaskInfo [ 'PRO_UID' ];
$dataLog [ 'appMessageStatus' ] = 'pending' ;
$dataLog [ 'subject' ] = $sSubject ;
$dataLog [ 'from' ] = $from ;
$dataLog [ 'action' ] = G :: LoadTranslation ( 'ID_EMAIL_SERVER_FROM_MAIL_EMPTY' );
Bootstrap :: registerMonolog ( 'EmailServer' , 300 , 'Email server' , $dataLog , $dataLog [ 'workspace' ], 'processmaker.log' );
}
2016-11-21 16:36:30 -04:00
}
$dataLastEmail [ 'msgError' ] = $msgError ;
$dataLastEmail [ 'configuration' ] = $aConfiguration ;
$dataLastEmail [ 'subject' ] = $sSubject ;
$dataLastEmail [ 'pathEmail' ] = $pathEmail ;
2017-02-07 16:18:17 -04:00
$dataLastEmail [ 'swtplDefault' ] = $swtplDefault ;
2016-11-21 16:36:30 -04:00
$dataLastEmail [ 'body' ] = $sBody ;
$dataLastEmail [ 'from' ] = $from ;
break ;
}
return $dataLastEmail ;
}
2015-12-10 15:21:42 -04:00
2016-11-21 16:36:30 -04:00
/**
* @ param $dataLastEmail
* @ param $arrayData
* @ param $arrayTask
*/
public function sendMessage ( $dataLastEmail , $arrayData , $arrayTask )
{
G :: LoadClass ( " spool " );
foreach ( $arrayTask as $aTask ) {
//Check and fix if Task Id is complex
if ( strpos ( $aTask [ 'TAS_UID' ], " / " ) !== false ) {
$aux = explode ( " / " , $aTask [ 'TAS_UID' ]);
if ( isset ( $aux [ 1 ])) {
$aTask [ 'TAS_UID' ] = $aux [ 1 ];
}
}
//if the next is EOP dont send notification and continue with the next
if ( $aTask [ 'TAS_UID' ] === '-1' ) {
continue ;
}
if ( isset ( $aTask [ 'DEL_INDEX' ])) {
$arrayData2 = $arrayData ;
$appDelegation = AppDelegationPeer :: retrieveByPK ( $dataLastEmail [ 'applicationUid' ], $aTask [ 'DEL_INDEX' ]);
if ( ! is_null ( $appDelegation )) {
$oTaskUpd = new Task ();
$aTaskUpdate = $oTaskUpd -> load ( $appDelegation -> getTasUid ());
$arrayData2 [ 'TAS_TITLE' ] = $aTaskUpdate [ 'TAS_TITLE' ];
$arrayData2 [ 'DEL_TASK_DUE_DATE' ] = $appDelegation -> getDelTaskDueDate ();
2016-10-03 15:57:31 -04:00
}
2016-11-21 16:36:30 -04:00
} else {
$arrayData2 = $arrayData ;
}
2016-03-30 17:23:54 -04:00
2016-11-21 16:36:30 -04:00
if ( isset ( $aTask [ 'USR_UID' ]) && ! empty ( $aTask [ 'USR_UID' ])) {
$user = new \ProcessMaker\BusinessModel\User ();
$arrayUserData = $user -> getUser ( $aTask [ 'USR_UID' ], true );
$arrayData2 = \ProcessMaker\Util\DateTime :: convertUtcToTimeZone ( $arrayData2 ,
( trim ( $arrayUserData [ 'USR_TIME_ZONE' ]) != '' ) ? trim ( $arrayUserData [ 'USR_TIME_ZONE' ]) :
\ProcessMaker\Util\System :: getTimeZone ());
} else {
$arrayData2 = \ProcessMaker\Util\DateTime :: convertUtcToTimeZone ( $arrayData2 );
}
$sBody2 = G :: replaceDataGridField ( $dataLastEmail [ 'body' ], $arrayData2 , false );
$sTo = null ;
$sCc = '' ;
if ( $aTask [ 'TAS_UID' ] != '-1' ) {
$respTo = $this -> getTo ( $aTask [ 'TAS_UID' ], $aTask [ 'USR_UID' ], $arrayData );
$sTo = $respTo [ 'to' ];
$sCc = $respTo [ 'cc' ];
}
2016-03-30 17:23:54 -04:00
2016-11-21 16:36:30 -04:00
if ( $aTask [ " TAS_ASSIGN_TYPE " ] === " SELF_SERVICE " ) {
if ( $dataLastEmail [ 'swtplDefault' ] == 1 ) {
G :: verifyPath ( $dataLastEmail [ 'pathEmail' ], true ); // Create if it does not exist
$fileTemplate = $dataLastEmail [ 'pathEmail' ] . G :: LoadTranslation ( 'ID_UNASSIGNED_MESSAGE' );
if (( ! file_exists ( $fileTemplate )) && file_exists ( PATH_TPL . " mails " . PATH_SEP .
G :: LoadTranslation ( 'ID_UNASSIGNED_MESSAGE' ))
) {
@ copy ( PATH_TPL . " mails " . PATH_SEP . G :: LoadTranslation ( 'ID_UNASSIGNED_MESSAGE' ),
$fileTemplate );
2016-03-30 17:23:54 -04:00
}
2016-11-21 16:36:30 -04:00
$sBody2 = G :: replaceDataField ( file_get_contents ( $fileTemplate ), $arrayData2 );
2012-09-10 16:04:31 -04:00
}
2016-11-21 16:36:30 -04:00
}
2012-09-10 16:04:31 -04:00
2016-11-21 16:36:30 -04:00
if ( $sTo != null ) {
$oSpool = new spoolRun ();
$oSpool -> setConfig ( $dataLastEmail [ 'configuration' ]);
$oSpool -> create ( array (
" msg_uid " => " " ,
'app_uid' => $dataLastEmail [ 'applicationUid' ],
'del_index' => $dataLastEmail [ 'delIndex' ],
" app_msg_type " => " DERIVATION " ,
" app_msg_subject " => $dataLastEmail [ 'subject' ],
'app_msg_from' => $dataLastEmail [ 'from' ],
" app_msg_to " => $sTo ,
'app_msg_body' => $sBody2 ,
" app_msg_cc " => $sCc ,
" app_msg_bcc " => " " ,
" app_msg_attach " => " " ,
" app_msg_template " => " " ,
" app_msg_status " => " pending " ,
" app_msg_error " => $dataLastEmail [ 'msgError' ]
));
if ( $dataLastEmail [ 'msgError' ] == '' ) {
if (( $dataLastEmail [ 'configuration' ][ " MESS_BACKGROUND " ] == " " ) ||
( $dataLastEmail [ 'configuration' ][ " MESS_TRY_SEND_INMEDIATLY " ] == " 1 " )
) {
$oSpool -> sendMail ();
2012-07-16 14:19:52 -04:00
}
}
}
2016-11-21 16:36:30 -04:00
}
}
/**
* @ param $taskUid
* @ param $arrayTask
* @ param $arrayData
* @ param $applicationUid
* @ param $delIndex
* @ param string $from
* @ return bool
* @ throws Exception
*/
public function sendNotifications ( $taskUid , $arrayTask , $arrayData , $applicationUid , $delIndex , $from = '' )
{
try {
$arrayApplicationData = $this -> loadCase ( $applicationUid );
$arrayData [ 'APP_NUMBER' ] = $arrayApplicationData [ 'APP_NUMBER' ];
$oTask = new Task ();
$aTaskInfo = $oTask -> load ( $taskUid );
if ( $aTaskInfo [ 'TAS_SEND_LAST_EMAIL' ] == 'TRUE' ) {
$dataLastEmail = $this -> loadDataSendEmail ( $aTaskInfo , $arrayData , $from , 'LAST' );
$dataLastEmail [ 'applicationUid' ] = $applicationUid ;
$dataLastEmail [ 'delIndex' ] = $delIndex ;
$this -> sendMessage ( $dataLastEmail , $arrayData , $arrayTask );
} else {
return false ;
}
2012-07-16 14:19:52 -04:00
} catch ( Exception $oException ) {
throw $oException ;
2010-12-02 23:34:41 +00:00
}
2016-03-30 17:23:54 -04:00
}
2016-07-19 14:26:51 -04:00
public function getTo ( $taskUid , $userUid , $arrayData )
2016-03-30 17:23:54 -04:00
{
$sTo = null ;
$sCc = null ;
$arrayResp = array ();
2016-07-19 14:26:51 -04:00
$tasks = new Tasks ();
2016-03-30 17:23:54 -04:00
$group = new Groups ();
$oUser = new Users ();
2016-07-19 14:26:51 -04:00
$task = TaskPeer :: retrieveByPK ( $taskUid );
switch ( $task -> getTasAssignType ()) {
case 'SELF_SERVICE' :
$to = '' ;
$cc = '' ;
//Query
$criteria = new Criteria ( 'workflow' );
$criteria -> addSelectColumn ( UsersPeer :: USR_UID );
$criteria -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$criteria -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$criteria -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$criteria -> addSelectColumn ( UsersPeer :: USR_EMAIL );
$criteria -> add ( UsersPeer :: USR_STATUS , 'CLOSED' , Criteria :: NOT_EQUAL );
$rsCriteria = null ;
if ( trim ( $task -> getTasGroupVariable ()) != '' ) {
//SELF_SERVICE_VALUE
$variable = trim ( $task -> getTasGroupVariable (), ' @#%?$=' );
//Query
if ( isset ( $arrayData [ $variable ])) {
$data = $arrayData [ $variable ];
switch ( gettype ( $data )) {
case 'string' :
$criteria -> addJoin ( GroupUserPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$criteria -> add ( GroupUserPeer :: GRP_UID , $data , Criteria :: EQUAL );
$rsCriteria = GroupUserPeer :: doSelectRS ( $criteria );
break ;
case 'array' :
$criteria -> add ( UsersPeer :: USR_UID , $data , Criteria :: IN );
$rsCriteria = UsersPeer :: doSelectRS ( $criteria );
break ;
}
}
} else {
//SELF_SERVICE
$arrayTaskUser = [];
$arrayAux1 = $tasks -> getGroupsOfTask ( $taskUid , 1 );
foreach ( $arrayAux1 as $arrayGroup ) {
$arrayAux2 = $group -> getUsersOfGroup ( $arrayGroup [ 'GRP_UID' ]);
foreach ( $arrayAux2 as $arrayUser ) {
$arrayTaskUser [] = $arrayUser [ 'USR_UID' ];
2016-03-30 17:23:54 -04:00
}
}
2016-07-19 14:26:51 -04:00
$arrayAux1 = $tasks -> getUsersOfTask ( $taskUid , 1 );
foreach ( $arrayAux1 as $arrayUser ) {
$arrayTaskUser [] = $arrayUser [ 'USR_UID' ];
2016-03-30 17:23:54 -04:00
}
2016-07-19 14:26:51 -04:00
//Query
$criteria -> add ( UsersPeer :: USR_UID , $arrayTaskUser , Criteria :: IN );
$rsCriteria = UsersPeer :: doSelectRS ( $criteria );
}
if ( ! is_null ( $rsCriteria )) {
$rsCriteria -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
while ( $rsCriteria -> next ()) {
$record = $rsCriteria -> getRow ();
$toAux = (( $record [ 'USR_FIRSTNAME' ] != '' || $record [ 'USR_LASTNAME' ] != '' ) ? $record [ 'USR_FIRSTNAME' ] . ' ' . $record [ 'USR_LASTNAME' ] . ' ' : '' ) . '<' . $record [ 'USR_EMAIL' ] . '>' ;
if ( $to == '' ) {
2016-03-30 17:23:54 -04:00
$to = $toAux ;
} else {
2016-07-19 14:26:51 -04:00
$cc .= (( $cc != '' ) ? ',' : '' ) . $toAux ;
2016-03-30 17:23:54 -04:00
}
}
}
2016-07-19 14:26:51 -04:00
$arrayResp [ 'to' ] = $to ;
$arrayResp [ 'cc' ] = $cc ;
2016-03-30 17:23:54 -04:00
break ;
case " MULTIPLE_INSTANCE " :
$to = null ;
$cc = null ;
$sw = 1 ;
$oDerivation = new Derivation ();
$userFields = $oDerivation -> getUsersFullNameFromArray ( $oDerivation -> getAllUsersFromAnyTask ( $taskUid ) );
if ( isset ( $userFields )) {
foreach ( $userFields as $row ) {
$toAux = ((( $row [ " USR_FIRSTNAME " ] != " " ) || ( $row [ " USR_LASTNAME " ] != " " )) ? $row [ " USR_FIRSTNAME " ] . " " . $row [ " USR_LASTNAME " ] . " " : " " ) . " < " . $row [ " USR_EMAIL " ] . " > " ;
if ( $sw == 1 ) {
$to = $toAux ;
$sw = 0 ;
} else {
$cc = $cc . (( $cc != null ) ? " , " : null ) . $toAux ;
}
}
$arrayResp [ 'to' ] = $to ;
$arrayResp [ 'cc' ] = $cc ;
}
break ;
case " MULTIPLE_INSTANCE_VALUE_BASED " :
$oTask = new Task ();
$aTaskNext = $oTask -> load ( $taskUid );
if ( isset ( $aTaskNext [ " TAS_ASSIGN_VARIABLE " ] ) && ! empty ( $aTaskNext [ " TAS_ASSIGN_VARIABLE " ] )) {
$to = null ;
$cc = null ;
$sw = 1 ;
$nextTaskAssignVariable = trim ( $aTaskNext [ " TAS_ASSIGN_VARIABLE " ], " @# " );
$arrayUsers = $arrayData [ $nextTaskAssignVariable ];
$oDerivation = new Derivation ();
$userFields = $oDerivation -> getUsersFullNameFromArray ( $arrayUsers );
2016-07-19 14:26:51 -04:00
2016-03-30 17:23:54 -04:00
foreach ( $userFields as $row ) {
$toAux = ((( $row [ " USR_FIRSTNAME " ] != " " ) || ( $row [ " USR_LASTNAME " ] != " " )) ? $row [ " USR_FIRSTNAME " ] . " " . $row [ " USR_LASTNAME " ] . " " : " " ) . " < " . $row [ " USR_EMAIL " ] . " > " ;
if ( $sw == 1 ) {
$to = $toAux ;
$sw = 0 ;
} else {
$cc = $cc . (( $cc != null ) ? " , " : null ) . $toAux ;
}
}
$arrayResp [ 'to' ] = $to ;
$arrayResp [ 'cc' ] = $cc ;
}
break ;
default :
2016-07-19 14:26:51 -04:00
if ( isset ( $userUid ) && ! empty ( $userUid )) {
$aUser = $oUser -> load ( $userUid );
2016-03-30 17:23:54 -04:00
$sTo = ((( $aUser [ " USR_FIRSTNAME " ] != " " ) || ( $aUser [ " USR_LASTNAME " ] != " " )) ? $aUser [ " USR_FIRSTNAME " ] . " " . $aUser [ " USR_LASTNAME " ] . " " : " " ) . " < " . $aUser [ " USR_EMAIL " ] . " > " ;
}
$arrayResp [ 'to' ] = $sTo ;
$arrayResp [ 'cc' ] = '' ;
break ;
}
return $arrayResp ;
2016-03-08 10:17:03 -04:00
}
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
/**
* Obtain all user permits for Dynaforms , Input and output documents
*
* function getAllObjects ( $PRO_UID , $APP_UID , $TAS_UID , $USR_UID )
* @ author Erik Amaru Ortiz < erik @ colosa . com >
* @ access public
* @ param Process ID , Application ID , Task ID and User ID
* @ return Array within all user permitions all objects ' types
2013-03-05 14:11:12 -04:00
*/
2016-03-30 17:23:54 -04:00
public function getAllObjects ( $PRO_UID , $APP_UID , $TAS_UID = '' , $USR_UID = '' , $delIndex = 0 )
2012-07-16 14:19:52 -04:00
{
2013-03-05 14:11:12 -04:00
$ACTIONS = Array ( 'VIEW' , 'BLOCK' , 'DELETE' ); //TO COMPLETE
2012-07-16 14:19:52 -04:00
$MAIN_OBJECTS = Array ();
$RESULT_OBJECTS = Array ();
2012-07-13 06:27:36 -04:00
2012-07-16 14:19:52 -04:00
foreach ( $ACTIONS as $action ) {
2016-03-30 17:23:54 -04:00
$MAIN_OBJECTS [ $action ] = $this -> getAllObjectsFrom ( $PRO_UID , $APP_UID , $TAS_UID , $USR_UID , $action , $delIndex );
2012-07-16 14:19:52 -04:00
}
/* ADDITIONAL OPERATIONS */
2013-03-05 14:11:12 -04:00
/* * * BETWEN VIEW AND BLOCK** */
2012-07-16 14:19:52 -04:00
$RESULT_OBJECTS [ 'DYNAFORMS' ] = G :: arrayDiff (
2016-04-01 13:02:38 -04:00
$MAIN_OBJECTS [ 'VIEW' ][ 'DYNAFORMS' ], $MAIN_OBJECTS [ 'BLOCK' ][ 'DYNAFORMS' ]
2012-07-16 14:19:52 -04:00
);
$RESULT_OBJECTS [ 'INPUT_DOCUMENTS' ] = G :: arrayDiff (
2016-04-01 13:02:38 -04:00
$MAIN_OBJECTS [ 'VIEW' ][ 'INPUT_DOCUMENTS' ], $MAIN_OBJECTS [ 'BLOCK' ][ 'INPUT_DOCUMENTS' ]
2012-07-16 14:19:52 -04:00
);
$RESULT_OBJECTS [ 'OUTPUT_DOCUMENTS' ] = array_merge_recursive (
2016-04-01 13:02:38 -04:00
G :: arrayDiff ( $MAIN_OBJECTS [ 'VIEW' ][ 'OUTPUT_DOCUMENTS' ], $MAIN_OBJECTS [ 'BLOCK' ][ 'OUTPUT_DOCUMENTS' ]), G :: arrayDiff ( $MAIN_OBJECTS [ 'DELETE' ][ 'OUTPUT_DOCUMENTS' ], $MAIN_OBJECTS [ 'BLOCK' ][ 'OUTPUT_DOCUMENTS' ])
2012-10-05 12:29:55 -04:00
);
$RESULT_OBJECTS [ 'CASES_NOTES' ] = G :: arrayDiff (
2016-04-01 13:02:38 -04:00
$MAIN_OBJECTS [ 'VIEW' ][ 'CASES_NOTES' ], $MAIN_OBJECTS [ 'BLOCK' ][ 'CASES_NOTES' ]
2012-10-05 12:29:55 -04:00
);
2014-11-10 15:40:24 -04:00
array_push ( $RESULT_OBJECTS [ " DYNAFORMS " ], - 1 , - 2 );
2012-07-16 14:19:52 -04:00
array_push ( $RESULT_OBJECTS [ 'INPUT_DOCUMENTS' ], - 1 );
array_push ( $RESULT_OBJECTS [ 'OUTPUT_DOCUMENTS' ], - 1 );
2012-10-05 12:29:55 -04:00
array_push ( $RESULT_OBJECTS [ 'CASES_NOTES' ], - 1 );
2012-10-16 00:29:52 -04:00
2012-07-16 14:19:52 -04:00
return $RESULT_OBJECTS ;
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
/**
2017-03-14 13:16:25 -04:00
* Obtain all object permissions for Dynaforms , Input , Output and Message history
2012-07-16 14:19:52 -04:00
*
2017-03-14 13:16:25 -04:00
* This function return information about a specific object permissions or for all = ANY
2012-07-16 14:19:52 -04:00
* @ access public
2017-03-14 13:16:25 -04:00
* @ param string $proUid
* @ param string $appUid
* @ param string $tasUid
* @ param string $usrUid
* @ param string $action some action [ VIEW , BLOCK , RESEND ]
* @ param string $delIndex
2012-07-16 14:19:52 -04:00
* @ return Array within all user permitions all objects ' types
2013-03-05 14:11:12 -04:00
*/
2017-03-15 15:38:34 -04:00
public function getAllObjectsFrom ( $proUid , $appUid , $tasUid = '' , $usrUid = '' , $action = '' , $delIndex = 0 )
2012-07-16 14:19:52 -04:00
{
2017-03-14 13:16:25 -04:00
$aCase = $this -> loadCase ( $appUid );
2014-10-29 17:00:47 -04:00
if ( $delIndex != 0 ) {
$appDelay = new AppDelay ();
2017-03-14 13:16:25 -04:00
if ( $appDelay -> isPaused ( $appUid , $delIndex )) {
2014-10-29 17:00:47 -04:00
$aCase [ " APP_STATUS " ] = " PAUSED " ;
}
}
2017-03-14 13:16:25 -04:00
$userPermissions = array ();
$groupPermissions = array ();
$result = array (
" DYNAFORM " => array (),
" INPUT " => array (),
" OUTPUT " => array (),
2013-04-15 15:49:27 -04:00
" CASES_NOTES " => 0 ,
2017-03-14 13:16:25 -04:00
" MSGS_HISTORY " => array ()
/*----------------------------------********---------------------------------*/
2014-12-04 10:23:06 -04:00
, " SUMMARY_FORM " => 0
2017-03-14 13:16:25 -04:00
/*----------------------------------********---------------------------------*/
2012-10-08 12:31:13 -04:00
);
2014-10-29 17:00:47 -04:00
2017-03-14 13:16:25 -04:00
$oObjectPermission = new ObjectPermission ();
$userPermissions = $oObjectPermission -> verifyObjectPermissionPerUser ( $usrUid , $proUid , $tasUid , $action );
$groupPermissions = $oObjectPermission -> verifyObjectPermissionPerGroup ( $usrUid , $proUid , $tasUid , $action );
$permissions = array_merge ( $userPermissions , $groupPermissions );
foreach ( $permissions as $row ) {
$userUid = $row [ 'USR_UID' ];
$opUserRelation = $row [ 'OP_USER_RELATION' ];
$opTaskSource = $row [ 'OP_TASK_SOURCE' ];
$opParticipated = ( int ) $row [ 'OP_PARTICIPATE' ];
$opType = $row [ 'OP_OBJ_TYPE' ];
$opObjUid = $row [ 'OP_OBJ_UID' ];
$obCaseStatus = $row [ 'OP_CASE_STATUS' ];
2017-03-15 15:38:34 -04:00
//The values of obCaseStatus is [ALL, COMPLETED, DRAFT, TO_DO, PAUSED]
//If the case is todo and we need the participate
//but we did not participated did not validate nothing and return array empty
2012-07-16 14:19:52 -04:00
$sw_participate = false ; // must be false for default
2017-03-15 15:38:34 -04:00
if ( $obCaseStatus != 'COMPLETED' && $opParticipated == 1 ) {
$oCriteriax = new Criteria ( 'workflow' );
$oCriteriax -> add ( AppDelegationPeer :: USR_UID , $usrUid );
$oCriteriax -> add ( AppDelegationPeer :: APP_UID , $appUid );
$datasetx = AppDelegationPeer :: doSelectRS ( $oCriteriax );
$datasetx -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$datasetx -> next ();
$aRow = $datasetx -> getRow ();
if ( ! is_array ( $aRow )) {
//The user was not participated in the case and the participation is required
$sw_participate = true ;
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
}
2017-03-15 15:38:34 -04:00
2017-03-15 18:38:17 -04:00
//If user can be see the objects process
//We will be prepare the data relate to the Type can be ANY, DYNAFORM, INPUT, OUTPUT, ...
2012-07-16 14:19:52 -04:00
if ( ! $sw_participate ) {
2017-03-14 13:16:25 -04:00
switch ( $opType ) {
2012-07-16 14:19:52 -04:00
case 'ANY' :
2017-03-15 18:38:17 -04:00
//For dynaforms
$result [ 'DYNAFORM' ] = $oObjectPermission -> objectPermissionByDynaform (
$appUid ,
$opTaskSource ,
$opObjUid ,
2017-03-16 10:24:19 -04:00
$aCase [ 'APP_STATUS' ]
2017-03-15 18:38:17 -04:00
);
//For Ouputs
$result [ 'OUTPUT' ] = $oObjectPermission -> objectPermissionByOutputInput (
$appUid ,
$proUid ,
$opTaskSource ,
'OUTPUT' ,
2017-03-16 16:39:22 -04:00
$opObjUid ,
2017-03-16 10:24:19 -04:00
$aCase [ 'APP_STATUS' ]
2017-03-15 18:38:17 -04:00
);
//For Inputs
$result [ 'INPUT' ] = $oObjectPermission -> objectPermissionByOutputInput (
$appUid ,
$proUid ,
$opTaskSource ,
'INPUT' ,
2017-03-16 16:39:22 -04:00
$opObjUid ,
2017-03-16 10:24:19 -04:00
$aCase [ 'APP_STATUS' ]
2012-07-16 14:19:52 -04:00
);
2014-11-10 15:40:24 -04:00
2017-03-14 13:16:25 -04:00
$result [ 'CASES_NOTES' ] = 1 ;
2014-12-04 10:23:06 -04:00
/*----------------------------------********---------------------------------*/
2017-03-14 13:16:25 -04:00
$result [ 'SUMMARY_FORM' ] = 1 ;
2014-12-04 10:23:06 -04:00
/*----------------------------------********---------------------------------*/
2013-07-11 14:16:56 -04:00
2017-03-15 18:38:17 -04:00
//Message History
2017-03-14 13:16:25 -04:00
$result [ 'MSGS_HISTORY' ] = $oObjectPermission -> objectPermissionMessage (
$appUid ,
$proUid ,
2017-03-14 17:16:06 -04:00
$userUid ,
2017-03-14 13:16:25 -04:00
$action ,
$opTaskSource ,
$opUserRelation ,
$aCase [ 'APP_STATUS' ],
$opParticipated
);
2012-07-16 14:19:52 -04:00
break ;
case 'DYNAFORM' :
2017-03-15 18:38:17 -04:00
$result [ 'DYNAFORM' ] = $oObjectPermission -> objectPermissionByDynaform (
$appUid ,
$opTaskSource ,
$opObjUid ,
$aCase [ 'APP_STATUS' ]
);
2012-07-16 14:19:52 -04:00
break ;
case 'INPUT' :
2017-03-15 18:38:17 -04:00
$result [ 'INPUT' ] = $oObjectPermission -> objectPermissionByOutputInput (
$appUid ,
$proUid ,
$opTaskSource ,
'INPUT' ,
2017-03-16 16:39:22 -04:00
$opObjUid ,
2017-03-15 18:38:17 -04:00
$aCase [ 'APP_STATUS' ]
);
break ;
2012-07-16 14:19:52 -04:00
case 'OUTPUT' :
2017-03-15 18:38:17 -04:00
$result [ 'OUTPUT' ] = $oObjectPermission -> objectPermissionByOutputInput (
$appUid ,
$proUid ,
$opTaskSource ,
'OUTPUT' ,
2017-03-16 16:39:22 -04:00
$opObjUid ,
2017-03-15 18:38:17 -04:00
$aCase [ 'APP_STATUS' ]
);
2012-07-16 14:19:52 -04:00
break ;
2012-10-05 12:29:55 -04:00
case 'CASES_NOTES' :
2017-03-14 13:16:25 -04:00
$result [ 'CASES_NOTES' ] = 1 ;
2012-10-05 12:29:55 -04:00
break ;
2014-12-04 10:23:06 -04:00
/*----------------------------------********---------------------------------*/
2014-08-14 09:19:48 -04:00
case 'SUMMARY_FORM' :
2017-03-14 13:16:25 -04:00
$result [ 'SUMMARY_FORM' ] = 1 ;
2014-08-14 09:19:48 -04:00
break ;
2014-12-04 10:23:06 -04:00
/*----------------------------------********---------------------------------*/
2013-04-15 15:49:27 -04:00
case 'MSGS_HISTORY' :
2017-03-14 13:16:25 -04:00
$result [ 'MSGS_HISTORY' ] = $oObjectPermission -> objectPermissionMessage (
$appUid ,
$proUid ,
2017-03-14 17:16:06 -04:00
$userUid ,
2017-03-14 13:16:25 -04:00
$action ,
$opTaskSource ,
2017-03-15 15:38:34 -04:00
$opUserRelation ,
$aCase [ 'APP_STATUS' ],
$opParticipated
2017-03-14 13:16:25 -04:00
);
2013-04-15 15:49:27 -04:00
break ;
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
}
2017-03-14 13:16:25 -04:00
2012-07-16 14:19:52 -04:00
return Array (
2017-03-14 13:16:25 -04:00
" DYNAFORMS " => $result [ 'DYNAFORM' ],
" INPUT_DOCUMENTS " => $result [ 'INPUT' ],
" OUTPUT_DOCUMENTS " => $result [ 'OUTPUT' ],
" CASES_NOTES " => $result [ 'CASES_NOTES' ],
" MSGS_HISTORY " => $result [ 'MSGS_HISTORY' ]
2014-12-04 10:23:06 -04:00
/*----------------------------------********---------------------------------*/
2017-03-14 13:16:25 -04:00
, " SUMMARY_FORM " => $result [ 'SUMMARY_FORM' ]
2014-12-04 10:23:06 -04:00
/*----------------------------------********---------------------------------*/
2012-07-16 14:19:52 -04:00
);
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* to check the user External
* @ author Everth The Answer
*
* verifyCaseTracker ( $case , $pin )
* @ access public
* @ param $case , $pin
* @ return Array
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function verifyCaseTracker ( $case , $pin )
{
2012-10-03 14:28:40 -04:00
//CASE INSENSITIVE pin
$pin = G :: toUpper ( $pin );
2015-03-25 16:22:18 -04:00
$pin = G :: encryptOld ( $pin );
2012-07-16 14:19:52 -04:00
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_UID );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_PIN );
$oCriteria -> addSelectColumn ( ApplicationPeer :: PRO_UID );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_PROC_CODE );
//$oCriteria->add(ApplicationPeer::APP_NUMBER, $case);
$oCriteria -> add ( ApplicationPeer :: APP_PROC_CODE , $case );
$oDataset = DynaformPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$sw = 0 ;
if ( is_array ( $aRow )) {
$PRO_UID = $aRow [ 'PRO_UID' ];
$APP_UID = $aRow [ 'APP_UID' ];
$PIN = $aRow [ 'APP_PIN' ];
} else {
2010-12-02 23:34:41 +00:00
$oCriteria = new Criteria ( 'workflow' );
2012-07-16 14:19:52 -04:00
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_UID );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_PIN );
$oCriteria -> addSelectColumn ( ApplicationPeer :: PRO_UID );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_PROC_CODE );
$oCriteria -> add ( ApplicationPeer :: APP_NUMBER , $case );
$oDataseti = DynaformPeer :: doSelectRS ( $oCriteria );
$oDataseti -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataseti -> next ();
$aRowi = $oDataseti -> getRow ();
if ( is_array ( $aRowi )) {
$PRO_UID = $aRowi [ 'PRO_UID' ];
$APP_UID = $aRowi [ 'APP_UID' ];
$PIN = $aRowi [ 'APP_PIN' ];
} else {
$sw = 1 ;
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
$s = 0 ;
if ( $sw == 1 ) {
//it isn't a case
return - 1 ;
} else {
$s ++ ;
}
if ( $PIN != $pin ) {
//the pin isn't correct
return - 2 ;
} else {
$s ++ ;
}
$res = array ();
$res [ 'PRO_UID' ] = $PRO_UID ;
$res [ 'APP_UID' ] = $APP_UID ;
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
if ( $s == 2 ) {
return $res ;
}
}
/*
* funcion caseTrackerPermissions , by Everth
*
* @ name caseTrackerPermissions
* @ param string $PRO_UID
* @ return string
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function caseTrackerPermissions ( $PRO_UID )
{
$newCaseTracker = new CaseTracker ();
$caseTracker = $newCaseTracker -> load ( $PRO_UID );
if ( is_array ( $caseTracker )) {
2013-03-05 14:11:12 -04:00
$caseTracker [ 'CT_MAP_TYPE' ] = ( $caseTracker [ 'CT_MAP_TYPE' ] != 'NONE' ) ? true : false ;
2012-07-16 14:19:52 -04:00
//$caseTracker['CT_DERIVATION_HISTORY'] = ($caseTracker['CT_DERIVATION_HISTORY'] == 1)? true : false;
//$caseTracker['CT_MESSAGE_HISTORY'] = ($caseTracker['CT_MESSAGE_HISTORY'] == 1)? true : false;
$criteria = new Criteria ();
$criteria -> add ( CaseTrackerObjectPeer :: PRO_UID , $PRO_UID );
2013-03-05 14:11:12 -04:00
$caseTracker [ 'DYNADOC' ] = ( CaseTrackerObjectPeer :: doCount ( $criteria ) > 0 ) ? true : false ;
2012-07-16 14:19:52 -04:00
}
return $caseTracker ;
}
2010-12-02 23:34:41 +00:00
2012-07-16 14:19:52 -04:00
/*
* funcion input documents for case tracker
* by Everth The Answer
*
* @ name getAllUploadedDocumentsCriteriaTracker
* @ param string $sProcessUID
* @ param string $sApplicationUID
* @ param string $sDocUID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2012-07-16 14:19:52 -04:00
public function getAllUploadedDocumentsCriteriaTracker ( $sProcessUID , $sApplicationUID , $sDocUID )
{
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
//$oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), Criteria::IN);
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , 'INPUT' );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> add ( AppDocumentPeer :: DOC_UID , $sDocUID );
$aConditions = array ();
$aConditions [] = array ( AppDocumentPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDocumentPeer :: DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$oCriteria -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aInputDocuments = array ();
$aInputDocuments [] = array (
'APP_DOC_UID' => 'char' ,
'DOC_UID' => 'char' ,
'APP_DOC_COMMENT' => 'char' ,
'APP_DOC_FILENAME' => 'char' ,
'APP_DOC_INDEX' => 'integer'
);
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
2010-12-02 23:34:41 +00:00
} else {
2012-07-16 14:19:52 -04:00
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$aFields = array (
'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ],
'TYPE' => $aAux [ 'APP_DOC_TYPE' ], 'ORIGIN' => $aTask [ 'TAS_TITLE' ]
);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
//$aFields['POSITION'] = $_SESSION['STEP_POSITION'];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
$aInputDocuments [] = $aFields ;
$oDataset -> next ();
}
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
//$oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('ATTACHED'), Criteria::IN);
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , 'ATTACHED' );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$aFields = array (
'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ],
'TYPE' => $aAux [ 'APP_DOC_TYPE' ], 'ORIGIN' => $aTask [ 'TAS_TITLE' ]
);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
2010-12-02 23:34:41 +00:00
} else {
2012-07-16 14:19:52 -04:00
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
2010-12-02 23:34:41 +00:00
}
2012-07-16 14:19:52 -04:00
//$aFields['POSITION'] = $_SESSION['STEP_POSITION'];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
$aInputDocuments [] = $aFields ;
2010-12-02 23:34:41 +00:00
$oDataset -> next ();
}
2012-07-16 14:19:52 -04:00
global $_DBArray ;
$_DBArray [ 'inputDocuments' ] = $aInputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'inputDocuments' );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_CREATE_DATE );
return $oCriteria ;
2010-12-02 23:34:41 +00:00
}
2012-07-16 08:37:58 -04:00
/*
* funcion output documents for case tracker
* by Everth The Answer
*
* @ name getAllGeneratedDocumentsCriteriaTracker
* @ param string $sProcessUID
* @ param string $sApplicationUID
* @ param string $sDocUID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2012-07-16 08:37:58 -04:00
public function getAllGeneratedDocumentsCriteriaTracker ( $sProcessUID , $sApplicationUID , $sDocUID )
{
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , 'OUTPUT' );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> add ( AppDocumentPeer :: DOC_UID , $sDocUID );
$aConditions = array ();
$aConditions [] = array ( AppDocumentPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDocumentPeer :: DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$oCriteria -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aOutputDocuments = array ();
2012-07-16 14:19:52 -04:00
$aOutputDocuments [] = array (
'APP_DOC_UID' => 'char' ,
'DOC_UID' => 'char' ,
'APP_DOC_COMMENT' => 'char' ,
'APP_DOC_FILENAME' => 'char' ,
'APP_DOC_INDEX' => 'integer'
);
2012-07-16 08:37:58 -04:00
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
}
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$aFields = array (
'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ],
'ORIGIN' => $aTask [ 'TAS_TITLE' ]
);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
//$aFields['POSITION'] = $_SESSION['STEP_POSITION'];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
$aOutputDocuments [] = $aFields ;
$oDataset -> next ();
}
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
global $_DBArray ;
$_DBArray [ 'outputDocuments' ] = $aOutputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'outputDocuments' );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_CREATE_DATE );
return $oCriteria ;
2010-12-02 23:34:41 +00:00
}
2012-07-16 08:37:58 -04:00
/*
* funcion History messages for case tracker
* by Everth The Answer
*
* @ name getHistoryMessagesTracker
* @ param string sApplicationUID
* @ return object
2013-03-05 14:11:12 -04:00
*/
2012-07-16 08:37:58 -04:00
public function getHistoryMessagesTracker ( $sApplicationUID )
{
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppMessagePeer :: APP_UID , $sApplicationUID );
$oCriteria -> addAscendingOrderByColumn ( AppMessagePeer :: APP_MSG_DATE );
$oDataset = AppMessagePeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
2012-07-13 06:27:36 -04:00
2012-07-16 08:37:58 -04:00
$aMessages = array ();
$aMessages [] = array (
'APP_MSG_UID' => 'char' ,
'APP_UID' => 'char' ,
'DEL_INDEX' => 'char' ,
'APP_MSG_TYPE' => 'char' ,
'APP_MSG_SUBJECT' => 'char' ,
'APP_MSG_FROM' => 'char' ,
'APP_MSG_TO' => 'char' ,
'APP_MSG_BODY' => 'char' ,
'APP_MSG_DATE' => 'char' ,
'APP_MSG_CC' => 'char' ,
'APP_MSG_BCC' => 'char' ,
'APP_MSG_TEMPLATE' => 'char' ,
'APP_MSG_STATUS' => 'char' ,
'APP_MSG_ATTACH' => 'char'
);
while ( $aRow = $oDataset -> getRow ()) {
$aMessages [] = array (
'APP_MSG_UID' => $aRow [ 'APP_MSG_UID' ],
'APP_UID' => $aRow [ 'APP_UID' ],
'DEL_INDEX' => $aRow [ 'DEL_INDEX' ],
'APP_MSG_TYPE' => $aRow [ 'APP_MSG_TYPE' ],
'APP_MSG_SUBJECT' => $aRow [ 'APP_MSG_SUBJECT' ],
'APP_MSG_FROM' => $aRow [ 'APP_MSG_FROM' ],
'APP_MSG_TO' => $aRow [ 'APP_MSG_TO' ],
'APP_MSG_BODY' => $aRow [ 'APP_MSG_BODY' ],
'APP_MSG_DATE' => $aRow [ 'APP_MSG_DATE' ],
'APP_MSG_CC' => $aRow [ 'APP_MSG_CC' ],
'APP_MSG_BCC' => $aRow [ 'APP_MSG_BCC' ],
'APP_MSG_TEMPLATE' => $aRow [ 'APP_MSG_TEMPLATE' ],
'APP_MSG_STATUS' => $aRow [ 'APP_MSG_STATUS' ],
'APP_MSG_ATTACH' => $aRow [ 'APP_MSG_ATTACH' ]
);
$oDataset -> next ();
}
2012-03-26 16:54:43 -04:00
2012-07-16 08:37:58 -04:00
global $_DBArray ;
$_DBArray [ 'messages' ] = $aMessages ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'messages' );
2012-07-13 06:27:36 -04:00
2012-07-16 08:37:58 -04:00
return $oCriteria ;
2012-03-26 16:54:43 -04:00
}
2012-07-13 06:27:36 -04:00
2012-07-16 08:37:58 -04:00
/*
* funcion History messages for case tracker ExtJS
* @ name getHistoryMessagesTrackerExt
* @ param string sApplicationUID
* @ param string Msg_UID
* @ return array
2013-03-05 14:11:12 -04:00
*/
2013-03-12 12:12:44 -04:00
public function getHistoryMessagesTrackerExt ( $sApplicationUID , $onlyVisibles = false , $start = null , $limit = null )
2012-07-16 08:37:58 -04:00
{
G :: LoadClass ( 'ArrayPeer' );
global $_DBArray ;
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppMessagePeer :: APP_UID , $sApplicationUID );
2013-03-12 12:12:44 -04:00
if ( $onlyVisibles ) {
$oCriteria -> add ( AppMessagePeer :: APP_MSG_SHOW_MESSAGE , 1 );
}
2012-07-16 08:37:58 -04:00
$oCriteria -> addAscendingOrderByColumn ( AppMessagePeer :: APP_MSG_DATE );
2014-01-22 10:20:51 -04:00
2012-07-16 08:37:58 -04:00
$oDataset = AppMessagePeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aMessages = array ();
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
while ( $aRow = $oDataset -> getRow ()) {
2013-08-16 11:07:15 -04:00
//Head for IE quirks mode
$sBody = '<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />' . $aRow [ 'APP_MSG_BODY' ];
2012-07-16 08:37:58 -04:00
$aMessages [] = array ( 'APP_MSG_UID' => $aRow [ 'APP_MSG_UID' ],
'APP_UID' => $aRow [ 'APP_UID' ],
'DEL_INDEX' => $aRow [ 'DEL_INDEX' ],
'APP_MSG_TYPE' => $aRow [ 'APP_MSG_TYPE' ],
'APP_MSG_SUBJECT' => $aRow [ 'APP_MSG_SUBJECT' ],
'APP_MSG_FROM' => $aRow [ 'APP_MSG_FROM' ],
'APP_MSG_TO' => $aRow [ 'APP_MSG_TO' ],
2013-08-16 11:07:15 -04:00
'APP_MSG_BODY' => $sBody ,
2012-07-16 08:37:58 -04:00
'APP_MSG_DATE' => $aRow [ 'APP_MSG_DATE' ],
'APP_MSG_CC' => $aRow [ 'APP_MSG_CC' ],
'APP_MSG_BCC' => $aRow [ 'APP_MSG_BCC' ],
'APP_MSG_TEMPLATE' => $aRow [ 'APP_MSG_TEMPLATE' ],
'APP_MSG_STATUS' => $aRow [ 'APP_MSG_STATUS' ],
2012-10-29 11:45:05 -04:00
'APP_MSG_ATTACH' => $aRow [ 'APP_MSG_ATTACH' ],
'APP_MSG_SHOW_MESSAGE' => $aRow [ 'APP_MSG_SHOW_MESSAGE' ]
2012-07-16 08:37:58 -04:00
);
$oDataset -> next ();
}
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$_DBArray [ 'messages' ] = $aMessages ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'messages' );
2013-11-15 12:03:58 -04:00
usort ( $aMessages , array ( $this , " ordProcess " ) );
2012-07-16 08:37:58 -04:00
return $aMessages ;
}
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
/*
* funcion History messages for case tracker
* by Everth The Answer
*
* @ name getHistoryMessagesTrackerView
* @ param string sApplicationUID
* @ param string Msg_UID
* @ return array
2013-03-05 14:11:12 -04:00
*/
2012-07-16 08:37:58 -04:00
public function getHistoryMessagesTrackerView ( $sApplicationUID , $Msg_UID )
{
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppMessagePeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppMessagePeer :: APP_MSG_UID , $Msg_UID );
$oCriteria -> addAscendingOrderByColumn ( AppMessagePeer :: APP_MSG_DATE );
$oDataset = AppMessagePeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
return $aRow ;
2010-12-02 23:34:41 +00:00
}
2012-07-16 08:37:58 -04:00
/*
* This function gets all data about APP_DOCUMENT
*
* @ name getAllObjectsFromProcess
* @ param string sApplicationUID
* @ param object OBJ_TYPE
* @ return array
2013-03-05 14:11:12 -04:00
*/
2012-07-16 08:37:58 -04:00
public function getAllObjectsFromProcess ( $PRO_UID , $OBJ_TYPE = '%' )
{
$RESULT = Array ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_UID );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_UID );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: DEL_INDEX );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: DOC_UID );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: USR_UID );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_TYPE );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_CREATE_DATE );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_INDEX );
2013-07-29 10:15:07 -04:00
$oCriteria -> addSelectColumn ( AppDocumentPeer :: DOC_VERSION );
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$oCriteria -> add ( ApplicationPeer :: PRO_UID , $PRO_UID );
$oCriteria -> addJoin ( ApplicationPeer :: APP_UID , AppDocumentPeer :: APP_UID );
2012-07-13 06:27:36 -04:00
2012-07-16 08:37:58 -04:00
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , $OBJ_TYPE , Criteria :: LIKE );
2012-07-13 06:27:36 -04:00
2012-07-16 08:37:58 -04:00
$oDataset = DynaformPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
while ( $oDataset -> next ()) {
$row = $oDataset -> getRow ();
$oAppDocument = new AppDocument ();
$oAppDocument -> Fields = $oAppDocument -> load ( $row [ 'APP_DOC_UID' ], $row [ 'DOC_VERSION' ]);
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$row [ 'APP_DOC_FILENAME' ] = $oAppDocument -> Fields [ 'APP_DOC_FILENAME' ];
array_push ( $RESULT , $row );
2012-07-13 06:27:36 -04:00
}
2012-07-16 08:37:58 -04:00
return $RESULT ;
2010-12-02 23:34:41 +00:00
}
2012-07-16 08:37:58 -04:00
/*
* execute triggers after derivation
*
* @ name executeTriggersAfterExternal
* @ param string $sProcess
* @ param string $sTask
* @ param string $sApplication
* @ param string $iIndex
* @ param string $iStepPosition
* @ param array $aNewData
* @ return void
2013-03-05 14:11:12 -04:00
*/
public function executeTriggersAfterExternal ( $sProcess , $sTask , $sApplication , $iIndex , $iStepPosition , $aNewData = array ())
{
//load the variables
2012-07-16 08:37:58 -04:00
$Fields = $this -> loadCase ( $sApplication );
$Fields [ 'APP_DATA' ] = array_merge ( $Fields [ 'APP_DATA' ], G :: getSystemConstants ());
$Fields [ 'APP_DATA' ] = array_merge ( $Fields [ 'APP_DATA' ], $aNewData );
//execute triggers
$oCase = new Cases ();
$aNextStep = $this -> getNextStep ( $sProcess , $sApplication , $iIndex , $iStepPosition - 1 );
$Fields [ 'APP_DATA' ] = $this -> ExecuteTriggers (
2013-03-05 14:11:12 -04:00
$sTask , 'EXTERNAL' , $aNextStep [ 'UID' ], 'AFTER' , $Fields [ 'APP_DATA' ]
2012-07-16 08:37:58 -04:00
);
//save data
$aData = array ();
$aData [ 'APP_NUMBER' ] = $Fields [ 'APP_NUMBER' ];
2013-07-03 09:48:46 -04:00
//$aData['APP_PROC_STATUS'] = $Fields['APP_PROC_STATUS'];
2012-07-16 08:37:58 -04:00
$aData [ 'APP_DATA' ] = $Fields [ 'APP_DATA' ];
$aData [ 'DEL_INDEX' ] = $iIndex ;
$aData [ 'TAS_UID' ] = $sTask ;
$this -> updateCase ( $sApplication , $aData );
}
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
/*
* this function gets the current user in a task
*
* @ name thisIsTheCurrentUser
* @ param string $sApplicationUID
* @ param string $iIndex
* @ param string $sUserUID
* @ param string $sAction
* @ param string $sURL
* @ return void
2013-03-05 14:11:12 -04:00
*/
2012-07-16 08:37:58 -04:00
public function thisIsTheCurrentUser ( $sApplicationUID , $iIndex , $sUserUID , $sAction = '' , $sURL = '' )
{
$c = new Criteria ( 'workflow' );
$c -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iIndex );
$c -> add ( AppDelegationPeer :: USR_UID , $sUserUID );
switch ( $sAction ) {
case '' :
return ( boolean ) AppDelegationPeer :: doCount ( $c );
break ;
case 'REDIRECT' :
if ( ! ( boolean ) AppDelegationPeer :: doCount ( $c )) {
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$c -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$c -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$c -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iIndex );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$oDataset = AppDelegationPeer :: doSelectRs ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aData = $oDataset -> getRow ();
G :: SendMessageText (
2013-03-05 14:11:12 -04:00
G :: LoadTranslation ( 'ID_CASE_IS_CURRENTLY_WITH_ANOTHER_USER' ) . ': ' .
$aData [ 'USR_FIRSTNAME' ] . ' ' . $aData [ 'USR_LASTNAME' ] .
' (' . $aData [ 'USR_USERNAME' ] . ')' , 'error'
2012-07-16 08:37:58 -04:00
);
G :: header ( 'Location: ' . $sURL );
die ;
} else {
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
if ( ! ( boolean ) AppDelegationPeer :: doCount ( $c )) {
G :: SendMessageText ( G :: LoadTranslation ( 'ID_CASE_ALREADY_DERIVATED' ), 'error' );
G :: header ( 'Location: ' . $sURL );
die ;
}
}
break ;
case 'SHOW_MESSAGE' :
if ( ! ( boolean ) AppDelegationPeer :: doCount ( $c )) {
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$c -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$c -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$c -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iIndex );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$oDataset = AppDelegationPeer :: doSelectRs ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aData = $oDataset -> getRow ();
die ( '<strong>' .
2013-03-05 14:11:12 -04:00
G :: LoadTranslation ( 'ID_CASE_ALREADY_DERIVATED' ) . ': ' .
$aData [ 'USR_FIRSTNAME' ] . ' ' .
$aData [ 'USR_LASTNAME' ] . ' (' . $aData [ 'USR_USERNAME' ] . ')</strong>'
2012-07-16 08:37:58 -04:00
);
} else {
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
if ( ! ( boolean ) AppDelegationPeer :: doCount ( $c )) {
die ( '<strong>' . G :: LoadTranslation ( 'ID_CASE_ALREADY_DERIVATED' ) . '</strong>' );
}
}
break ;
}
}
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
/*
* this function gets the user in Case
*
* @ name getCriteriaUsersCases
* @ param string $status
* @ param string $USR_UID
* @ return object
*/
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
public function getCriteriaUsersCases ( $status , $USR_UID )
{
$c = new Criteria ( 'workflow' );
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
$c -> add ( ApplicationPeer :: APP_STATUS , $status );
$c -> add ( AppDelegationPeer :: USR_UID , $USR_UID );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
return $c ;
}
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
/*
* this function gets information in a search
*
* @ name getCriteriaUsersCases
* @ param string $sCase
* @ param string $sTask
* @ param string $sCurrentUser
* @ param string $sSentby
* @ param string $sLastModFrom
* @ param string $sLastModTo
* @ param string $status
* @ param string $permisse
* @ param string $userlogged
* @ param array $aSupervisor
* @ return object
*/
2010-12-02 23:34:41 +00:00
2013-03-05 14:11:12 -04:00
public function getAdvancedSearch ( $sCase , $sProcess , $sTask , $sCurrentUser , $sSentby , $sLastModFrom , $sLastModTo , $sStatus , $permisse , $userlogged , $aSupervisor )
{
2012-07-16 08:37:58 -04:00
$sTypeList = '' ;
$sUIDUserLogged = '' ;
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_UID );
2016-06-30 14:23:53 -04:00
$c -> addSelectColumn ( ApplicationPeer :: APP_TITLE );
2012-07-16 08:37:58 -04:00
$c -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$c -> addSelectColumn ( ApplicationPeer :: APP_UPDATE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
//$c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'DEL_TASK_DUE_DATE' , " IF ( " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " <= NOW(), CONCAT('<span style= \ 'color:red \ ';>', " .
AppDelegationPeer :: DEL_TASK_DUE_DATE . " , '</span>'), " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " ) " );
2012-07-16 08:37:58 -04:00
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addAsColumn ( 'APP_CURRENT_USER' , " CONCAT(USERS.USR_LASTNAME, ' ', USERS.USR_FIRSTNAME) " );
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
2016-07-18 14:13:01 -04:00
$c -> addAsColumn ( 'APP_PRO_TITLE' , ProcessPeer :: PRO_TITLE );
2016-06-28 10:59:43 -04:00
$c -> addAsColumn ( 'APP_TAS_TITLE' , TaskPeer :: TAS_TITLE );
2012-07-16 08:37:58 -04:00
//$c->addAsColumn('APP_DEL_PREVIOUS_USER', 'APP_LAST_USER.USR_USERNAME');
$c -> addAsColumn (
2013-03-05 14:11:12 -04:00
'APP_DEL_PREVIOUS_USER' , " CONCAT(APP_LAST_USER.USR_LASTNAME, ' ', APP_LAST_USER.USR_FIRSTNAME) "
2012-07-16 08:37:58 -04:00
);
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$c -> addAlias ( " APP_PREV_DEL " , 'APP_DELEGATION' );
$c -> addAlias ( " APP_LAST_USER " , 'USERS' );
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
2016-07-18 14:13:01 -04:00
$c -> addJoin ( ApplicationPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
2012-07-16 08:37:58 -04:00
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$appThreadConds [] = array ( ApplicationPeer :: APP_UID , AppThreadPeer :: APP_UID );
$appThreadConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppThreadPeer :: DEL_INDEX );
$c -> addJoinMC ( $appThreadConds , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$prevConds = array ();
$prevConds [] = array ( ApplicationPeer :: APP_UID , 'APP_PREV_DEL.APP_UID' );
$prevConds [] = array ( 'APP_PREV_DEL.DEL_INDEX' , AppDelegationPeer :: DEL_PREVIOUS );
$c -> addJoinMC ( $prevConds , Criteria :: LEFT_JOIN );
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$usrConds = array ();
$usrConds [] = array ( 'APP_PREV_DEL.USR_UID' , 'APP_LAST_USER.USR_UID' );
$c -> addJoinMC ( $usrConds , Criteria :: LEFT_JOIN );
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$c -> add ( TaskPeer :: TAS_TYPE , 'SUBPROCESS' , Criteria :: NOT_EQUAL );
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$c -> add (
$c -> getNewCriterion ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' ) ->
2013-03-05 14:11:12 -04:00
addOr ( $c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'COMPLETED' ) ->
addAnd ( $c -> getNewCriterion ( AppDelegationPeer :: DEL_PREVIOUS , 0 )))
);
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
if ( $sCase != '' ) {
$c -> add ( ApplicationPeer :: APP_NUMBER , $sCase );
}
if ( $sProcess != '' ) {
$c -> add ( ApplicationPeer :: PRO_UID , $sProcess );
}
if ( $sTask != '' && $sTask != " 0 " && $sTask != 0 ) {
$c -> add ( AppDelegationPeer :: TAS_UID , $sTask );
}
if ( $sCurrentUser != '' ) {
$c -> add ( ApplicationPeer :: APP_CUR_USER , $sCurrentUser );
}
if ( $sSentby != '' ) {
$c -> add ( 'APP_PREV_DEL.USR_UID' , $sSentby );
}
if ( $sLastModFrom != '0000-00-00' && $sLastModTo != '0000-00-00' && $sLastModFrom != '' && $sLastModTo != '' ) {
$c -> add (
2013-03-05 14:11:12 -04:00
$c -> getNewCriterion ( ApplicationPeer :: APP_UPDATE_DATE , $sLastModFrom . ' 00:00:00' , Criteria :: GREATER_EQUAL ) ->
addAnd ( $c -> getNewCriterion ( ApplicationPeer :: APP_UPDATE_DATE , $sLastModTo . ' 23:59:59' , Criteria :: LESS_EQUAL ))
2012-07-16 08:37:58 -04:00
);
}
if ( $sStatus != '' ) {
if ( $sStatus != 'gral' ) {
$c -> add ( ApplicationPeer :: APP_STATUS , $sStatus );
}
}
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
if ( $permisse != 0 ) {
$c -> add (
2013-03-05 14:11:12 -04:00
$c -> getNewCriterion ( AppDelegationPeer :: USR_UID , $userlogged ) ->
addOr ( $c -> getNewCriterion ( AppDelegationPeer :: PRO_UID , $aSupervisor , Criteria :: IN ))
2012-07-16 08:37:58 -04:00
);
}
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
return $c ;
2010-12-02 23:34:41 +00:00
}
2012-07-16 08:37:58 -04:00
//**DEPRECATED
/*
* this function gets a condition rule
*
* @ name getConditionCasesCount
* @ param string $type
* @ return int
2013-03-05 14:11:12 -04:00
*/
2012-07-16 08:37:58 -04:00
public function getConditionCasesCount ( $type , $sumary = null )
{
$result = 0 ;
return $result ;
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
$nCount = 0 ;
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
list ( $aCriteria , $xmlfile ) = $this -> getConditionCasesList ( $type , $_SESSION [ 'USER_LOGGED' ], false );
$rs = ApplicationPeer :: doSelectRS ( $aCriteria );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2010-12-02 23:34:41 +00:00
2012-07-16 08:37:58 -04:00
if ( isset ( $sumary ) && $sumary === true ) {
$sumary = Array ();
while ( $rs -> next ()) {
$nCount ++ ;
$row = $rs -> getRow ();
if ( isset ( $sumary [ $row [ 'PRO_UID' ]])) {
$sumary [ $row [ 'PRO_UID' ]][ 'count' ] += 1 ;
} else {
$sumary [ $row [ 'PRO_UID' ]][ 'count' ] = 1 ;
$sumary [ $row [ 'PRO_UID' ]][ 'name' ] = $row [ 'APP_PRO_TITLE' ];
}
}
return Array ( 'count' => $nCount , 'sumary' => $sumary );
2010-12-02 23:34:41 +00:00
} else {
2012-07-16 08:37:58 -04:00
while ( $rs -> next ()) {
$nCount ++ ;
}
return $nCount ;
2010-12-02 23:34:41 +00:00
}
}
2012-07-13 12:36:27 -04:00
//**DEPRECATED
/*
* this function gets all conditions rules
*
* @ name getAllConditionCasesCount
* @ param string $type
* @ return array
2013-03-05 14:11:12 -04:00
*/
2012-07-16 08:37:58 -04:00
public function getAllConditionCasesCount ( $types , $sumary = null )
2012-07-13 12:36:27 -04:00
{
$aResult = Array ();
foreach ( $types as $type ) {
$aResult [ $type ] = $this -> getConditionCasesCount ( $type , $sumary );
}
return $aResult ;
2010-12-02 23:34:41 +00:00
}
2012-07-13 12:36:27 -04:00
/*
* this function gets a user that it is in a case
*
* @ name userParticipatedInCase
* @ param string $sAppUid
* @ param string $sUIDUserLogged
* @ return int
2013-03-05 14:11:12 -04:00
*/
2012-07-13 12:36:27 -04:00
public function userParticipatedInCase ( $sAppUid , $sUIDUserLogged )
{
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( AppDelegationPeer :: APP_UID );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: USR_UID , $sUIDUserLogged );
$rs = ApplicationPeer :: doSelectRS ( $c );
$count = 0 ;
while ( $rs -> next ()) {
$count ++ ;
2010-12-02 23:34:41 +00:00
}
2012-07-13 12:36:27 -04:00
return $count ;
2010-12-02 23:34:41 +00:00
}
2012-07-13 06:27:36 -04:00
2012-07-13 12:36:27 -04:00
/*
* Get the current delegation of a case ( This is a clone of getCurrentDelegation but this will return
* the index with out filtering by user or status .
* todo : deprecated ?
* @ name getCurrentDelegationCase
* @ param string $sApplicationUID
* @ return integer
2013-03-05 14:11:12 -04:00
*/
2012-07-16 08:37:58 -04:00
public function getCurrentDelegationCase ( $sApplicationUID = '' )
2010-12-07 11:49:51 +00:00
{
2017-02-03 11:03:50 -04:00
$criteria = new \Criteria ( 'workflow' );
$criteria -> addSelectColumn ( \AppDelegationPeer :: DEL_INDEX );
$criteria -> add ( \AppDelegationPeer :: APP_UID , $sApplicationUID , Criteria :: EQUAL );
$criteria -> add ( \AppDelegationPeer :: DEL_LAST_INDEX , 1 , Criteria :: EQUAL );
$dataSet = AppDelegationPeer :: doSelectRS ( $criteria );
$dataSet -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$dataSet -> next ();
$row = $dataSet -> getRow ();
return isset ( $row [ 'DEL_INDEX' ]) ? $row [ 'DEL_INDEX' ] : 0 ;
2012-07-13 12:36:27 -04:00
}
public function clearCaseSessionData ()
{
2013-03-05 14:11:12 -04:00
if ( isset ( $_SESSION [ 'APPLICATION' ])) {
2012-07-13 12:36:27 -04:00
unset ( $_SESSION [ 'APPLICATION' ]);
}
2013-03-05 14:11:12 -04:00
if ( isset ( $_SESSION [ 'PROCESS' ])) {
2012-07-13 12:36:27 -04:00
unset ( $_SESSION [ 'PROCESS' ]);
}
2013-03-05 14:11:12 -04:00
if ( isset ( $_SESSION [ 'INDEX' ])) {
2012-07-13 12:36:27 -04:00
unset ( $_SESSION [ 'INDEX' ]);
}
2013-03-05 14:11:12 -04:00
if ( isset ( $_SESSION [ 'STEP_POSITION' ])) {
2012-07-13 12:36:27 -04:00
unset ( $_SESSION [ 'STEP_POSITION' ]);
}
2010-12-07 11:49:51 +00:00
}
2012-07-13 12:36:27 -04:00
/**
* Jump to the determinated case by its Application number
*
* @ param interger $APP_NUMBER
*/
public function jumpToCase ( $APP_NUMBER )
{
2013-03-05 14:11:12 -04:00
$_GET [ 'APP_UID' ] = $oCase -> getApplicationUIDByNumber ( $_GET [ 'APP_NUMBER' ]);
2012-07-13 12:36:27 -04:00
$_GET [ 'DEL_INDEX' ] = $oCase -> getCurrentDelegation ( $_GET [ 'APP_UID' ], $_SESSION [ 'USER_LOGGED' ]);
2013-03-05 14:11:12 -04:00
if ( is_null ( $_GET [ 'DEL_INDEX' ])) {
2012-07-13 12:36:27 -04:00
$participated = $oCase -> userParticipatedInCase ( $_GET [ 'APP_UID' ], $_SESSION [ 'USER_LOGGED' ]);
if ( $participated == 0 ) {
if ( is_null ( $_GET [ 'APP_UID' ])) {
G :: SendMessageText ( G :: LoadTranslation ( 'ID_CASE_DOES_NOT_EXISTS' ), 'info' );
} else {
G :: SendMessageText ( G :: LoadTranslation ( 'ID_CASE_IS_CURRENTLY_WITH_ANOTHER_USER' ), 'info' );
}
G :: header ( 'location: cases_List' );
}
2011-02-04 15:00:20 +00:00
}
}
2012-07-13 12:36:27 -04:00
/*
* We ' re getting all threads in a task
*
* @ name GetAllThreads of Particular Parent Thread
* @ param string $sAppUid
* @ param string $sAppParent
* @ return $aThreads
2013-03-05 14:11:12 -04:00
*/
2016-07-19 14:26:51 -04:00
public function GetAllOpenDelegation ( $aData , $status = 'OPEN' )
2012-07-13 12:36:27 -04:00
{
try {
$aThreads = array ();
2013-03-05 14:11:12 -04:00
$c = new Criteria ();
2012-07-13 12:36:27 -04:00
$c -> add ( AppDelegationPeer :: APP_UID , $aData [ 'APP_UID' ]);
$c -> add ( AppDelegationPeer :: DEL_PREVIOUS , $aData [ 'APP_THREAD_PARENT' ]);
2016-07-19 14:26:51 -04:00
if ( $status === 'OPEN' ){
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
}
2012-07-13 12:36:27 -04:00
$rs = AppDelegationPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$aThreads [] = $row ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aThreads ;
} catch ( exception $e ) {
throw ( $e );
}
2011-02-04 15:00:20 +00:00
}
2013-09-03 11:52:48 -04:00
public function getUsersToReassign ( $TAS_UID , $USR_UID , $PRO_UID = null )
2012-07-13 12:36:27 -04:00
{
G :: LoadClass ( 'groups' );
G :: LoadClass ( 'tasks' );
$oTasks = new Tasks ();
$aAux = $oTasks -> getGroupsOfTask ( $TAS_UID , 1 );
$row = array ();
$groups = new Groups ();
foreach ( $aAux as $aGroup ) {
$aUsers = $groups -> getUsersOfGroup ( $aGroup [ 'GRP_UID' ]);
foreach ( $aUsers as $aUser ) {
2014-05-15 10:51:31 -04:00
if ( $aUser [ 'USR_UID' ] != $USR_UID ) {
2012-07-13 12:36:27 -04:00
$row [] = $aUser [ 'USR_UID' ];
}
}
}
2011-07-14 10:45:20 -04:00
2012-07-13 12:36:27 -04:00
$aAux = $oTasks -> getUsersOfTask ( $TAS_UID , 1 );
foreach ( $aAux as $aUser ) {
2014-05-15 10:51:31 -04:00
if ( $aUser [ 'USR_UID' ] != $USR_UID ) {
2012-07-13 12:36:27 -04:00
$row [] = $aUser [ 'USR_UID' ];
}
}
2012-07-13 06:27:36 -04:00
2012-12-21 15:59:58 -04:00
// Group Ad Hoc
$oTasks = new Tasks ();
$aAux = $oTasks -> getGroupsOfTask ( $TAS_UID , 2 );
$groups = new Groups ();
foreach ( $aAux as $aGroup ) {
$aUsers = $groups -> getUsersOfGroup ( $aGroup [ 'GRP_UID' ]);
foreach ( $aUsers as $aUser ) {
2014-05-15 10:51:31 -04:00
if ( $aUser [ 'USR_UID' ] != $USR_UID ) {
2012-12-21 15:59:58 -04:00
$row [] = $aUser [ 'USR_UID' ];
}
}
}
// User Ad Hoc
2012-10-29 09:31:33 -04:00
$aAux = $oTasks -> getUsersOfTask ( $TAS_UID , 2 );
foreach ( $aAux as $aUser ) {
2014-05-15 10:59:57 -04:00
if ( $aUser [ 'USR_UID' ] != $USR_UID ) {
2012-10-29 09:31:33 -04:00
$row [] = $aUser [ 'USR_UID' ];
}
}
2014-06-26 15:25:06 -04:00
global $RBAC ;
2014-12-19 13:38:04 -04:00
//Adding the actual user if this has the PM_SUPERVISOR permission assigned.
if ( $RBAC -> userCanAccess ( 'PM_SUPERVISOR' ) == 1 ) {
2014-12-19 11:59:40 -04:00
if ( ! in_array ( $RBAC -> aUserInfo [ 'USER_INFO' ][ 'USR_UID' ], $row )) {
$row [] = $RBAC -> aUserInfo [ 'USER_INFO' ][ 'USR_UID' ];
}
2014-05-15 10:51:31 -04:00
}
2012-10-29 09:31:33 -04:00
2012-07-13 12:36:27 -04:00
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$c -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$c -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$c -> add ( UsersPeer :: USR_UID , $row , Criteria :: IN );
2011-07-14 10:45:20 -04:00
2012-07-13 12:36:27 -04:00
$rs = UsersPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2011-07-14 10:45:20 -04:00
2012-07-13 12:36:27 -04:00
$rows = Array ();
while ( $rs -> next ()) {
$rows [] = $rs -> getRow ();
}
2012-07-13 06:27:36 -04:00
2015-06-01 14:15:53 -04:00
if ( $PRO_UID != null ) {
2013-09-03 11:52:48 -04:00
//Add supervisor
// Users
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( ProcessUserPeer :: PU_UID );
$oCriteria -> addSelectColumn ( ProcessUserPeer :: USR_UID );
$oCriteria -> addSelectColumn ( ProcessUserPeer :: PRO_UID );
$oCriteria -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$oCriteria -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$oCriteria -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$oCriteria -> addSelectColumn ( UsersPeer :: USR_EMAIL );
$oCriteria -> addJoin ( ProcessUserPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$oCriteria -> add ( ProcessUserPeer :: PU_TYPE , 'SUPERVISOR' );
$oCriteria -> add ( ProcessUserPeer :: PRO_UID , $PRO_UID );
$oCriteria -> add ( ProcessUserPeer :: USR_UID , $USR_UID );
$oCriteria -> addAscendingOrderByColumn ( UsersPeer :: USR_FIRSTNAME );
$oDataset = ProcessUserPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$flagSupervisors = false ;
2015-06-01 14:15:53 -04:00
if ( $oDataset -> next ()) {
2015-05-15 15:26:56 -04:00
if ( ! in_array ( $USR_UID , $row )) {
$rows [] = $oDataset -> getRow ();
2015-06-01 14:15:53 -04:00
}
2013-09-03 11:52:48 -04:00
$flagSupervisors = true ;
}
if ( ! $flagSupervisors ) {
// Groups
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( ProcessUserPeer :: PU_UID );
$oCriteria -> addSelectColumn ( ProcessUserPeer :: USR_UID );
$oCriteria -> addSelectColumn ( ProcessUserPeer :: PRO_UID );
$oCriteria -> addSelectColumn ( UsersPeer :: USR_UID );
$oCriteria -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$oCriteria -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$oCriteria -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$oCriteria -> addSelectColumn ( UsersPeer :: USR_EMAIL );
$oCriteria -> addJoin ( ProcessUserPeer :: USR_UID , GroupUserPeer :: GRP_UID , Criteria :: LEFT_JOIN );
$oCriteria -> addJoin ( GroupUserPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$oCriteria -> add ( ProcessUserPeer :: PU_TYPE , 'GROUP_SUPERVISOR' );
$oCriteria -> add ( ProcessUserPeer :: PRO_UID , $PRO_UID );
$oCriteria -> add ( GroupUserPeer :: USR_UID , $USR_UID );
$oDataset = ProcessUserPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
if ( $oDataset -> next ()) {
2015-05-15 15:26:56 -04:00
if ( ! in_array ( $USR_UID , $row )) {
$rows [] = $oDataset -> getRow ();
}
2015-05-08 10:27:40 -04:00
}
}
}
2012-07-13 12:36:27 -04:00
return $rows ;
}
2011-07-14 10:45:20 -04:00
2012-07-13 12:36:27 -04:00
/*
* this function gets all users that already participated in a case
*
* @ name getUsersParticipatedInCase
* @ param string $sAppUid
* @ return array ( criteria + array )
2013-03-05 14:11:12 -04:00
*/
2016-07-19 14:26:51 -04:00
public function getUsersParticipatedInCase ( $sAppUid , $usrStatus = '' )
2012-07-13 12:36:27 -04:00
{
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( AppDelegationPeer :: APP_UID );
$c -> addSelectColumn ( AppDelegationPeer :: USR_UID );
$c -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$c -> addSelectColumn ( UsersPeer :: USR_EMAIL );
2012-07-13 06:27:36 -04:00
2016-07-19 14:26:51 -04:00
if ( $usrStatus != '' ) {
$c -> add ( UsersPeer :: USR_STATUS , $usrStatus , CRITERIA :: EQUAL );
}
2012-07-13 12:36:27 -04:00
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid , CRITERIA :: EQUAL );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$rs = AppDelegationPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
2011-07-14 10:45:20 -04:00
2013-03-05 14:11:12 -04:00
$rows = array ();
2012-07-13 12:36:27 -04:00
$rs -> next ();
while ( $row = $rs -> getRow ()) {
2016-08-12 11:10:17 -04:00
//In some cases the thread does not have a User Script task, Itee
if ( $row [ 'USR_UID' ] !== '' ){
$rows [ $row [ 'USR_UID' ]] = $row ;
}
2012-07-13 12:36:27 -04:00
$rs -> next ();
}
2013-03-05 14:11:12 -04:00
$response [ 'criteria' ] = $c ;
$response [ 'array' ] = $rows ;
2012-07-13 12:36:27 -04:00
return $response ;
2011-07-14 10:45:20 -04:00
}
2012-07-13 06:27:36 -04:00
2012-07-16 08:37:58 -04:00
public function getCaseNotes ( $applicationID , $type = 'array' , $userUid = '' )
2012-07-13 12:36:27 -04:00
{
require_once ( " classes/model/AppNotes.php " );
$appNotes = new AppNotes ();
2013-03-05 14:11:12 -04:00
$appNotes = $appNotes -> getNotesList ( $applicationID , $userUid );
2012-07-13 12:36:27 -04:00
$response = '' ;
if ( is_array ( $appNotes )) {
switch ( $type ) {
case 'array' :
$response = array ();
foreach ( $appNotes [ 'array' ][ 'notes' ] as $key => $value ) {
$list = array ();
2013-03-05 14:11:12 -04:00
$list [ 'FULL_NAME' ] = $value [ 'USR_FIRSTNAME' ] . " " . $value [ 'USR_LASTNAME' ];
2012-07-13 12:36:27 -04:00
foreach ( $value as $keys => $value ) {
if ( $keys != 'USR_FIRSTNAME' && $keys != 'USR_LASTNAME' && $keys != 'USR_EMAIL' ) {
$list [ $keys ] = $value ;
}
}
2013-03-05 14:11:12 -04:00
$response [ $key + 1 ] = $list ;
2012-07-13 12:36:27 -04:00
}
break ;
case 'object' :
$response = new stdclass ();
foreach ( $appNotes [ 'array' ][ 'notes' ] as $key => $value ) {
2013-03-05 14:11:12 -04:00
$response -> $key -> FULL_NAME = $value [ 'USR_FIRSTNAME' ] . " " . $value [ 'USR_LASTNAME' ];
2012-07-13 12:36:27 -04:00
foreach ( $value as $keys => $value ) {
if ( $keys != 'USR_FIRSTNAME' && $keys != 'USR_LASTNAME' && $keys != 'USR_EMAIL' ) {
$response -> $key -> $keys = $value ;
}
}
}
break ;
case 'string' :
$response = '' ;
foreach ( $appNotes [ 'array' ][ 'notes' ] as $key => $value ) {
2013-03-05 14:11:12 -04:00
$response .= $value [ 'USR_FIRSTNAME' ] . " " .
$value [ 'USR_LASTNAME' ] . " " .
" ( " . $value [ 'USR_USERNAME' ] . " ) " .
" " . $value [ 'NOTE_CONTENT' ] . " " . " ( " . $value [ 'NOTE_DATE' ] . " ) " .
" \n " ;
2012-07-13 12:36:27 -04:00
}
break ;
2012-05-15 18:17:01 -04:00
}
2012-07-13 12:36:27 -04:00
}
return $response ;
2012-05-15 18:17:01 -04:00
}
2012-10-16 00:29:52 -04:00
public function getExecuteTriggerProcess ( $appUid , $action )
{
2013-03-05 14:11:12 -04:00
if (( ! isset ( $appUid ) && $appUid == '' ) || ( ! isset ( $action ) && $action == '' )) {
2012-10-16 00:29:52 -04:00
return false ;
}
$aFields = $this -> loadCase ( $appUid );
2013-03-05 14:11:12 -04:00
$proUid = $aFields [ 'PRO_UID' ];
2012-10-16 00:29:52 -04:00
2016-11-25 13:43:51 -04:00
require_once ( " classes/model/Process.php " );
2013-03-05 14:11:12 -04:00
$appProcess = new Process ();
2016-11-10 11:50:57 -05:00
$arrayWebBotTrigger = $appProcess -> getTriggerWebBotProcess ( $proUid , $action );
2012-10-16 00:29:52 -04:00
2016-11-10 11:50:57 -05:00
if ( $arrayWebBotTrigger [ 'TRI_WEBBOT' ] != false && $arrayWebBotTrigger [ 'TRI_WEBBOT' ] != '' ) {
2012-10-16 00:29:52 -04:00
global $oPMScript ;
2016-11-25 13:43:51 -04:00
$aFields [ 'APP_DATA' ][ 'APPLICATION' ] = $appUid ;
$aFields [ 'APP_DATA' ][ 'PROCESS' ] = $proUid ;
2012-10-16 00:29:52 -04:00
$oPMScript = new PMScript ();
$oPMScript -> setFields ( $aFields [ 'APP_DATA' ]);
2016-11-10 11:50:57 -05:00
$oPMScript -> setScript ( $arrayWebBotTrigger [ 'TRI_WEBBOT' ]);
2012-10-16 00:29:52 -04:00
$oPMScript -> execute ();
2016-11-10 11:50:57 -05:00
2012-10-16 00:29:52 -04:00
$aFields [ 'APP_DATA' ] = array_merge ( $aFields [ 'APP_DATA' ], $oPMScript -> aFields );
2013-07-09 08:55:25 -04:00
unset ( $aFields [ 'APP_STATUS' ]);
unset ( $aFields [ 'APP_PROC_STATUS' ]);
unset ( $aFields [ 'APP_PROC_CODE' ]);
2015-06-01 14:15:53 -04:00
unset ( $aFields [ 'APP_PIN' ]);
2012-10-16 00:29:52 -04:00
$this -> updateCase ( $aFields [ 'APP_UID' ], $aFields );
2016-11-10 11:50:57 -05:00
//Log
Bootstrap :: registerMonolog ( 'triggerExecutionTime' , 200 , 'Trigger execution time' , [ 'proUid' => $aFields [ 'APP_DATA' ][ 'PROCESS' ], 'tasUid' => $aFields [ 'APP_DATA' ][ 'TASK' ], 'appUid' => $aFields [ 'APP_DATA' ][ 'APPLICATION' ], 'action' => $action , 'triggerInfo' => [ 'triUid' => $arrayWebBotTrigger [ 'TRI_UID' ], 'triExecutionTime' => $oPMScript -> scriptExecutionTime ]], SYS_SYS , 'processmaker.log' );
2012-10-16 00:29:52 -04:00
return true ;
}
return false ;
}
2013-07-09 17:13:27 -04:00
public function reportTableDeleteRecord ( $applicationUid )
{
$criteria1 = new Criteria ( " workflow " );
//SELECT
$criteria1 -> addSelectColumn ( ApplicationPeer :: PRO_UID );
//FROM
//WHERE
$criteria1 -> add ( ApplicationPeer :: APP_UID , $applicationUid );
//QUERY
$rsCriteria1 = ApplicationPeer :: doSelectRS ( $criteria1 );
$rsCriteria1 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rsCriteria1 -> next ();
$row1 = $rsCriteria1 -> getRow ();
$processUid = $row1 [ " PRO_UID " ];
$criteria2 = new Criteria ( " workflow " );
//SELECT
$criteria2 -> addSelectColumn ( AdditionalTablesPeer :: ADD_TAB_NAME );
//FROM
//WHERE
$criteria2 -> add ( AdditionalTablesPeer :: PRO_UID , $processUid );
//QUERY
$rsCriteria2 = AdditionalTablesPeer :: doSelectRS ( $criteria2 );
$rsCriteria2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
G :: LoadClass ( " pmTable " );
$pmTable = new PmTable ();
while ( $rsCriteria2 -> next ()) {
try {
$row2 = $rsCriteria2 -> getRow ();
$tableName = $row2 [ " ADD_TAB_NAME " ];
$pmTableName = $pmTable -> toCamelCase ( $tableName );
//DELETE
require_once ( PATH_WORKSPACE . " classes " . PATH_SEP . " $pmTableName .php " );
$criteria3 = new Criteria ( " workflow " );
eval ( " \$ criteria3->add( " . $pmTableName . " Peer::APP_UID, \$ applicationUid); " );
eval ( $pmTableName . " Peer::doDelete( \$ criteria3); " );
} catch ( Exception $e ) {
throw $e ;
}
}
}
2013-11-14 17:28:59 -04:00
2014-01-22 10:20:51 -04:00
public function ordProcess ( $a , $b )
2013-11-15 12:03:58 -04:00
{
if ( $this -> sort == '' ) {
$this -> sort = 'APP_MSG_DATE' ;
2014-01-22 10:20:51 -04:00
}
if ( $this -> dir == 'ASC' ) {
if ( $a [ $this -> sort ] > $b [ $this -> sort ]) {
return 1 ;
} elseif ( $a [ $this -> sort ] < $b [ $this -> sort ]) {
return - 1 ;
} else {
return 0 ;
}
} else {
if ( $a [ $this -> sort ] > $b [ $this -> sort ]) {
return - 1 ;
} elseif ( $a [ $this -> sort ] < $b [ $this -> sort ]) {
return 1 ;
} else {
return 0 ;
}
}
2013-11-14 17:28:59 -04:00
}
2014-06-26 15:25:06 -04:00
public function unserializeData ( $data ) {
$unserializedData = @ unserialize ( $data );
// BUG 8134, FIX!// for single/double quote troubles // Unserialize with utf8 content get trouble
if ( $unserializedData === false ) {
$unserializedData = preg_replace ( '!s:(\d+):"(.*?)";!e' , " 's:'.strlen(' $ 2').': \" $ 2 \" ;' " , $data );
$unserializedData = @ unserialize ( $unserializedData );
}
return $unserializedData ;
}
2015-11-05 14:56:45 -04:00
/**
* This function returns the list of cases ( and their categories ) that a user can start .
* Used by : End Point workflow / engine / src / ProcessMaker / Services / Api / Cases . php -> doGetCasesListStarCase
* Observation : This function and the doGetCasesListStarCase end point implements a similar functionality
* of the mobile light / process / start - case endpoint . It was decided ( Sep 3 2015 ) the it was necessary to have
* a ProcessMaker endpoint for this functionality and in the future al the mobile end points will be deprecated
* and just the ProcessMaker endpoints will exist .
*
* @ param $usrUid
* @ param $typeView
* @ return array
*/
public function getProcessListStartCase ( $usrUid , $typeView )
{
$usrUid = empty ( $usrUid ) ? $_SESSION [ 'USER_LOGGED' ] : $usrUid ;
$canStart = $this -> canStartCase ( $usrUid );
if ( $canStart ) {
$processList = array ();
$list = $this -> getStartCasesPerType ( $usrUid , $typeView );
foreach ( $list as $index => $row ) {
if ( ! empty ( $row [ 'pro_uid' ])) {
if ( $typeView == 'category' ) {
$processList [] = array (
'tas_uid' => $row [ 'uid' ],
'pro_title' => $row [ 'value' ],
'pro_uid' => $row [ 'pro_uid' ],
'pro_category' => $row [ 'cat' ],
'category_name' => $row [ 'catname' ]
);
} else {
$processList [] = array (
'tas_uid' => $row [ 'uid' ],
'pro_title' => $row [ 'value' ],
'pro_uid' => $row [ 'pro_uid' ]
);
}
}
}
} else {
$processList [ 'success' ] = 'failure' ;
$processList [ 'message' ] = G :: LoadTranslation ( 'ID_USER_PROCESS_NOT_START' );
}
return $processList ;
}
2015-12-07 11:55:46 -04:00
2016-03-02 17:08:45 -04:00
public function deleteDelegation ( $sAppUid )
{
$oAppDelegation = new AppDelegation ();
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
while ( $aRow2 = $oDataset2 -> getRow ()) {
$oAppDelegation -> remove ( $sAppUid , $aRow2 [ 'DEL_INDEX' ]);
$oDataset2 -> next ();
}
}
2016-03-08 16:27:42 -04:00
private function orderStartCasesByCategoryAndName ( $rows ) {
//now we order in category, proces_name order:
$comparatorSequence = array (
function ( $a , $b ) {
$retval = 0 ;
if ( array_key_exists ( 'catname' , $a ) && array_key_exists ( 'catname' , $b )) {
$retval = strcmp ( $a [ 'catname' ], $b [ 'catname' ]);
}
return $retval ;
}
, function ( $a , $b ) {
$retval = 0 ;
if ( array_key_exists ( 'value' , $a ) && array_key_exists ( 'value' , $b )) {
$retval = strcmp ( $a [ 'value' ], $b [ 'value' ]);
}
return $retval ;
}
);
usort ( $rows , function ( $a , $b ) use ( $comparatorSequence ) {
foreach ( $comparatorSequence as $cmpFn ) {
$diff = call_user_func ( $cmpFn , $a , $b );
if ( $diff !== 0 ) {
return $diff ;
}
}
return 0 ;
});
return $rows ;
}
2016-09-22 16:39:30 -04:00
/**
* @ param $proUid
* @ param $dynaformUid
* @ return bool
*/
public function getAllObjectsTrackerDynaform ( $proUid , $dynaformUid )
{
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( CaseTrackerObjectPeer :: CTO_TYPE_OBJ );
$c -> add ( CaseTrackerObjectPeer :: PRO_UID , $proUid , Criteria :: EQUAL );
$c -> add ( CaseTrackerObjectPeer :: CTO_UID_OBJ , $dynaformUid , Criteria :: EQUAL );
$c -> setLimit ( 1 );
$rs = CaseTrackerObjectPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
if ( is_array ( $row )) {
return true ;
}
return false ;
}
2014-10-27 11:25:17 -04:00
}