.
*
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
*/
/**
*
* @package workflow.engine.ProcessMaker
*/
//G::LoadThirdParty( 'pear/json', 'class.json' );
//G::LoadClass( 'groups' );
//G::LoadClass( 'tasks' );
G::LoadClass( 'xmlfield_InputPM' );
//G::LoadClass( 'calendar' );
//require_once 'classes/model/AppDelegation.php';
//require_once 'classes/model/CaseTracker.php';
//require_once 'classes/model/CaseTrackerObject.php';
//require_once 'classes/model/Configuration.php';
//require_once 'classes/model/Content.php';
//require_once 'classes/model/DbSource.php';
//require_once 'classes/model/Dynaform.php';
//require_once 'classes/model/Event.php';
//require_once 'classes/model/Groupwf.php';
//require_once 'classes/model/InputDocument.php';
//require_once 'classes/model/ObjectPermission.php';
//require_once 'classes/model/OutputDocument.php';
//require_once 'classes/model/Process.php';
//require_once 'classes/model/ProcessUser.php';
//require_once 'classes/model/ReportTable.php';
//require_once 'classes/model/Route.php';
//require_once 'classes/model/CaseScheduler.php';
//require_once 'classes/model/LogCasesScheduler.php';
//require_once 'classes/model/Step.php';
//require_once 'classes/model/StepSupervisor.php';
//require_once 'classes/model/StepTrigger.php';
//require_once 'classes/model/SubProcess.php';
//require_once 'classes/model/SwimlanesElements.php';
//require_once 'classes/model/Task.php';
//require_once 'classes/model/TaskUser.php';
//require_once 'classes/model/Triggers.php';
//require_once 'classes/model/Users.php';
//require_once 'classes/model/Gateway.php';
//require_once 'classes/model/om/BaseUsers.php';
/**
* processMap - Process Map class
*
* @package workflow.engine.ProcessMaker
* @author Julio Cesar Laura Avendano
* @copyright 2007 COLOSA
*/
class processMap
{
/*
* Load the process map data
* @param string $sProcessUID
* @param boolean $bView
* @param string $sApplicationUID
* @param integer $iDelegation
* @param string $sTask
* @return string
*/
public function load ($sProcessUID, $bView = false, $sApplicationUID = '', $iDelegation = 0, $sTask = '', $bCT = false)
{
try {
$oProcess = new Process();
$aRow = $oProcess->load( $sProcessUID );
$oPM->title = new stdclass();
$oPM->title->label = strip_tags( $aRow['PRO_TITLE'] );
$oPM->title->position = new stdclass();
$oPM->title->position->x = $aRow['PRO_TITLE_X'];
$oPM->title->position->y = $aRow['PRO_TITLE_Y'];
$oPM->task = array ();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( TaskPeer::PRO_UID );
$oCriteria->addSelectColumn( TaskPeer::TAS_UID );
$oCriteria->addSelectColumn( ContentPeer::CON_VALUE );
$oCriteria->addSelectColumn( TaskPeer::TAS_START );
$oCriteria->addSelectColumn( TaskPeer::TAS_POSX );
$oCriteria->addSelectColumn( TaskPeer::TAS_POSY );
$oCriteria->addSelectColumn( TaskPeer::TAS_COLOR );
$oCriteria->addSelectColumn( TaskPeer::TAS_TYPE );
$aConditions = array ();
$aConditions[] = array (0 => TaskPeer::TAS_UID,1 => ContentPeer::CON_ID
);
$aConditions[] = array (0 => ContentPeer::CON_CATEGORY,1 => DBAdapter::getStringDelimiter() . 'TAS_TITLE' . DBAdapter::getStringDelimiter()
);
$aConditions[] = array (0 => ContentPeer::CON_LANG,1 => DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter()
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( TaskPeer::PRO_UID, $sProcessUID );
$oDataset = TaskPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow1 = $oDataset->getRow()) {
$oTask = null;
$oTask->uid = $aRow1['TAS_UID'];
$oTask->task_type = $aRow1['TAS_TYPE'];
if ($aRow1['TAS_TYPE'] == 'NORMAL') {
if (($aRow1['CON_VALUE'] == "")) { //There is no Label in Current SYS_LANG language so try to find in English - by default
$oTask1 = new Task();
$aFields1 = $oTask1->load( $oTask->uid );
$aRow1['CON_VALUE'] = $oTask1->getTasTitle();
}
$oTask->label = strip_tags( $aRow1['CON_VALUE'] );
} else {
$oCriteria = new Criteria( 'workflow' );
$del = DBAdapter::getStringDelimiter();
$oCriteria->add( SubProcessPeer::PRO_PARENT, $aRow1['PRO_UID'] );
$oCriteria->add( SubProcessPeer::TAS_PARENT, $aRow1['TAS_UID'] );
$oCriteria->addAsColumn( 'TAS_TITLE', 'C1.CON_VALUE' );
$oCriteria->addAlias( "C1", 'CONTENT' );
$tasTitleConds = array ();
$tasTitleConds[] = array (SubProcessPeer::TAS_PARENT,'C1.CON_ID'
);
$tasTitleConds[] = array ('C1.CON_CATEGORY',$del . 'TAS_TITLE' . $del
);
$tasTitleConds[] = array ('C1.CON_LANG',$del . SYS_LANG . $del
);
$oCriteria->addJoinMC( $tasTitleConds, Criteria::LEFT_JOIN );
$oDatasetX = SubProcessPeer::doSelectRS( $oCriteria );
$oDatasetX->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDatasetX->next();
$aRowx = $oDatasetX->getRow();
if ($oProcess->exists( $aRowx['PRO_UID'] )) {
//$aRowy = $oProcess->load($aRowx['PRO_UID']);
//$oTask->label = $aRowy['PRO_TITLE'];
$oTask->label = $aRowx['TAS_TITLE'];
} else {
$oTask->label = strip_tags( $aRow1['CON_VALUE'] );
}
}
$oTask->taskINI = (strtolower( $aRow1['TAS_START'] ) == 'true' ? true : false);
$oTask->position->x = (int) $aRow1['TAS_POSX'];
$oTask->position->y = (int) $aRow1['TAS_POSY'];
$oTask->derivation = null;
$oTask->derivation->to = array ();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( RoutePeer::PRO_UID, $sProcessUID );
$oCriteria->add( RoutePeer::TAS_UID, $aRow1['TAS_UID'] );
$oDataset2 = RoutePeer::doSelectRS( $oCriteria );
$oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset2->next();
while ($aRow2 = $oDataset2->getRow()) {
switch ($aRow2['ROU_TYPE']) {
case 'SEQUENTIAL':
$aRow2['ROU_TYPE'] = 0;
break;
case 'SELECT':
$aRow2['ROU_TYPE'] = 1;
break;
case 'EVALUATE':
$aRow2['ROU_TYPE'] = 2;
break;
case 'PARALLEL':
$aRow2['ROU_TYPE'] = 3;
break;
case 'PARALLEL-BY-EVALUATION':
$aRow2['ROU_TYPE'] = 4;
break;
case 'SEC-JOIN':
$aRow2['ROU_TYPE'] = 5;
break;
case 'DISCRIMINATOR':
$aRow2['ROU_TYPE'] = 8;
break;
}
$oTo = null;
$oTo->task = $aRow2['ROU_NEXT_TASK'];
$oTo->condition = $aRow2['ROU_CONDITION'];
$oTo->executant = $aRow2['ROU_TO_LAST_USER'];
$oTo->optional = $aRow2['ROU_OPTIONAL'];
$oTask->derivation->type = $aRow2['ROU_TYPE'];
$oTask->derivation->to[] = $oTo;
$oDataset2->next();
}
if ($bCT) {
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'COUNT(*) AS CANT' );
$oCriteria->addSelectColumn( 'MIN(DEL_FINISH_DATE) AS FINISH' );
$oCriteria->add( AppDelegationPeer::APP_UID, $sApplicationUID );
$oCriteria->add( AppDelegationPeer::TAS_UID, $aRow1['TAS_UID'] );
$oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria );
$oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset2->next();
$aRow2 = $oDataset2->getRow();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'DEL_FINISH_DATE' );
$oCriteria->add( AppDelegationPeer::APP_UID, $sApplicationUID );
$oCriteria->add( AppDelegationPeer::TAS_UID, $aRow1['TAS_UID'] );
$oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null );
$oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria );
$oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset2->next();
$aRow3 = $oDataset2->getRow();
if ($aRow3) {
$aRow2['FINISH'] = '';
}
/*
if (($aRow2['FINISH'] == null) && ($aRow1['TAS_UID'] == $sTask)) {
$oTask->color = '#FF0000';
} else {
if ($aRow2['CANT'] != 0) {
if ($aRow2['FINISH'] == null) {
//$oTask->color = '#FF9900';
$oTask->color = '#FF0000';
} else {
$oTask->color = '#006633';
}
} else {
$oTask->color = "#939598";
}
}
*/
if (empty($aRow2["FINISH"]) && $aRow1["TAS_UID"] == $sTask) {
$oTask->color = "#FF0000"; //Red
} else {
if (!empty($aRow2["FINISH"])) {
$oTask->color = "#006633"; //Green
} else {
if ($oTask->derivation->type != 5) {
if ($aRow2["CANT"] != 0) {
$oTask->color = "#FF0000"; //Red
} else {
$oTask->color = "#939598"; //Gray
}
} else {
//$oTask->color = "#FF9900"; //Yellow
$oTask->color = "#FF0000"; //Red
}
}
}
} else {
if ($bView && ($sApplicationUID != '') && ($iDelegation > 0) && ($sTask != '')) {
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'COUNT(*) AS CANT' );
$oCriteria->addSelectColumn( 'MIN(DEL_FINISH_DATE) AS FINISH' );
$oCriteria->add( AppDelegationPeer::APP_UID, $sApplicationUID );
$oCriteria->add( AppDelegationPeer::TAS_UID, $aRow1['TAS_UID'] );
$oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria );
$oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset2->next();
$aRow2 = $oDataset2->getRow();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'DEL_FINISH_DATE' );
$oCriteria->add( AppDelegationPeer::APP_UID, $sApplicationUID );
$oCriteria->add( AppDelegationPeer::TAS_UID, $aRow1['TAS_UID'] );
$oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null );
$oDataset2 = AppDelegationPeer::doSelectRS( $oCriteria );
$oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset2->next();
$aRow3 = $oDataset2->getRow();
if ($aRow3) {
$aRow2['FINISH'] = '';
}
/*
if (($aRow2['FINISH'] == null) && ($aRow1['TAS_UID'] == $sTask)) {
$oTask->color = '#FF0000';
} else {
if ($aRow2['CANT'] != 0) {
if ($aRow2['FINISH'] == null) {
$oTask->color = '#FF9900';
} else {
$oTask->color = '#006633';
}
} else {
$oTask->color = '#939598';
}
}
*/
if (empty($aRow2["FINISH"]) && $aRow1["TAS_UID"] == $sTask) {
$oTask->color = "#FF0000"; //Red
} else {
if (!empty($aRow2["FINISH"])) {
$oTask->color = "#006633"; //Green
} else {
if ($oTask->derivation->type != 5) {
if ($aRow2["CANT"] != 0) {
$oTask->color = "#FF0000"; //Red
} else {
$oTask->color = "#939598"; //Gray
}
} else {
$oTask->color = "#FF9900"; //Yellow
}
}
}
}
}
$msg = array ();
G::LoadClass( 'derivation' );
$Derivation = new Derivation();
$users = $Derivation->getAllUsersFromAnyTask( $aRow1['TAS_UID'] );
$sw_error = false;
if (count( $users ) == 0) {
$sw_error = true;
$msg[] = G::LoadTranslation( 'ID_NO_USERS' );
}
G::LoadClass( 'ArrayPeer' );
$stepsCriteria = $this->getStepsCriteria( $aRow1['TAS_UID'] );
$oDatasetSteps = ArrayBasePeer::doSelectRS( $stepsCriteria );
$oDatasetSteps->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDatasetSteps->next();
$countDynaform = 0;
$countOutput = 0;
$countInput = 0;
$countExternal = 0;
while ($aRowSteps = $oDatasetSteps->getRow()) {
switch ($aRowSteps['STEP_TYPE_OBJ']) {
case 'DYNAFORM':
$countDynaform ++;
break;
case 'INPUT_DOCUMENT':
$countInput ++;
break;
case 'OUTPUT_DOCUMENT':
$countOutput ++;
break;
case 'EXTERNAL':
$countExternal ++;
break;
}
$oDatasetSteps->next();
}
$totalSteps = $countDynaform + $countInput + $countOutput + $countExternal;
if ($totalSteps == 0) {
$sw_error = true;
$msg[] = G::LoadTranslation( 'ID_TASK_NO_STEPS' );
}
if ($sw_error) {
$oTask->statusIcons[] = array ('label' => implode( ",", $msg ),'icon' => '/images/alert.gif','message' => implode( ", ", $msg ),'url' => ''
);
}
$oPM->task[] = $oTask;
$oDataset->next();
}
$oPM->executant[] = G::LoadTranslation( 'ID_RULES_AND_USER_GROUPS' );
$oPM->executant[] = G::LoadTranslation( 'ID_ADD_USER_OF_TASK' );
$oPM->tasExtra[0] = new stdclass();
$oPM->tasExtra[0]->label = '-- ' . G::LoadTranslation( 'ID_END_OF_PROCESS' ) . ' --';
$oPM->tasExtra[0]->uid = 'end';
$oPM->tasExtra[1] = new stdclass();
$oPM->tasExtra[1]->label = '-- ' . G::LoadTranslation( 'ID_TAREA_COLGANTE' ) . ' --';
$oPM->tasExtra[1]->uid = 'leaf';
$oPM->guide = array ();
$oPM->text = array ();
$oPM->statusIcons = array ();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( SwimlanesElementsPeer::SWI_UID );
// $oCriteria->addSelectColumn ( ContentPeer::CON_VALUE );
$oCriteria->addAsColumn( "CON_VALUE", "CASE WHEN CONTENT.CON_VALUE IS NULL THEN (SELECT DISTINCT MAX(A.CON_VALUE) FROM CONTENT A WHERE SWIMLANES_ELEMENTS.SWI_UID=A.CON_ID ) ELSE CONTENT.CON_VALUE END " );
$oCriteria->addSelectColumn( SwimlanesElementsPeer::SWI_TYPE );
$oCriteria->addSelectColumn( SwimlanesElementsPeer::SWI_X );
$oCriteria->addSelectColumn( SwimlanesElementsPeer::SWI_Y );
$aConditions = array ();
$aConditions[] = array (0 => SwimlanesElementsPeer::SWI_UID,1 => ContentPeer::CON_ID
);
$aConditions[] = array (0 => ContentPeer::CON_CATEGORY,1 => DBAdapter::getStringDelimiter() . 'SWI_TEXT' . DBAdapter::getStringDelimiter()
);
$aConditions[] = array (0 => ContentPeer::CON_LANG,1 => DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter()
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProcessUID );
$oDataset = SwimlanesElementsPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
switch (strtolower( $aRow['SWI_TYPE'] )) {
case 'line':
$oGuide = null;
$oGuide->uid = $aRow['SWI_UID'];
$oGuide->position = ($aRow['SWI_X'] > 0 ? $aRow['SWI_X'] : $aRow['SWI_Y']);
$oGuide->direction = ($aRow['SWI_X'] > 0 ? 'vertical' : 'horizontal');
$oPM->guide[] = $oGuide;
break;
case 'text':
$oText = null;
$oText->uid = $aRow['SWI_UID'];
$oText->label = strip_tags( ($aRow['CON_VALUE'] != '' ? str_replace( chr( 92 ), '\', str_replace( '<', '<', $aRow['CON_VALUE'] ) ) : '-') );
// $oText->label = '->' . $aRow ['CON_VALUE'] . '<-' ;
$oText->position->x = $aRow['SWI_X'];
$oText->position->y = $aRow['SWI_Y'];
$oPM->text[] = $oText;
break;
}
$oDataset->next();
}
$oPM->derivation = array ('Sequential','Evaluate (manual)','Evaluate (auto)','Parallel (fork)','Parallel by evaluation (fork)','Parallel (sequential join)','Parallel (sequential main join)'
);
//Load extended task properties from plugin. By JHL Jan 18, 2011
$oPluginRegistry = & PMPluginRegistry::getSingleton();
$activePluginsForTaskProperties = $oPluginRegistry->getTaskExtendedProperties();
$oPM->taskOptions = array ();
foreach ($activePluginsForTaskProperties as $key => $taskPropertiesInfo) {
$taskOption['title'] = $taskPropertiesInfo->sName;
$taskOption['id'] = $taskPropertiesInfo->sNamespace . "--" . $taskPropertiesInfo->sName;
$oPM->taskOptions[] = $taskOption;
}
//$oJSON = new Services_JSON();
return Bootstrap::json_encode($oPM);//$oJSON->encode( $oPM );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Create a Process
* @param array $aData
* @return boolean
*/
public function createProcess ($aData)
{
try {
$oProcess = new Process();
return $oProcess->create( $aData );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Update a Process
* @param array $aData
* @return boolean
*/
public function updateProcess ($aData)
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $aData['PRO_UID'] );
return $oProcess->update( $aData );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Edit the Process Map information
* @param string $sProcessUID
* @return boolean
*/
public function editProcess ($sProcessUID)
{
try {
$oProcess = new Process();
if (! is_null( $oProcess )) {
G::loadClass( 'processes' );
$calendar = new Calendar();
$files = Processes::getProcessFiles( $sProcessUID, 'mail' );
$templates = array ();
$templates[] = 'dummy';
foreach ($files as $file) {
$templates[] = array ('FILE' => $file['filename'],'NAME' => $file['filename']
);
}
$calendarObj = $calendar->getCalendarList( true, true );
global $_DBArray;
$_DBArray['_TEMPLATES1'] = $templates;
$_DBArray['availableCalendars'] = $calendarObj['array'];
$_SESSION['_DBArray'] = $_DBArray;
$aFields = $oProcess->load( $sProcessUID );
$aFields['PRO_SUMMARY_DYNAFORM'] = (isset( $aFields['PRO_DYNAFORMS']['PROCESS'] ) ? $aFields['PRO_DYNAFORMS']['PROCESS'] : '');
$aFields['THETYPE'] = 'UPDATE';
$calendarInfo = $calendar->getCalendarFor( $sProcessUID, $sProcessUID, $sProcessUID );
//If the function returns a DEFAULT calendar it means that this object doesn't have assigned any calendar
$aFields['PRO_CALENDAR'] = $calendarInfo['CALENDAR_APPLIED'] != 'DEFAULT' ? $calendarInfo['CALENDAR_UID'] : "";
$aFields['SYS_LANG'] = SYS_LANG;
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'processes/processes_Edit', '', $aFields, 'processes_Save' );
G::RenderPage( 'publish', 'raw' );
return true;
} else {
throw (new Exception( 'This row doesn\'t exist!' ));
}
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Delete a Process
* @param string $sProcessUID
* @return boolean
*/
public function deleteProcess ($sProcessUID)
{
try {
G::LoadClass( 'case' );
G::LoadClass( 'reportTables' );
//Instance all classes necesaries
$oProcess = new Process();
$oDynaform = new Dynaform();
$oInputDocument = new InputDocument();
$oOutputDocument = new OutputDocument();
$oTrigger = new Triggers();
$oRoute = new Route();
$oGateway = new Gateway();
$oEvent = new Event();
$oSwimlaneElement = new SwimlanesElements();
$oConfiguration = new Configuration();
$oDbSource = new DbSource();
$oReportTable = new ReportTables();
$oCaseTracker = new CaseTracker();
$oCaseTrackerObject = new CaseTrackerObject();
//Delete the applications of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( ApplicationPeer::PRO_UID, $sProcessUID );
$oDataset = ApplicationPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$oCase = new Cases();
while ($aRow = $oDataset->getRow()) {
$oCase->removeCase( $aRow['APP_UID'] );
$oDataset->next();
}
//Delete the tasks of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( TaskPeer::PRO_UID, $sProcessUID );
$oDataset = TaskPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$this->deleteTask( $aRow['TAS_UID'] );
$oDataset->next();
}
//Delete the dynaforms of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID );
$oDataset = DynaformPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oDynaform->remove( $aRow['DYN_UID'] );
$oDataset->next();
}
//Delete the input documents of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID );
$oDataset = InputDocumentPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oInputDocument->remove( $aRow['INP_DOC_UID'] );
$oDataset->next();
}
//Delete the output documents of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( OutputDocumentPeer::PRO_UID, $sProcessUID );
$oDataset = OutputDocumentPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oOutputDocument->remove( $aRow['OUT_DOC_UID'] );
$oDataset->next();
}
//Delete the triggers of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( TriggersPeer::PRO_UID, $sProcessUID );
$oDataset = TriggersPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oTrigger->remove( $aRow['TRI_UID'] );
$oDataset->next();
}
//Delete the routes of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( RoutePeer::PRO_UID, $sProcessUID );
$oDataset = RoutePeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oRoute->remove( $aRow['ROU_UID'] );
$oDataset->next();
}
//Delete the gateways of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( GatewayPeer::PRO_UID, $sProcessUID );
$oDataset = GatewayPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oGateway->remove( $aRow['GAT_UID'] );
$oDataset->next();
}
//Delete the Event of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( EventPeer::PRO_UID, $sProcessUID );
$oDataset = EventPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oEvent->remove( $aRow['EVN_UID'] );
$oDataset->next();
}
//Delete the swimlanes elements of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProcessUID );
$oDataset = SwimlanesElementsPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oSwimlaneElement->remove( $aRow['SWI_UID'] );
$oDataset->next();
}
//Delete the configurations of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( ConfigurationPeer::PRO_UID, $sProcessUID );
$oDataset = ConfigurationPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oConfiguration->remove( $aRow['CFG_UID'], $aRow['OBJ_UID'], $aRow['PRO_UID'], $aRow['USR_UID'], $aRow['APP_UID'] );
$oDataset->next();
}
//Delete the DB sources of process
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( DbSourcePeer::PRO_UID, $sProcessUID );
$oDataset = DbSourcePeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
/**
* note added by gustavo cruz gustavo-at-colosa-dot-com 27-01-2010
* in order to solve the bug 0004389, we use the validation function Exists
* inside the remove function in order to verify if the DbSource record
* exists in the Database, however there is a strange behavior within the
* propel engine, when the first record is erased somehow the "_deleted"
* attribute of the next row is set to true, so when propel tries to erase
* it, obviously it can't and trows an error. With the "Exist" function
* we ensure that if there is the record in the database, the _delete attribute must be false.
*
* note added by gustavo cruz gustavo-at-colosa-dot-com 28-01-2010
* I have just identified the source of the issue, when is created a $oDbSource DbSource object
* it's used whenever a record is erased or removed in the db, however the problem
* it's that the same object is used every time, and the delete method invoked
* sets the _deleted attribute to true when its called, of course as we use
* the same object, the first time works fine but trowns an error with the
* next record, cos it's the same object and the delete method checks if the _deleted
* attribute it's true or false, the attrib _deleted is setted to true the
* first time and later is never changed, the issue seems to be part of
* every remove function in the model classes, not only DbSource
* i recommend that a more general solution must be achieved to resolve
* this issue in every model class, to prevent future problems.
*/
$oDbSource->remove( $aRow['DBS_UID'], $sProcessUID );
$oDataset->next();
}
//Delete the supervisors
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( ProcessUserPeer::PRO_UID, $sProcessUID );
ProcessUserPeer::doDelete( $oCriteria );
//Delete the object permissions
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProcessUID );
ObjectPermissionPeer::doDelete( $oCriteria );
//Delete the step supervisors
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( StepSupervisorPeer::PRO_UID, $sProcessUID );
StepSupervisorPeer::doDelete( $oCriteria );
//Delete the report tables
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( ReportTablePeer::PRO_UID, $sProcessUID );
$oDataset = ReportTablePeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oReportTable->deleteReportTable( $aRow['REP_TAB_UID'] );
$oDataset->next();
}
//Delete case tracker configuration
$oCaseTracker->remove( $sProcessUID );
//Delete case tracker objects
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( CaseTrackerObjectPeer::PRO_UID, $sProcessUID );
ProcessUserPeer::doDelete( $oCriteria );
//Delete the process
try {
$oProcess->remove( $sProcessUID );
} catch (Exception $oError) { //nada
}
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Save the process title position
* @param string sProcessUID
* @param integer $iX
* @param integer $iY
* @return boolean
*/
public function saveTitlePosition ($sProcessUID = '', $iX = 0, $iY = 0)
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$aFields['PRO_UID'] = $sProcessUID;
$aFields['PRO_TITLE_X'] = $iX;
$aFields['PRO_TITLE_Y'] = $iY;
$oProcess->update( $aFields );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Steps of Tasks
* @param string $sProcessUID
* @param string $sTaskUID
* @return boolean
*/
public function steps ($sProcessUID = '', $sTaskUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$oTask = new Task();
$aFields = $oTask->load( $sTaskUID );
$aFields = array ();
$aFields['PROCESS'] = $sProcessUID;
$aFields['TASK'] = $sTaskUID;
$aFields['CONFIRM'] = G::LoadTranslation( 'ID_MSG_CONFIRM_DELETE_STEP' );
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'steps/steps_List', $this->getStepsCriteria( $sTaskUID ), $aFields );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Return the steps list criteria object
* @param string $sTaskUID
* @return array
*/
public function getStepsCriteria ($sTaskUID = '')
{
try {
//call plugin
$oPluginRegistry = &PMPluginRegistry::getSingleton();
$externalSteps = $oPluginRegistry->getSteps();
$aSteps = array ();
$aSteps[] = array ('STEP_TITLE' => 'char','STEP_UID' => 'char','STEP_TYPE_OBJ' => 'char','STEP_MODE' => 'char','STEP_CONDITION' => 'char','STEP_POSITION' => 'integer'
);
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( StepPeer::TAS_UID, $sTaskUID );
$oCriteria->addAscendingOrderByColumn( StepPeer::STEP_POSITION );
$oDataset = StepPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$urlEdit = '';
$linkEditValue = '';
switch ($aRow['STEP_TYPE_OBJ']) {
case 'DYNAFORM':
$oDynaform = new Dynaform();
$aFields = $oDynaform->load( $aRow['STEP_UID_OBJ'] );
$sTitle = $aFields['DYN_TITLE'];
/**
* @@@init2 PROCCESS FOR DIRECT EDIT LINK @by erik@colosa.com ON DATE 02/06/2008 18:48:13
*/
$DYN_UID = $aFields['DYN_UID'];
$urlEdit = "dynaformEdit('" . $DYN_UID . "', '" . $aRow['PRO_UID'] . "');";
$linkEditValue = 'Edit';
/**
* @@@end2
*/
break;
case 'INPUT_DOCUMENT':
$oInputDocument = new InputDocument();
$aFields = $oInputDocument->getByUid( $aRow['STEP_UID_OBJ'] );
if ($aFields === false)
continue;
$sTitle = $aFields['INP_DOC_TITLE'];
break;
case 'OUTPUT_DOCUMENT':
$oOutputDocument = new OutputDocument();
$aFields = $oOutputDocument->getByUid( $aRow['STEP_UID_OBJ'] );
if ($aFields === false)
continue;
$sTitle = $aFields['OUT_DOC_TITLE'];
break;
case 'EXTERNAL':
$sTitle = 'unknown ' . $aRow['STEP_UID'];
foreach ($externalSteps as $key => $val) {
if ($val->sStepId == $aRow['STEP_UID_OBJ']) {
$sTitle = $val->sStepTitle;
if (trim( $val->sSetupStepPage ) != '') {
$urlEdit = "externalStepEdit('" . $aRow['STEP_UID'] . "', '" . $val->sSetupStepPage . "');";
$linkEditValue = 'Edit';
} else {
$urlEdit = "";
$linkEditValue = '';
}
}
}
break;
}
$aSteps[] = array ('STEP_TITLE' => $sTitle,'STEP_UID' => $aRow['STEP_UID'],'STEP_TYPE_OBJ' => $aRow['STEP_TYPE_OBJ'],'STEP_MODE' => $aRow['STEP_MODE'],'STEP_CONDITION' => $aRow['STEP_CONDITION'],'STEP_POSITION' => $aRow['STEP_POSITION'],'urlEdit' => $urlEdit,'linkEditValue' => $linkEditValue,'PRO_UID' => $aRow['PRO_UID']
);
$oDataset->next();
}
global $_DBArray;
$_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : '');
$_DBArray['steps'] = $aSteps;
$_SESSION['_DBArray'] = $_DBArray;
G::LoadClass( 'ArrayPeer' );
$oCriteria = new Criteria( 'dbarray' );
$oCriteria->setDBArrayTable( 'steps' );
$oCriteria->addAscendingOrderByColumn( 'STEP_POSITION' );
return $oCriteria;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Return the step triggers list criteria object
* @param string $sStepUID
* @param string $sTaskUID
* @param string $sType
* @return object
*/
public function getStepTriggersCriteria ($sStepUID = '', $sTaskUID = '', $sType = '')
{
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'C.CON_VALUE' );
$oCriteria->addSelectColumn( 'STEP_UID' );
$oCriteria->addSelectColumn( 'TRI_UID' );
$oCriteria->addSelectColumn( 'ST_TYPE' );
$oCriteria->addSelectColumn( StepTriggerPeer::ST_POSITION );
$oCriteria->addAsColumn( 'TRI_TITLE', 'C.CON_VALUE' );
$oCriteria->addAlias( 'C', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (StepTriggerPeer::TRI_UID,'C.CON_ID'
);
$aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'TRI_TITLE' . $sDelimiter
);
$aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( StepTriggerPeer::STEP_UID, $sStepUID );
$oCriteria->add( StepTriggerPeer::TAS_UID, $sTaskUID );
$oCriteria->add( StepTriggerPeer::ST_TYPE, $sType );
$oCriteria->addAscendingOrderByColumn( StepTriggerPeer::ST_POSITION );
return $oCriteria;
}
/*
* Return the available building blocks list criteria object
* @param string $sProcessUID
* @param string $sTaskUID
* @return object
*/
public function getAvailableBBCriteria ($sProcessUID = '', $sTaskUID = '')
{
try {
$oTasks = new Tasks();
$aSteps = $oTasks->getStepsOfTask( $sTaskUID );
$sUIDs = array ();
foreach ($aSteps as $aStep) {
$sUIDs[] = $aStep['STEP_UID_OBJ'];
}
$aBB = array ();
$aBB[] = array ('STEP_UID' => 'char','STEP_TITLE' => 'char','STEP_TYPE_OBJ' => 'char','STEP_MODE' => 'char'
);
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( DynaformPeer::DYN_UID );
$oCriteria->addAsColumn( 'DYN_TITLE', 'C.CON_VALUE' );
$oCriteria->addAlias( 'C', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (DynaformPeer::DYN_UID,'C.CON_ID'
);
$aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter
);
$aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID );
$oCriteria->add( DynaformPeer::DYN_UID, $sUIDs, Criteria::NOT_IN );
$oCriteria->add( DynaformPeer::DYN_TYPE, 'xmlform' );
$oDataset = DynaformPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$i = 0;
while ($aRow = $oDataset->getRow()) {
$i ++;
if (($aRow['DYN_TITLE'] == null) || ($aRow['DYN_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label
$aRow['DYN_TITLE'] = Content::Load( "DYN_TITLE", "", $aRow['DYN_UID'], SYS_LANG );
}
$aBB[] = array ('STEP_UID' => $aRow['DYN_UID'],'STEP_TITLE' => $aRow['DYN_TITLE'],'STEP_TYPE_OBJ' => 'DYNAFORM','STEP_MODE' => ''
);
$oDataset->next();
}
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID );
$oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' );
$oCriteria->addAlias( 'C', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID'
);
$aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter
);
$aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID );
$oCriteria->add( InputDocumentPeer::INP_DOC_UID, $sUIDs, Criteria::NOT_IN );
$oDataset = InputDocumentPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
if (($aRow['INP_DOC_TITLE'] == null) || ($aRow['INP_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label
$aRow['INP_DOC_TITLE'] = Content::Load( "INP_DOC_TITLE", "", $aRow['INP_DOC_UID'], SYS_LANG );
}
$aBB[] = array ('STEP_UID' => $aRow['INP_DOC_UID'],'STEP_TITLE' => $aRow['INP_DOC_TITLE'],'STEP_TYPE_OBJ' => 'INPUT_DOCUMENT','STEP_MODE' => ''
);
$oDataset->next();
}
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_UID );
$oCriteria->addAsColumn( 'OUT_DOC_TITLE', 'C.CON_VALUE' );
$oCriteria->addAlias( 'C', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C.CON_ID'
);
$aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter
);
$aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( OutputDocumentPeer::PRO_UID, $sProcessUID );
$oCriteria->add( OutputDocumentPeer::OUT_DOC_UID, $sUIDs, Criteria::NOT_IN );
$oDataset = OutputDocumentPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
if (($aRow['OUT_DOC_TITLE'] == null) || ($aRow['OUT_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label
$aRow['OUT_DOC_TITLE'] = Content::Load( "OUT_DOC_TITLE", "", $aRow['OUT_DOC_UID'], SYS_LANG );
}
$aBB[] = array ('STEP_UID' => $aRow['OUT_DOC_UID'],'STEP_TITLE' => $aRow['OUT_DOC_TITLE'],'STEP_TYPE_OBJ' => 'OUTPUT_DOCUMENT','STEP_MODE' => ''
);
$oDataset->next();
}
//call plugin
$oPluginRegistry = &PMPluginRegistry::getSingleton();
$externalSteps = $oPluginRegistry->getSteps();
if (is_array( $externalSteps ) && count( $externalSteps ) > 0) {
foreach ($externalSteps as $key => $stepVar) {
$aBB[] = array ('STEP_UID' => $stepVar->sStepId,'STEP_TITLE' => $stepVar->sStepTitle,'STEP_TYPE_OBJ' => 'EXTERNAL','STEP_MODE' => ''
);
}
}
global $_DBArray;
$_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : '');
$_DBArray['availableBB'] = $aBB;
$_SESSION['_DBArray'] = $_DBArray;
G::LoadClass( 'ArrayPeer' );
$oCriteria = new Criteria( 'dbarray' );
$oCriteria->setDBArrayTable( 'availableBB' );
$oCriteria->addAscendingOrderByColumn( 'STEP_TYPE_OBJ' );
$oCriteria->addAscendingOrderByColumn( 'STEP_TITLE' );
return $oCriteria;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Users assigned to Tasks
* @param string $sProcessUID
* @param string $sTaskUID
* @return boolean
*/
public function users ($sProcessUID = '', $sTaskUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$oTask = new Task();
$aFields = $oTask->load( $sTaskUID );
$_SESSION['iType'] = 1;
$aFields['TASK'] = $sTaskUID;
$aFields['TYPE'] = $_SESSION['iType'];
$aFields['OF_TO_ASSIGN'] = G::LoadTranslation( 'ID_DE_ASSIGN' );
$aFields['CONFIRM'] = G::LoadTranslation( 'ID_MSG_CONFIRM_DEASIGN_USER_GROUP_MESSAGE' );
$aFields['UIDS'] = "'0'";
$oTasks = new Tasks();
$oGroups = new Groups();
$aAux1 = $oTasks->getGroupsOfTask( $sTaskUID, $_SESSION['iType'] );
foreach ($aAux1 as $aGroup) {
$aAux2 = $oGroups->getUsersOfGroup( $aGroup['GRP_UID'] );
foreach ($aAux2 as $aUser) {
$aFields['UIDS'] .= ",'" . $aUser['USR_UID'] . "'";
}
}
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$oTask = new Task();
$aTask = $oTask->load( $sTaskUID );
if ($aFields['TAS_TYPE'] == 'TRUE') {
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'users/users_ShortList', $this->getTaskUsersCriteria( $sTaskUID, $_SESSION['iType'] ), $aFields );
} else {
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'users/users_ShortList2', $this->getTaskUsersCriteria( $sTaskUID, $_SESSION['iType'] ), $aFields );
}
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Users Adhoc assigned to Tasks
* @param string $sProcessUID
* @param string $sTaskUID
* @return boolean
*/
public function users_adhoc ($sProcessUID = '', $sTaskUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$oTask = new Task();
$aFields = $oTask->load( $sTaskUID );
$_SESSION['iType'] = 2;
$aFields['TASK'] = $sTaskUID;
$aFields['TYPE'] = $_SESSION['iType'];
$aFields['OF_TO_ASSIGN'] = G::LoadTranslation( 'ID_DE_ASSIGN' );
$aFields['CONFIRM'] = G::LoadTranslation( 'ID_MSG_CONFIRM_DEASIGN_USER_GROUP_MESSAGE' );
$aFields['UIDS'] = "'0'";
$oTasks = new Tasks();
$oGroups = new Groups();
$aAux1 = $oTasks->getGroupsOfTask( $sTaskUID, $_SESSION['iType'] );
foreach ($aAux1 as $aGroup) {
$aAux2 = $oGroups->getUsersOfGroup( $aGroup['GRP_UID'] );
foreach ($aAux2 as $aUser) {
$aFields['UIDS'] .= ",'" . $aUser['USR_UID'] . "'";
}
}
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$oTask = new Task();
$aTask = $oTask->load( $sTaskUID );
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'users/users_ShortListAdhoc', $this->getTaskUsersCriteria( $sTaskUID, $_SESSION['iType'] ), $aFields );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Return the tasks users list criteria object
* @param string $sTaskUID
* @param integer $iType
* @return array
*/
public function getTaskUsersCriteria ($sTaskUID = '', $iType = 1)
{
try {
$aUsers = array ();
$aUsers[] = array ('LABEL' => 'char','TAS_UID' => 'char','USR_UID' => 'char','TU_TYPE' => 'integer','TU_RELATION' => 'integer'
);
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addAsColumn( 'GRP_TITLE', 'C.CON_VALUE' );
$oCriteria->addSelectColumn( TaskUserPeer::TAS_UID );
$oCriteria->addSelectColumn( TaskUserPeer::USR_UID );
$oCriteria->addSelectColumn( TaskUserPeer::TU_TYPE );
$oCriteria->addSelectColumn( TaskUserPeer::TU_RELATION );
$oCriteria->addAlias( 'C', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (TaskUserPeer::USR_UID,'C.CON_ID'
);
$aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'GRP_TITLE' . $sDelimiter
);
$aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID );
$oCriteria->add( TaskUserPeer::TU_TYPE, $iType );
$oCriteria->add( TaskUserPeer::TU_RELATION, 2 );
$oDataset = TaskUserPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$c = 0;
while ($aRow = $oDataset->getRow()) {
$c ++;
$oGroup = new Groupwf();
$aFields = $oGroup->load( $aRow['USR_UID'] );
if ($aFields['GRP_STATUS'] == 'ACTIVE') {
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'COUNT(*) AS MEMBERS_NUMBER' );
$oCriteria->add( GroupUserPeer::GRP_UID, $aRow['USR_UID'] );
$oDataset2 = GroupUserPeer::doSelectRS( $oCriteria );
$oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset2->next();
$aRow2 = $oDataset2->getRow();
} else {
$aRow2['GROUP_INACTIVE'] = '(' . G::LoadTranslation( 'ID_GROUP_INACTIVE' ) . ')';
}
$aUsers[] = array ('LABEL' => (! isset( $aRow2['GROUP_INACTIVE'] ) ? $aRow['GRP_TITLE'] . ' (' . $aRow2['MEMBERS_NUMBER'] . ' ' . ((int) $aRow2['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation( 'ID_USER' ) : G::LoadTranslation( 'ID_USERS' )) . ')
' : $aRow['GRP_TITLE'] . ' ' . $aRow2['GROUP_INACTIVE']),'TAS_UID' => $aRow['TAS_UID'],'USR_UID' => $aRow['USR_UID'],'TU_TYPE' => $aRow['TU_TYPE'],'TU_RELATION' => $aRow['TU_RELATION']
);
$oDataset->next();
}
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME );
$oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME );
$oCriteria->addSelectColumn( TaskUserPeer::TAS_UID );
$oCriteria->addSelectColumn( TaskUserPeer::USR_UID );
$oCriteria->addSelectColumn( TaskUserPeer::TU_TYPE );
$oCriteria->addSelectColumn( TaskUserPeer::TU_RELATION );
$oCriteria->addJoin( TaskUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN );
$oCriteria->add( TaskUserPeer::TAS_UID, $sTaskUID );
$oCriteria->add( TaskUserPeer::TU_TYPE, $iType );
$oCriteria->add( TaskUserPeer::TU_RELATION, 1 );
$oDataset = TaskUserPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$aUsers[] = array ('LABEL' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'],'TAS_UID' => $aRow['TAS_UID'],'USR_UID' => $aRow['USR_UID'],'TU_TYPE' => $aRow['TU_TYPE'],'TU_RELATION' => $aRow['TU_RELATION']
);
$oDataset->next();
}
global $_DBArray;
$_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : '');
$_DBArray['taskUsers'] = $aUsers;
$_SESSION['_DBArray'] = $_DBArray;
G::LoadClass( 'ArrayPeer' );
$oCriteria = new Criteria( 'dbarray' );
$oCriteria->setDBArrayTable( 'taskUsers' );
$oCriteria->addDescendingOrderByColumn( TaskUserPeer::TU_RELATION );
$oCriteria->addAscendingOrderByColumn( 'LABEL' );
return $oCriteria;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Return the available users and users groups list criteria object
* @param string $sTaskUID
* @param integer $iType
* @return object
*/
public function getAvailableUsersCriteria ($sTaskUID = '', $iType = 1)
{
try {
$oTasks = new Tasks();
$aAux = $oTasks->getGroupsOfTask( $sTaskUID, $iType );
$aUIDS1 = array ();
$aUIDS2 = array ();
foreach ($aAux as $aGroup) {
$aUIDS1[] = $aGroup['GRP_UID'];
}
$aAux = $oTasks->getUsersOfTask( $sTaskUID, $iType );
foreach ($aAux as $aUser) {
$aUIDS2[] = $aUser['USR_UID'];
}
$aUsers = array ();
$aUsers[] = array ('LABEL' => 'char','TAS_UID' => 'char','USR_UID' => 'char','TU_TYPE' => 'integer','TU_RELATION' => 'integer'
);
$sDelimiter = DBAdapter::getStringDelimiter();
$groups = new Groupwf();
$start = '';
$limit = '';
$filter = '';
$result = $groups->getAllGroup( $start, $limit, $filter );
$c = 0;
foreach ($result['rows'] as $results) {
$c ++;
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'COUNT(*) AS MEMBERS_NUMBER' );
$oCriteria->add( GroupUserPeer::GRP_UID, $results['GRP_UID'] );
$oDataset2 = GroupUserPeer::doSelectRS( $oCriteria );
$oDataset2->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset2->next();
$aRow2 = $oDataset2->getRow();
$aUsers[] = array ('LABEL' => $results['GRP_TITLE'] . ' (' . $aRow2['MEMBERS_NUMBER'] . ' ' . ((int) $aRow2['MEMBERS_NUMBER'] == 1 ? G::LoadTranslation( 'ID_USER' ) : G::LoadTranslation( 'ID_USERS' )) . ')
','TAS_UID' => $sTaskUID,'USR_UID' => $results['GRP_UID'],'TU_TYPE' => $iType,'TU_RELATION' => 2
);
}
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( UsersPeer::USR_UID );
$oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME );
$oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME );
$oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' );
$oCriteria->add( UsersPeer::USR_UID, $aUIDS2, Criteria::NOT_IN );
$oDataset = UsersPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$aUsers[] = array ('LABEL' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'],'TAS_UID' => $sTaskUID,'USR_UID' => $aRow['USR_UID'],'TU_TYPE' => $iType,'TU_RELATION' => 1
);
$oDataset->next();
}
global $_DBArray;
$_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : '');
$_DBArray['availableUsers'] = $aUsers;
$_SESSION['_DBArray'] = $_DBArray;
G::LoadClass( 'ArrayPeer' );
$oCriteria = new Criteria( 'dbarray' );
$oCriteria->setDBArrayTable( 'availableUsers' );
$oCriteria->addDescendingOrderByColumn( TaskUserPeer::TU_RELATION );
$oCriteria->addAscendingOrderByColumn( 'LABEL' );
return $oCriteria;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Conditions of the steps
* @param string $sProcessUID
* @param string $sTaskUID
* @return boolean
*/
public function stepsConditions ($sProcessUID = '', $sTaskUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$oTask = new Task();
$aFields = $oTask->load( $sTaskUID );
$aFields['PROCESS'] = $sProcessUID;
$aFields['TASK'] = $sTaskUID;
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'steps/conditions_List', $this->getStepsCriteria( $sTaskUID ), $aFields );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Triggers of the steps
* @param string $sProcessUID
* @param string $sTaskUID
* @return boolean
*/
public function stepsTriggers ($sProcessUID = '', $sTaskUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$oTask = new Task();
$aFields = $oTask->load( $sTaskUID );
$_SESSION['PROCESS'] = $sProcessUID;
$_SESSION['TASK'] = $sTaskUID;
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'view', 'steps/triggers_Tree' );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Add a new task
* @param string $sProcessUID
* @param integer $iX
* @param integer $iY
* @return string
*/
public function addTask ($sProcessUID = '', $iX = 0, $iY = 0, $iWidth = 165, $iHeight = 40)
{
try {
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'TAS_UID' );
$oCriteria->add( TaskPeer::PRO_UID, $sProcessUID );
$oDataset = TaskPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$aTasks = array ();
$iTaskNumber = 0;
while ($oDataset->next()) {
$aRow = $oDataset->getRow();
$aTasks[] = $aRow["TAS_UID"];
$iTaskNumber = $iTaskNumber + 1;
}
if ($iTaskNumber > 0) {
$criteria = new Criteria( "workflow" );
$criteria->addSelectColumn( ContentPeer::CON_LANG );
$criteria->addSelectColumn( ContentPeer::CON_VALUE );
$criteria->add( ContentPeer::CON_ID, $aTasks, Criteria::IN );
$criteria->add( ContentPeer::CON_CATEGORY, "TAS_TITLE" );
$rsSQLCON = ContentPeer::doSelectRS( $criteria );
$rsSQLCON->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$numMaxLang = 0;
$numMax = 0;
while ($rsSQLCON->next()) {
$row = $rsSQLCON->getRow();
$conLang = $row["CON_LANG"];
$conValue = $row["CON_VALUE"];
if (preg_match( "/^\S+\s(\d+)$/", $conValue, $matches )) {
$n = intval( $matches[1] );
if ($conLang == SYS_LANG) {
if ($n > $numMaxLang) {
$numMaxLang = $n;
}
} else {
if ($n > $numMax) {
$numMax = $n;
}
}
}
}
if ($numMaxLang > 0) {
$numMax = $numMaxLang;
}
if ($numMax > 0 && $numMax > $iTaskNumber) {
$iTaskNumber = $numMax + 1;
} else {
$iTaskNumber = $iTaskNumber + 1;
}
} else {
$iTaskNumber = 1;
}
$oTask = new Task();
$oNewTask->label = G::LoadTranslation( 'ID_TASK' ) . ' ' . $iTaskNumber;
$oNewTask->uid = $oTask->create( array ('PRO_UID' => $sProcessUID,'TAS_TITLE' => $oNewTask->label,'TAS_POSX' => $iX,'TAS_POSY' => $iY,'TAS_WIDTH' => $iWidth,'TAS_HEIGHT' => $iHeight
) );
$oNewTask->statusIcons = array ();
$oNewTask->statusIcons[] = array ('label' => '','icon' => '/images/alert.gif','message' => '','url' => ''
);
//$oJSON = new Services_JSON();
return Bootstrap::json_encode($oNewTask);//$oJSON->encode( $oNewTask );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Edit the task properties
* @param string $sTaskUID
* @return boolean
*/
public function editTaskProperties ($sTaskUID = '', $iForm = 1, $iIndex = 0)
{
$sw_template = false;
try {
switch ($iForm) {
case 1:
$sFilename = 'tasks/tasks_Definition.xml';
break;
case 2:
$sFilename = 'tasks/tasks_AssignmentRules.xml';
break;
case 3:
$sFilename = 'tasks/tasks_TimingControl.xml';
break;
case 4:
$sFilename = 'tasks/tasks_Owner.xml';
break;
case 5:
$sFilename = 'tasks/tasks_Permissions.xml';
break;
case 6:
$sFilename = 'tasks/tasks_Labels.xml';
break;
case 7:
$sFilename = 'tasks/tasks_Notifications.xml';
break;
default:
//if the $iForm is not one of the defaults then search under Plugins for an extended property. By JHL Jan 18, 2011
$oPluginRegistry = & PMPluginRegistry::getSingleton();
$activePluginsForTaskProperties = $oPluginRegistry->getTaskExtendedProperties();
$oPM->taskOptions = array ();
foreach ($activePluginsForTaskProperties as $key => $taskPropertiesInfo) {
$id = $taskPropertiesInfo->sNamespace . "--" . $taskPropertiesInfo->sName;
if ($id == $iForm) {
$sFilename = $taskPropertiesInfo->sPage;
$sw_template = true;
}
}
//$sFilename = 'tasks/tasks_Owner.xml';
break;
}
$oTask = new Task();
$aFields = $oTask->load( $sTaskUID );
$aFields['INDEX'] = $iIndex;
$aFields['IFORM'] = $iForm;
$aFields['LANG'] = SYS_LANG;
/**
* Task Notifications *
*/
if ($iForm == 7 || $iForm == 1) {
G::loadClass( 'processes' );
$files = Processes::getProcessFiles( $aFields['PRO_UID'], 'mail' );
$templates = array ();
$templates[] = 'dummy';
foreach ($files as $file) {
$templates[] = array ('FILE' => $file['filename'],'NAME' => $file['filename']
);
}
global $_DBArray;
$_DBArray['_TEMPLATES1'] = $templates;
$_SESSION['_DBArray'] = $_DBArray;
if ($iForm == 7) {
// Additional configuration
G::loadClass( 'configuration' );
$oConf = new Configurations();
$oConf->loadConfig( $x, 'TAS_EXTRA_PROPERTIES', $aFields['TAS_UID'], '', '' );
$conf = $oConf->aConfig;
if (isset( $conf['TAS_DEF_MESSAGE_TYPE'] ) && isset( $conf['TAS_DEF_MESSAGE_TYPE'] )) {
$aFields['TAS_DEF_MESSAGE_TYPE'] = $conf['TAS_DEF_MESSAGE_TYPE'];
$aFields['TAS_DEF_MESSAGE_TEMPLATE'] = $conf['TAS_DEF_MESSAGE_TEMPLATE'];
}
}
}
if ($iForm == 3) { //Load Calendar Information
$calendar = new Calendar();
$calendarObj = $calendar->getCalendarList( true, true );
global $_DBArray;
$_DBArray['availableCalendars'] = $calendarObj['array'];
$_SESSION['_DBArray'] = $_DBArray;
$calendarInfo = $calendar->getCalendarFor( $sTaskUID, $sTaskUID, $sTaskUID );
//If the function returns a DEFAULT calendar it means that this object doesn't have assigned any calendar
$aFields['TAS_CALENDAR'] = $calendarInfo['CALENDAR_APPLIED'] != 'DEFAULT' ? $calendarInfo['CALENDAR_UID'] : "";
}
if ($iForm == 2) {
switch ($aFields["TAS_ASSIGN_TYPE"]) {
case "SELF_SERVICE":
$aFields["TAS_ASSIGN_TYPE"] = (!empty($aFields["TAS_GROUP_VARIABLE"]))? "SELF_SERVICE_EVALUATE" : $aFields["TAS_ASSIGN_TYPE"];
break;
}
}
global $G_PUBLISH;
G::LoadClass( 'xmlfield_InputPM' );
$G_PUBLISH = new Publisher();
if ($sw_template) {
$G_PUBLISH->AddContent( 'view', $sFilename );
} else {
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', $sFilename, '', $aFields );
}
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Save the tasks positions
* @param string $sTaskUID
* @param integer $iX
* @param integer $iY
* @return integer
*/
public function saveTaskPosition ($sTaskUID = '', $iX = 0, $iY = 0)
{
try {
$oTask = new Task();
$aFields = $oTask->load( $sTaskUID );
$aFields['TAS_UID'] = $sTaskUID;
$aFields['TAS_POSX'] = $iX;
$aFields['TAS_POSY'] = $iY;
return $oTask->update( $aFields );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Delete a task
* @param string $sTaskUID
* @return boolean
*/
public function deleteTask ($sTaskUID = '')
{
try {
$oTasks = new Tasks();
$oTasks->deleteTask( $sTaskUID );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Delete a gateway
* @param string $sProcessUID
* @param string $sGatewayUID
* @return boolean
*/
public function deleteGateway ($sProcessUID = '', $sGatewayUID = '')
{
try {
//First get all routes information related to $sGatewayUID
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'ROU_UID' );
$oCriteria->add( RoutePeer::PRO_UID, $sProcessUID );
$oCriteria->add( RoutePeer::GAT_UID, $sGatewayUID );
$oDataset = RoutePeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$aRoutes[] = $aRow['ROU_UID'];
$oDataset->next();
}
$oGateway = new Gateway();
if ($oGateway->gatewayExists( $sGatewayUID )) {
$oTasks = new Tasks();
$res = $oGateway->remove( $sGatewayUID );
if ($res) {
$oRoute = new Route();
foreach ($aRoutes as $sRouteId) {
$oRoute->remove( $sRouteId );
}
}
}
return;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Add a gateway
* @param string $sProcessUID
* @param string $sGatewayUID
* @return boolean
*/
public function addGateway ($oData)
{
try {
$oGateway = new Gateway();
$aData = array ();
$aData['PRO_UID'] = $oData->pro_uid;
$aData['GAT_X'] = $oData->position->x;
$aData['GAT_Y'] = $oData->position->y;
$aData['GAT_TYPE'] = $oData->gat_type;
$sGat_uid = $oData->gat_uid;
$oGatewayData = GatewayPeer::retrieveByPK( $sGat_uid );
if (is_null( $oGatewayData )) {
$sGat_uid = $oGateway->create( $aData );
} else {
$aData['GAT_UID'] = $sGat_uid;
if (isset( $oData->tas_from ))
$aData['TAS_UID'] = $oData->tas_from;
if (isset( $oData->tas_to ))
$aData['GAT_NEXT_TASK'] = $oData->tas_to;
$oGateway->update( $aData );
}
$oEncode->uid = $sGat_uid;
//$oJSON = new Services_JSON();
return Bootstrap::json_encode($oEncode);//$oJSON->encode( $oEncode );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Add a new guide
* @param string $sProcessUID
* @param integer $iPosition
* @param string $sDirection
* @return string
*/
public function addGuide ($sProcessUID = '', $iPosition = 0, $sDirection = 'vertical')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$oSL = new SwimlanesElements();
switch ($sDirection) {
case 'vertical':
$oNewGuide->uid = $oSL->create( array ('PRO_UID' => $sProcessUID,'SWI_TYPE' => 'LINE','SWI_X' => $iPosition,'SWI_Y' => 0
) );
break;
case 'horizontal':
$oNewGuide->uid = $oSL->create( array ('PRO_UID' => $sProcessUID,'SWI_TYPE' => 'LINE','SWI_X' => 0,'SWI_Y' => $iPosition
) );
break;
}
//$oJSON = new Services_JSON();
return Bootstrap::json_encode($oNewGuide);//$oJSON->encode( $oNewGuide );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Save the guide position
* @param string $sSEUID
* @param integer $iPosition
* @param string $sDirection
* @return integer
*/
public function saveGuidePosition ($sSEUID = '', $iPosition = 0, $sDirection = 'vertical')
{
try {
$oSL = new SwimlanesElements();
$aFields = $oSL->load( $sSEUID );
switch ($sDirection) {
case 'vertical':
return $oSL->update( array ('SWI_UID' => $sSEUID,'SWI_X' => $iPosition
) );
break;
case 'horizontal':
return $oSL->update( array ('SWI_UID' => $sSEUID,'SWI_Y' => $iPosition
) );
break;
}
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Delete a guide
* @param string $sUID
* @return boolean
*/
public function deleteGuide ($sSEUID = '')
{
try {
$oSL = new SwimlanesElements();
$aFields = $oSL->load( $sSEUID );
$oSL->remove( $sSEUID );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Delete all guides
* @param string $sProcessUID
* @return boolean
*/
public function deleteGuides ($sProcessUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( SwimlanesElementsPeer::PRO_UID, $sProcessUID );
$oCriteria->add( SwimlanesElementsPeer::SWI_TYPE, 'LINE' );
SwimlanesElementsPeer::doDelete( $oCriteria );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Add a new text
* @param string $sProcessUID
* @param string $sLabel
* @param integer $iX
* @param integer $iY
* @return string
*/
public function addText ($sProcessUID = '', $sLabel = '', $iX = 0, $iY = 0, $sNext_uid = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$oSL = new SwimlanesElements();
$oNewText->uid = $oSL->create( array ('PRO_UID' => $sProcessUID,'SWI_TYPE' => 'TEXT','SWI_TEXT' => $sLabel,'SWI_X' => $iX,'SWI_Y' => $iY,'SWI_NEXT_UID' => $sNext_uid
) );
//$oJSON = new Services_JSON();
return Bootstrap::json_encode($oNewText);//$oJSON->encode( $oNewText );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Update a text
* @param string $sSEUID
* @param string $sLabel
* @return integer
*/
public function updateText ($sSEUID = '', $sLabel = '', $sNext_uid = '')
{
try {
$oSL = new SwimlanesElements();
$aFields = $oSL->load( $sSEUID );
return $oSL->update( array ('SWI_UID' => $sSEUID,'SWI_TEXT' => $sLabel,'SWI_NEXT_UID' => $sNext_uid
) );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Save the text position
* @param string $sSEUID
* @param integer $iX
* @param integer $iY
* @return integer
*/
public function saveTextPosition ($sSEUID = '', $iX = 0, $iY = 0)
{
try {
$oSL = new SwimlanesElements();
$aFields = $oSL->load( $sSEUID );
return $oSL->update( array ('SWI_UID' => $sSEUID,'SWI_X' => $iX,'SWI_Y' => $iY
) );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Delete a text
* @param string $sSEUID
* @return boolean
*/
public function deleteText ($sSEUID = '')
{
try {
$oSL = new SwimlanesElements();
$aFields = $oSL->load( $sSEUID );
$oSL->remove( $sSEUID );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Save the gateways positions
* @param string $sGatewayUID
* @param integer $iX
* @param integer $iY
* @return integer
*/
public function saveGatewayPosition ($sGatewayUID = '', $iX = 0, $iY = 0)
{
try {
$oGateway = new Gateway();
$aFields = $oGateway->load( $sGatewayUID );
$aFields['GAT_UID'] = $sGatewayUID;
$aFields['GAT_X'] = $iX;
$aFields['GAT_Y'] = $iY;
return $oGateway->update( $aFields );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Presents a small list of dynaforms of the process
* @param string $sProcessUID
* @return boolean
*/
public function dynaformsList ($sProcessUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'dynaforms/dynaforms_ShortList', $this->getDynaformsCriteria( $sProcessUID ), $aFields );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Return the dynaforms list criteria object
* @param string $sProcessUID
* @return object
*/
public function getDynaformsCriteria ($sProcessUID = '')
{
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( DynaformPeer::DYN_UID );
$oCriteria->addSelectColumn( DynaformPeer::PRO_UID );
$oCriteria->addSelectColumn( DynaformPeer::DYN_TYPE );
$oCriteria->addAsColumn( 'DYN_TITLE', 'C1.CON_VALUE' );
$oCriteria->addAsColumn( 'DYN_DESCRIPTION', 'C2.CON_VALUE' );
$oCriteria->addAlias( 'C1', 'CONTENT' );
$oCriteria->addAlias( 'C2', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (DynaformPeer::DYN_UID,'C1.CON_ID'
);
$aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter
);
$aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$aConditions = array ();
$aConditions[] = array (DynaformPeer::DYN_UID,'C2.CON_ID'
);
$aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'DYN_DESCRIPTION' . $sDelimiter
);
$aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID );
$oDataset = DynaformPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$dynaformArray = array ();
$dynaformArray[] = array ('d' => 'char'
);
while ($aRow = $oDataset->getRow()) {
if (($aRow['DYN_TITLE'] == null) || ($aRow['DYN_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label
$aRow['DYN_TITLE'] = Content::Load( "DYN_TITLE", "", $aRow['DYN_UID'], SYS_LANG );
}
if (($aRow['DYN_DESCRIPTION'] == null) || ($aRow['DYN_DESCRIPTION'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label
$aRow['DYN_DESCRIPTION'] = Content::Load( "DYN_DESCRIPTION", "", $aRow['DYN_UID'], SYS_LANG );
}
$dynaformArray[] = $aRow;
$oDataset->next();
}
return $oCriteria;
}
/**
* getDynaformsList
*
* @param string $sProcessUID
* @return array $dynaformArray
*/
public function getDynaformsList ($sProcessUID = '')
{
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( DynaformPeer::DYN_UID );
$oCriteria->addSelectColumn( DynaformPeer::PRO_UID );
$oCriteria->addSelectColumn( DynaformPeer::DYN_TYPE );
$oCriteria->addAsColumn( 'DYN_TITLE', 'C1.CON_VALUE' );
$oCriteria->addAsColumn( 'DYN_DESCRIPTION', 'C2.CON_VALUE' );
$oCriteria->addAlias( 'C1', 'CONTENT' );
$oCriteria->addAlias( 'C2', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (DynaformPeer::DYN_UID,'C1.CON_ID'
);
$aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter
);
$aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$aConditions = array ();
$aConditions[] = array (DynaformPeer::DYN_UID,'C2.CON_ID'
);
$aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'DYN_DESCRIPTION' . $sDelimiter
);
$aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID );
$oDataset = DynaformPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$dynaformArray = array ();
while ($aRow = $oDataset->getRow()) {
if (($aRow['DYN_TITLE'] == null) || ($aRow['DYN_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label
$aRow['DYN_TITLE'] = Content::Load( "DYN_TITLE", "", $aRow['DYN_UID'], SYS_LANG );
}
if (($aRow['DYN_DESCRIPTION'] == null) || ($aRow['DYN_DESCRIPTION'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label
$aRow['DYN_DESCRIPTION'] = Content::Load( "DYN_DESCRIPTION", "", $aRow['DYN_UID'], SYS_LANG );
}
$dynaformArray[] = $aRow;
$oDataset->next();
}
return $dynaformArray;
}
/*
* Presents a small list of output documents of the process
* @param string $sProcessUID
* @return boolean
*/
public function outputdocsList ($sProcessUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'outputdocs/outputdocs_ShortList', $this->getOutputDocumentsCriteria( $sProcessUID ), $aFields );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Return the output documents list criteria object
* @param string $sProcessUID
* @return object
*/
public function getOutputDocumentsCriteria ($sProcessUID = '')
{
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_UID );
$oCriteria->addSelectColumn( OutputDocumentPeer::OUT_DOC_TYPE );
$oCriteria->addSelectColumn( OutputDocumentPeer::PRO_UID );
$oCriteria->addAsColumn( 'OUT_DOC_TITLE', 'C1.CON_VALUE' );
$oCriteria->addAsColumn( 'OUT_DOC_DESCRIPTION', 'C2.CON_VALUE' );
$oCriteria->addAlias( 'C1', 'CONTENT' );
$oCriteria->addAlias( 'C2', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C1.CON_ID'
);
$aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'OUT_DOC_TITLE' . $sDelimiter
);
$aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$aConditions = array ();
$aConditions[] = array (OutputDocumentPeer::OUT_DOC_UID,'C2.CON_ID'
);
$aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'OUT_DOC_DESCRIPTION' . $sDelimiter
);
$aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( OutputDocumentPeer::PRO_UID, $sProcessUID );
$oDataset = OutputDocumentPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$outputDocArray = array ();
$outputDocArray[] = array ('d' => 'char'
);
while ($aRow = $oDataset->getRow()) {
if (($aRow['OUT_DOC_TITLE'] == null) || ($aRow['OUT_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label
$outputDocument = new OutputDocument();
$outputDocumentObj = $outputDocument->load( $aRow['OUT_DOC_UID'] );
$aRow['OUT_DOC_TITLE'] = $outputDocumentObj['OUT_DOC_TITLE'];
$aRow['OUT_DOC_DESCRIPTION'] = $outputDocumentObj['OUT_DOC_DESCRIPTION'];
}
$outputDocArray[] = $aRow;
$oDataset->next();
}
global $_DBArray;
$_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : '');
$_DBArray['outputDocArray'] = $outputDocArray;
$_SESSION['_DBArray'] = $_DBArray;
G::LoadClass( 'ArrayPeer' );
$oCriteria = new Criteria( 'dbarray' );
$oCriteria->setDBArrayTable( 'outputDocArray' );
return $oCriteria;
}
/*
* Presents a small list of input documents of the process
* @param string $sProcessUID Process UID
* @return void
*/
public function inputdocsList ($sProcessUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'inputdocs/inputdocs_ShortList', $this->getInputDocumentsCriteria( $sProcessUID ), $aFields );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Return the input documents list criteria object
* @param string $sProcessUID
* @return object
*/
public function getInputDocumentsCriteria ($sProcessUID = '')
{
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID );
$oCriteria->addSelectColumn( InputDocumentPeer::PRO_UID );
$oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C1.CON_VALUE' );
$oCriteria->addAsColumn( 'INP_DOC_DESCRIPTION', 'C2.CON_VALUE' );
$oCriteria->addAlias( 'C1', 'CONTENT' );
$oCriteria->addAlias( 'C2', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C1.CON_ID'
);
$aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter
);
$aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$aConditions = array ();
$aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C2.CON_ID'
);
$aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'INP_DOC_DESCRIPTION' . $sDelimiter
);
$aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID );
$oDataset = InputDocumentPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$inputDocArray = "";
$inputDocArray[] = array ('INP_DOC_UID' => 'char','PRO_UID' => 'char','INP_DOC_TITLE' => 'char','INP_DOC_DESCRIPTION' => 'char'
);
while ($aRow = $oDataset->getRow()) {
if (($aRow['INP_DOC_TITLE'] == null) || ($aRow['INP_DOC_TITLE'] == "")) { // There is no transaltion for this Document name, try to get/regenerate the label
$inputDocument = new InputDocument();
$inputDocumentObj = $inputDocument->load( $aRow['INP_DOC_UID'] );
$aRow['INP_DOC_TITLE'] = $inputDocumentObj['INP_DOC_TITLE'];
$aRow['INP_DOC_DESCRIPTION'] = $inputDocumentObj['INP_DOC_DESCRIPTION'];
}
$inputDocArray[] = $aRow;
$oDataset->next();
}
global $_DBArray;
$_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : '');
$_DBArray['inputDocArrayMain'] = $inputDocArray;
$_SESSION['_DBArray'] = $_DBArray;
G::LoadClass( 'ArrayPeer' );
$oCriteria = new Criteria( 'dbarray' );
$oCriteria->setDBArrayTable( 'inputDocArrayMain' );
return $oCriteria;
}
/*
* Presents a small list of triggers of the process
* @param string $sProcessUID
* @return void
*/
public function triggersList ($sProcessUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'triggers/triggers_ShortList', $this->getTriggersCriteria( $sProcessUID ), $aFields );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Return the triggers list criteria object
* @param string $sProcessUID
* @return object
*/
public function getTriggersCriteria ($sProcessUID = '')
{
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( TriggersPeer::TRI_UID );
$oCriteria->addSelectColumn( TriggersPeer::PRO_UID );
$oCriteria->addAsColumn( 'TRI_TITLE', 'C1.CON_VALUE' );
$oCriteria->addAsColumn( 'TRI_DESCRIPTION', 'C2.CON_VALUE' );
$oCriteria->addAlias( 'C1', 'CONTENT' );
$oCriteria->addAlias( 'C2', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (TriggersPeer::TRI_UID,'C1.CON_ID'
);
$aConditions[] = array ('C1.CON_CATEGORY',$sDelimiter . 'TRI_TITLE' . $sDelimiter
);
$aConditions[] = array ('C1.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$aConditions = array ();
$aConditions[] = array (TriggersPeer::TRI_UID,'C2.CON_ID'
);
$aConditions[] = array ('C2.CON_CATEGORY',$sDelimiter . 'TRI_TITLE' . $sDelimiter
);
$aConditions[] = array ('C2.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( TriggersPeer::PRO_UID, $sProcessUID );
$oCriteria->addAscendingOrderByColumn( 'TRI_TITLE' );
$oDataset = TriggersPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$triggersArray = "";
$triggersArray[] = array ('TRI_UID' => 'char','PRO_UID' => 'char','TRI_TITLE' => 'char','TRI_DESCRIPTION' => 'char'
);
while ($aRow = $oDataset->getRow()) {
if (($aRow['TRI_TITLE'] == null) || ($aRow['TRI_TITLE'] == "")) { // There is no transaltion for this Trigger name, try to get/regenerate the label
$triggerO = new Triggers();
$triggerObj = $triggerO->load( $aRow['TRI_UID'] );
$aRow['TRI_TITLE'] = $triggerObj['TRI_TITLE'];
$aRow['TRI_DESCRIPTION'] = $triggerObj['TRI_DESCRIPTION'];
}
$triggersArray[] = $aRow;
$oDataset->next();
}
return $oCriteria;
}
/*
* Return the triggers list in a array
* @param string $sProcessUID
* @return array
*/
public function getTriggers ($sProcessUID = '')
{
$aTriggers = Array ();
$oCriteria = $this->getTriggersCriteria( $sProcessUID );
$oDataset = RoutePeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
while ($oDataset->next())
array_push( $aTriggers, $oDataset->getRow() );
return $aTriggers;
}
/*
* Presents a small list of Scheduled Tasks of the process
* @param string $sProcessUID
* @return void
*/
public function caseSchedulerList ($sProcessUID = '')
{
try {
/* $oCaseScheduler = new CaseScheduler();
$aRows = $oCaseScheduler->getAll();
//$oCaseScheduler->caseSchedulerCron();
// g::pr($aRows); die;
$fieldNames = Array(
'SCH_UID' => 'char',
'SCH_NAME' => 'char',
'PRO_UID' => 'char',
'TAS_UID' => 'char',
'SCH_TIME_NEXT_RUN' => 'char',
'SCH_LAST_RUN_TIME' => 'char',
'SCH_STATE' => 'char',
'SCH_LAST_STATE' => 'char',
'USR_UID' => 'char',
'SCH_OPTION' => 'char',
'SCH_START_TIME' => 'char',
'SCH_START_DATE' => 'char',
'SCH_DAYS_PERFORM_TASK' => 'char',
'SCH_EVERY_DAYS' => 'char',
'SCH_WEEK_DAYS' => 'char',
'SCH_START_DAY' => 'char',
'SCH_MONTHS' => 'char',
'SCH_END_DATE' => 'char',
'SCH_REPEAT_EVERY' => 'char',
'SCH_REPEAT_UNTIL' => 'char',
'SCH_REPEAT_STOP_IF_RUNNING' => 'char',
'PRO_PARENT' => 'char',
'PRO_TIME' => 'char',
'PRO_TIMEUNIT' => 'char',
'PRO_STATUS' => 'char',
'PRO_TYPE_DAY' => 'char',
'PRO_TYPE' => 'char',
'PRO_ASSIGNMENT' => 'char',
'PRO_SHOW_MAP' => 'char',
'PRO_SHOW_MESSAGE' => 'char',
'PRO_SHOW_DELEGATE' => 'char',
'PRO_SHOW_DYNAFORM' => 'char',
'PRO_CATEGORY' => 'char',
'PRO_SUB_CATEGORY' => 'char',
'PRO_INDUSTRY' => 'char',
'PRO_UPDATE_DATE' => 'char',
'PRO_CREATE_DATE' => 'char',
'PRO_CREATE_USER' => 'char',
'PRO_HEIGHT' => 'char',
'PRO_WIDTH' => 'char',
'PRO_TITLE_X' => 'char',
'PRO_TITLE_Y' => 'char',
'PRO_DEBUG' => 'char',
'PRO_TITLE' => 'char',
'PRO_DESCRIPTION' => 'char',
'TAS_TYPE' => 'char',
'TAS_DURATION' => 'char',
'TAS_DELAY_TYPE' => 'char',
'TAS_TEMPORIZER' => 'char',
'TAS_TYPE_DAY' => 'char',
'TAS_TIMEUNIT' => 'char',
'TAS_ALERT' => 'char',
'TAS_PRIORITY_VARIABLE' => 'char',
'TAS_ASSIGN_TYPE' => 'char',
'TAS_ASSIGN_VARIABLE' => 'char',
'TAS_ASSIGN_LOCATION' => 'char',
'TAS_ASSIGN_LOCATION_ADHOC' => 'char',
'TAS_TRANSFER_FLY' => 'char',
'TAS_LAST_ASSIGNED' => 'char',
'TAS_USER' => 'char',
'TAS_CAN_UPLOAD' => 'char',
'TAS_VIEW_UPLOAD' => 'char',
'TAS_VIEW_ADDITIONAL_DOCUMENTATION' => 'char',
'TAS_CAN_CANCEL' => 'char',
'TAS_OWNER_APP' => 'char',
'STG_UID' => 'char',
'TAS_CAN_PAUSE' => 'char',
'TAS_CAN_SEND_MESSAGE' => 'char',
'TAS_CAN_DELETE_DOCS' => 'char',
'TAS_SELF_SERVICE' => 'char',
'TAS_START' => 'char',
'TAS_TO_LAST_USER' => 'char',
'TAS_SEND_LAST_EMAIL' => 'char',
'TAS_DERIVATION' => 'char',
'TAS_POSX' => 'char',
'TAS_POSY' => 'char',
'TAS_COLOR' => 'char',
'TAS_TITLE' => 'char',
'TAS_DESCRIPTION' => 'char',
'TAS_DEF_TITLE' => 'char',
'TAS_DEF_DESCRIPTION' => 'char',
'TAS_DEF_PROC_CODE' => 'char',
'TAS_DEF_MESSAGE' => 'char'
);
$aRows = array_merge(Array($fieldNames), $aRows);
// g::pr($aRows); die;
global $_DBArray;
$_DBArray['cases_scheduler'] = $aRows;
$_SESSION['_DBArray'] = $_DBArray;
G::LoadClass('ArrayPeer');
$oCriteria = new Criteria('dbarray');
$oCriteria->setDBArrayTable('cases_scheduler');
$G_PUBLISH = new Publisher;
$G_PUBLISH->AddContent('propeltable', 'paged-table', '/cases/cases_Scheduler_List', $oCriteria, array('CONFIRM' => G::LoadTranslation('ID_MSG_CONFIRM_DELETE_CASE_SCHEDULER')));
G::RenderPage('publish');
//return true; */
$schedulerPath = SYS_URI . "cases/cases_Scheduler_List";
$html = "";
echo $html;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Presents a small list of Scheduled Task Logs of the process
* @param string $sProcessUID
* @return void
*/
public function logCaseSchedulerList ($sProcessUID = '')
{
try {
$oLogCaseScheduler = new LogCasesScheduler();
$aRows = $oLogCaseScheduler->getAll();
$fieldNames = Array ('PRO_UID' => 'char','TAS_UID' => 'char','USR_NAME' => 'char','EXEC_DATE' => 'char','EXEC_HOUR' => 'char','RESULT' => 'char','SCH_UID' => 'char','WS_CREATE_CASE_STATUS' => 'char','WS_ROUTE_CASE_STATUS' => 'char'
);
$aRows = array_merge( Array ($fieldNames
), $aRows );
$_DBArray['log_cases_scheduler'] = $aRows;
$_SESSION['_DBArray'] = $_DBArray;
$oCriteria = new Criteria( 'dbarray' );
$oCriteria->setDBArrayTable( 'log_cases_scheduler' );
$G_PUBLISH = new Publisher();
$G_PUBLISH->ROWS_PER_PAGE = 10;
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'cases/cases_Scheduler_Log', $oCriteria );
$G_PUBLISH->oPropelTable->rowsPerPage = 10;
G::RenderPage( 'publish', 'blank' );
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Presents a small list of messages of the process
* @param string $sProcessUID
* @return void
*/
public function messagesList ($sProcessUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
global $G_PUBLISH;
$aFields['PRO_UID'] = $sProcessUID;
$aFields['SYS_LANG'] = SYS_LANG;
$G_PUBLISH = new Publisher();
//$G_PUBLISH->AddContent('pagedtable', 'paged-table', 'messages/messages_ShortList', $this->getMessagesCriteria($sProcessUID));
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Presents a small list of report tables of the process
* @param string $sProcessUID
* @return void
*/
public function reportTablesList ($sProcessUID = '')
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'reportTables/reportTables_ShortList', $this->getReportTablesCriteria( $sProcessUID ), $aFields );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Return the report tables list criteria object
* @param string $sProcessUID
* @return object
*/
public function getReportTablesCriteria ($sProcessUID = '')
{
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( ReportTablePeer::REP_TAB_UID );
$oCriteria->addSelectColumn( ReportTablePeer::PRO_UID );
$oCriteria->addSelectColumn( ReportTablePeer::REP_TAB_NAME );
$oCriteria->addSelectColumn( ReportTablePeer::REP_TAB_TYPE );
$oCriteria->addSelectColumn( ReportTablePeer::REP_TAB_CONNECTION );
// $oCriteria->addAsColumn ( 'REP_TAB_TITLE', 'C.CON_VALUE' );
$oCriteria->addAsColumn( 'REP_TAB_TITLE', "CASE WHEN C.CON_VALUE IS NULL THEN (SELECT DISTINCT MAX(A.CON_VALUE) FROM CONTENT A WHERE A.CON_ID = REPORT_TABLE.REP_TAB_UID ) ELSE C.CON_VALUE END " );
$oCriteria->addAlias( 'C', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (ReportTablePeer::REP_TAB_UID,'C.CON_ID'
);
$aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'REP_TAB_TITLE' . $sDelimiter
);
$aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( ReportTablePeer::PRO_UID, $sProcessUID );
return $oCriteria;
}
/*
* Show the current pattern
* @param string $sProcessUID
* @param string $sTaskUID
* @return boolean
*/
public function currentPattern ($sProcessUID, $sTaskUID)
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$oTask = new Task();
$aFields = $oTask->load( $sTaskUID );
$aFields = array ();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( RoutePeer::PRO_UID, $sProcessUID );
$oCriteria->add( RoutePeer::TAS_UID, $sTaskUID );
$oCriteria->addAscendingOrderByColumn( RoutePeer::ROU_CASE );
$oDataset = RoutePeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aRow = $oDataset->getRow();
$params = array ();
// $sql = BasePeer::createSelectSql($oCriteria, $params);
// echo $sProcessUID."-".$sTaskUID."-";
// echo $sql;
// var_dump($aRow);
// die();
if (is_array( $aRow )) {
$aFields['ROU_TYPE'] = $aRow['ROU_TYPE'];
$aFields['ROU_TYPE_OLD'] = $aRow['ROU_TYPE'];
switch ($aRow['ROU_TYPE']) {
case 'SEQUENTIAL':
case 'SEC-JOIN':
$aFields['ROU_UID'] = $aRow['ROU_UID'];
$aFields['ROU_NEXT_TASK'] = $aRow['ROU_NEXT_TASK'];
$aFields['ROU_TO_LAST_USER'] = $aRow['ROU_TO_LAST_USER'];
if ($aRow['ROU_TYPE'] == 'SEQUENTIAL') {
$sXmlform = 'patterns_Sequential';
} else {
$sXmlform = 'patterns_ParallelJoin';
}
break;
case 'SELECT':
$aFields['GRID_SELECT_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_SELECT_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_SELECT_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_SELECT_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER'];
while ($aRow = $oDataset->getRow()) {
$aFields['GRID_SELECT_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_SELECT_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_SELECT_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_SELECT_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER'];
$oDataset->next();
}
$sXmlform = 'patterns_Select';
break;
case 'EVALUATE':
G::LoadClass( 'xmlfield_InputPM' );
$aFields['GRID_EVALUATE_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_EVALUATE_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_EVALUATE_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_EVALUATE_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER'];
while ($aRow = $oDataset->getRow()) {
$aFields['GRID_EVALUATE_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_EVALUATE_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_EVALUATE_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_EVALUATE_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER'];
$oDataset->next();
}
$sXmlform = 'patterns_Evaluate';
break;
case 'PARALLEL':
$aFields['GRID_PARALLEL_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_PARALLEL_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
while ($aRow = $oDataset->getRow()) {
$aFields['GRID_PARALLEL_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_PARALLEL_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$oDataset->next();
}
$sXmlform = 'patterns_Parallel';
break;
case 'PARALLEL-BY-EVALUATION':
G::LoadClass( 'xmlfield_InputPM' );
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
while ($aRow = $oDataset->getRow()) {
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_OPTIONAL'][$aRow['ROU_CASE']] = $aRow['ROU_OPTIONAL'];
$oDataset->next();
}
$sXmlform = 'patterns_ParallelByEvaluation';
break;
case 'DISCRIMINATOR':
G::LoadClass( 'xmlfield_InputPM' );
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_OPTIONAL'][$aRow['ROU_CASE']] = $aRow['ROU_OPTIONAL'];
G::LoadClass( 'tasks' );
$oTasks = new Tasks();
$routeData = $oTasks->getRouteByType( $sProcessUID, $aRow['ROU_NEXT_TASK'], $aRow['ROU_TYPE'] );
$aFields['ROUTE_COUNT'] = count( $routeData );
$sXmlform = 'patterns_Discriminator';
break;
default:
throw new Exception( G::loadTranslation( 'ID_INVALID_ROU_TYPE_DEFINITION_ON_ROUTE_TABLE' ) );
break;
}
}
$aFields['action'] = 'savePattern';
$aFields['LANG'] = SYS_LANG;
$aFields['PROCESS'] = $sProcessUID;
$aFields['TASK'] = $sTaskUID;
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'patterns/' . $sXmlform, '', $aFields, '../patterns/patterns_Ajax' );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$aMessage = array ();
$aMessage['MESSAGE'] = $oError->getMessage();
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', $aMessage );
G::RenderPage( 'publish', 'blank' );
die();
}
}
/*
* Show the new pattern form
* @param string $sProcessUID
* @param string $sTaskUID
* @param string $sNextTask
* @param string $sType
* @return boolean
*/
public function newPattern ($sProcessUID, $sTaskUID, $sNextTask, $sType)
{
try {
$oProcess = new Process();
$aFields = $oProcess->load( $sProcessUID );
$oTask = new Task();
$aFields = $oTask->load( $sTaskUID );
$aFields = array ();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( RoutePeer::PRO_UID, $sProcessUID );
$oCriteria->add( RoutePeer::TAS_UID, $sTaskUID );
$oCriteria->addAscendingOrderByColumn( RoutePeer::ROU_CASE );
$oDataset = RoutePeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aRow = $oDataset->getRow();
if (is_array( $aRow )) {
$aFields['ROU_TYPE_OLD'] = $aRow['ROU_TYPE'];
if ($sType == $aFields['ROU_TYPE_OLD']) {
switch ($sType) {
case 'SELECT':
$aFields['GRID_SELECT_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_SELECT_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_SELECT_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_SELECT_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER'];
while ($aRow = $oDataset->getRow()) {
$aFields['GRID_SELECT_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_SELECT_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_SELECT_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_SELECT_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER'];
$oDataset->next();
}
break;
case 'EVALUATE':
$aFields['GRID_EVALUATE_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_EVALUATE_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_EVALUATE_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_EVALUATE_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER'];
while ($aRow = $oDataset->getRow()) {
$aFields['GRID_EVALUATE_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_EVALUATE_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_EVALUATE_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_EVALUATE_TYPE']['ROU_TO_LAST_USER'][$aRow['ROU_CASE']] = $aRow['ROU_TO_LAST_USER'];
$oDataset->next();
}
break;
case 'PARALLEL':
$aFields['GRID_PARALLEL_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_PARALLEL_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
while ($aRow = $oDataset->getRow()) {
$aFields['GRID_PARALLEL_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_PARALLEL_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$oDataset->next();
}
break;
case 'PARALLEL-BY-EVALUATION':
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
while ($aRow = $oDataset->getRow()) {
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$oDataset->next();
}
break;
case 'DISCRIMINATOR':
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_OPTIONAL'][$aRow['ROU_CASE']] = $aRow['ROU_OPTIONAL'];
while ($aRow = $oDataset->getRow()) {
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_UID'][$aRow['ROU_CASE']] = $aRow['ROU_UID'];
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_NEXT_TASK'][$aRow['ROU_CASE']] = $aRow['ROU_NEXT_TASK'];
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_CONDITION'][$aRow['ROU_CASE']] = $aRow['ROU_CONDITION'];
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_OPTIONAL'][$aRow['ROU_CASE']] = $aRow['ROU_OPTIONAL'];
$oDataset->next();
}
break;
}
} else {
}
}
switch ($sType) {
case 'SEQUENTIAL':
case 'SEC-JOIN':
$aFields['ROU_NEXT_TASK'] = $sNextTask;
break;
case 'SELECT':
$iRow = (isset( $aFields['GRID_SELECT_TYPE'] ) ? count( $aFields['GRID_SELECT_TYPE']['ROU_UID'] ) + 1 : 0);
$aFields['GRID_SELECT_TYPE']['ROU_UID'][$iRow] = '';
$aFields['GRID_SELECT_TYPE']['ROU_NEXT_TASK'][$iRow] = $sNextTask;
$aFields['GRID_SELECT_TYPE']['ROU_CONDITION'][$iRow] = '';
$aFields['GRID_SELECT_TYPE']['ROU_TO_LAST_USER'][$iRow] = '';
break;
case 'EVALUATE':
$iRow = (isset( $aFields['GRID_PARALLEL_EVALUATION_TYPE'] ) ? count( $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'] ) + 1 : 0);
$aFields['GRID_EVALUATE_TYPE']['ROU_UID'][$iRow] = '';
$aFields['GRID_EVALUATE_TYPE']['ROU_NEXT_TASK'][$iRow] = $sNextTask;
$aFields['GRID_EVALUATE_TYPE']['ROU_CONDITION'][$iRow] = '';
$aFields['GRID_EVALUATE_TYPE']['ROU_TO_LAST_USER'][$iRow] = '';
break;
case 'PARALLEL':
$iRow = (isset( $aFields['GRID_PARALLEL_TYPE'] ) ? count( $aFields['GRID_PARALLEL_TYPE']['ROU_UID'] ) + 1 : 0);
$aFields['GRID_PARALLEL_TYPE']['ROU_UID'][$iRow] = '';
$aFields['GRID_PARALLEL_TYPE']['ROU_NEXT_TASK'][$iRow] = $sNextTask;
$aFields['GRID_PARALLEL_TYPE']['ROU_CONDITION'][$iRow] = '';
$aFields['GRID_PARALLEL_TYPE']['ROU_TO_LAST_USER'][$iRow] = '';
break;
case 'PARALLEL-BY-EVALUATION':
$iRow = (isset( $aFields['GRID_PARALLEL_EVALUATION_TYPE'] ) ? count( $aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'] ) + 1 : 0);
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_UID'][$iRow] = '';
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_NEXT_TASK'][$iRow] = $sNextTask;
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_CONDITION'][$iRow] = '';
$aFields['GRID_PARALLEL_EVALUATION_TYPE']['ROU_TO_LAST_USER'][$iRow] = '';
break;
case 'DISCRIMINATOR':
$iRow = (isset( $aFields['GRID_DISCRIMINATOR_TYPE'] ) ? count( $aFields['GRID_DISCRIMINATOR_TYPE']['ROU_UID'] ) + 1 : 0);
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_UID'][$iRow] = '';
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_NEXT_TASK'][$iRow] = $sNextTask;
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_CONDITION'][$iRow] = '';
$aFields['GRID_DISCRIMINATOR_TYPE']['ROU_TO_LAST_USER'][$iRow] = '';
break;
}
$aFields['action'] = 'savePattern';
$aFields['LANG'] = SYS_LANG;
$aFields['PROCESS'] = $sProcessUID;
$aFields['TASK'] = $sTaskUID;
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'patterns/patterns_Current', '', $aFields, '../patterns/patterns_Ajax' );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/**
* getNumberOfRoutes
*
* @param string $sProcessUID Default value empty
* @param string $sTaskUID Default value empty
* @param string $sNextTask Default value empty
* @param string $sType Default value empty
* @return intenger ( int ) $aRow ['ROUTE_NUMBER']
*/
public function getNumberOfRoutes ($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '')
{
try {
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'COUNT(*) AS ROUTE_NUMBER' );
$oCriteria->add( RoutePeer::PRO_UID, $sProcessUID );
$oCriteria->add( RoutePeer::TAS_UID, $sTaskUID );
$oCriteria->add( RoutePeer::ROU_NEXT_TASK, $sNextTask );
$oCriteria->add( RoutePeer::ROU_TYPE, $sType );
$oDataset = RoutePeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aRow = $oDataset->getRow();
return (int) $aRow['ROUTE_NUMBER'];
} catch (Exception $oError) {
throw ($oError);
}
}
/**
* saveNewPattern
*
* @param string $sProcessUID Default value empty
* @param string $sTaskUID Default value empty
* @param string $sNextTask Default value empty
* @param string $sType Default value empty
* @param boolean $sDelete
* @return array void
*/
public function saveNewPattern ($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '', $sDelete = '')
{
try {
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( 'COUNT(*) AS ROUTE_NUMBER' );
$oCriteria->addSelectColumn( 'GAT_UID AS GATEWAY_UID' );
$oCriteria->add( RoutePeer::PRO_UID, $sProcessUID );
$oCriteria->add( RoutePeer::TAS_UID, $sTaskUID );
$oCriteria->add( RoutePeer::ROU_TYPE, $sType );
$oDataset = RoutePeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aRow = $oDataset->getRow();
$aFields['PRO_UID'] = $sProcessUID;
$aFields['TAS_UID'] = $sTaskUID;
$aFields['ROU_NEXT_TASK'] = $sNextTask;
$aFields['ROU_TYPE'] = $sType;
$aFields['ROU_CASE'] = (int) $aRow['ROUTE_NUMBER'] + 1;
$sGatewayUID = $aRow['GATEWAY_UID'];
if ($sDelete && $sGatewayUID != '') {
$oGateway = new Gateway();
$oGateway->remove( $sGatewayUID );
}
//Getting Gateway UID after saving gateway
//if($sType != 'SEQUENTIAL' && $sGatewayUID == '' && $sDelete == '1')
if ($sType != 'SEQUENTIAL') {
$oProcessMap = new processMap();
$sGatewayUID = $oProcessMap->saveNewGateway( $sProcessUID, $sTaskUID, $sNextTask );
}
$aFields['GAT_UID'] = (isset( $sGatewayUID )) ? $sGatewayUID : '';
$oRoute = new Route();
$oRoute->create( $aFields );
} catch (Exception $oError) {
throw ($oError);
}
}
/**
* saveNewGateway
*
* @param string $sProcessUID Default value empty
* @param string $sTaskUID Default value empty
* @param string $sNextTask Default value empty
* @param string $sType Default value empty (Route Type)
* @return string $sGatewayUID
*/
public function saveNewGateway ($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '')
{
try {
$oTask = new Task();
$aTaskDetails = $oTask->load( $sTaskUID );
$aFields['PRO_UID'] = $sProcessUID;
$aFields['TAS_UID'] = $sTaskUID;
$aFields['GAT_NEXT_TASK'] = $sNextTask;
$aFields['GAT_X'] = $aTaskDetails['TAS_POSX'] + $aTaskDetails['TAS_WIDTH'] / 2;
$aFields['GAT_Y'] = $aTaskDetails['TAS_POSY'] + $aTaskDetails['TAS_HEIGHT'] + 10;
switch ($sType) {
case 'PARALLEL':
$aFields['GAT_TYPE'] = 'bpmnGatewayParallel';
break;
case 'SEC-JOIN':
$aFields['GAT_TYPE'] = 'bpmnGatewayParallel';
break;
case 'EVALUATE':
$aFields['GAT_TYPE'] = 'bpmnGatewayExclusiveData';
break;
case 'PARALLEL-BY-EVALUATION':
$aFields['GAT_TYPE'] = 'bpmnGatewayInclusive';
break;
case 'SELECT':
$aFields['GAT_TYPE'] = 'bpmnGatewayExclusiveData';
break;
case 'DISCRIMINATOR':
$aFields['GAT_TYPE'] = 'bpmnGatewayComplex';
break;
}
$oGateway = new Gateway();
$sGatewayUID = $oGateway->create( $aFields );
return $sGatewayUID;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Delete a derivation rule
* @param string $sTaskUID
* @return boolean
*/
public function deleteDerivation ($sTaskUID = '')
{
try {
$oTask = new Task();
$aFields = $oTask->load( $sTaskUID );
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( RoutePeer::TAS_UID, $sTaskUID );
RoutePeer::doDelete( $oCriteria );
return true;
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/**
* getConditionProcessList
*
* @return object $oCriteria
*/
public function getConditionProcessList ()
{
$aProcesses = array ();
$aProcesses[] = array ('PRO_UID' => 'char','PRO_TITLE' => 'char','PRO_DESCRIPTION' => 'char','PRO_STATUS' => 'char','PRO_CATEGORY' => 'char','PRO_CATEGORY_LABEL' => 'char'
);
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( ProcessPeer::PRO_UID );
$oCriteria->add( ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL );
$oDataset = ProcessPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$oProcess = new Process();
while ($aRow = $oDataset->getRow()) {
$aProcess = $oProcess->load( $aRow['PRO_UID'] );
$aProcesses[] = array ('PRO_UID' => $aProcess['PRO_UID'],'PRO_TITLE' => $aProcess['PRO_TITLE'],'PRO_DESCRIPTION' => $aProcess['PRO_DESCRIPTION'],'PRO_STATUS' => ($aProcess['PRO_STATUS'] == 'ACTIVE' ? G::LoadTranslation( 'ID_ACTIVE' ) : G::LoadTranslation( 'ID_INACTIVE' )),'PRO_CATEGORY' => $aProcess['PRO_CATEGORY'],'PRO_CATEGORY_LABEL' => $aProcess['PRO_CATEGORY_LABEL']
);
$oDataset->next();
}
global $_DBArray;
$_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : '');
$_DBArray['processes'] = $aProcesses;
$_SESSION['_DBArray'] = $_DBArray;
G::LoadClass( 'ArrayPeer' );
$oCriteria = new Criteria( 'dbarray' );
$oCriteria->setDBArrayTable( 'processes' );
return $oCriteria;
}
/*
* Show the dynaforms for the supervisors
* @param string $sProcessUID
* @return boolean
*/
public function supervisorDynaforms ($sProcessUID)
{
try {
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'dynaforms/dynaforms_Supervisor', $this->getSupervisorDynaformsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID
) );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/**
* supervisorInputs
*
* @param string $sProcessUID
* @return boolean true
* throw Exception $oError
*/
public function supervisorInputs ($sProcessUID)
{
try {
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'inputdocs/inputdocs_Supervisor', $this->getSupervisorInputsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID
) );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/**
* webEntry
*
* @param string $sProcessUID
* @return boolean true
* throw Exception $oError
*/
public function webEntry ($sProcessUID)
{
try {
global $G_PUBLISH;
global $G_FORM;
$G_PUBLISH = new Publisher();
if (G::is_https())
$http = 'https://';
else
$http = 'http://';
$link = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/' . $sProcessUID . '/';
$row = array ();
$c = 0;
/*
$oTask = new Task ( );
$TaskFields = $oTask->kgetassigType ( $sProcessUID , $tas='');
*/
$TaskFields['TAS_ASSIGN_TYPE'] = '';
$row[] = array ('W_TITLE' => '','W_DELETE' => '','TAS_ASSIGN_TYPE' => $TaskFields['TAS_ASSIGN_TYPE']
);
if (is_dir( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $sProcessUID )) {
$dir = opendir( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $sProcessUID );
while ($archivo = readdir( $dir )) { //print $archivo." ****
";
if ($archivo != '.') {
if ($archivo != '..') {
$one = 0;
$two = 0;
$alink = $link . $archivo;
$one = count( explode( 'wsClient.php', $archivo ) );
$two = count( explode( 'Post.php', $archivo ) );
if ($one == 1 && $two == 1) {
$arlink = "" . $alink . "";
$linkdelete = sprintf( "delete", $alink, $archivo, $sProcessUID );
$row[] = array ('W_LINK' => $arlink,'W_FILENAME' => $archivo,'W_PRO_UID' => $sProcessUID
);
}
}
}
}
}
global $_DBArray;
$_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : '');
$_DBArray['reports'] = $row;
$_SESSION['_DBArray'] = $_DBArray;
G::LoadClass( 'ArrayPeer' );
$oCriteria = new Criteria( 'dbarray' );
$oCriteria->setDBArrayTable( 'reports' );
//if ($TaskFields['TAS_ASSIGN_TYPE'] == 'BALANCED') {
//$G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_WebEntry', '', array('PRO_UID' => $sProcessUID, 'LANG' => SYS_LANG));
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'dynaforms/dynaforms_WebEntryList', $oCriteria, array ('PRO_UID' => $sProcessUID,'LANG' => SYS_LANG
) );
/* }else{
$aMessage['MESSAGE'] = G::loadTranslation( 'WEBEN_ONLY_BALANCED' );
$G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'login/showMessage', '',$aMessage );
} */
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/**
* webEntry_new
*
* @param string $sProcessUID
* @return boolean true
* throw Exception $oError
*/
public function webEntry_new ($sProcessUID)
{
try {
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'dynaforms/dynaforms_WebEntry', '', array ('PRO_UID' => $sProcessUID,'LANG' => SYS_LANG
) );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/**
* webEntryByTask
*
* @param string $sProcessUID
* @return boolean true
* throw Exception $oError
*/
// function webEntryByTask($sProcessUID, $sEventUID) {
// $event = new Event();
// $event->load($sEventUID);
// $task_uid = $event->getEvnTasUidTo();
// $tasks = new Tasks();
// $tasks->get
// $link = $sProcessUID.'/'.str_replace ( ' ', '_', str_replace ( '/', '_',$task_uid));
//
// return $link;
// }
/*
* Return the supervisors dynaforms list criteria object
* @param string $sProcessUID
* @return object
*/
public function getSupervisorDynaformsCriteria ($sProcessUID = '')
{
$sDelimiter = DBAdapter::getStringDelimiter();
$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->addAsColumn( 'DYN_TITLE', 'C.CON_VALUE' );
$oCriteria->addAlias( 'C', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (StepSupervisorPeer::STEP_UID_OBJ,DynaformPeer::DYN_UID
);
$aConditions[] = array (StepSupervisorPeer::STEP_TYPE_OBJ,$sDelimiter . 'DYNAFORM' . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$aConditions = array ();
$aConditions[] = array (DynaformPeer::DYN_UID,'C.CON_ID'
);
$aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter
);
$aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( StepSupervisorPeer::PRO_UID, $sProcessUID );
$oCriteria->add( StepSupervisorPeer::STEP_TYPE_OBJ, 'DYNAFORM' );
$oCriteria->addAscendingOrderByColumn( StepSupervisorPeer::STEP_POSITION );
return $oCriteria;
}
/*
* Return the supervisors dynaforms list criteria object
* @param string $sProcessUID
* @return object
*/
public function getSupervisorInputsCriteria ($sProcessUID = '')
{
$sDelimiter = DBAdapter::getStringDelimiter();
$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->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' );
$oCriteria->addAlias( 'C', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (StepSupervisorPeer::STEP_UID_OBJ,InputDocumentPeer::INP_DOC_UID
);
$aConditions[] = array (StepSupervisorPeer::STEP_TYPE_OBJ,$sDelimiter . 'INPUT_DOCUMENT' . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$aConditions = array ();
$aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID'
);
$aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter
);
$aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( StepSupervisorPeer::PRO_UID, $sProcessUID );
$oCriteria->add( StepSupervisorPeer::STEP_TYPE_OBJ, 'INPUT_DOCUMENT' );
$oCriteria->addAscendingOrderByColumn( StepSupervisorPeer::STEP_POSITION );
return $oCriteria;
}
/*
* Show the available dynaforms for the supervisors
* @param string $sProcessUID
* @return boolean
*/
public function availableSupervisorDynaforms ($sProcessUID)
{
try {
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'dynaforms/dynaforms_AvailableSupervisorDynaforms', $this->getAvailableSupervisorDynaformsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID
) );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Show the available input documents for the supervisors
* @param string $sProcessUID
* @return boolean
*/
public function availableSupervisorInputs ($sProcessUID)
{
try {
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'inputdocs/inputdocs_AvailableSupervisorInputs', $this->getAvailableSupervisorInputsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID
) );
G::RenderPage( 'publish', 'raw' );
return true;
} catch (Exception $oError) {
throw ($oError);
}
}
/*
* Return the available supervisors dynaforms list criteria object
* @param string $sProcessUID
* @return object
*/
public function getAvailableSupervisorDynaformsCriteria ($sProcessUID = '')
{
$oCriteria = $this->getSupervisorDynaformsCriteria( $sProcessUID );
$oDataset = StepSupervisorPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aUIDS = array ();
while ($aRow = $oDataset->getRow()) {
$aUIDS[] = $aRow['STEP_UID_OBJ'];
$oDataset->next();
}
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( DynaformPeer::DYN_UID );
$oCriteria->addSelectColumn( DynaformPeer::PRO_UID );
$oCriteria->addAsColumn( 'DYN_TITLE', 'C.CON_VALUE' );
$oCriteria->addAlias( 'C', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (DynaformPeer::DYN_UID,'C.CON_ID'
);
$aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'DYN_TITLE' . $sDelimiter
);
$aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( DynaformPeer::PRO_UID, $sProcessUID );
$oCriteria->add( DynaformPeer::DYN_TYPE, 'xmlform' );
$oCriteria->add( DynaformPeer::DYN_UID, $aUIDS, Criteria::NOT_IN );
return $oCriteria;
}
/*
* Return the available supervisors input documents list criteria object
* @param string $sProcessUID
* @return object
*/
public function getAvailableSupervisorInputsCriteria ($sProcessUID = '')
{
$oCriteria = $this->getSupervisorInputsCriteria( $sProcessUID );
$oDataset = StepSupervisorPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aUIDS = array ();
while ($aRow = $oDataset->getRow()) {
$aUIDS[] = $aRow['STEP_UID_OBJ'];
$oDataset->next();
}
$sDelimiter = DBAdapter::getStringDelimiter();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( InputDocumentPeer::INP_DOC_UID );
$oCriteria->addSelectColumn( InputDocumentPeer::PRO_UID );
$oCriteria->addAsColumn( 'INP_DOC_TITLE', 'C.CON_VALUE' );
$oCriteria->addAlias( 'C', 'CONTENT' );
$aConditions = array ();
$aConditions[] = array (InputDocumentPeer::INP_DOC_UID,'C.CON_ID'
);
$aConditions[] = array ('C.CON_CATEGORY',$sDelimiter . 'INP_DOC_TITLE' . $sDelimiter
);
$aConditions[] = array ('C.CON_LANG',$sDelimiter . SYS_LANG . $sDelimiter
);
$oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN );
$oCriteria->add( InputDocumentPeer::PRO_UID, $sProcessUID );
$oCriteria->add( InputDocumentPeer::INP_DOC_UID, $aUIDS, Criteria::NOT_IN );
return $oCriteria;
}
/**
* assignSupervisorStep
*
* @param string $sProcessUID
* @param string $sObjType
* @param string $sObjUID
* @return void
*/
public function assignSupervisorStep ($sProcessUID, $sObjType, $sObjUID)
{
$oStepSupervisor = new StepSupervisor();
$oStepSupervisor->create( array ('PRO_UID' => $sProcessUID,'STEP_TYPE_OBJ' => $sObjType,'STEP_UID_OBJ' => $sObjUID,'STEP_POSITION' => $oStepSupervisor->getNextPosition( $sProcessUID, $sObjType )
) );
}
/**
* removeSupervisorStep
*
* @param string $sStepUID
* @param string $sProcessUID
* @param string $sObjType
* @param string $sObjUID
* @param integer $iPosition
* @return void
*/
public function removeSupervisorStep ($sStepUID, $sProcessUID, $sObjType, $sObjUID, $iPosition)
{
$oStepSupervisor = new StepSupervisor();
$oStepSupervisor->remove( $sStepUID );
$oStepSupervisor->reorderPositions( $sProcessUID, $iPosition, $sObjType );
}
/**
* listProcessesUser
*
* @param string $sProcessUID
* @return object(Criteria) $oCriteria
*/
public function listProcessesUser($sProcessUID) {
$aResp = array(
array(
'LA_PU_UID' => 'char',
'LA_PRO_UID' => 'char',
'LA_USR_UID' => 'char',
'LA_PU_NAME' => 'char',
'LA_PU_TYPE_NAME' => 'char')
);
// Groups
$oCriteria = new Criteria('workflow');
$oCriteria->addSelectColumn(ProcessUserPeer::PU_UID);
$oCriteria->addSelectColumn(ProcessUserPeer::USR_UID);
$oCriteria->addSelectColumn(ProcessUserPeer::PRO_UID);
$oCriteria->addAsColumn('GRP_TITLE', ContentPeer::CON_VALUE);
$aConditions [] = array(ProcessUserPeer::USR_UID, ContentPeer::CON_ID);
$aConditions [] = array(ContentPeer::CON_CATEGORY, DBAdapter::getStringDelimiter () . 'GRP_TITLE' . DBAdapter::getStringDelimiter ());
$aConditions [] = array(ContentPeer::CON_LANG, DBAdapter::getStringDelimiter () . SYS_LANG . DBAdapter::getStringDelimiter ());
$oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
$oCriteria->add(ProcessUserPeer::PU_TYPE, 'GROUP_SUPERVISOR');
$oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID);
$oCriteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE);
$oDataset = ProcessUserPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$aResp[] = array(
'LA_PU_UID' => $aRow['PU_UID'],
'LA_PRO_UID' => $aRow['PRO_UID'],
'LA_USR_UID' => $aRow['USR_UID'],
'LA_PU_NAME' => $aRow['GRP_TITLE'],
'LA_PU_TYPE_NAME' => 'Group');
$oDataset->next();
}
// 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_EMAIL);
$oCriteria->addJoin(ProcessUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN);
$oCriteria->add(ProcessUserPeer::PU_TYPE, 'SUPERVISOR');
$oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID);
$oCriteria->addAscendingOrderByColumn(UsersPeer::USR_FIRSTNAME);
$oDataset = ProcessUserPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$aResp[] = array(
'LA_PU_UID' => $aRow['PU_UID'],
'LA_PRO_UID' => $aRow['PRO_UID'],
'LA_USR_UID' => $aRow['USR_UID'],
'LA_PU_NAME' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'],
'LA_PU_TYPE_NAME' => 'User');
$oDataset->next();
}
global $_DBArray;
$_DBArray['data'] = $aResp;
$_SESSION['_DBArray'] = $_DBArray;
$LiCriteria = new Criteria('dbarray');
$LiCriteria->setDBArrayTable('data');
return $LiCriteria;
}
/**
* listNoProcessesUser
*
* @param string $sProcessUID
* @return object(Criteria) $oCriteria
*/
public function listNoProcessesUser ($sProcessUID)
{
G::LoadSystem('rbac');
$memcache = & PMmemcached::getSingleton(SYS_SYS);
$oCriteria = new Criteria('workflow');
$oCriteria->addSelectColumn(ProcessUserPeer::USR_UID);
$oCriteria->addSelectColumn(ProcessUserPeer::PU_TYPE);
$oCriteria->add(ProcessUserPeer::PRO_UID, $sProcessUID);
$oCriteria->add(ProcessUserPeer::PU_TYPE, '%SUPERVISOR%', Criteria::LIKE);
$oDataset = ProcessUserPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
$aUIDS = array();
$aGRUS = array();
while ($aRow = $oDataset->getRow()) {
if ($aRow['PU_TYPE'] == 'SUPERVISOR') {
$aUIDS [] = $aRow ['USR_UID'];
} else {
$aGRUS [] = $aRow ['USR_UID'];
}
$oDataset->next();
}
$aRespLi = array(
array(
'UID' => 'char',
'USER_GROUP' => 'char',
'TYPE_UID' => 'char',
'PRO_UID' => 'char')
);
$oCriteria = new Criteria('workflow');
$oCriteria->addSelectColumn(GroupwfPeer::GRP_UID);
$oCriteria->addAsColumn('GRP_TITLE', ContentPeer::CON_VALUE);
$aConditions [] = array(GroupwfPeer::GRP_UID, ContentPeer::CON_ID);
$aConditions [] = array(ContentPeer::CON_CATEGORY, DBAdapter::getStringDelimiter () . 'GRP_TITLE' . DBAdapter::getStringDelimiter ());
$aConditions [] = array(ContentPeer::CON_LANG, DBAdapter::getStringDelimiter () . SYS_LANG . DBAdapter::getStringDelimiter ());
$oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
$oCriteria->add(GroupwfPeer::GRP_UID, $aGRUS, Criteria::NOT_IN);
$oCriteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE);
$oDataset = GroupwfPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$aRespLi[] = array( 'UID' => $aRow['GRP_UID'],
'USER_GROUP' => $aRow['GRP_TITLE'],
'TYPE_UID' => 'Group',
'PRO_UID' => $sProcessUID);
$oDataset->next();
}
$sDelimiter = DBAdapter::getStringDelimiter ();
$oCriteria = new Criteria('workflow');
$oCriteria->addSelectColumn(UsersPeer::USR_UID);
$oCriteria->add(UsersPeer::USR_UID, $aUIDS, Criteria::NOT_IN);
$oDataset = UsersPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
$aUIDS = array();
$oRBAC = RBAC::getSingleton ();
while ($aRow = $oDataset->getRow()) {
$memKey = 'rbacSession' . session_id();
if ( ($oRBAC->aUserInfo = $memcache->get($memKey)) === false ) {
$oRBAC->loadUserRolePermission($oRBAC->sSystem, $aRow ['USR_UID']);
$memcache->set( $memKey, $oRBAC->aUserInfo, PMmemcached::EIGHT_HOURS );
}
$aPermissions = $oRBAC->aUserInfo [$oRBAC->sSystem] ['PERMISSIONS'];
$bInclude = false;
foreach ($aPermissions as $aPermission) {
if ($aPermission ['PER_CODE'] == 'PM_SUPERVISOR') {
$bInclude = true;
}
}
if ($bInclude) {
$aUIDS [] = $aRow ['USR_UID'];
}
$oDataset->next();
}
$oCriteria = new Criteria('workflow');
$oCriteria->addSelectColumn(UsersPeer::USR_UID);
$oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME);
$oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME);
$oCriteria->add(UsersPeer::USR_UID, $aUIDS, Criteria::IN);
$oCriteria->addAscendingOrderByColumn(UsersPeer::USR_FIRSTNAME);
$oDataset = UsersPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$aRespLi[] = array('UID' => $aRow['USR_UID'],
'USER_GROUP' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'],
'TYPE_UID' => 'User',
'PRO_UID' => $sProcessUID);
$oDataset->next();
}
global $_DBArray;
$_DBArray['data'] = $aRespLi;
$_SESSION['_DBArray'] = $_DBArray;
$LsCriteria = new Criteria('dbarray');
$LsCriteria->setDBArrayTable('data');
return $LsCriteria;
}
/**
* assignProcessUser
*
* @param string $sProcessUID
* @param string $sUsrUID
* @return void
*/
public function assignProcessUser($sProcessUID, $sUsrUID, $sTypeUID)
{
$oProcessUser = new ProcessUser ( );
$puType = 'SUPERVISOR';
if ($sTypeUID == 'Group') {
$puType = 'GROUP_SUPERVISOR';
}
$oProcessUser->create(array('PU_UID' => G::generateUniqueID (), 'PRO_UID' => $sProcessUID, 'USR_UID' => $sUsrUID, 'PU_TYPE' => $puType));
}
/**
* removeProcessUser
*
* @param string $sPUUID
* @return void
*/
public function removeProcessUser ($sPUUID)
{
$oProcessUser = new ProcessUser();
$oProcessUser->remove( $sPUUID );
}
/**
* getObjectsPermissionsCriteria
*
* @param string $sProcessUID
* @return object(Criteria) $oCriteria
*/
public function getObjectsPermissionsCriteria ($sProcessUID)
{
G::LoadClass( 'case' );
Cases::verifyTable();
$aObjectsPermissions = array ();
$aObjectsPermissions[] = array ('OP_UID' => 'char','TASK_TARGET' => 'char','GROUP_USER' => 'char','TASK_SOURCE' => 'char','OBJECT_TYPE' => 'char','OBJECT' => 'char','PARTICIPATED' => 'char','ACTION' => 'char','OP_CASE_STATUS' => 'char'
);
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_UID );
$oCriteria->addSelectColumn( ObjectPermissionPeer::TAS_UID );
$oCriteria->addSelectColumn( ObjectPermissionPeer::USR_UID );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_USER_RELATION );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_TASK_SOURCE );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_PARTICIPATE );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_OBJ_TYPE );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_OBJ_UID );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_ACTION );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_CASE_STATUS );
$oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProcessUID );
$oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
//Obtain task target
if (($aRow['TAS_UID'] != '') && ($aRow['TAS_UID'] != '0')) {
try {
$oTask = new Task();
$aFields = $oTask->load( $aRow['TAS_UID'] );
$sTaskTarget = $aFields['TAS_TITLE'];
} catch (Exception $oError) {
$sTaskTarget = 'All Tasks';
}
} else {
$sTaskTarget = G::LoadTranslation( 'ID_ANY_TASK' );
}
//Obtain user or group
if ($aRow['OP_USER_RELATION'] == 1) {
$oUser = new Users();
$aFields = $oUser->load( $aRow['USR_UID'] );
$sUserGroup = $aFields['USR_FIRSTNAME'] . ' ' . $aFields['USR_LASTNAME'] . ' (' . $aFields['USR_USERNAME'] . ')';
} else {
$oGroup = new Groupwf();
if ($aRow['USR_UID'] != '') {
try {
$aFields = $oGroup->load( $aRow['USR_UID'] );
$sUserGroup = $aFields['GRP_TITLE'];
} catch (Exception $oError) {
$sUserGroup = '(GROUP DELETED)';
}
} else {
$sUserGroup = G::LoadTranslation( 'ID_ANY' );
}
}
//Obtain task source
if (($aRow['OP_TASK_SOURCE'] != '') && ($aRow['OP_TASK_SOURCE'] != '0')) {
try {
$oTask = new Task();
$aFields = $oTask->load( $aRow['OP_TASK_SOURCE'] );
$sTaskSource = $aFields['TAS_TITLE'];
} catch (Exception $oError) {
$sTaskSource = 'All Tasks';
}
} else {
$sTaskSource = G::LoadTranslation( 'ID_ANY_TASK' );
}
//Obtain object and type
switch ($aRow['OP_OBJ_TYPE']) {
case 'ALL':
$sObjectType = G::LoadTranslation( 'ID_ALL' );
$sObject = G::LoadTranslation( 'ID_ALL' );
break;
case 'ANY': //For backward compatibility (some process with ANY instead of ALL
$sObjectType = G::LoadTranslation( 'ID_ALL' );
$sObject = G::LoadTranslation( 'ID_ALL' );
break;
/* case 'ANY_DYNAFORM':
$sObjectType = G::LoadTranslation('ID_ANY_DYNAFORM');
$sObject = G::LoadTranslation('ID_ALL');
break;
case 'ANY_INPUT':
$sObjectType = G::LoadTranslation('ID_ANY_INPUT');
$sObject = G::LoadTranslation('ID_ALL');
break;
case 'ANY_OUTPUT':
$sObjectType = G::LoadTranslation('ID_ANY_OUTPUT');
$sObject = G::LoadTranslation('ID_ALL');
break; */
case 'DYNAFORM':
$sObjectType = G::LoadTranslation( 'ID_DYNAFORM' );
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oDynaform = new Dynaform();
$aFields = $oDynaform->load( $aRow['OP_OBJ_UID'] );
$sObject = $aFields['DYN_TITLE'];
} else {
$sObject = G::LoadTranslation( 'ID_ALL' );
}
break;
case 'INPUT':
$sObjectType = G::LoadTranslation( 'ID_INPUT_DOCUMENT' );
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oInputDocument = new InputDocument();
$aFields = $oInputDocument->load( $aRow['OP_OBJ_UID'] );
$sObject = $aFields['INP_DOC_TITLE'];
} else {
$sObject = G::LoadTranslation( 'ID_ALL' );
}
break;
case 'OUTPUT':
$sObjectType = G::LoadTranslation( 'ID_OUTPUT_DOCUMENT' );
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oOutputDocument = new OutputDocument();
$aFields = $oOutputDocument->load( $aRow['OP_OBJ_UID'] );
$sObject = $aFields['OUT_DOC_TITLE'];
} else {
$sObject = G::LoadTranslation( 'ID_ALL' );
}
break;
case 'CASES_NOTES':
$sObjectType = G::LoadTranslation( 'ID_CASES_NOTES' );
$sObject = 'N/A';
break;
default:
$sObjectType = G::LoadTranslation( 'ID_ALL' );
$sObject = G::LoadTranslation( 'ID_ALL' );
break;
}
//Participated
if ($aRow['OP_PARTICIPATE'] == 0) {
$sParticipated = G::LoadTranslation( 'ID_NO' );
} else {
$sParticipated = G::LoadTranslation( 'ID_YES' );
}
//Obtain action (permission)
$sAction = G::LoadTranslation( 'ID_' . $aRow['OP_ACTION'] );
//Add to array
$aObjectsPermissions[] = array ('OP_UID' => $aRow['OP_UID'],'TASK_TARGET' => $sTaskTarget,'GROUP_USER' => $sUserGroup,'TASK_SOURCE' => $sTaskSource,'OBJECT_TYPE' => $sObjectType,'OBJECT' => $sObject,'PARTICIPATED' => $sParticipated,'ACTION' => $sAction,'OP_CASE_STATUS' => $aRow['OP_CASE_STATUS']
);
$oDataset->next();
}
global $_DBArray;
$_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : '');
$_DBArray['objectsPermissions'] = $aObjectsPermissions;
$_SESSION['_DBArray'] = $_DBArray;
G::LoadClass( 'ArrayPeer' );
$oCriteria = new Criteria( 'dbarray' );
$oCriteria->setDBArrayTable( 'objectsPermissions' );
return $oCriteria;
}
//new functions
public function getAllObjectPermissionCount ()
{
$c = $this->tmpCriteria;
$c->clearSelectColumns();
$c->addSelectColumn( 'COUNT(*)' );
$oDataset = ObjectPermissionPeer::doSelectRS( $c );
$oDataset->next();
$aRow = $oDataset->getRow();
if (is_array( $aRow ))
return $aRow[0];
else
return 0;
}
public function getExtObjectsPermissions ($start, $limit, $sProcessUID)
{
G::LoadClass( 'case' );
Cases::verifyTable();
$aObjectsPermissions = array ();
//$aObjectsPermissions [] = array('OP_UID' => 'char', 'TASK_TARGET' => 'char', 'GROUP_USER' => 'char', 'TASK_SOURCE' => 'char', 'OBJECT_TYPE' => 'char', 'OBJECT' => 'char', 'PARTICIPATED' => 'char', 'ACTION' => 'char', 'OP_CASE_STATUS' => 'char');
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_UID );
$oCriteria->addSelectColumn( ObjectPermissionPeer::TAS_UID );
$oCriteria->addSelectColumn( ObjectPermissionPeer::USR_UID );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_USER_RELATION );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_TASK_SOURCE );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_PARTICIPATE );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_OBJ_TYPE );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_OBJ_UID );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_ACTION );
$oCriteria->addSelectColumn( ObjectPermissionPeer::OP_CASE_STATUS );
$oCriteria->add( ObjectPermissionPeer::PRO_UID, $sProcessUID );
$this->tmpCriteria = clone $oCriteria;
if ($start != '')
$oCriteria->setOffset( $start );
if ($limit != '')
$oCriteria->setLimit( $limit );
$oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
//Obtain task target
if (($aRow['TAS_UID'] != '') && ($aRow['TAS_UID'] != '0')) {
try {
$oTask = new Task();
$aFields = $oTask->load( $aRow['TAS_UID'] );
$sTaskTarget = $aFields['TAS_TITLE'];
} catch (Exception $oError) {
$sTaskTarget = 'All Tasks';
}
} else {
$sTaskTarget = G::LoadTranslation( 'ID_ANY_TASK' );
}
//Obtain user or group
if ($aRow['OP_USER_RELATION'] == 1) {
$oUser = new Users();
$aFields = $oUser->load( $aRow['USR_UID'] );
$sUserGroup = $aFields['USR_FIRSTNAME'] . ' ' . $aFields['USR_LASTNAME'] . ' (' . $aFields['USR_USERNAME'] . ')';
} else {
$oGroup = new Groupwf();
if ($aRow['USR_UID'] != '') {
try {
$aFields = $oGroup->load( $aRow['USR_UID'] );
$sUserGroup = $aFields['GRP_TITLE'];
} catch (Exception $oError) {
$sUserGroup = '(GROUP DELETED)';
}
} else {
$sUserGroup = G::LoadTranslation( 'ID_ANY' );
}
}
//Obtain task source
if (($aRow['OP_TASK_SOURCE'] != '') && ($aRow['OP_TASK_SOURCE'] != '0')) {
try {
$oTask = new Task();
$aFields = $oTask->load( $aRow['OP_TASK_SOURCE'] );
$sTaskSource = $aFields['TAS_TITLE'];
} catch (Exception $oError) {
$sTaskSource = 'All Tasks';
}
} else {
$sTaskSource = G::LoadTranslation( 'ID_ANY_TASK' );
}
//Obtain object and type
switch ($aRow['OP_OBJ_TYPE']) {
case 'ALL':
$sObjectType = G::LoadTranslation( 'ID_ALL' );
$sObject = G::LoadTranslation( 'ID_ALL' );
break;
case 'DYNAFORM':
$sObjectType = G::LoadTranslation( 'ID_DYNAFORM' );
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oDynaform = new Dynaform();
$aFields = $oDynaform->load( $aRow['OP_OBJ_UID'] );
$sObject = $aFields['DYN_TITLE'];
} else {
$sObject = G::LoadTranslation( 'ID_ALL' );
}
break;
case 'INPUT':
$sObjectType = G::LoadTranslation( 'ID_INPUT_DOCUMENT' );
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oInputDocument = new InputDocument();
$aFields = $oInputDocument->load( $aRow['OP_OBJ_UID'] );
$sObject = $aFields['INP_DOC_TITLE'];
} else {
$sObject = G::LoadTranslation( 'ID_ALL' );
}
break;
case 'OUTPUT':
$sObjectType = G::LoadTranslation( 'ID_OUTPUT_DOCUMENT' );
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oOutputDocument = new OutputDocument();
$aFields = $oOutputDocument->load( $aRow['OP_OBJ_UID'] );
$sObject = $aFields['OUT_DOC_TITLE'];
} else {
$sObject = G::LoadTranslation( 'ID_ALL' );
}
break;
}
//Participated
if ($aRow['OP_PARTICIPATE'] == 0) {
$sParticipated = G::LoadTranslation( 'ID_NO' );
} else {
$sParticipated = G::LoadTranslation( 'ID_YES' );
}
//Obtain action (permission)
$sAction = G::LoadTranslation( 'ID_' . $aRow['OP_ACTION'] );
//Add to array
$aObjectsPermissions[] = array ('OP_UID' => $aRow['OP_UID'],'TASK_TARGET' => $sTaskTarget,'GROUP_USER' => $sUserGroup,'TASK_SOURCE' => $sTaskSource,'OBJECT_TYPE' => $sObjectType,'OBJECT' => $sObject,'PARTICIPATED' => $sParticipated,'ACTION' => $sAction,'OP_CASE_STATUS' => $aRow['OP_CASE_STATUS']
);
$oDataset->next();
}
return $aObjectsPermissions;
}
/**
* objectsPermissionsList
*
* @param string $sProcessUID
* @return boolean true
*/
public function objectsPermissionsList ($sProcessUID)
{
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'processes/processes_ObjectsPermissionsList', $this->getObjectsPermissionsCriteria( $sProcessUID ), array ('PRO_UID' => $sProcessUID
) );
G::RenderPage( 'publish', 'raw' );
return true;
}
/**
* newObjectPermission
*
* @param string $sProcessUID
* @return boolean true
*/
public function newObjectPermission ($sProcessUID)
{
$usersGroups = '';
$aAllObjects = array ();
$aAllObjects[] = array ('UID' => 'char','LABEL' => 'char'
);
$aAllDynaforms = array ();
$aAllDynaforms[] = array ('UID' => 'char','LABEL' => 'char'
);
$aAllInputs = array ();
$aAllInputs[] = array ('UID' => 'char','LABEL' => 'char'
);
$aAllOutputs = array ();
$aAllOutputs[] = array ('UID' => 'char','LABEL' => 'char'
);
$oCriteria = $this->getDynaformsCriteria( $sProcessUID );
$oCriteria->add( DynaformPeer::DYN_TYPE, 'XMLFORM' );
$oDataset = DynaformPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$aRow['DYN_TITLE'] = (isset( $aRow['DYN_TITLE'] )) ? $aRow['DYN_TITLE'] : '';
$aAllObjects[] = array ('UID' => 'DYNAFORM|' . $aRow['DYN_UID'],'LABEL' => $aRow['DYN_TITLE'] . ' (' . G::LoadTranslation( 'ID_DYNAFORM' ) . ')'
);
$aAllDynaforms[] = array ('UID' => $aRow['DYN_UID'],'LABEL' => $aRow['DYN_TITLE']
);
$oDataset->next();
}
G::LoadClass( 'ArrayPeer' );
$oDataset = ArrayBasePeer::doSelectRS( $this->getInputDocumentsCriteria( $sProcessUID ) );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$aAllObjects[] = array ('UID' => 'INPUT_DOCUMENT|' . $aRow['INP_DOC_UID'],'LABEL' => $aRow['INP_DOC_TITLE'] . ' (' . G::LoadTranslation( 'ID_INPUT_DOCUMENT' ) . ')'
);
$aAllInputs[] = array ('UID' => $aRow['INP_DOC_UID'],'LABEL' => $aRow['INP_DOC_TITLE']
);
$oDataset->next();
}
G::LoadClass( 'ArrayPeer' );
$oDataset = ArrayBasePeer::doSelectRS( $this->getOutputDocumentsCriteria( $sProcessUID ) );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$aAllObjects[] = array ('UID' => 'OUTPUT_DOCUMENT|' . $aRow['OUT_DOC_UID'],'LABEL' => $aRow['OUT_DOC_TITLE'] . ' (' . G::LoadTranslation( 'ID_OUTPUT_DOCUMENT' ) . ')'
);
$aAllOutputs[] = array ('UID' => $aRow['OUT_DOC_UID'],'LABEL' => $aRow['OUT_DOC_TITLE']
);
$oDataset->next();
}
global $_DBArray;
$_DBArray = (isset( $_SESSION['_DBArray'] ) ? $_SESSION['_DBArray'] : '');
$_DBArray['allObjects'] = $aAllObjects;
$_DBArray['allDynaforms'] = $aAllDynaforms;
$_DBArray['allInputs'] = $aAllInputs;
$_DBArray['allOutputs'] = $aAllOutputs;
$_SESSION['_DBArray'] = $_DBArray;
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'processes/processes_NewObjectPermission', '', array ('GROUP_USER' => $usersGroups,'LANG' => SYS_LANG,'PRO_UID' => $sProcessUID,'ID_DELETE' => G::LoadTranslation( 'ID_DELETE' )
), 'processes_SaveObjectPermission' );
G::RenderPage( 'publish', 'raw' );
return true;
}
/**
* editObjectPermission
*
* @param string $sOP_UID
* @param string $sProcessUID
* @return void
*/
public function editObjectPermission ($sOP_UID, $sProcessUID)
{
$oCriteria = new Criteria();
$oCriteria->add( ObjectPermissionPeer::OP_UID, $sOP_UID );
$oDataset = ObjectPermissionPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aRows = $oDataset->getRow();
$oCriteria = new Criteria();
$oCriteria->add( GroupwfPeer::GRP_UID, $aRows['USR_UID'] );
if (GroupwfPeer::doCount( $oCriteria ) == 1)
$user = '2|' . $aRows['USR_UID'];
$oCriteria = new Criteria();
$oCriteria->add( UsersPeer::USR_UID, $aRows['USR_UID'] );
if (UsersPeer::doCount( $oCriteria ) == 1)
$user = '1|' . $aRows['USR_UID'];
$aFields['LANG'] = SYS_LANG;
$aFields['OP_UID'] = $aRows['OP_UID'];
$aFields['PRO_UID'] = $aRows['PRO_UID'];
$aFields['OP_CASE_STATUS'] = $aRows['OP_CASE_STATUS'];
$aFields['TAS_UID'] = $aRows['TAS_UID'];
$aFields['OP_TASK_SOURCE'] = $aRows['OP_TASK_SOURCE'];
$aFields['OP_PARTICIPATE'] = $aRows['OP_PARTICIPATE'];
$aFields['OP_OBJ_TYPE'] = $aRows['OP_OBJ_TYPE'];
$aFields['OP_ACTION'] = $aRows['OP_ACTION'];
switch ($aRows['OP_OBJ_TYPE']) {
/* case 'ANY':
$aFields['OP_OBJ_TYPE'] = '';
break; */
case 'DYNAFORM':
$aFields['DYNAFORMS'] = $aRows['OP_OBJ_UID'];
break;
case 'INPUT':
$aFields['INPUTS'] = $aRows['OP_OBJ_UID'];
break;
case 'OUTPUT':
$aFields['OUTPUTS'] = $aRows['OP_OBJ_UID'];
break;
}
$usersGroups = '