diff --git a/workflow/engine/classes/model/Event.php b/workflow/engine/classes/model/Event.php index 3cdc3f551..a48d52173 100755 --- a/workflow/engine/classes/model/Event.php +++ b/workflow/engine/classes/model/Event.php @@ -1,899 +1,927 @@ getEvnUid() == "" ) { - throw ( new Exception( "Error in getEvnDescription, the getEvnUid() can't be blank") ); - } - $lang = defined ( 'SYS_LANG' ) ? SYS_LANG : 'en'; - $this->evn_description = Content::load ( 'EVN_DESCRIPTION', '', $this->getEvnUid(), $lang ); - return $this->evn_description; - } + /** + * This value goes in the content table + * + * @var string + */ + protected $evn_description = ''; - /** - * Set the evn_description column value. - * - * @param string $v new value - * @return void - */ - public function setEvnDescription($v) - { - if ( $this->getEvnUid() == "" ) { - throw ( new Exception( "Error in setEvnDescription, the setEvnUid() can't be blank") ); - } - $v=isset($v)?((string)$v):''; - $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; - if ($this->evn_description !== $v || $v==="") { - $this->evn_description = $v; - $res = Content::addContent( 'EVN_DESCRIPTION', '', $this->getEvnUid(), $lang, $this->evn_description ); - return $res; - } - return 0; - } - - public function load($sUID) { - try { - $oEvent = EventPeer::retrieveByPK($sUID); - if (!is_null($oEvent)) { - $aFields = ''; - $aFields = $oEvent->toArray(BasePeer::TYPE_FIELDNAME); - if ($aFields ['EVN_TIME_UNIT'] == 'HOURS') { - $aFields ['EVN_TAS_ESTIMATED_DURATION'] = round($aFields ['EVN_TAS_ESTIMATED_DURATION'] * 24,2); + /** + * Get the evn_description column value. + * + * @return string + */ + public function getEvnDescription () + { + if ($this->getEvnUid() == "") { + throw (new Exception( "Error in getEvnDescription, the getEvnUid() can't be blank" )); } - $this->fromArray($aFields, BasePeer::TYPE_FIELDNAME); - $this->setNew(false); - $this->setEvnDescription($aFields['EVN_DESCRIPTION'] = $this->getEvnDescription()); - //$aFields['EVN_CONDITIONS'] = unserialize($aFields['EVN_CONDITIONS']); - $aFields['EVN_ACTION_PARAMETERS'] = unserialize($aFields['EVN_ACTION_PARAMETERS']); - - return $aFields; - } - else { - throw(new Exception('This row doesn\'t exist!')); - } - } - catch (Exception $oError) { - throw($oError); - } - } - - function create($aData) { - if (!isset($aData['EVN_UID']) || $aData['EVN_UID'] == '' ) { - $aData['EVN_UID'] = G::generateUniqueID(); + $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en'; + $this->evn_description = Content::load( 'EVN_DESCRIPTION', '', $this->getEvnUid(), $lang ); + return $this->evn_description; } - $oConnection = Propel::getConnection(EventPeer::DATABASE_NAME); - try { - $oEvent = new Event(); - $oEvent->setEvnUid( $aData['EVN_UID'] ); - $oEvent->setProUid( $aData['PRO_UID'] ); - if (isset($aData['EVN_RELATED_TO'])) { - $oEvent->setEvnRelatedTo( $aData['EVN_RELATED_TO'] ); - if ( $aData['EVN_RELATED_TO'] == 'SINGLE' ) { - if (isset($aData['TAS_UID'])) { - $oEvent->setTasUid( $aData['TAS_UID'] ); - } - $oEvent->setEvnTasUidTo( ''); - $oEvent->setEvnTasUidFrom( '' ); - } else { - $oEvent->setTasUid(''); - if (isset($aData['EVN_TAS_UID_TO'])) { - $oEvent->setEvnTasUidTo( $aData['EVN_TAS_UID_TO'] ); - } - if (isset($aData['EVN_TAS_UID_FROM'])) { - $oEvent->setEvnTasUidFrom( $aData['EVN_TAS_UID_FROM'] ); - } - } - } - - if (isset($aData['EVN_POSX'])) { - $oEvent->setEvnPosx($aData['EVN_POSX']); - } - if (isset($aData['EVN_POSY'])) { - $oEvent->setEvnPosy($aData['EVN_POSY']); - } - if (isset($aData['EVN_TYPE'])) { - $oEvent->setEvnType( $aData['EVN_TYPE'] ); - } - if (isset($aData['EVN_TIME_UNIT'])) { - $oEvent->setEvnTimeUnit($aData['EVN_TIME_UNIT']); - if (trim($aData['EVN_TIME_UNIT']) == 'HOURS') { - $aData['EVN_TAS_ESTIMATED_DURATION'] = $aData['EVN_TAS_ESTIMATED_DURATION'] / 24; - } - } - if (isset($aData['EVN_TAS_ESTIMATED_DURATION'])) { - $oEvent->setEvnTasEstimatedDuration($aData['EVN_TAS_ESTIMATED_DURATION']); - } - - if (isset($aData['EVN_WHEN_OCCURS'])) { - $oEvent->setEvnWhenOccurs( $aData['EVN_WHEN_OCCURS'] ); - } - - if (isset($aData['EVN_ACTION'])) { - $oEvent->setEvnAction( $aData['EVN_ACTION'] ); - } - - if (isset($aData['EVN_CONDITIONS'])) { - $oEvent->setEvnConditions( $aData['EVN_CONDITIONS'] ); - } - if (isset($aData['EVN_STATUS'])) { - $oEvent->setEvnStatus( $aData['EVN_STATUS'] ); - } - if (isset($aData['EVN_WHEN'])) { - $oEvent->setEvnWhen( $aData['EVN_WHEN'] ); - } - - $oEvent->setEvnMaxAttempts( 3 ); - - //start the transaction - $oConnection->begin(); - if (isset($aData['EVN_TYPE'])) { - if($aData['EVN_TYPE']==='bpmnEventEmptyEnd') { - unset($aData['TRI_UID']); - } - } - if (isset($aData['TRI_UID'])) { - $oTrigger = new Triggers(); - if ( trim($aData['TRI_UID']) === "" || ( ! $oTrigger->TriggerExists ( $aData['TRI_UID'] ))) { - //create an empty trigger - $aTrigger = array(); - $aTrigger['PRO_UID'] = $aData['PRO_UID']; - $aTrigger['TRI_TITLE'] = 'For event: ' . $aData['EVN_DESCRIPTION']; - $aTrigger['TRI_DESCRIPTION'] = 'Autogenerated ' . $aTrigger['TRI_TITLE']; - $aTrigger['TRI_WEBBOT'] = '// ' . $aTrigger['TRI_DESCRIPTION'];; - $oTrigger->create($aTrigger); - } else { - $oTrigger = TriggersPeer::retrieveByPk($aData['TRI_UID']); - } - - $oEvent->setTriUid( $oTrigger->getTriUid() ); - - $parameters = new StdClass(); - $parameters->hash = md5 ($oTrigger->getTriWebbot()); - - - if ( isset( $aData['EVN_ACTION_PARAMETERS']->SUBJECT ) ) { - $parameters->SUBJECT = $aData['EVN_ACTION_PARAMETERS']->SUBJECT; - $parameters->TO = $aData['EVN_ACTION_PARAMETERS']->TO; - $parameters->CC = $aData['EVN_ACTION_PARAMETERS']->CC; - $parameters->BCC = $aData['EVN_ACTION_PARAMETERS']->BCC; - $parameters->TEMPLATE = $aData['EVN_ACTION_PARAMETERS']->TEMPLATE; - } - - $oEvent->setEvnActionParameters( serialize ($parameters ) ); - } - - if ($oEvent->validate()) { - $iResult = $oEvent->save(); - if (isset($aData['EVN_DESCRIPTION'])) { - $oEvent->setEvnDescription($aData['EVN_DESCRIPTION']); - } - $oConnection->commit(); - return $aData['EVN_UID']; - } else { - $sMessage = ''; - $aValidationFailures = $oEvent->getValidationFailures(); - foreach($aValidationFailures as $oValidationFailure) { - $sMessage .= $oValidationFailure->getMessage() . '
'; - } - throw(new Exception('The row Event cannot be created!
' . $sMessage)); - } + /** + * Set the evn_description column value. + * + * @param string $v new value + * @return void + */ + public function setEvnDescription ($v) + { + if ($this->getEvnUid() == "") { + throw (new Exception( "Error in setEvnDescription, the setEvnUid() can't be blank" )); + } + $v = isset( $v ) ? ((string) $v) : ''; + $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en'; + if ($this->evn_description !== $v || $v === "") { + $this->evn_description = $v; + $res = Content::addContent( 'EVN_DESCRIPTION', '', $this->getEvnUid(), $lang, $this->evn_description ); + return $res; + } + return 0; } - catch (Exception $oError) { - $oConnection->rollback(); - throw($oError); - } - } - function update($aData) { - $oConnection = Propel::getConnection(EventPeer::DATABASE_NAME); - try { - $oEvent = EventPeer::retrieveByPK($aData['EVN_UID']); - if (!is_null($oEvent)) { - - //$oEvent->setProUid( $aData['PRO_UID'] ); - if(isset($aData['EVN_RELATED_TO'])) - { - $oEvent->setEvnRelatedTo( $aData['EVN_RELATED_TO'] ); - if ( $aData['EVN_RELATED_TO'] == 'SINGLE' ) { - if(isset($aData['TAS_UID']) && $aData['TAS_UID'] != '') - $oEvent->setTasUid( $aData['TAS_UID'] ); - $oEvent->setEvnTasUidTo( ''); - $oEvent->setEvnTasUidFrom( '' ); + public function load ($sUID) + { + try { + $oEvent = EventPeer::retrieveByPK( $sUID ); + if (! is_null( $oEvent )) { + $aFields = ''; + $aFields = $oEvent->toArray( BasePeer::TYPE_FIELDNAME ); + if ($aFields['EVN_TIME_UNIT'] == 'HOURS') { + $aFields['EVN_TAS_ESTIMATED_DURATION'] = round( $aFields['EVN_TAS_ESTIMATED_DURATION'] * 24, 2 ); + } + $this->fromArray( $aFields, BasePeer::TYPE_FIELDNAME ); + $this->setNew( false ); + $this->setEvnDescription( $aFields['EVN_DESCRIPTION'] = $this->getEvnDescription() ); + //$aFields['EVN_CONDITIONS'] = unserialize($aFields['EVN_CONDITIONS']); + $aFields['EVN_ACTION_PARAMETERS'] = unserialize( $aFields['EVN_ACTION_PARAMETERS'] ); + + return $aFields; + } else { + throw (new Exception( 'This row doesn\'t exist!' )); } - else { - $oEvent->setTasUid( '' ); - if(isset($aData['EVN_TAS_UID_TO'])) - $oEvent->setEvnTasUidTo( $aData['EVN_TAS_UID_TO'] ); - if(isset($aData['EVN_TAS_UID_FROM'])) - $oEvent->setEvnTasUidFrom( $aData['EVN_TAS_UID_FROM'] ); + } catch (Exception $oError) { + throw ($oError); + } + } + + function create ($aData) + { + if (! isset( $aData['EVN_UID'] ) || $aData['EVN_UID'] == '') { + $aData['EVN_UID'] = G::generateUniqueID(); + } + + $oConnection = Propel::getConnection( EventPeer::DATABASE_NAME ); + try { + $oEvent = new Event(); + $oEvent->setEvnUid( $aData['EVN_UID'] ); + $oEvent->setProUid( $aData['PRO_UID'] ); + if (isset( $aData['EVN_RELATED_TO'] )) { + $oEvent->setEvnRelatedTo( $aData['EVN_RELATED_TO'] ); + if ($aData['EVN_RELATED_TO'] == 'SINGLE') { + if (isset( $aData['TAS_UID'] )) { + $oEvent->setTasUid( $aData['TAS_UID'] ); + } + $oEvent->setEvnTasUidTo( '' ); + $oEvent->setEvnTasUidFrom( '' ); + } else { + $oEvent->setTasUid( '' ); + if (isset( $aData['EVN_TAS_UID_TO'] )) { + $oEvent->setEvnTasUidTo( $aData['EVN_TAS_UID_TO'] ); + } + if (isset( $aData['EVN_TAS_UID_FROM'] )) { + $oEvent->setEvnTasUidFrom( $aData['EVN_TAS_UID_FROM'] ); + } + } } - } - if(isset($aData['EVN_POSX'])) - $oEvent->setEvnPosx($aData['EVN_POSX']); - if(isset($aData['EVN_POSY'])) - $oEvent->setEvnPosy($aData['EVN_POSY']); + if (isset( $aData['EVN_POSX'] )) { + $oEvent->setEvnPosx( $aData['EVN_POSX'] ); + } + if (isset( $aData['EVN_POSY'] )) { + $oEvent->setEvnPosy( $aData['EVN_POSY'] ); + } + if (isset( $aData['EVN_TYPE'] )) { + $oEvent->setEvnType( $aData['EVN_TYPE'] ); + } + if (isset( $aData['EVN_TIME_UNIT'] )) { + $oEvent->setEvnTimeUnit( $aData['EVN_TIME_UNIT'] ); + if (trim( $aData['EVN_TIME_UNIT'] ) == 'HOURS') { + $aData['EVN_TAS_ESTIMATED_DURATION'] = $aData['EVN_TAS_ESTIMATED_DURATION'] / 24; + } + } + if (isset( $aData['EVN_TAS_ESTIMATED_DURATION'] )) { + $oEvent->setEvnTasEstimatedDuration( $aData['EVN_TAS_ESTIMATED_DURATION'] ); + } + + if (isset( $aData['EVN_WHEN_OCCURS'] )) { + $oEvent->setEvnWhenOccurs( $aData['EVN_WHEN_OCCURS'] ); + } + + if (isset( $aData['EVN_ACTION'] )) { + $oEvent->setEvnAction( $aData['EVN_ACTION'] ); + } + + if (isset( $aData['EVN_CONDITIONS'] )) { + $oEvent->setEvnConditions( $aData['EVN_CONDITIONS'] ); + } + if (isset( $aData['EVN_STATUS'] )) { + $oEvent->setEvnStatus( $aData['EVN_STATUS'] ); + } + if (isset( $aData['EVN_WHEN'] )) { + $oEvent->setEvnWhen( $aData['EVN_WHEN'] ); + } + + $oEvent->setEvnMaxAttempts( 3 ); + + //start the transaction + $oConnection->begin(); + if (isset( $aData['EVN_TYPE'] )) { + if ($aData['EVN_TYPE'] === 'bpmnEventEmptyEnd') { + unset( $aData['TRI_UID'] ); + } + } + if (isset( $aData['TRI_UID'] )) { + $oTrigger = new Triggers(); + if (trim( $aData['TRI_UID'] ) === "" || (! $oTrigger->TriggerExists( $aData['TRI_UID'] ))) { + //create an empty trigger + $aTrigger = array (); + $aTrigger['PRO_UID'] = $aData['PRO_UID']; + $aTrigger['TRI_TITLE'] = 'For event: ' . $aData['EVN_DESCRIPTION']; + $aTrigger['TRI_DESCRIPTION'] = 'Autogenerated ' . $aTrigger['TRI_TITLE']; + $aTrigger['TRI_WEBBOT'] = '// ' . $aTrigger['TRI_DESCRIPTION']; + ; + $oTrigger->create( $aTrigger ); + } else { + $oTrigger = TriggersPeer::retrieveByPk( $aData['TRI_UID'] ); + } + + $oEvent->setTriUid( $oTrigger->getTriUid() ); + + $parameters = new StdClass(); + $parameters->hash = md5( $oTrigger->getTriWebbot() ); + + if (isset( $aData['EVN_ACTION_PARAMETERS']->SUBJECT )) { + $parameters->SUBJECT = $aData['EVN_ACTION_PARAMETERS']->SUBJECT; + $parameters->TO = $aData['EVN_ACTION_PARAMETERS']->TO; + $parameters->CC = $aData['EVN_ACTION_PARAMETERS']->CC; + $parameters->BCC = $aData['EVN_ACTION_PARAMETERS']->BCC; + $parameters->TEMPLATE = $aData['EVN_ACTION_PARAMETERS']->TEMPLATE; + } + + $oEvent->setEvnActionParameters( serialize( $parameters ) ); + } + + if ($oEvent->validate()) { + $iResult = $oEvent->save(); + if (isset( $aData['EVN_DESCRIPTION'] )) { + $oEvent->setEvnDescription( $aData['EVN_DESCRIPTION'] ); + } + $oConnection->commit(); + return $aData['EVN_UID']; + } else { + $sMessage = ''; + $aValidationFailures = $oEvent->getValidationFailures(); + foreach ($aValidationFailures as $oValidationFailure) { + $sMessage .= $oValidationFailure->getMessage() . '
'; + } + throw (new Exception( 'The row Event cannot be created!
' . $sMessage )); + } + } catch (Exception $oError) { + $oConnection->rollback(); + throw ($oError); + } + } + + function update ($aData) + { + $oConnection = Propel::getConnection( EventPeer::DATABASE_NAME ); + try { + $oEvent = EventPeer::retrieveByPK( $aData['EVN_UID'] ); + if (! is_null( $oEvent )) { + + //$oEvent->setProUid( $aData['PRO_UID'] ); + if (isset( $aData['EVN_RELATED_TO'] )) { + $oEvent->setEvnRelatedTo( $aData['EVN_RELATED_TO'] ); + if ($aData['EVN_RELATED_TO'] == 'SINGLE') { + if (isset( $aData['TAS_UID'] ) && $aData['TAS_UID'] != '') { + $oEvent->setTasUid( $aData['TAS_UID'] ); + } + $oEvent->setEvnTasUidTo( '' ); + $oEvent->setEvnTasUidFrom( '' ); + } else { + $oEvent->setTasUid( '' ); + if (isset( $aData['EVN_TAS_UID_TO'] )) { + $oEvent->setEvnTasUidTo( $aData['EVN_TAS_UID_TO'] ); + } + if (isset( $aData['EVN_TAS_UID_FROM'] )) { + $oEvent->setEvnTasUidFrom( $aData['EVN_TAS_UID_FROM'] ); + } + } + } + + if (isset( $aData['EVN_POSX'] )) { + $oEvent->setEvnPosx( $aData['EVN_POSX'] ); + } + if (isset( $aData['EVN_POSY'] )) { + $oEvent->setEvnPosy( $aData['EVN_POSY'] ); + } + if (isset( $aData['EVN_TIME_UNIT'] )) { + $oEvent->setEvnTimeUnit( $aData['EVN_TIME_UNIT'] ); + if ($aData['EVN_TIME_UNIT'] == 'HOURS') { + $aData['EVN_TAS_ESTIMATED_DURATION'] = $aData['EVN_TAS_ESTIMATED_DURATION'] / 24; + } + } + if (isset( $aData['EVN_TAS_ESTIMATED_DURATION'] )) { + $oEvent->setEvnTasEstimatedDuration( $aData['EVN_TAS_ESTIMATED_DURATION'] ); + } + + if (isset( $aData['EVN_WHEN_OCCURS'] )) { + $oEvent->setEvnWhenOccurs( $aData['EVN_WHEN_OCCURS'] ); + } + + if (isset( $aData['EVN_STATUS'] )) { + $oEvent->setEvnStatus( $aData['EVN_STATUS'] ); + } + + if (isset( $aData['EVN_WHEN'] )) { + $oEvent->setEvnWhen( $aData['EVN_WHEN'] ); + } + + if (isset( $aData['TRI_UID'] )) { + $oEvent->setTriUid( $aData['TRI_UID'] ); + } + + if (isset( $aData['EVN_TYPE'] )) { + $oEvent->setEvnType( $aData['EVN_TYPE'] ); + } + + if (isset( $aData['EVN_CONDITIONS'] )) { + $oEvent->setEvnConditions( $aData['EVN_CONDITIONS'] ); + } + + if (isset( $aData['EVN_ACTION'] )) { + $oEvent->setEvnAction( $aData['EVN_ACTION'] ); + //if ( isset ($aData['ENV_MAX_ATTEMPTS'] )) $oEvent->setEvnMaxAttempts( 3 ); + } + + if (isset( $aData['EVN_ACTION_PARAMETERS'] ) && $aData['EVN_ACTION_PARAMETERS'] != 0) { + + $oTP = new TemplatePower( PATH_TPL . 'events' . PATH_SEP . 'sendMessage.tpl' ); + $oTP->prepare(); + + $oTP->assign( 'from', 'info@processmaker.com' ); + $oTP->assign( 'subject', addslashes( $aData['EVN_ACTION_PARAMETERS']['SUBJECT'] ) ); + $oTP->assign( 'template', $aData['EVN_ACTION_PARAMETERS']['TEMPLATE'] ); + $oTP->assign( 'timestamp', date( "l jS \of F Y h:i:s A" ) ); + + $recipientTO = implode( ',', $aData['EVN_ACTION_PARAMETERS']['TO'] ); + $recipientCC = implode( ',', $aData['EVN_ACTION_PARAMETERS']['CC'] ); + $recipientBCC = implode( ',', $aData['EVN_ACTION_PARAMETERS']['BCC'] ); + + $oTP->assign( 'TO', addslashes( $recipientTO ) ); + $oTP->assign( 'CC', addslashes( $recipientCC ) ); + $oTP->assign( 'BCC', addslashes( $recipientBCC ) ); + + $sTrigger = $oTP->getOutputContent(); + + $oTrigger = new Triggers(); + $aTrigger = $oTrigger->load( $oEvent->getTriUid() ); + $aTrigger['TRI_WEBBOT'] = $sTrigger; + $oTrigger->update( $aTrigger ); + $oParameters = new StdClass(); + $oParameters->hash = md5( $sTrigger ); + $oParameters->SUBJECT = $aData['EVN_ACTION_PARAMETERS']['SUBJECT']; + $oParameters->TO = $aData['EVN_ACTION_PARAMETERS']['TO']; + $oParameters->CC = $aData['EVN_ACTION_PARAMETERS']['CC']; + $oParameters->BCC = $aData['EVN_ACTION_PARAMETERS']['BCC']; + $oParameters->TEMPLATE = $aData['EVN_ACTION_PARAMETERS']['TEMPLATE']; + + //$oParameters->TRI_UID = $sTrigger->getTriUid(); - if(isset($aData['EVN_TIME_UNIT'])) { - $oEvent->setEvnTimeUnit( $aData['EVN_TIME_UNIT']); - if ($aData['EVN_TIME_UNIT'] == 'HOURS') { - $aData['EVN_TAS_ESTIMATED_DURATION'] = $aData['EVN_TAS_ESTIMATED_DURATION'] / 24; + $oEvent->setEvnActionParameters( serialize( $oParameters ) ); + } + + if ($oEvent->validate()) { + //start the transaction + $oConnection->begin(); + if (array_key_exists( 'EVN_DESCRIPTION', $aData )) { + $oEvent->setEvnDescription( $aData['EVN_DESCRIPTION'] ); + } + $iResult = $oEvent->save(); + $oConnection->commit(); + return $iResult; + } else { + $sMessage = ''; + $aValidationFailures = $oEvent->getValidationFailures(); + foreach ($aValidationFailures as $oValidationFailure) { + $sMessage .= $oValidationFailure->getMessage() . '
'; + } + throw (new Exception( 'The registry cannot be updated!
' . $sMessage )); + } + } else { + throw (new Exception( 'This row doesn\'t exist!' )); + } + } catch (Exception $oError) { + $oConnection->rollback(); + throw ($oError); + } + } + + function remove ($sUID) + { + $oConnection = Propel::getConnection( EventPeer::DATABASE_NAME ); + try { + $oEvent = EventPeer::retrieveByPK( $sUID ); + if (! is_null( $oEvent )) { + /* with the new feature for events, a event can to relate a existing trigger + or more of one events can be reusing the same trigger + so, in this point we should't to delete the trigger + + $oConnection->begin(); + $oTrigger = new Triggers(); + $oAppEvent = new AppEvent(); + + $oCriteria = new Criteria('workflow'); + $oCriteria->clearSelectColumns(); + $oCriteria->addSelectColumn( AppEventPeer::EVN_UID ); + $oCriteria->addSelectColumn( EventPeer::TRI_UID ); + $oCriteria->addSelectColumn( AppEventPeer::APP_UID ); + $oCriteria->addSelectColumn( AppEventPeer::DEL_INDEX ); + $oCriteria->add(AppEventPeer::EVN_UID, $sUID ); + $oCriteria->addJoin(EventPeer::EVN_UID, AppEventPeer::EVN_UID, Criteria::JOIN); + $oDataset = AppEventPeer::doSelectRs($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + + while ($row = $oDataset->getRow()) { + $oTrigger->remove($row['TRI_UID']); + $oAppEvent->remove( $row['APP_UID'], $row['DEL_INDEX'], $sUID ); + $oDataset->next(); + }*/ + Content::removeContent( 'EVN_DESCRIPTION', '', $oEvent->getEvnUid() ); + + $iResult = $oEvent->delete(); + $oConnection->commit(); + return $iResult; + } else { + throw (new Exception( 'This row doesn\'t exist!' )); + } + } catch (Exception $oError) { + $oConnection->rollback(); + throw ($oError); + } + } + + function calculateEventsExecutionDate () + { + $line1 = ''; + $line2 = ''; + $line1 = $this->calculateExecutionDateSingle(); + //$line2 = $this->calculateExecutionDateMultiple(); + return $line1 . "
\n" . $line2; + } + + function calculateExecutionDateSingle () + { + try { + $rowsCreated = 0; + $rowsRejected = 0; + G::LoadClass( 'dates' ); + $oDates = new dates(); + + //SELECT + // EVENT.PRO_UID, + // EVENT.TAS_UID , + // EVENT.EVN_TAS_ESTIMATED_DURATION , + // EVENT.EVN_WHEN, + // APP_DELEGATION.APP_UID , + // APP_DELEGATION.DEL_INDEX , + // APP_DELEGATION.TAS_UID , + // APP_DELEGATION.DEL_DELEGATE_DATE , + // APP_DELEGATION.DEL_INIT_DATE , + // APP_DELEGATION.DEL_TASK_DUE_DATE , + // APP_DELEGATION.DEL_FINISH_DATE + //from APP_DELEGATION + // JOIN EVENT ON ( APP_DELEGATION.TAS_UID = EVENT.TAS_UID AND APP_DELEGATION.DEL_FINISH_DATE IS NULL ) + // LEFT JOIN APP_EVENT ON ( APP_EVENT.APP_UID = APP_DELEGATION.APP_UID AND APP_EVENT.DEL_INDEX = APP_DELEGATION.DEL_INDEX ) + // WHERE + // APP_EVENT.APP_UID IS NULL + // and EVN_STATUS = 'ACTIVE' + // AND EVN_RELATED_TO = 'SINGLE' + // and DEL_FINISH_DATE IS NULL + //-- and APP_DELEGATION.DEL_DELEGATE_DATE > "2009-01-01 12:00:00" + //ORDER BY APP_DELEGATION.DEL_DELEGATE_DATE + + + //get info about the Event and the APP_DELEGATION to process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( EventPeer::EVN_UID ); + $oCriteria->addSelectColumn( EventPeer::PRO_UID ); + $oCriteria->addSelectColumn( EventPeer::TAS_UID ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_ESTIMATED_DURATION ); + $oCriteria->addSelectColumn( EventPeer::EVN_WHEN ); + $oCriteria->addSelectColumn( EventPeer::EVN_WHEN_OCCURS ); + $oCriteria->addSelectColumn( EventPeer::EVN_RELATED_TO ); + $oCriteria->addSelectColumn( EventPeer::EVN_MAX_ATTEMPTS ); + $oCriteria->addSelectColumn( AppDelegationPeer::APP_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); + $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_DELEGATE_DATE ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INIT_DATE ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_TASK_DUE_DATE ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_FINISH_DATE ); + + $aConditions = array (); + $aConditions[] = array (AppDelegationPeer::TAS_UID,EventPeer::TAS_UID + ); + //$aConditions[] = array(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::IS_NULL ); //is null is supported by addJoinMC by the way. + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + + $aConditions = array (); + $aConditions[] = array (AppDelegationPeer::APP_UID,AppEventPeer::APP_UID + ); + $aConditions[] = array (AppDelegationPeer::DEL_INDEX,AppEventPeer::DEL_INDEX + ); + $aConditions[] = array (EventPeer::EVN_UID,AppEventPeer::EVN_UID + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + + $oCriteria->add( AppEventPeer::APP_UID, null, Criteria::ISNULL ); + $oCriteria->add( EventPeer::EVN_STATUS, 'ACTIVE' ); + $oCriteria->add( EventPeer::EVN_RELATED_TO, 'SINGLE' ); + $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); + // $oCriteria->add(AppDelegationPeer::DEL_DELEGATE_DATE, date('Y-m-d') , Criteria::GREATER_THAN ); + $oDataset = EventPeer::doSelectRs( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + $aRows = Array (); + while ($oDataset->next()) { + $aRows[] = $oDataset->getRow(); + } + + g::pr( $aRows ); + die(); + + $oDataset->next(); + + while ($aData = $oDataset->getRow()) { + $estimatedDuration = (float) $aData['EVN_TAS_ESTIMATED_DURATION']; + $when = (float) $aData['EVN_WHEN']; + $whenOccurs = $aData['EVN_WHEN_OCCURS']; + + if ($whenOccurs == 'AFTER_TIME') { + //for multiple $sDueDate = date('Y-m-d H:i:s', $oDates->calculateDate($aData['DEL_DELEGATE_DATE'], $estimatedDuration, 'days', 1)); + $sDueDate = $aData['DEL_TASK_DUE_DATE']; + $calculatedDueDateA = $oDates->calculateDate( $sDueDate, $when, 'days', 1 ); + $sActionDate = date( 'Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS'] ); + $validStartDate = ($sActionDate >= $aData['DEL_DELEGATE_DATE']); + } else { + $sDueDate = $aData['DEL_DELEGATE_DATE']; + $calculatedDueDateA = $oDates->calculateDate( $sDueDate, $when, 'days', 1 ); + $sActionDate = date( 'Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS'] ); + $validStartDate = ($sActionDate >= $aData['DEL_DELEGATE_DATE']); + } + $aData['APP_EVN_ACTION_DATE'] = $sActionDate; + $aData['APP_EVN_ATTEMPTS'] = $aData['EVN_MAX_ATTEMPTS']; + + if ($validStartDate) { + $rowsCreated ++; + $oAppEvent = new AppEvent(); + $oAppEvent->create( $aData ); + } else { + $rowsRejected ++; + $aData['APP_EVN_STATUS'] = 'INVALID'; + $oAppEvent = new AppEvent(); + $oAppEvent->create( $aData ); + } + $oDataset->next(); + } + return "Created $rowsCreated SINGLE rows in APP_EVENT and rejected $rowsRejected rows "; + } catch (Exception $oError) { + throw new Exception( $oError->getMessage() ); + } + } + + function calculateExecutionDateMultiple () + { + try { + $rowsCreated = 0; + $rowsRejected = 0; + G::LoadClass( 'dates' ); + $oDates = new dates(); + // SELECT TASK2.* , + // EVENT.EVN_UID, EVENT.PRO_UID, EVENT.EVN_TAS_UID_FROM, + // EVENT.EVN_TAS_ESTIMATED_DURATION, EVENT.EVN_WHEN, + // EVENT.EVN_WHEN_OCCURS, EVENT.EVN_RELATED_TO, APP_DELEGATION.APP_UID, APP_DELEGATION.DEL_INDEX, APP_DELEGATION.TAS_UID, + // APP_DELEGATION.DEL_DELEGATE_DATE, APP_DELEGATION.DEL_INIT_DATE, APP_DELEGATION.DEL_TASK_DUE_DATE, + // APP_DELEGATION.DEL_FINISH_DATE + // FROM + // APP_DELEGATION + // LEFT JOIN EVENT ON (APP_DELEGATION.TAS_UID=EVENT.EVN_TAS_UID_FROM) + // LEFT JOIN APP_EVENT ON (APP_DELEGATION.APP_UID=APP_EVENT.APP_UID AND APP_DELEGATION.DEL_INDEX=APP_EVENT.DEL_INDEX) + // LEFT JOIN APP_DELEGATION AS TASK2 ON (TASK2.TAS_UID = EVENT.EVN_TAS_UID_TO AND TASK2.APP_UID = APP_DELEGATION.APP_UID ) + // + // WHERE + // APP_EVENT.APP_UID IS NULL + // AND EVENT.EVN_STATUS='ACTIVE' + // AND EVENT.EVN_RELATED_TO='MULTIPLE' + // AND TASK2.DEL_FINISH_DATE IS NULL + //get info about the Event and the APP_DELEGATION to process + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( EventPeer::EVN_UID ); + $oCriteria->addSelectColumn( EventPeer::PRO_UID ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_UID_FROM ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_ESTIMATED_DURATION ); + $oCriteria->addSelectColumn( EventPeer::EVN_WHEN ); + $oCriteria->addSelectColumn( EventPeer::EVN_WHEN_OCCURS ); + $oCriteria->addSelectColumn( EventPeer::EVN_RELATED_TO ); + $oCriteria->addSelectColumn( AppDelegationPeer::APP_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); + $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_DELEGATE_DATE ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INIT_DATE ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_TASK_DUE_DATE ); + $oCriteria->addSelectColumn( AppDelegationPeer::DEL_FINISH_DATE ); + + $aConditions = array (); + $aConditions[] = array (AppDelegationPeer::TAS_UID,EventPeer::EVN_TAS_UID_FROM + ); + //$aConditions[] = array(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::IS_NULL ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + + $aConditions = array (); + $aConditions[] = array (AppDelegationPeer::APP_UID,AppEventPeer::APP_UID + ); + $aConditions[] = array (AppDelegationPeer::DEL_INDEX,AppEventPeer::DEL_INDEX + ); + $aConditions[] = array (EventPeer::EVN_UID,AppEventPeer::EVN_UID + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + + $oCriteria->addAlias( 'DEL2', 'APP_DELEGATION' ); + $aConditions = array (); + $aConditions[] = array (AppDelegationPeer::APP_UID,'DEL2.APP_UID' + ); + $aConditions[] = array (EventPeer::EVN_TAS_UID_TO,'DEL2.TAS_UID' + ); + $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + + $oCriteria->add( AppEventPeer::APP_UID, null, Criteria::ISNULL ); + $oCriteria->add( EventPeer::EVN_STATUS, 'ACTIVE' ); + $oCriteria->add( EventPeer::EVN_RELATED_TO, 'MULTIPLE' ); + $oCriteria->add( 'DEL2.DEL_FINISH_DATE', null, Criteria::ISNULL ); + // $oCriteria->add(AppDelegationPeer::DEL_DELEGATE_DATE, date('Y-m-d') , Criteria::GREATER_THAN ); + $oDataset = EventPeer::doSelectRs( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + + while ($aData = $oDataset->getRow()) { + $estimatedDuration = (float) $aData['EVN_TAS_ESTIMATED_DURATION']; + $when = (float) $aData['EVN_WHEN']; + $whenOccurs = $aData['EVN_WHEN_OCCURS']; + + if ($whenOccurs == 'AFTER_TIME') { + //for multiple $sDueDate = date('Y-m-d H:i:s', $oDates->calculateDate($aData['DEL_DELEGATE_DATE'], $estimatedDuration, 'days', 1)); + $sDueDate = $aData['DEL_TASK_DUE_DATE']; + $calculatedDueDateA = $oDates->calculateDate( $sDueDate, $when, 'days', 1 ); + $sActionDate = date( 'Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS'] ); + $validStartDate = ($sActionDate >= $aData['DEL_DELEGATE_DATE']); + } else { + $sDueDate = $aData['DEL_DELEGATE_DATE']; + $calculatedDueDateA = $oDates->calculateDate( $sDueDate, $when, 'days', 1 ); + $sActionDate = date( 'Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS'] ); + $validStartDate = ($sActionDate >= $aData['DEL_DELEGATE_DATE']); + } + $aData['APP_EVN_ACTION_DATE'] = $sActionDate; + + if ($validStartDate) { + $rowsCreated ++; + $oAppEvent = new AppEvent(); + $oAppEvent->create( $aData ); + } else { + $rowsRejected ++; + $aData['APP_EVN_STATUS'] = 'INVALID'; + $oAppEvent = new AppEvent(); + $oAppEvent->create( $aData ); + } + $oDataset->next(); + } + return "Created $rowsCreated MULTIPLE rows in APP_EVENT and rejected $rowsRejected rows "; + } catch (Exception $oError) { + throw new Exception( $oError->getMessage() ); + } + } + + function closeAppEvents ($PRO_UID, $APP_UID, $DEL_INDEX, $TAS_UID) + { + + $aAppEvents = $this->getAppEvents( $APP_UID, $DEL_INDEX ); + if ($aAppEvents) { + foreach ($aAppEvents as $aRow) { + if ($aRow['EVN_RELATED_TO'] == 'SINGLE' || ($aRow['EVN_RELATED_TO'] == $TAS_UID)) { + $oAppEvent = AppEventPeer::retrieveByPK( $aRow['APP_UID'], $aRow['DEL_INDEX'], $aRow['EVN_UID'] ); + $oAppEvent->setAppEvnLastExecutionDate( date( 'Y-m-d H:i:s' ) ); + $oAppEvent->setAppEvnStatus( 'CLOSE' ); + $oAppEvent->save(); + } } } - if(isset($aData['EVN_TAS_ESTIMATED_DURATION'])) - $oEvent->setEvnTasEstimatedDuration( $aData['EVN_TAS_ESTIMATED_DURATION'] ); - - if(isset($aData['EVN_WHEN_OCCURS'])) - $oEvent->setEvnWhenOccurs( $aData['EVN_WHEN_OCCURS'] ); - if(isset($aData['EVN_STATUS'])) - $oEvent->setEvnStatus( $aData['EVN_STATUS'] ); - - if(isset($aData['EVN_WHEN'])) - $oEvent->setEvnWhen( $aData['EVN_WHEN'] ); - - if(isset($aData['TRI_UID'])) - $oEvent->setTriUid( $aData['TRI_UID'] ); - - if(isset($aData['EVN_TYPE'])) - $oEvent->setEvnType( $aData['EVN_TYPE'] ); - - if(isset($aData['EVN_CONDITIONS'])) - $oEvent->setEvnConditions( $aData['EVN_CONDITIONS'] ); - - if ( isset ($aData['EVN_ACTION'] ) ) - $oEvent->setEvnAction( $aData['EVN_ACTION'] ); - //if ( isset ($aData['ENV_MAX_ATTEMPTS'] )) $oEvent->setEvnMaxAttempts( 3 ); - - if (isset($aData['EVN_ACTION_PARAMETERS']) && $aData['EVN_ACTION_PARAMETERS'] != 0) { - - $oTP = new TemplatePower(PATH_TPL . 'events' . PATH_SEP . 'sendMessage.tpl'); - $oTP->prepare(); - - $oTP->assign('from', 'info@processmaker.com'); - $oTP->assign('subject', addslashes($aData['EVN_ACTION_PARAMETERS']['SUBJECT'])); - $oTP->assign('template', $aData['EVN_ACTION_PARAMETERS']['TEMPLATE']); - $oTP->assign('timestamp', date("l jS \of F Y h:i:s A")); - - $recipientTO = implode(',', $aData['EVN_ACTION_PARAMETERS']['TO']); - $recipientCC = implode(',', $aData['EVN_ACTION_PARAMETERS']['CC']); - $recipientBCC = implode(',', $aData['EVN_ACTION_PARAMETERS']['BCC']); - - $oTP->assign('TO', addslashes($recipientTO)); - $oTP->assign('CC', addslashes($recipientCC)); - $oTP->assign('BCC', addslashes($recipientBCC)); - - $sTrigger = $oTP->getOutputContent(); - - $oTrigger = new Triggers(); - $aTrigger = $oTrigger->load($oEvent->getTriUid()); - $aTrigger['TRI_WEBBOT'] = $sTrigger; - $oTrigger->update($aTrigger); - $oParameters = new StdClass(); - $oParameters->hash = md5($sTrigger); - $oParameters->SUBJECT = $aData['EVN_ACTION_PARAMETERS']['SUBJECT']; - $oParameters->TO = $aData['EVN_ACTION_PARAMETERS']['TO']; - $oParameters->CC = $aData['EVN_ACTION_PARAMETERS']['CC']; - $oParameters->BCC = $aData['EVN_ACTION_PARAMETERS']['BCC']; - $oParameters->TEMPLATE = $aData['EVN_ACTION_PARAMETERS']['TEMPLATE']; - - //$oParameters->TRI_UID = $sTrigger->getTriUid(); - - $oEvent->setEvnActionParameters(serialize($oParameters)); - } - - if ($oEvent->validate()) { - //start the transaction - $oConnection->begin(); - if (array_key_exists('EVN_DESCRIPTION', $aData)) $oEvent->setEvnDescription($aData['EVN_DESCRIPTION']); - $iResult = $oEvent->save(); - $oConnection->commit(); - return $iResult; - } - else { - $sMessage = ''; - $aValidationFailures = $oEvent->getValidationFailures(); - foreach($aValidationFailures as $oValidationFailure) { - $sMessage .= $oValidationFailure->getMessage() . '
'; - } - throw(new Exception('The registry cannot be updated!
'.$sMessage)); - } - } - else { - throw(new Exception('This row doesn\'t exist!')); - } } - catch (Exception $oError) { - $oConnection->rollback(); - throw($oError); + + function createAppEvents ($PRO_UID, $APP_UID, $DEL_INDEX, $TAS_UID) + { + $aRows = Array (); + $aEventsRows = $this->getBy( $PRO_UID, $TAS_UID ); + if ($aEventsRows !== false) { + $aRows = array_merge( $aRows, $aEventsRows ); + } + foreach ($aRows as $aData) { + // if the events has a condition + if (trim( $aData['EVN_CONDITIONS'] ) != '') { + G::LoadClass( 'case' ); + $oCase = new Cases(); + $aFields = $oCase->loadCase( $APP_UID ); + + $Fields = $aFields['APP_DATA']; + $conditionContents = trim( $aData['EVN_CONDITIONS'] ); + + //$sContent = G::unhtmlentities($sContent); + $iAux = 0; + $iOcurrences = preg_match_all( '/\@(?:([\>])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+)?/', $conditionContents, $aMatch, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); + + if ($iOcurrences) { + for ($i = 0; $i < $iOcurrences; $i ++) { + preg_match_all( '/@>' . $aMatch[2][$i][0] . '([\w\W]*)' . '@<' . $aMatch[2][$i][0] . '/', $conditionContents, $aMatch2, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE ); + $sGridName = $aMatch[2][$i][0]; + $sStringToRepeat = $aMatch2[1][0][0]; + if (isset( $Fields[$sGridName] )) { + if (is_array( $Fields[$sGridName] )) { + $sAux = ''; + foreach ($Fields[$sGridName] as $aRow) { + $sAux .= G::replaceDataField( $sStringToRepeat, $aRow ); + } + } + } + $conditionContents = str_replace( '@>' . $sGridName . $sStringToRepeat . '@<' . $sGridName, $sAux, $conditionContents ); + } + } + + $sCondition = G::replaceDataField( $conditionContents, $Fields ); + + $evalConditionResult = false; + + $sCond = 'try{ $evalConditionResult=(' . $sCondition . ')? true: false; } catch(Exception $e){$evalConditionResult=false;}'; + @eval( $sCond ); + + if (! $evalConditionResult) { + continue; + } + } + + $appEventData['APP_UID'] = $APP_UID; + $appEventData['DEL_INDEX'] = $DEL_INDEX; + $appEventData['EVN_UID'] = $aData['EVN_UID']; + $appEventData['APP_EVN_ACTION_DATE'] = $this->toCalculateTime( $aData ); + $appEventData['APP_EVN_ATTEMPTS'] = 3; + $appEventData['APP_EVN_LAST_EXECUTION_DATE'] = null; + $appEventData['APP_EVN_STATUS'] = 'OPEN'; + + $oAppEvent = new AppEvent(); + $oAppEvent->create( $appEventData ); + + } } - } - function remove($sUID) { - $oConnection = Propel::getConnection(EventPeer::DATABASE_NAME); - try { - $oEvent = EventPeer::retrieveByPK($sUID); - if (!is_null($oEvent)) { - /* with the new feature for events, a event can to relate a existing trigger - or more of one events can be reusing the same trigger - so, in this point we should't to delete the trigger + function verifyTaskbetween ($PRO_UID, $taskFrom, $taskTo, $taskVerify) + { + $criteria = new Criteria( 'workflow' ); + $criteria->addSelectColumn( RoutePeer::ROU_NEXT_TASK ); - $oConnection->begin(); - $oTrigger = new Triggers(); - $oAppEvent = new AppEvent(); + $criteria->add( RoutePeer::PRO_UID, $PRO_UID ); + $criteria->add( RoutePeer::TAS_UID, $taskFrom ); - $oCriteria = new Criteria('workflow'); - $oCriteria->clearSelectColumns(); - $oCriteria->addSelectColumn( AppEventPeer::EVN_UID ); - $oCriteria->addSelectColumn( EventPeer::TRI_UID ); + $dataset = RoutePeer::doSelectRs( $criteria ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + if ($dataset->next()) { + $routeData = $dataset->getRow(); + switch ($routeData['ROU_NEXT_TASK']) { + case $taskVerify: + return true; + break; + case $taskTo: + case '-1': + return false; + break; + default: + return $this->verifyTaskbetween( $PRO_UID, $routeData['ROU_NEXT_TASK'], $taskTo, $taskVerify ); + break; + } + } + } + + function getBy ($PRO_UID, $taskUid) + { + + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( EventPeer::EVN_UID ); + $oCriteria->addSelectColumn( EventPeer::TAS_UID ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_UID_FROM ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_UID_TO ); + + $oCriteria->add( EventPeer::EVN_STATUS, 'ACTIVE' ); + $oCriteria->add( EventPeer::EVN_ACTION, '', Criteria::NOT_EQUAL ); + $oCriteria->add( EventPeer::PRO_UID, $PRO_UID, Criteria::EQUAL ); + + $oDataset = EventPeer::doSelectRs( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + $eventsTask = array (); + while ($oDataset->next()) { + $aDataEvent = $oDataset->getRow(); + + if ($taskUid == $aDataEvent['TAS_UID'] || $taskUid == $aDataEvent['EVN_TAS_UID_FROM'] || $taskUid == $aDataEvent['EVN_TAS_UID_TO']) { + $eventsTask[] = $aDataEvent['EVN_UID']; + } else { + $flag = $this->verifyTaskbetween( $PRO_UID, $aDataEvent['EVN_TAS_UID_FROM'], $aDataEvent['EVN_TAS_UID_TO'], $taskUid ); + if ($flag) { + $eventsTask[] = $aDataEvent['EVN_UID']; + } + } + } + + $aRows = Array (); + if (count( $eventsTask ) > 0) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( EventPeer::EVN_UID ); + $oCriteria->addSelectColumn( EventPeer::PRO_UID ); + $oCriteria->addSelectColumn( EventPeer::EVN_STATUS ); + $oCriteria->addSelectColumn( EventPeer::EVN_WHEN_OCCURS ); + $oCriteria->addSelectColumn( EventPeer::EVN_RELATED_TO ); + $oCriteria->addSelectColumn( EventPeer::TAS_UID ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_UID_FROM ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_UID_TO ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_ESTIMATED_DURATION ); + $oCriteria->addSelectColumn( EventPeer::EVN_WHEN ); + $oCriteria->addSelectColumn( EventPeer::EVN_MAX_ATTEMPTS ); + $oCriteria->addSelectColumn( EventPeer::EVN_ACTION ); + $oCriteria->addSelectColumn( EventPeer::EVN_CONDITIONS ); + $oCriteria->addSelectColumn( EventPeer::EVN_ACTION_PARAMETERS ); + $oCriteria->addSelectColumn( EventPeer::TRI_UID ); + + $oCriteria->add( EventPeer::EVN_UID, (array) $eventsTask, Criteria::IN ); + + $oDataset = EventPeer::doSelectRs( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + while ($oDataset->next()) { + $aRows[] = $oDataset->getRow(); + } + } + + return (count( $aRows ) > 0) ? $aRows : false; + } + + function getAppEvents ($APP_UID, $DEL_INDEX) + { + //for single task event + $oCriteria = new Criteria( 'workflow' ); $oCriteria->addSelectColumn( AppEventPeer::APP_UID ); $oCriteria->addSelectColumn( AppEventPeer::DEL_INDEX ); - $oCriteria->add(AppEventPeer::EVN_UID, $sUID ); - $oCriteria->addJoin(EventPeer::EVN_UID, AppEventPeer::EVN_UID, Criteria::JOIN); - $oDataset = AppEventPeer::doSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oCriteria->addSelectColumn( AppEventPeer::EVN_UID ); + $oCriteria->addSelectColumn( AppEventPeer::APP_EVN_ACTION_DATE ); + $oCriteria->addSelectColumn( AppEventPeer::APP_EVN_ATTEMPTS ); + $oCriteria->addSelectColumn( AppEventPeer::APP_EVN_LAST_EXECUTION_DATE ); + $oCriteria->addSelectColumn( AppEventPeer::APP_EVN_STATUS ); + $oCriteria->addSelectColumn( EventPeer::EVN_UID ); + $oCriteria->addSelectColumn( EventPeer::PRO_UID ); + $oCriteria->addSelectColumn( EventPeer::EVN_STATUS ); + $oCriteria->addSelectColumn( EventPeer::EVN_WHEN_OCCURS ); + $oCriteria->addSelectColumn( EventPeer::EVN_RELATED_TO ); + $oCriteria->addSelectColumn( EventPeer::TAS_UID ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_UID_FROM ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_UID_TO ); + $oCriteria->addSelectColumn( EventPeer::EVN_TAS_ESTIMATED_DURATION ); + $oCriteria->addSelectColumn( EventPeer::EVN_WHEN ); + $oCriteria->addSelectColumn( EventPeer::EVN_MAX_ATTEMPTS ); + $oCriteria->addSelectColumn( EventPeer::EVN_ACTION ); + $oCriteria->addSelectColumn( EventPeer::EVN_CONDITIONS ); + $oCriteria->addSelectColumn( EventPeer::EVN_ACTION_PARAMETERS ); + $oCriteria->addSelectColumn( EventPeer::TRI_UID ); + + $oCriteria->addJoin( AppEventPeer::EVN_UID, EventPeer::EVN_UID ); + + $oCriteria->add( AppEventPeer::APP_UID, $APP_UID ); + $oCriteria->add( AppEventPeer::DEL_INDEX, $DEL_INDEX ); + $oCriteria->add( AppEventPeer::APP_EVN_STATUS, 'OPEN' ); + + $oDataset = AppEventPeer::doSelectRs( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + $aRows = Array (); + while ($oDataset->next()) { + $aRows[] = $oDataset->getRow(); + } + + return (count( $aRows ) > 0) ? $aRows : false; + } + + function toCalculateTime ($aData, $iDate = null) + { + G::LoadClass( 'dates' ); + $oDates = new dates(); + + $iDate = isset( $iDate ) ? $iDate : date( 'Y-m-d H:i:s' ); + + $estimatedDuration = $aData['EVN_TAS_ESTIMATED_DURATION']; //task duration + $when = $aData['EVN_WHEN']; //how many days + $whenOccurs = $aData['EVN_WHEN_OCCURS']; //time on action (AFTER_TIME/TASK_STARTED) + + + if ($whenOccurs == 'TASK_STARTED') { + + $calculatedDueDateA = $oDates->calculateDate( $iDate, $when, 'days', 1 ); + + $sActionDate = date( 'Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS'] ); + } else { + $calculatedDueDateA = $oDates->calculateDate( $iDate, $estimatedDuration + $when, 'days', 1 ); + $sActionDate = date( 'Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS'] ); + } + + return $sActionDate; + } + + function Exists ($sUid) + { + try { + $oObj = EventPeer::retrieveByPk( $sUid ); + return (is_object( $oObj ) && get_class( $oObj ) == 'Event'); + } catch (Exception $oError) { + throw ($oError); + } + } + + public function existsByTaskUidFrom ($TAS_UID_FROM) + { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS COUNT_EVENTS' ); + $oCriteria->add( EventPeer::EVN_TAS_UID_FROM, $TAS_UID_FROM ); + + $oDataset = EventPeer::doSelectRs( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); + $aRow = $oDataset->getRow(); - while ($row = $oDataset->getRow()) { - $oTrigger->remove($row['TRI_UID']); - $oAppEvent->remove( $row['APP_UID'], $row['DEL_INDEX'], $sUID ); - $oDataset->next(); - }*/ - Content::removeContent('EVN_DESCRIPTION', '', $oEvent->getEvnUid()); - - $iResult = $oEvent->delete(); - $oConnection->commit(); - return $iResult; - } - else { - throw(new Exception('This row doesn\'t exist!')); - } + return ($aRow['COUNT_EVENTS'] != 0) ? true : false; } - catch (Exception $oError) { - $oConnection->rollback(); - throw($oError); - } - } - function calculateEventsExecutionDate() { - $line1 = ''; - $line2 = ''; - $line1 = $this->calculateExecutionDateSingle(); - //$line2 = $this->calculateExecutionDateMultiple(); - return $line1 . "
\n" . $line2; - } + public function getRowByTaskUidFrom ($TAS_UID_FROM) + { + $oCriteria = new Criteria( 'workflow' ); - function calculateExecutionDateSingle() { - try { - $rowsCreated = 0; - $rowsRejected = 0; - G::LoadClass('dates'); - $oDates = new dates(); - - //SELECT - // EVENT.PRO_UID, - // EVENT.TAS_UID , - // EVENT.EVN_TAS_ESTIMATED_DURATION , - // EVENT.EVN_WHEN, - // APP_DELEGATION.APP_UID , - // APP_DELEGATION.DEL_INDEX , - // APP_DELEGATION.TAS_UID , - // APP_DELEGATION.DEL_DELEGATE_DATE , - // APP_DELEGATION.DEL_INIT_DATE , - // APP_DELEGATION.DEL_TASK_DUE_DATE , - // APP_DELEGATION.DEL_FINISH_DATE - //from APP_DELEGATION - // JOIN EVENT ON ( APP_DELEGATION.TAS_UID = EVENT.TAS_UID AND APP_DELEGATION.DEL_FINISH_DATE IS NULL ) - // LEFT JOIN APP_EVENT ON ( APP_EVENT.APP_UID = APP_DELEGATION.APP_UID AND APP_EVENT.DEL_INDEX = APP_DELEGATION.DEL_INDEX ) - // WHERE - // APP_EVENT.APP_UID IS NULL - // and EVN_STATUS = 'ACTIVE' - // AND EVN_RELATED_TO = 'SINGLE' - // and DEL_FINISH_DATE IS NULL - //-- and APP_DELEGATION.DEL_DELEGATE_DATE > "2009-01-01 12:00:00" - //ORDER BY APP_DELEGATION.DEL_DELEGATE_DATE - - //get info about the Event and the APP_DELEGATION to process - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(EventPeer::EVN_UID); - $oCriteria->addSelectColumn(EventPeer::PRO_UID); - $oCriteria->addSelectColumn(EventPeer::TAS_UID); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_ESTIMATED_DURATION); - $oCriteria->addSelectColumn(EventPeer::EVN_WHEN); - $oCriteria->addSelectColumn(EventPeer::EVN_WHEN_OCCURS); - $oCriteria->addSelectColumn(EventPeer::EVN_RELATED_TO); - $oCriteria->addSelectColumn(EventPeer::EVN_MAX_ATTEMPTS); - $oCriteria->addSelectColumn(AppDelegationPeer::APP_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); - $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_DELEGATE_DATE); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); - - $aConditions = array(); - $aConditions[] = array(AppDelegationPeer::TAS_UID, EventPeer::TAS_UID); - //$aConditions[] = array(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::IS_NULL ); //is null is supported by addJoinMC by the way. - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - - $aConditions = array(); - $aConditions[] = array(AppDelegationPeer::APP_UID, AppEventPeer::APP_UID); - $aConditions[] = array(AppDelegationPeer::DEL_INDEX, AppEventPeer::DEL_INDEX); - $aConditions[] = array(EventPeer::EVN_UID, AppEventPeer::EVN_UID ); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - - $oCriteria->add(AppEventPeer::APP_UID, null, Criteria::ISNULL ); - $oCriteria->add(EventPeer::EVN_STATUS, 'ACTIVE' ); - $oCriteria->add(EventPeer::EVN_RELATED_TO, 'SINGLE' ); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); -// $oCriteria->add(AppDelegationPeer::DEL_DELEGATE_DATE, date('Y-m-d') , Criteria::GREATER_THAN ); - $oDataset = EventPeer::doSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - $aRows = Array(); - while($oDataset->next()) $aRows[]= $oDataset->getRow(); - - g::pr($aRows); - die; - - $oDataset->next(); - - while ($aData = $oDataset->getRow()) { - $estimatedDuration = (float)$aData['EVN_TAS_ESTIMATED_DURATION']; - $when = (float)$aData['EVN_WHEN']; - $whenOccurs = $aData['EVN_WHEN_OCCURS']; - - if ( $whenOccurs == 'AFTER_TIME' ) { - //for multiple $sDueDate = date('Y-m-d H:i:s', $oDates->calculateDate($aData['DEL_DELEGATE_DATE'], $estimatedDuration, 'days', 1)); - $sDueDate = $aData['DEL_TASK_DUE_DATE']; - $calculatedDueDateA=$oDates->calculateDate( $sDueDate, $when, 'days', 1); - $sActionDate = date('Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS']); - $validStartDate = ( $sActionDate >= $aData['DEL_DELEGATE_DATE'] ); - } - else { - $sDueDate = $aData['DEL_DELEGATE_DATE']; - $calculatedDueDateA=$oDates->calculateDate( $sDueDate, $when, 'days', 1); - $sActionDate = date('Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS']); - $validStartDate = ( $sActionDate >= $aData['DEL_DELEGATE_DATE'] ); - } - $aData['APP_EVN_ACTION_DATE'] = $sActionDate; - $aData['APP_EVN_ATTEMPTS'] = $aData['EVN_MAX_ATTEMPTS']; - - if ( $validStartDate ) { - $rowsCreated++ ; - $oAppEvent = new AppEvent(); - $oAppEvent->create( $aData ); - } - else { - $rowsRejected++; - $aData['APP_EVN_STATUS'] = 'INVALID'; - $oAppEvent = new AppEvent(); - $oAppEvent->create( $aData ); - } + $oCriteria->add( EventPeer::EVN_TAS_UID_FROM, $TAS_UID_FROM ); + $oDataset = EventPeer::doSelectRs( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - } - return "Created $rowsCreated SINGLE rows in APP_EVENT and rejected $rowsRejected rows "; + $aRow = $oDataset->getRow(); + return $aRow; } - catch (Exception $oError) { - throw new Exception ( $oError->getMessage() ); - } - } +} +// Event - - function calculateExecutionDateMultiple() { - try { - $rowsCreated = 0; - $rowsRejected = 0; - G::LoadClass('dates'); - $oDates = new dates(); - // SELECT TASK2.* , - // EVENT.EVN_UID, EVENT.PRO_UID, EVENT.EVN_TAS_UID_FROM, - // EVENT.EVN_TAS_ESTIMATED_DURATION, EVENT.EVN_WHEN, - // EVENT.EVN_WHEN_OCCURS, EVENT.EVN_RELATED_TO, APP_DELEGATION.APP_UID, APP_DELEGATION.DEL_INDEX, APP_DELEGATION.TAS_UID, - // APP_DELEGATION.DEL_DELEGATE_DATE, APP_DELEGATION.DEL_INIT_DATE, APP_DELEGATION.DEL_TASK_DUE_DATE, - // APP_DELEGATION.DEL_FINISH_DATE - // FROM - // APP_DELEGATION - // LEFT JOIN EVENT ON (APP_DELEGATION.TAS_UID=EVENT.EVN_TAS_UID_FROM) - // LEFT JOIN APP_EVENT ON (APP_DELEGATION.APP_UID=APP_EVENT.APP_UID AND APP_DELEGATION.DEL_INDEX=APP_EVENT.DEL_INDEX) - // LEFT JOIN APP_DELEGATION AS TASK2 ON (TASK2.TAS_UID = EVENT.EVN_TAS_UID_TO AND TASK2.APP_UID = APP_DELEGATION.APP_UID ) - // - // WHERE - // APP_EVENT.APP_UID IS NULL - // AND EVENT.EVN_STATUS='ACTIVE' - // AND EVENT.EVN_RELATED_TO='MULTIPLE' - // AND TASK2.DEL_FINISH_DATE IS NULL - //get info about the Event and the APP_DELEGATION to process - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(EventPeer::EVN_UID); - $oCriteria->addSelectColumn(EventPeer::PRO_UID); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_UID_FROM ); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_ESTIMATED_DURATION); - $oCriteria->addSelectColumn(EventPeer::EVN_WHEN); - $oCriteria->addSelectColumn(EventPeer::EVN_WHEN_OCCURS); - $oCriteria->addSelectColumn(EventPeer::EVN_RELATED_TO); - $oCriteria->addSelectColumn(AppDelegationPeer::APP_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); - $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_DELEGATE_DATE); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); - - - $aConditions = array(); - $aConditions[] = array(AppDelegationPeer::TAS_UID, EventPeer::EVN_TAS_UID_FROM); - //$aConditions[] = array(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::IS_NULL ); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - - $aConditions = array(); - $aConditions[] = array(AppDelegationPeer::APP_UID, AppEventPeer::APP_UID); - $aConditions[] = array(AppDelegationPeer::DEL_INDEX, AppEventPeer::DEL_INDEX); - $aConditions[] = array(EventPeer::EVN_UID, AppEventPeer::EVN_UID ); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - - $oCriteria->addAlias('DEL2', 'APP_DELEGATION'); - $aConditions = array(); - $aConditions[] = array( AppDelegationPeer::APP_UID, 'DEL2.APP_UID' ); - $aConditions[] = array( EventPeer::EVN_TAS_UID_TO, 'DEL2.TAS_UID' ); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - - $oCriteria->add(AppEventPeer::APP_UID, null, Criteria::ISNULL ); - $oCriteria->add(EventPeer::EVN_STATUS, 'ACTIVE' ); - $oCriteria->add(EventPeer::EVN_RELATED_TO, 'MULTIPLE' ); - $oCriteria->add('DEL2.DEL_FINISH_DATE', null, Criteria::ISNULL ); -// $oCriteria->add(AppDelegationPeer::DEL_DELEGATE_DATE, date('Y-m-d') , Criteria::GREATER_THAN ); - $oDataset = EventPeer::doSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - - while ($aData = $oDataset->getRow()) { - $estimatedDuration = (float)$aData['EVN_TAS_ESTIMATED_DURATION']; - $when = (float)$aData['EVN_WHEN']; - $whenOccurs = $aData['EVN_WHEN_OCCURS']; - - if ( $whenOccurs == 'AFTER_TIME' ) { - //for multiple $sDueDate = date('Y-m-d H:i:s', $oDates->calculateDate($aData['DEL_DELEGATE_DATE'], $estimatedDuration, 'days', 1)); - $sDueDate = $aData['DEL_TASK_DUE_DATE']; - $calculatedDueDateA=$oDates->calculateDate( $sDueDate, $when, 'days', 1); - $sActionDate = date('Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS']); - $validStartDate = ( $sActionDate >= $aData['DEL_DELEGATE_DATE'] ); - } - else { - $sDueDate = $aData['DEL_DELEGATE_DATE']; - $calculatedDueDateA=$oDates->calculateDate( $sDueDate, $when, 'days', 1); - $sActionDate = date('Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS']); - $validStartDate = ( $sActionDate >= $aData['DEL_DELEGATE_DATE'] ); - } - $aData['APP_EVN_ACTION_DATE'] = $sActionDate; - - if ( $validStartDate ) { - $rowsCreated++ ; - $oAppEvent = new AppEvent(); - $oAppEvent->create( $aData ); - } - else { - $rowsRejected++; - $aData['APP_EVN_STATUS'] = 'INVALID'; - $oAppEvent = new AppEvent(); - $oAppEvent->create( $aData ); - } - $oDataset->next(); - } - return "Created $rowsCreated MULTIPLE rows in APP_EVENT and rejected $rowsRejected rows "; - } - catch (Exception $oError) { - throw new Exception ( $oError->getMessage() ); - } - } - - - function closeAppEvents($PRO_UID, $APP_UID, $DEL_INDEX, $TAS_UID){ - - $aAppEvents = $this->getAppEvents($APP_UID, $DEL_INDEX); - if($aAppEvents){ - foreach ( $aAppEvents as $aRow ) { - if($aRow['EVN_RELATED_TO'] == 'SINGLE' || ($aRow['EVN_RELATED_TO'] == $TAS_UID) ){ - $oAppEvent = AppEventPeer::retrieveByPK($aRow['APP_UID'], $aRow['DEL_INDEX'], $aRow['EVN_UID']); - $oAppEvent->setAppEvnLastExecutionDate(date('Y-m-d H:i:s')); - $oAppEvent->setAppEvnStatus('CLOSE'); - $oAppEvent->save(); - } - } - } - - } - - function createAppEvents($PRO_UID, $APP_UID, $DEL_INDEX, $TAS_UID){ - $aRows = Array(); - $aEventsRows = $this->getBy($PRO_UID, $TAS_UID); - if( $aEventsRows !== false ){ - $aRows = array_merge($aRows, $aEventsRows); - } - foreach($aRows as $aData){ - // if the events has a condition - if( trim($aData['EVN_CONDITIONS']) != '' ) { - G::LoadClass('case'); - $oCase = new Cases(); - $aFields = $oCase->loadCase($APP_UID); - - $Fields = $aFields['APP_DATA']; - $conditionContents = trim($aData['EVN_CONDITIONS']); - - //$sContent = G::unhtmlentities($sContent); - $iAux = 0; - $iOcurrences = preg_match_all('/\@(?:([\>])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+)?/', $conditionContents, $aMatch, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); - - if ($iOcurrences) { - for($i = 0; $i < $iOcurrences; $i++) { - preg_match_all('/@>' . $aMatch[2][$i][0] . '([\w\W]*)' . '@<' . $aMatch[2][$i][0] . '/', $conditionContents, $aMatch2, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); - $sGridName = $aMatch[2][$i][0]; - $sStringToRepeat = $aMatch2[1][0][0]; - if (isset($Fields[$sGridName])) { - if (is_array($Fields[$sGridName])) { - $sAux = ''; - foreach ($Fields[$sGridName] as $aRow) { - $sAux .= G::replaceDataField($sStringToRepeat, $aRow); - } - } - } - $conditionContents = str_replace('@>' . $sGridName . $sStringToRepeat . '@<' . $sGridName, $sAux, $conditionContents); - } - } - - $sCondition = G::replaceDataField( $conditionContents, $Fields); - - $evalConditionResult = false; - - $sCond = 'try{ $evalConditionResult=('.$sCondition.')? true: false; } catch(Exception $e){$evalConditionResult=false;}'; - @eval($sCond); - - if( !$evalConditionResult ){ - continue; - } - } - - $appEventData['APP_UID'] = $APP_UID; - $appEventData['DEL_INDEX'] = $DEL_INDEX; - $appEventData['EVN_UID'] = $aData['EVN_UID']; - $appEventData['APP_EVN_ACTION_DATE'] = $this->toCalculateTime($aData); - $appEventData['APP_EVN_ATTEMPTS'] = 3; - $appEventData['APP_EVN_LAST_EXECUTION_DATE'] = null; - $appEventData['APP_EVN_STATUS'] = 'OPEN'; - - $oAppEvent = new AppEvent(); - $oAppEvent->create( $appEventData ); - - } - } - - function verifyTaskbetween($PRO_UID, $taskFrom, $taskTo, $taskVerify) { - $criteria = new Criteria('workflow'); - $criteria->addSelectColumn(RoutePeer::ROU_NEXT_TASK); - - $criteria->add(RoutePeer::PRO_UID, $PRO_UID); - $criteria->add(RoutePeer::TAS_UID, $taskFrom); - - $dataset = RoutePeer::doSelectRs($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - if ($dataset->next()) { - $routeData = $dataset->getRow(); - switch ($routeData['ROU_NEXT_TASK']) { - case $taskVerify: - return true; - break; - case $taskTo: - case '-1': - return false; - break; - default: - return $this->verifyTaskbetween($PRO_UID, $routeData['ROU_NEXT_TASK'], $taskTo, $taskVerify); - break; - } - } - } - - function getBy($PRO_UID, $taskUid){ - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(EventPeer::EVN_UID); - $oCriteria->addSelectColumn(EventPeer::TAS_UID ); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_UID_FROM ); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_UID_TO ); - - $oCriteria->add(EventPeer::EVN_STATUS, 'ACTIVE'); - $oCriteria->add(EventPeer::EVN_ACTION, '', Criteria::NOT_EQUAL); - $oCriteria->add(EventPeer::PRO_UID, $PRO_UID, Criteria::EQUAL); - - $oDataset = EventPeer::doSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - $eventsTask = array(); - while ($oDataset->next()) { - $aDataEvent = $oDataset->getRow(); - - if ($taskUid == $aDataEvent['TAS_UID'] || $taskUid == $aDataEvent['EVN_TAS_UID_FROM'] || $taskUid == $aDataEvent['EVN_TAS_UID_TO']) { - $eventsTask[] = $aDataEvent['EVN_UID']; - } else { - $flag = $this->verifyTaskbetween($PRO_UID, $aDataEvent['EVN_TAS_UID_FROM'], $aDataEvent['EVN_TAS_UID_TO'], $taskUid); - if ($flag) { - $eventsTask[] = $aDataEvent['EVN_UID']; - } - } - } - - $aRows = Array(); - if (count($eventsTask) > 0) { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(EventPeer::EVN_UID); - $oCriteria->addSelectColumn(EventPeer::PRO_UID); - $oCriteria->addSelectColumn(EventPeer::EVN_STATUS); - $oCriteria->addSelectColumn(EventPeer::EVN_WHEN_OCCURS); - $oCriteria->addSelectColumn(EventPeer::EVN_RELATED_TO); - $oCriteria->addSelectColumn(EventPeer::TAS_UID ); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_UID_FROM ); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_UID_TO ); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_ESTIMATED_DURATION); - $oCriteria->addSelectColumn(EventPeer::EVN_WHEN); - $oCriteria->addSelectColumn(EventPeer::EVN_MAX_ATTEMPTS); - $oCriteria->addSelectColumn(EventPeer::EVN_ACTION); - $oCriteria->addSelectColumn(EventPeer::EVN_CONDITIONS); - $oCriteria->addSelectColumn(EventPeer::EVN_ACTION_PARAMETERS); - $oCriteria->addSelectColumn(EventPeer::TRI_UID); - - $oCriteria->add(EventPeer::EVN_UID, (array)$eventsTask, Criteria::IN); - - $oDataset = EventPeer::doSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - while($oDataset->next()) $aRows[]= $oDataset->getRow(); - } - - - return (count($aRows) > 0)? $aRows: false; - } - - function getAppEvents($APP_UID, $DEL_INDEX){ - //for single task event - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppEventPeer::APP_UID); - $oCriteria->addSelectColumn(AppEventPeer::DEL_INDEX); - $oCriteria->addSelectColumn(AppEventPeer::EVN_UID); - $oCriteria->addSelectColumn(AppEventPeer::APP_EVN_ACTION_DATE); - $oCriteria->addSelectColumn(AppEventPeer::APP_EVN_ATTEMPTS ); - $oCriteria->addSelectColumn(AppEventPeer::APP_EVN_LAST_EXECUTION_DATE); - $oCriteria->addSelectColumn(AppEventPeer::APP_EVN_STATUS); - $oCriteria->addSelectColumn(EventPeer::EVN_UID); - $oCriteria->addSelectColumn(EventPeer::PRO_UID); - $oCriteria->addSelectColumn(EventPeer::EVN_STATUS); - $oCriteria->addSelectColumn(EventPeer::EVN_WHEN_OCCURS); - $oCriteria->addSelectColumn(EventPeer::EVN_RELATED_TO); - $oCriteria->addSelectColumn(EventPeer::TAS_UID ); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_UID_FROM ); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_UID_TO ); - $oCriteria->addSelectColumn(EventPeer::EVN_TAS_ESTIMATED_DURATION); - $oCriteria->addSelectColumn(EventPeer::EVN_WHEN); - $oCriteria->addSelectColumn(EventPeer::EVN_MAX_ATTEMPTS); - $oCriteria->addSelectColumn(EventPeer::EVN_ACTION); - $oCriteria->addSelectColumn(EventPeer::EVN_CONDITIONS); - $oCriteria->addSelectColumn(EventPeer::EVN_ACTION_PARAMETERS); - $oCriteria->addSelectColumn(EventPeer::TRI_UID); - - $oCriteria->addJoin(AppEventPeer::EVN_UID, EventPeer::EVN_UID); - - $oCriteria->add(AppEventPeer::APP_UID, $APP_UID); - $oCriteria->add(AppEventPeer::DEL_INDEX, $DEL_INDEX); - $oCriteria->add(AppEventPeer::APP_EVN_STATUS, 'OPEN'); - - $oDataset = AppEventPeer::doSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - $aRows = Array(); - while($oDataset->next()) $aRows[]= $oDataset->getRow(); - - return (count($aRows) > 0)? $aRows: false; - } - - function toCalculateTime($aData, $iDate=null){ - G::LoadClass('dates'); - $oDates = new dates(); - - $iDate = isset($iDate)? $iDate: date('Y-m-d H:i:s'); - - $estimatedDuration = $aData['EVN_TAS_ESTIMATED_DURATION']; //task duration - $when = $aData['EVN_WHEN']; //how many days - $whenOccurs = $aData['EVN_WHEN_OCCURS']; //time on action (AFTER_TIME/TASK_STARTED) - - if ( $whenOccurs == 'TASK_STARTED' ) { - - $calculatedDueDateA=$oDates->calculateDate( $iDate, $when, 'days', 1); - - $sActionDate = date('Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS']); - } else { - $calculatedDueDateA=$oDates->calculateDate( $iDate, $estimatedDuration+$when, 'days', 1); - $sActionDate = date('Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS']); - } - - return $sActionDate; - } - - function Exists ( $sUid ) { - try { - $oObj = EventPeer::retrieveByPk($sUid); - return (is_object($oObj) && get_class($oObj) == 'Event'); - } - catch (Exception $oError) { - throw($oError); - } - } - - public function existsByTaskUidFrom( $TAS_UID_FROM ) - { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS COUNT_EVENTS'); - $oCriteria->add(EventPeer::EVN_TAS_UID_FROM, $TAS_UID_FROM); - - $oDataset = EventPeer::doSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - return ($aRow['COUNT_EVENTS'] != 0) ? true : false; - } - - public function getRowByTaskUidFrom( $TAS_UID_FROM ) - { - $oCriteria = new Criteria('workflow'); - - $oCriteria->add(EventPeer::EVN_TAS_UID_FROM, $TAS_UID_FROM); - $oDataset = EventPeer::doSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - return $aRow; - } - - -} // Event -?> diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php index 397ecf43a..045b8de8c 100755 --- a/workflow/engine/classes/model/Process.php +++ b/workflow/engine/classes/model/Process.php @@ -1,7 +1,8 @@ . + * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. @@ -28,824 +29,845 @@ require_once 'classes/model/om/BaseProcess.php'; require_once 'classes/model/Content.php'; require_once 'classes/model/ProcessCategory.php'; - /** * Skeleton subclass for representing a row from the 'PROCESS' table. * * * * You should add additional methods to this class to meet the - * application requirements. This class will only be generated as + * application requirements. This class will only be generated as * long as it does not already exist in the output directory. * - * @package workflow.engine.classes.model + * @package workflow.engine.classes.model */ -class Process extends BaseProcess { - /** - * This value goes in the content table - * @var string - */ - protected $pro_title = ''; +class Process extends BaseProcess +{ + /** + * This value goes in the content table + * + * @var string + */ + protected $pro_title = ''; - /** - * Get the [Pro_title] column value. - * @return string - */ - public function getProTitle() - { - if ( $this->getProUid() == '' ) { - throw ( new Exception( "Error in getProTitle, the PRO_UID can't be blank") ); - } - $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; - $this->pro_title = Content::load ( 'PRO_TITLE', '', $this->getProUid(), $lang ); - return $this->pro_title; - } - - /** - * Set the [Pro_title] column value. - * - * @param string $v new value - * @return void - */ - public function setProTitle($v) - { - if ( $this->getProUid() == '' ) { - throw ( new Exception( "Error in setProTitle, the PRO_UID can't be blank" . print_r (debug_backtrace(), 1) ) ); - } - // Since the native PHP type for this column is string, - // we will cast the input to a string (if it is not). - if ($v !== null && !is_string($v)) { - $v = (string) $v; + /** + * Get the [Pro_title] column value. + * + * @return string + */ + public function getProTitle () + { + if ($this->getProUid() == '') { + throw (new Exception( "Error in getProTitle, the PRO_UID can't be blank" )); + } + $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en'; + $this->pro_title = Content::load( 'PRO_TITLE', '', $this->getProUid(), $lang ); + return $this->pro_title; } - if ($this->pro_title !== $v || $v === '') { - $this->pro_title = $v; - $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; + /** + * Set the [Pro_title] column value. + * + * @param string $v new value + * @return void + */ + public function setProTitle ($v) + { + if ($this->getProUid() == '') { + throw (new Exception( "Error in setProTitle, the PRO_UID can't be blank" . print_r( debug_backtrace(), 1 ) )); + } + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && ! is_string( $v )) { + $v = (string) $v; + } - $res = Content::addContent( 'PRO_TITLE', '', $this->getProUid(), $lang, $this->pro_title ); + if ($this->pro_title !== $v || $v === '') { + $this->pro_title = $v; + $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en'; + + $res = Content::addContent( 'PRO_TITLE', '', $this->getProUid(), $lang, $this->pro_title ); + } + + } // set() + + + /** + * This value goes in the content table + * + * @var string + */ + protected $pro_description = ''; + + /** + * Get the [Pro_description] column value. + * + * @return string + */ + public function getProDescription () + { + if ($this->getProUid() == '') { + throw (new Exception( "Error in getProDescription, the PRO_UID can't be blank" )); + } + $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en'; + $this->pro_description = Content::load( 'PRO_DESCRIPTION', '', $this->getProUid(), $lang ); + return $this->pro_description; } - } // set() + /** + * Set the [Pro_description] column value. + * + * @param string $v new value + * @return void + */ + public function setProDescription ($v) + { + if ($this->getProUid() == '') { + throw (new Exception( "Error in setProDescription, the PRO_UID can't be blank" )); + } + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && ! is_string( $v )) { + $v = (string) $v; + } - /** - * This value goes in the content table - * @var string - */ - protected $pro_description = ''; + if ($this->pro_description !== $v || $v === '') { + $this->pro_description = $v; + $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en'; - /** - * Get the [Pro_description] column value. - * @return string - */ - public function getProDescription() - { - if ( $this->getProUid() == '' ) { - throw ( new Exception( "Error in getProDescription, the PRO_UID can't be blank") ); - } - $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; - $this->pro_description = Content::load ( 'PRO_DESCRIPTION', '', $this->getProUid(), $lang ); - return $this->pro_description; - } + $res = Content::addContent( 'PRO_DESCRIPTION', '', $this->getProUid(), $lang, $this->pro_description ); + } - /** - * Set the [Pro_description] column value. - * - * @param string $v new value - * @return void - */ - public function setProDescription($v) - { - if ( $this->getProUid() == '' ) { - throw ( new Exception( "Error in setProDescription, the PRO_UID can't be blank") ); - } - // Since the native PHP type for this column is string, - // we will cast the input to a string (if it is not). - if ($v !== null && !is_string($v)) { - $v = (string) $v; + } // set() + + + /** + * Creates the Process + * + * @param array $aData Fields with : + * $aData['PRO_UID'] the process id + * $aData['USR_UID'] the userid + * $aData['PRO_CATEGORY'] the id category + * @return void + */ + + function create ($aData) + { + if (! isset( $aData['USR_UID'] )) { + throw (new PropelException( 'The process cannot be created. The USR_UID is empty.' )); + } + $con = Propel::getConnection( ProcessPeer::DATABASE_NAME ); + try { + do { + $sNewProUid = G::generateUniqueID(); + } while ($this->processExists( $sNewProUid )); + + $this->setProUid( $sNewProUid ); + $this->setProParent( $sNewProUid ); + $this->setProTime( 1 ); + $this->setProTimeunit( 'DAYS' ); + $this->setProStatus( 'ACTIVE' ); + $this->setProTypeDay( '' ); + $this->setProType( 'NORMAL' ); + $this->setProAssignment( 'FALSE' ); + $this->setProShowMap( '' ); + $this->setProShowMessage( '' ); + $this->setProShowDelegate( '' ); + $this->setProShowDynaform( '' ); + $this->setProCategory( $aData['PRO_CATEGORY'] ); + $this->setProSubCategory( '' ); + $this->setProIndustry( '' ); + $this->setProCreateDate( 'now' ); + $this->setProCreateUser( $aData['USR_UID'] ); + $this->setProHeight( 5000 ); + $this->setProWidth( 10000 ); + $this->setProTitleX( 0 ); + $this->setProTitleY( 0 ); + $this->setProDynaforms( isset( $aData['PRO_DYNAFORMS'] ) ? (is_array( $aData['PRO_DYNAFORMS'] ) ? serialize( $aData['PRO_DYNAFORMS'] ) : $aData['PRO_DYNAFORMS']) : '' ); + + if ($this->validate()) { + $con->begin(); + $res = $this->save(); + + if (isset( $aData['PRO_TITLE'] )) { + $this->setProTitle( $aData['PRO_TITLE'] ); + } else { + $this->setProTitle( 'Default Process Title' ); + } + + if (isset( $aData['PRO_DESCRIPTION'] )) { + $this->setProDescription( $aData['PRO_DESCRIPTION'] ); + } else { + $this->setProDescription( 'Default Process Description' ); + } + + $con->commit(); + + $this->memcachedDelete(); + + return $this->getProUid(); + } else { + $msg = ''; + foreach ($this->getValidationFailures() as $objValidationFailure) { + $msg .= $objValidationFailure->getMessage() . "
"; + } + throw (new PropelException( 'The row cannot be created!', new PropelException( $msg ) )); + } + + } catch (Exception $e) { + $con->rollback(); + throw ($e); + } } - if ($this->pro_description !== $v || $v === '') { - $this->pro_description = $v; - $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; + /** + * verify if Process row specified in [pro_id] exists. + * + * @param string $sProUid the uid of the Prolication + */ - $res = Content::addContent( 'PRO_DESCRIPTION', '', $this->getProUid(), $lang, $this->pro_description ); + function processExists ($ProUid) + { + $con = Propel::getConnection( ProcessPeer::DATABASE_NAME ); + try { + $oPro = ProcessPeer::retrieveByPk( $ProUid ); + if (is_object( $oPro ) && get_class( $oPro ) == 'Process') { + return true; + } else { + return false; + } + } catch (Exception $oError) { + throw ($oError); + } } - } // set() + /** + * Load the Process row specified in [pro_id] column value. + * + * @param string $ProUid the uid of the Prolication + * @return array $Fields the fields + */ - /** - * Creates the Process - * - * @param array $aData Fields with : - * $aData['PRO_UID'] the process id - * $aData['USR_UID'] the userid - * $aData['PRO_CATEGORY'] the id category - * @return void - */ + function load ($ProUid, $getAllLang = false) + { - function create ($aData ) { - if ( !isset ( $aData['USR_UID'] ) ) { - throw ( new PropelException ( 'The process cannot be created. The USR_UID is empty.' ) ); + $con = Propel::getConnection( ProcessPeer::DATABASE_NAME ); + try { + $oPro = ProcessPeer::retrieveByPk( $ProUid ); + if (is_object( $oPro ) && get_class( $oPro ) == 'Process') { + $aFields = $oPro->toArray( BasePeer::TYPE_FIELDNAME ); + $this->fromArray( $aFields, BasePeer::TYPE_FIELDNAME ); + //optimized to avoid double and multiple execution of the same query + // $aFields['PRO_TITLE'] = $oPro->getProTitle(); + // $aFields['PRO_DESCRIPTION'] = $oPro->getProDescription(); + // $this->pro_title = $aFields['PRO_TITLE']; + // $this->pro_description = $aFields['PRO_DESCRIPTION']; + + + $lang = defined( 'SYS_LANG' ) ? SYS_LANG : 'en'; + + $c = new Criteria(); + $c->clearSelectColumns(); + $c->addSelectColumn( ContentPeer::CON_CATEGORY ); + $c->addSelectColumn( ContentPeer::CON_VALUE ); + $c->add( ContentPeer::CON_ID, $ProUid ); + if (! $getAllLang) { + $c->add( ContentPeer::CON_LANG, $lang ); + } + $rs = ProcessPeer::doSelectRS( $c ); + $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $rs->next(); + $row = $rs->getRow(); + + while (is_array( $row )) { + switch ($row['CON_CATEGORY']) { + case 'PRO_TITLE': + $aFields['PRO_TITLE'] = $row['CON_VALUE']; + $this->pro_title = $row['CON_VALUE']; + if ($row['CON_VALUE'] !== '') { + $this->setProTitle( $aFields['PRO_TITLE'] ); + } + break; + case 'PRO_DESCRIPTION': + $aFields['PRO_DESCRIPTION'] = $row['CON_VALUE']; + $this->pro_description = $row['CON_VALUE']; + if ($row['CON_VALUE'] !== '') { + $this->setProDescription( $aFields['PRO_DESCRIPTION'] ); + } + break; + } + $rs->next(); + $row = $rs->getRow(); + } + + //If the prev script doesn't return anithing try to create the values based on EN + if (! isset( $aFields['PRO_TITLE'] )) { + $aFields['PRO_TITLE'] = $oPro->getProTitle(); + $this->setProTitle( $aFields['PRO_TITLE'] ); + } + if (! isset( $aFields['PRO_DESCRIPTION'] )) { + $aFields['PRO_DESCRIPTION'] = $oPro->getProDescription(); + $this->setProDescription( $aFields['PRO_DESCRIPTION'] ); + } + + //the following code is to copy the parent in old process, when the parent was empty. + if ($oPro->getProParent() == '') { + $oPro->setProParent( $oPro->getProUid() ); + $oPro->save(); + } + + //Get category Name, by default No category + $aFields['PRO_CATEGORY_LABEL'] = G::LoadTranslation( "ID_PROCESS_NO_CATEGORY" ); + if ($aFields['PRO_CATEGORY'] != "") { + $oProCat = ProcessCategoryPeer::retrieveByPk( $aFields['PRO_CATEGORY'] ); + if (is_object( $oProCat ) && get_class( $oProCat ) == 'ProcessCategory') { + $aFields['PRO_CATEGORY_LABEL'] = $oProCat->getCategoryName(); + } + } + + $aFields['PRO_DYNAFORMS'] = @unserialize( $aFields['PRO_DYNAFORMS'] ); + + return $aFields; + } else { + throw (new Exception( "The row '$ProUid' in table Process doesn't exist!" )); + } + } catch (Exception $oError) { + throw ($oError); + } } - $con = Propel::getConnection( ProcessPeer::DATABASE_NAME ); - try { - do { - $sNewProUid = G::generateUniqueID() ; - } while ( $this->processExists ( $sNewProUid ) ); - $this->setProUid ( $sNewProUid ); - $this->setProParent ( $sNewProUid ); - $this->setProTime ( 1 ); - $this->setProTimeunit ( 'DAYS' ); - $this->setProStatus ( 'ACTIVE' ); - $this->setProTypeDay ( '' ); - $this->setProType ( 'NORMAL' ); - $this->setProAssignment ( 'FALSE' ); - $this->setProShowMap ( '' ); - $this->setProShowMessage ( '' ); - $this->setProShowDelegate ( '' ); - $this->setProShowDynaform ( '' ); - $this->setProCategory ( $aData['PRO_CATEGORY'] ); - $this->setProSubCategory ( '' ); - $this->setProIndustry ( '' ); - $this->setProCreateDate ('now' ); - $this->setProCreateUser ( $aData['USR_UID'] ); - $this->setProHeight ( 5000 ); - $this->setProWidth ( 10000 ); - $this->setProTitleX ( 0 ); - $this->setProTitleY ( 0 ); - $this->setProDynaforms ( isset($aData['PRO_DYNAFORMS']) ? (is_array($aData['PRO_DYNAFORMS']) ? serialize($aData['PRO_DYNAFORMS']) : $aData['PRO_DYNAFORMS']) : '' ); + function getAll () + { - if ( $this->validate() ) { - $con->begin(); - $res = $this->save(); + $oCriteria = new Criteria( 'workflow' ); - if (isset ( $aData['PRO_TITLE'] ) ) - $this->setProTitle ( $aData['PRO_TITLE'] ); - else - $this->setProTitle ( 'Default Process Title' ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_UID ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_PARENT ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_STATUS ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_CATEGORY ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_CREATE_DATE ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_CREATE_USER ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_DEBUG ); - if (isset ( $aData['PRO_DESCRIPTION'] ) ) - $this->setProDescription ( $aData['PRO_DESCRIPTION'] ); - else - $this->setProDescription ( 'Default Process Description' ); + $oCriteria->add( ProcessPeer::PRO_UID, '', Criteria::NOT_EQUAL ); + $oCriteria->add( ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL ); - $con->commit(); + //execute the query + $oDataset = ProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $processes = Array (); + $uids = array (); + while ($oDataset->next()) { + $processes[] = $oDataset->getRow(); + $uids[] = $processes[sizeof( $processes ) - 1]['PRO_UID']; + } + //process details will have the info about the processes + $processesDetails = Array (); - $this->memcachedDelete(); + //now get the labels for all process, using an array of Uids, + $c = new Criteria( 'workflow' ); + //$c->add ( ContentPeer::CON_CATEGORY, 'PRO_TITLE', Criteria::EQUAL ); + $c->add( ContentPeer::CON_LANG, defined( 'SYS_LANG' ) ? SYS_LANG : 'en', Criteria::EQUAL ); + $c->add( ContentPeer::CON_ID, $uids, Criteria::IN ); - return $this->getProUid(); - } - else { - $msg = ''; - foreach($this->getValidationFailures() as $objValidationFailure) - $msg .= $objValidationFailure->getMessage() . "
"; + $dt = ContentPeer::doSelectRS( $c ); + $dt->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - throw ( new PropelException ( 'The row cannot be created!', new PropelException ( $msg ) ) ); - } + while ($dt->next()) { + $row = $dt->getRow(); + $processesDetails[$row['CON_ID']][$row['CON_CATEGORY']] = $row['CON_VALUE']; + } + + G::loadClass( 'configuration' ); + $oConf = new Configurations(); + $oConf->loadConfig( $obj, 'ENVIRONMENT_SETTINGS', '' ); + + foreach ($processes as $i => $process) { + $processes[$i]['PRO_TITLE'] = $processes[$i]['PRO_DESCRIPTION'] = ''; + + if (isset( $processesDetails[$process['PRO_UID']]['PRO_TITLE'] )) { + $processes[$i]['PRO_TITLE'] = $processesDetails[$process['PRO_UID']]['PRO_TITLE']; + } + + if (isset( $processesDetails[$process['PRO_UID']] )) { + $processes[$i]['PRO_DESCRIPTION'] = $processesDetails[$process['PRO_UID']]['PRO_DESCRIPTION']; + } + } + + return $processes; + } + + /** + * Update the Prolication row + * + * @param array $aData + * @return variant + * + */ + + public function update ($aData) + { + if (isset( $aData['PRO_DYNAFORMS'] ) && is_array( $aData['PRO_DYNAFORMS'] )) { + $aData['PRO_DYNAFORMS'] = @serialize( $aData['PRO_DYNAFORMS'] ); + } + + $con = Propel::getConnection( ProcessPeer::DATABASE_NAME ); + try { + $con->begin(); + $oPro = ProcessPeer::retrieveByPK( $aData['PRO_UID'] ); + if (is_object( $oPro ) && get_class( $oPro ) == 'Process') { + $oPro->fromArray( $aData, BasePeer::TYPE_FIELDNAME ); + if ($oPro->validate()) { + if (isset( $aData['PRO_TITLE'] )) { + $oPro->setProTitle( $aData['PRO_TITLE'] ); + } + if (isset( $aData['PRO_DESCRIPTION'] )) { + $oPro->setProDescription( $aData['PRO_DESCRIPTION'] ); + } + $res = $oPro->save(); + $con->commit(); + + $this->memcachedDelete(); + + return $res; + } else { + $msg = ''; + foreach ($oPro->getValidationFailures() as $objValidationFailure) { + $msg .= $objValidationFailure->getMessage() . "
"; + } + + throw (new Exception( 'The row cannot be updated!' . $msg )); + } + } else { + $con->rollback(); + throw (new Exception( "The row '" . $aData['PRO_UID'] . "' in table Process doesn't exist!" )); + } + } catch (Exception $oError) { + throw ($oError); + } + } + + /** + * creates an Application row + * + * @param array $aData + * @return variant + * + */ + + public function createRow ($aData) + { + $con = Propel::getConnection( ProcessPeer::DATABASE_NAME ); + //$con->begin(); //does not allow dual BEGIN + $this->setProUid( $aData['PRO_UID'] ); + $this->setProParent( $aData['PRO_PARENT'] ); + $this->setProTime( $aData['PRO_TIME'] ); + $this->setProTimeunit( $aData['PRO_TIMEUNIT'] ); + $this->setProStatus( $aData['PRO_STATUS'] ); + $this->setProTypeDay( $aData['PRO_TYPE_DAY'] ); + $this->setProType( $aData['PRO_TYPE'] ); + $this->setProAssignment( $aData['PRO_ASSIGNMENT'] ); + $this->setProShowMap( $aData['PRO_SHOW_MAP'] ); + $this->setProShowMessage( $aData['PRO_SHOW_MESSAGE'] ); + $this->setProSubprocess( isset( $aData['PRO_SUBPROCESS'] ) ? $aData['PRO_SUBPROCESS'] : '' ); + $this->setProTriDeleted( isset( $aData['PRO_TRI_DELETED'] ) ? $aData['PRO_TRI_DELETED'] : '' ); + $this->setProTriCanceled( isset( $aData['PRO_TRI_CANCELED'] ) ? $aData['PRO_TRI_CANCELED'] : '' ); + $this->setProTriPaused( isset( $aData['PRO_TRI_PAUSED'] ) ? $aData['PRO_TRI_PAUSED'] : '' ); + $this->setProTriReassigned( isset( $aData['PRO_TRI_REASSIGNED'] ) ? $aData['PRO_TRI_REASSIGNED'] : '' ); + $this->setProShowDelegate( $aData['PRO_SHOW_DELEGATE'] ); + $this->setProShowDynaform( $aData['PRO_SHOW_DYNAFORM'] ); + + // validate if the category exists + $criteria = new Criteria( 'workflow' ); + $criteria->add( ProcessCategoryPeer::CATEGORY_UID, $aData['PRO_CATEGORY'] ); + $ds = ProcessCategoryPeer::doSelectRS( $criteria ); + $ds->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $ds->next(); + // if it is not set, set value as empty "No Category" + if (! $ds->getRow()) { + $aData['PRO_CATEGORY'] = ''; + } + + $this->setProCategory( $aData['PRO_CATEGORY'] ); + $this->setProSubCategory( $aData['PRO_SUB_CATEGORY'] ); + $this->setProIndustry( $aData['PRO_INDUSTRY'] ); + $this->setProCreateDate( $aData['PRO_CREATE_DATE'] ); + $this->setProCreateUser( $aData['PRO_CREATE_USER'] ); + $this->setProHeight( $aData['PRO_HEIGHT'] ); + $this->setProWidth( $aData['PRO_WIDTH'] ); + $this->setProTitleX( $aData['PRO_TITLE_X'] ); + $this->setProTitleY( $aData['PRO_TITLE_Y'] ); + $this->setProDynaforms( isset( $aData['PRO_DYNAFORMS'] ) ? (is_array( $aData['PRO_DYNAFORMS'] ) ? serialize( $aData['PRO_DYNAFORMS'] ) : $aData['PRO_DYNAFORMS']) : '' ); + if ($this->validate()) { + $con->begin(); + $res = $this->save(); + + if (isset( $aData['PRO_TITLE'] ) && trim( $aData['PRO_TITLE'] ) != '') { + $this->setProTitle( $aData['PRO_TITLE'] ); + } else { + $this->setProTitle( 'Default Process Title' ); + } + if (isset( $aData['PRO_DESCRIPTION'] )) { + $this->setProDescription( $aData['PRO_DESCRIPTION'] ); + } else { + $this->setProDescription( 'Default Process Description' ); + } + $con->commit(); + + $this->memcachedDelete(); + + return $this->getProUid(); + } else { + $msg = ''; + foreach ($this->getValidationFailures() as $objValidationFailure) { + $msg .= $objValidationFailure->getMessage() . "
"; + } + + throw (new PropelException( 'The row cannot be created!', new PropelException( $msg ) )); + } } - catch (Exception $e) { - $con->rollback(); - throw ($e); + + /** + * Remove the Prolication document registry + * + * @param array $aData or string $ProUid + * @return string + * + */ + public function remove ($ProUid) + { + if (is_array( $ProUid )) { + $ProUid = (isset( $ProUid['PRO_UID'] ) ? $ProUid['PRO_UID'] : ''); + } + try { + $oPro = ProcessPeer::retrieveByPK( $ProUid ); + if (! is_null( $oPro )) { + Content::removeContent( 'PRO_TITLE', '', $oPro->getProUid() ); + Content::removeContent( 'PRO_DESCRIPTION', '', $oPro->getProUid() ); + + $this->memcachedDelete(); + + return $oPro->delete(); + } else { + throw (new Exception( "The row '$ProUid' in table Process doesn't exist!" )); + } + } catch (Exception $oError) { + throw ($oError); + } } - } - /** - * verify if Process row specified in [pro_id] exists. - * - * @param string $sProUid the uid of the Prolication - */ - - function processExists ( $ProUid ) { - $con = Propel::getConnection(ProcessPeer::DATABASE_NAME); - try { - $oPro = ProcessPeer::retrieveByPk( $ProUid ); - if (is_object($oPro) && get_class($oPro) == 'Process' ) { - return true; - } - else { - return false; - } + public function exists ($ProUid) + { + $oPro = ProcessPeer::retrieveByPk( $ProUid ); + return (is_object( $oPro ) && get_class( $oPro ) == 'Process'); } - catch (Exception $oError) { - throw($oError); + + public function existsByProTitle ($PRO_TITLE) + { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS PROCESS' ); + $oCriteria->add( ContentPeer::CON_CATEGORY, 'PRO_TITLE' ); + $oCriteria->add( ContentPeer::CON_LANG, SYS_LANG ); + $oCriteria->add( ContentPeer::CON_VALUE, $PRO_TITLE ); + $oDataset = ContentPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + return $aRow['PROCESS'] ? true : false; } - } - - - /** - * Load the Process row specified in [pro_id] column value. - * - * @param string $ProUid the uid of the Prolication - * @return array $Fields the fields - */ - - function load ( $ProUid , $getAllLang=false) { - - $con = Propel::getConnection(ProcessPeer::DATABASE_NAME); - try { - $oPro = ProcessPeer::retrieveByPk( $ProUid ); - if (is_object ($oPro) && get_class ($oPro) == 'Process' ) { - $aFields = $oPro->toArray(BasePeer::TYPE_FIELDNAME); - $this->fromArray ($aFields, BasePeer::TYPE_FIELDNAME ); - //optimized to avoid double and multiple execution of the same query -// $aFields['PRO_TITLE'] = $oPro->getProTitle(); -// $aFields['PRO_DESCRIPTION'] = $oPro->getProDescription(); -// $this->pro_title = $aFields['PRO_TITLE']; -// $this->pro_description = $aFields['PRO_DESCRIPTION']; - - - $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; - - $c = new Criteria(); + //new functions + function getAllProcessesCount () + { + $c = $this->tmpCriteria; $c->clearSelectColumns(); - $c->addSelectColumn(ContentPeer::CON_CATEGORY); - $c->addSelectColumn(ContentPeer::CON_VALUE); - $c->add(ContentPeer::CON_ID, $ProUid ); - if(!$getAllLang) $c->add(ContentPeer::CON_LANG, $lang ); - $rs = ProcessPeer::doSelectRS($c); - $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); + $c->addSelectColumn( 'COUNT(*)' ); + $oDataset = ProcessPeer::doSelectRS( $c ); + $oDataset->next(); + $aRow = $oDataset->getRow(); - while (is_array($row)) { - switch ( $row['CON_CATEGORY'] ) { - case 'PRO_TITLE' : $aFields['PRO_TITLE'] = $row['CON_VALUE']; - $this->pro_title = $row['CON_VALUE']; - if ( $row['CON_VALUE'] !== '' ) - $this->setProTitle($aFields['PRO_TITLE']); - break; - case 'PRO_DESCRIPTION' : $aFields['PRO_DESCRIPTION'] = $row['CON_VALUE']; - $this->pro_description = $row['CON_VALUE']; - if ( $row['CON_VALUE'] !== '' ) - $this->setProDescription($aFields['PRO_DESCRIPTION']); - break; - } - $rs->next(); - $row = $rs->getRow(); + if (is_array( $aRow )) { + return $aRow[0]; + } else { + return 0; + } + } + + function getAllProcesses ($start, $limit, $category = null, $processName = null, $counters = true, $reviewSubProcess = false) + { + require_once PATH_RBAC . "model/RbacUsers.php"; + require_once "classes/model/ProcessCategory.php"; + require_once "classes/model/Users.php"; + + $user = new RbacUsers(); + $aProcesses = Array (); + $categories = Array (); + $oCriteria = new Criteria( 'workflow' ); + + $oCriteria->addSelectColumn( ProcessPeer::PRO_UID ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_PARENT ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_STATUS ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_CATEGORY ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_CREATE_DATE ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_CREATE_USER ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_DEBUG ); + + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_USERNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + + $oCriteria->addSelectColumn( ProcessCategoryPeer::CATEGORY_UID ); + $oCriteria->addSelectColumn( ProcessCategoryPeer::CATEGORY_NAME ); + + $oCriteria->add( ProcessPeer::PRO_UID, '', Criteria::NOT_EQUAL ); + $oCriteria->add( ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL ); + if ($reviewSubProcess) { + $oCriteria->add( ProcessPeer::PRO_SUBPROCESS, '1', Criteria::NOT_EQUAL ); } - - //If the prev script doesn't return anithing try to create the values based on EN - if(!isset($aFields['PRO_TITLE'])){ - $aFields['PRO_TITLE'] = $oPro->getProTitle(); - $this->setProTitle($aFields['PRO_TITLE']); - } - if(!isset($aFields['PRO_DESCRIPTION'])){ - $aFields['PRO_DESCRIPTION'] = $oPro->getProDescription(); - $this->setProDescription($aFields['PRO_DESCRIPTION']); + if (isset( $category )) { + $oCriteria->add( ProcessPeer::PRO_CATEGORY, $category, Criteria::EQUAL ); } - //the following code is to copy the parent in old process, when the parent was empty. - if ( $oPro->getProParent() == '' ) { - $oPro->setProParent ( $oPro->getProUid() ); - $oPro->save(); + $oCriteria->addJoin( ProcessPeer::PRO_CREATE_USER, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $oCriteria->addJoin( ProcessPeer::PRO_CATEGORY, ProcessCategoryPeer::CATEGORY_UID, Criteria::LEFT_JOIN ); + + $this->tmpCriteria = clone $oCriteria; + + if ($start != '') { + $oCriteria->setOffset( $start ); + } + if ($limit != '' && ! isset( $category ) && ! isset( $processName )) { + $oCriteria->setLimit( $limit ); } - //Get category Name, by default No category - $aFields['PRO_CATEGORY_LABEL']=G::LoadTranslation("ID_PROCESS_NO_CATEGORY"); - if($aFields['PRO_CATEGORY']!=""){ - $oProCat = ProcessCategoryPeer::retrieveByPk( $aFields['PRO_CATEGORY'] ); - if (is_object ($oProCat) && get_class ($oProCat) == 'ProcessCategory' ) { - $aFields['PRO_CATEGORY_LABEL']=$oProCat->getCategoryName(); - } + //execute a query to obtain numbers, how many cases there are by process + if ($counters) { + $casesCnt = $this->getCasesCountInAllProcesses(); } - $aFields['PRO_DYNAFORMS'] = @unserialize($aFields['PRO_DYNAFORMS']); - - return $aFields; - } - else { - throw( new Exception( "The row '$ProUid' in table Process doesn't exist!" )); - } - } - catch (Exception $oError) { - throw($oError); - } - } - - - function getAll() { - - $oCriteria = new Criteria('workflow'); - - $oCriteria->addSelectColumn(ProcessPeer::PRO_UID ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_PARENT ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_STATUS ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_CATEGORY ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_CREATE_DATE ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_CREATE_USER ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_DEBUG ); - - $oCriteria->add(ProcessPeer::PRO_UID, '', Criteria::NOT_EQUAL); - $oCriteria->add(ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL); - - //execute the query - $oDataset = ProcessPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $processes = Array(); - $uids=array(); - while( $oDataset->next() ) { - $processes[] = $oDataset->getRow(); - $uids[] = $processes[sizeof($processes)-1]['PRO_UID']; - } - //process details will have the info about the processes - $processesDetails = Array(); - - //now get the labels for all process, using an array of Uids, - $c = new Criteria('workflow'); - //$c->add ( ContentPeer::CON_CATEGORY, 'PRO_TITLE', Criteria::EQUAL ); - $c->add ( ContentPeer::CON_LANG, defined('SYS_LANG')?SYS_LANG:'en', Criteria::EQUAL ); - $c->add ( ContentPeer::CON_ID, $uids, Criteria::IN ); - - $dt = ContentPeer::doSelectRS ($c); - $dt->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - while( $dt->next() ) { - $row = $dt->getRow(); - $processesDetails[$row['CON_ID']] [$row['CON_CATEGORY']] = $row['CON_VALUE']; - } - - G::loadClass('configuration'); - $oConf = new Configurations; - $oConf->loadConfig($obj, 'ENVIRONMENT_SETTINGS',''); - - foreach( $processes as $i=>$process ) { - $processes[$i]['PRO_TITLE'] = $processes[$i]['PRO_DESCRIPTION'] = ''; - - if (isset($processesDetails[$process['PRO_UID']]['PRO_TITLE'])) - $processes[$i]['PRO_TITLE'] = $processesDetails[$process['PRO_UID']]['PRO_TITLE']; - - if (isset($processesDetails[$process['PRO_UID']])) - $processes[$i]['PRO_DESCRIPTION'] = $processesDetails[$process['PRO_UID']]['PRO_DESCRIPTION']; - } - - return $processes; - } - - /** - * Update the Prolication row - * @param array $aData - * @return variant - **/ - - public function update($aData) - { - if (isset($aData['PRO_DYNAFORMS']) && is_array($aData['PRO_DYNAFORMS'])) { - $aData['PRO_DYNAFORMS'] = @serialize($aData['PRO_DYNAFORMS']); - } - - $con = Propel::getConnection( ProcessPeer::DATABASE_NAME ); - try { - $con->begin(); - $oPro = ProcessPeer::retrieveByPK( $aData['PRO_UID'] ); - if (is_object ($oPro) && get_class ($oPro) == 'Process' ) { - $oPro->fromArray( $aData, BasePeer::TYPE_FIELDNAME ); - if ($oPro->validate()) { - if ( isset ( $aData['PRO_TITLE'] ) ) - $oPro->setProTitle( $aData['PRO_TITLE'] ); - - if ( isset ( $aData['PRO_DESCRIPTION'] ) ) - $oPro->setProDescription( $aData['PRO_DESCRIPTION'] ); - $res = $oPro->save(); - $con->commit(); - - $this->memcachedDelete(); - - return $res; + //execute the query + $oDataset = ProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $processes = Array (); + $uids = array (); + while ($oDataset->next()) { + $processes[] = $oDataset->getRow(); + $uids[] = $processes[sizeof( $processes ) - 1]['PRO_UID']; } - else { - $msg = ''; - foreach($oPro->getValidationFailures() as $objValidationFailure) - $msg .= $objValidationFailure->getMessage() . "
"; - throw ( new Exception ( 'The row cannot be updated!' . $msg ) ); + //process details will have the info about the processes + $processesDetails = Array (); + + //now get the labels for all process, using an array of Uids, + $c = new Criteria( 'workflow' ); + //$c->add ( ContentPeer::CON_CATEGORY, 'PRO_TITLE', Criteria::EQUAL ); + $c->add( ContentPeer::CON_LANG, defined( 'SYS_LANG' ) ? SYS_LANG : 'en', Criteria::EQUAL ); + $c->add( ContentPeer::CON_ID, $uids, Criteria::IN ); + + $dt = ContentPeer::doSelectRS( $c ); + $dt->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + while ($dt->next()) { + $row = $dt->getRow(); + $processesDetails[$row['CON_ID']][$row['CON_CATEGORY']] = $row['CON_VALUE']; } - } - else { - $con->rollback(); - throw( new Exception( "The row '" . $aData['PRO_UID'] ."' in table Process doesn't exist!" )); - } - } - catch (Exception $oError) { - throw($oError); - } - } - /** - * creates an Application row - * @param array $aData - * @return variant - **/ + G::loadClass( 'configuration' ); + $oConf = new Configurations(); + $oConf->loadConfig( $obj, 'ENVIRONMENT_SETTINGS', '' ); - public function createRow($aData) - { - $con = Propel::getConnection( ProcessPeer::DATABASE_NAME ); - //$con->begin(); //does not allow dual BEGIN - $this->setProUid ( $aData['PRO_UID'] ); - $this->setProParent ( $aData['PRO_PARENT'] ); - $this->setProTime ( $aData['PRO_TIME'] ); - $this->setProTimeunit ( $aData['PRO_TIMEUNIT'] ); - $this->setProStatus ( $aData['PRO_STATUS'] ); - $this->setProTypeDay ( $aData['PRO_TYPE_DAY'] ); - $this->setProType ( $aData['PRO_TYPE'] ); - $this->setProAssignment ( $aData['PRO_ASSIGNMENT'] ); - $this->setProShowMap ( $aData['PRO_SHOW_MAP'] ); - $this->setProShowMessage ( $aData['PRO_SHOW_MESSAGE'] ); - $this->setProSubprocess ( isset($aData['PRO_SUBPROCESS']) ? $aData['PRO_SUBPROCESS'] : '' ); - $this->setProTriDeleted ( isset($aData['PRO_TRI_DELETED']) ? $aData['PRO_TRI_DELETED'] : '' ); - $this->setProTriCanceled ( isset($aData['PRO_TRI_CANCELED']) ? $aData['PRO_TRI_CANCELED'] : '' ); - $this->setProTriPaused ( isset($aData['PRO_TRI_PAUSED']) ? $aData['PRO_TRI_PAUSED'] : '' ); - $this->setProTriReassigned( isset($aData['PRO_TRI_REASSIGNED']) ? $aData['PRO_TRI_REASSIGNED'] : '' ); - $this->setProShowDelegate ( $aData['PRO_SHOW_DELEGATE'] ); - $this->setProShowDynaform ( $aData['PRO_SHOW_DYNAFORM'] ); + foreach ($processes as $process) { + $proTitle = isset( $processesDetails[$process['PRO_UID']] ) && isset( $processesDetails[$process['PRO_UID']]['PRO_TITLE'] ) ? $processesDetails[$process['PRO_UID']]['PRO_TITLE'] : ''; + $proDescription = isset( $processesDetails[$process['PRO_UID']] ) && isset( $processesDetails[$process['PRO_UID']]['PRO_DESCRIPTION'] ) ? $processesDetails[$process['PRO_UID']]['PRO_DESCRIPTION'] : ''; - // validate if the category exists - $criteria = new Criteria('workflow'); - $criteria->add(ProcessCategoryPeer::CATEGORY_UID, $aData['PRO_CATEGORY']); - $ds = ProcessCategoryPeer::doSelectRS ($criteria); - $ds->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $ds->next(); - // if it is not set, set value as empty "No Category" - if (!$ds->getRow()) { - $aData['PRO_CATEGORY'] = ''; - } + // verify if the title is already set on the current language + if (trim( $proTitle ) == '') { + // if not, then load the record to generate content for current language + $proData = $this->load( $process['PRO_UID'] ); + $proTitle = $proData['PRO_TITLE']; + $proDescription = $proData['PRO_DESCRIPTION']; + } - $this->setProCategory ( $aData['PRO_CATEGORY'] ); - $this->setProSubCategory ( $aData['PRO_SUB_CATEGORY'] ); - $this->setProIndustry ( $aData['PRO_INDUSTRY'] ); - $this->setProCreateDate ( $aData['PRO_CREATE_DATE'] ); - $this->setProCreateUser ( $aData['PRO_CREATE_USER'] ); - $this->setProHeight ( $aData['PRO_HEIGHT'] ); - $this->setProWidth ( $aData['PRO_WIDTH'] ); - $this->setProTitleX ( $aData['PRO_TITLE_X'] ); - $this->setProTitleY ( $aData['PRO_TITLE_Y'] ); - $this->setProDynaforms ( isset($aData['PRO_DYNAFORMS']) ? (is_array($aData['PRO_DYNAFORMS']) ? serialize($aData['PRO_DYNAFORMS']) : $aData['PRO_DYNAFORMS']) : '' ); - if ( $this->validate() ) { - $con->begin(); - $res = $this->save(); + //filtering by $processName + if (isset( $processName ) && $processName != '' && stripos( $proTitle, $processName ) === false) { + continue; + } - if (isset ( $aData['PRO_TITLE'] ) && trim ($aData['PRO_TITLE']) != '' ) - $this->setProTitle ( $aData['PRO_TITLE'] ); - else - $this->setProTitle ( 'Default Process Title' ); + if ($counters) { + $casesCountTotal = 0; + if (isset( $casesCnt[$process['PRO_UID']] )) { + foreach ($casesCnt[$process['PRO_UID']] as $item) { + $casesCountTotal += $item; + } + } + } - if (isset ( $aData['PRO_DESCRIPTION'] ) ) - $this->setProDescription ( $aData['PRO_DESCRIPTION'] ); - else - $this->setProDescription ( 'Default Process Description' ); + //get user format from configuration + $userOwner = isset( $oConf->aConfig['format'] ) ? $oConf->aConfig['format'] : ''; + $creationDateMask = isset( $oConf->aConfig['dateFormat'] ) ? $oConf->aConfig['dateFormat'] : ''; + if ($userOwner != '') { + $userOwner = str_replace( '@userName', $process['USR_USERNAME'], $userOwner ); + $userOwner = str_replace( '@firstName', $process['USR_FIRSTNAME'], $userOwner ); + $userOwner = str_replace( '@lastName', $process['USR_LASTNAME'], $userOwner ); + if ($userOwner == " ( )") { + $userOwner = '-'; + } + } else { + $userOwner = $process['USR_FIRSTNAME'] . ' ' . $process['USR_LASTNAME']; + } - $con->commit(); + //get date format from configuration + if ($creationDateMask != '') { + list ($date, $time) = explode( ' ', $process['PRO_CREATE_DATE'] ); + list ($y, $m, $d) = explode( '-', $date ); + list ($h, $i, $s) = explode( ':', $time ); - $this->memcachedDelete(); + $process['PRO_CREATE_DATE'] = date( $creationDateMask, mktime( $h, $i, $s, $m, $d, $y ) ); + } - return $this->getProUid(); - } - else { - $msg = ''; - foreach($this->getValidationFailures() as $objValidationFailure) - $msg .= $objValidationFailure->getMessage() . "
"; + $process['PRO_CATEGORY_LABEL'] = trim( $process['PRO_CATEGORY'] ) != '' ? $process['CATEGORY_NAME'] : G::LoadTranslation( 'ID_PROCESS_NO_CATEGORY' ); + $process['PRO_TITLE'] = $proTitle; + $process['PRO_DESCRIPTION'] = $proDescription; + $process['PRO_DEBUG'] = $process['PRO_DEBUG']; + $process['PRO_DEBUG_LABEL'] = ($process['PRO_DEBUG'] == "1") ? G::LoadTranslation( 'ID_ON' ) : G::LoadTranslation( 'ID_OFF' ); + $process['PRO_STATUS_LABEL'] = $process['PRO_STATUS'] == 'ACTIVE' ? G::LoadTranslation( 'ID_ACTIVE' ) : G::LoadTranslation( 'ID_INACTIVE' ); + $process['PRO_CREATE_USER_LABEL'] = $userOwner; + if ($counters) { + $process['CASES_COUNT_TO_DO'] = (isset( $casesCnt[$process['PRO_UID']]['TO_DO'] ) ? $casesCnt[$process['PRO_UID']]['TO_DO'] : 0); + $process['CASES_COUNT_COMPLETED'] = (isset( $casesCnt[$process['PRO_UID']]['COMPLETED'] ) ? $casesCnt[$process['PRO_UID']]['COMPLETED'] : 0); + $process['CASES_COUNT_DRAFT'] = (isset( $casesCnt[$process['PRO_UID']]['DRAFT'] ) ? $casesCnt[$process['PRO_UID']]['DRAFT'] : 0); + $process['CASES_COUNT_CANCELLED'] = (isset( $casesCnt[$process['PRO_UID']]['CANCELLED'] ) ? $casesCnt[$process['PRO_UID']]['CANCELLED'] : 0); + $process['CASES_COUNT'] = $casesCountTotal; + } - throw ( new PropelException ( 'The row cannot be created!', new PropelException ( $msg ) ) ); - } + unset( $process['PRO_CREATE_USER'] ); - } + $aProcesses[] = $process; - /** - * Remove the Prolication document registry - * @param array $aData or string $ProUid - * @return string - **/ - public function remove($ProUid) - { - if ( is_array ( $ProUid ) ) { - $ProUid = ( isset ( $ProUid['PRO_UID'] ) ? $ProUid['PRO_UID'] : '' ); - } - try { - $oPro = ProcessPeer::retrieveByPK( $ProUid ); - if (!is_null($oPro)) - { - Content::removeContent('PRO_TITLE', '', $oPro->getProUid()); - Content::removeContent('PRO_DESCRIPTION', '', $oPro->getProUid()); - - $this->memcachedDelete(); - - return $oPro->delete(); - } - else { - throw( new Exception( "The row '$ProUid' in table Process doesn't exist!" )); - } - } - catch (Exception $oError) { - throw($oError); - } - } - - public function exists($ProUid) - { - $oPro = ProcessPeer::retrieveByPk( $ProUid ); - return (is_object ($oPro) && get_class ($oPro) == 'Process' ); - } - - public function existsByProTitle($PRO_TITLE) - { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS PROCESS'); - $oCriteria->add(ContentPeer::CON_CATEGORY, 'PRO_TITLE'); - $oCriteria->add(ContentPeer::CON_LANG, SYS_LANG); - $oCriteria->add(ContentPeer::CON_VALUE, $PRO_TITLE); - $oDataset = ContentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - return $aRow['PROCESS'] ? true : false; - } - - //new functions - function getAllProcessesCount(){ - $c = $this->tmpCriteria; - $c->clearSelectColumns(); - $c->addSelectColumn('COUNT(*)'); - $oDataset = ProcessPeer::doSelectRS($c); - $oDataset->next(); - $aRow = $oDataset->getRow(); - - if( is_array($aRow) ) - return $aRow[0]; - else - return 0; - } - - function getAllProcesses($start, $limit, $category=NULL, $processName=NULL, $counters = true, $reviewSubProcess = false) - { - require_once PATH_RBAC . "model/RbacUsers.php"; - require_once "classes/model/ProcessCategory.php"; - require_once "classes/model/Users.php"; - - $user = new RbacUsers; - $aProcesses = Array(); - $categories = Array(); - $oCriteria = new Criteria('workflow'); - - $oCriteria->addSelectColumn(ProcessPeer::PRO_UID ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_PARENT ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_STATUS ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_CATEGORY ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_CREATE_DATE ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_CREATE_USER ); - $oCriteria->addSelectColumn(ProcessPeer::PRO_DEBUG ); - - $oCriteria->addSelectColumn(UsersPeer::USR_UID ); - $oCriteria->addSelectColumn(UsersPeer::USR_USERNAME ); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME ); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME ); - - $oCriteria->addSelectColumn(ProcessCategoryPeer::CATEGORY_UID ); - $oCriteria->addSelectColumn(ProcessCategoryPeer::CATEGORY_NAME ); - - $oCriteria->add(ProcessPeer::PRO_UID, '', Criteria::NOT_EQUAL); - $oCriteria->add(ProcessPeer::PRO_STATUS, 'DISABLED', Criteria::NOT_EQUAL); - if ($reviewSubProcess) { - $oCriteria->add(ProcessPeer::PRO_SUBPROCESS, '1', Criteria::NOT_EQUAL); - } - - if( isset($category) ) - $oCriteria->add(ProcessPeer::PRO_CATEGORY, $category, Criteria::EQUAL); - - $oCriteria->addJoin(ProcessPeer::PRO_CREATE_USER, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->addJoin(ProcessPeer::PRO_CATEGORY, ProcessCategoryPeer::CATEGORY_UID, Criteria::LEFT_JOIN); - - $this->tmpCriteria = clone $oCriteria; - - if($start != '') - $oCriteria->setOffset($start); - if($limit != '' && !isset($category) && !isset($processName)) - $oCriteria->setLimit($limit); - - //execute a query to obtain numbers, how many cases there are by process - if ($counters) { - $casesCnt = $this->getCasesCountInAllProcesses(); - } - - //execute the query - $oDataset = ProcessPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - $processes = Array(); - $uids=array(); - while( $oDataset->next() ) { - $processes[] = $oDataset->getRow(); - $uids[] = $processes[sizeof($processes)-1]['PRO_UID']; - } - - //process details will have the info about the processes - $processesDetails = Array(); - - //now get the labels for all process, using an array of Uids, - $c = new Criteria('workflow'); - //$c->add ( ContentPeer::CON_CATEGORY, 'PRO_TITLE', Criteria::EQUAL ); - $c->add ( ContentPeer::CON_LANG, defined('SYS_LANG')?SYS_LANG:'en', Criteria::EQUAL ); - $c->add ( ContentPeer::CON_ID, $uids, Criteria::IN ); - - $dt = ContentPeer::doSelectRS ($c); - $dt->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - while( $dt->next() ) { - $row = $dt->getRow(); - $processesDetails[$row['CON_ID']] [$row['CON_CATEGORY']] = $row['CON_VALUE']; - } - - G::loadClass('configuration'); - $oConf = new Configurations; - $oConf->loadConfig($obj, 'ENVIRONMENT_SETTINGS',''); - - foreach( $processes as $process ) { - $proTitle = isset($processesDetails[$process['PRO_UID']]) && isset($processesDetails[$process['PRO_UID']]['PRO_TITLE']) ? $processesDetails[$process['PRO_UID']]['PRO_TITLE'] : ''; - $proDescription = isset($processesDetails[$process['PRO_UID']]) && isset($processesDetails[$process['PRO_UID']]['PRO_DESCRIPTION']) ? $processesDetails[$process['PRO_UID']]['PRO_DESCRIPTION']: ''; - - // verify if the title is already set on the current language - if ( trim($proTitle) == '') { - // if not, then load the record to generate content for current language - $proData = $this->load($process['PRO_UID']); - $proTitle = $proData['PRO_TITLE']; - $proDescription = $proData['PRO_DESCRIPTION']; - } - - //filtering by $processName - if( isset($processName) && $processName != '' && stripos($proTitle, $processName) === false){ - continue; - } - - if ($counters) { - $casesCountTotal = 0; - if( isset($casesCnt[$process['PRO_UID']]) ) { - foreach($casesCnt[$process['PRO_UID']] as $item) { - $casesCountTotal += $item; - } } - } - - //get user format from configuration - $userOwner = isset($oConf->aConfig['format'])? $oConf->aConfig['format']: ''; - $creationDateMask = isset($oConf->aConfig['dateFormat'])? $oConf->aConfig['dateFormat']: ''; - if( $userOwner != '' ) { - $userOwner = str_replace('@userName', $process['USR_USERNAME'], $userOwner); - $userOwner = str_replace('@firstName', $process['USR_FIRSTNAME'], $userOwner); - $userOwner = str_replace('@lastName', $process['USR_LASTNAME'], $userOwner); - if ( $userOwner == " ( )" ) $userOwner = '-'; - } - else { - $userOwner = $process['USR_FIRSTNAME'].' '.$process['USR_LASTNAME']; - } - - //get date format from configuration - if( $creationDateMask != '' ){ - list($date, $time) = explode(' ', $process['PRO_CREATE_DATE']); - list($y, $m, $d) = explode('-', $date); - list($h, $i, $s) = explode(':', $time); - - $process['PRO_CREATE_DATE'] = date($creationDateMask, mktime($h, $i, $s, $m, $d, $y)); - } - - $process['PRO_CATEGORY_LABEL'] = trim($process['PRO_CATEGORY']) != ''? $process['CATEGORY_NAME']: G::LoadTranslation('ID_PROCESS_NO_CATEGORY'); - $process['PRO_TITLE'] = $proTitle; - $process['PRO_DESCRIPTION'] = $proDescription; - $process['PRO_DEBUG'] = $process['PRO_DEBUG']; - $process['PRO_DEBUG_LABEL'] = ($process['PRO_DEBUG']=="1")? G::LoadTranslation('ID_ON'): G::LoadTranslation('ID_OFF'); - $process['PRO_STATUS_LABEL'] = $process ['PRO_STATUS'] == 'ACTIVE'? G::LoadTranslation ('ID_ACTIVE'): G::LoadTranslation('ID_INACTIVE'); - $process['PRO_CREATE_USER_LABEL'] = $userOwner; - if ($counters) { - $process['CASES_COUNT_TO_DO'] = (isset($casesCnt[$process['PRO_UID']]['TO_DO'])? $casesCnt[$process['PRO_UID']]['TO_DO']: 0); - $process['CASES_COUNT_COMPLETED'] = (isset($casesCnt[$process['PRO_UID']]['COMPLETED'])? $casesCnt[$process['PRO_UID']]['COMPLETED']: 0); - $process['CASES_COUNT_DRAFT'] = (isset($casesCnt[$process['PRO_UID']]['DRAFT'])? $casesCnt[$process['PRO_UID']]['DRAFT']: 0); - $process['CASES_COUNT_CANCELLED'] = (isset($casesCnt[$process['PRO_UID']]['CANCELLED'])? $casesCnt[$process['PRO_UID']]['CANCELLED']: 0); - $process['CASES_COUNT'] = $casesCountTotal; - } - - unset( $process['PRO_CREATE_USER']); - - $aProcesses[] = $process; + usort( $aProcesses, 'ordProcessByProTitle' ); + return $aProcesses; } - usort($aProcesses, 'ordProcessByProTitle'); - return $aProcesses; - } + function getCasesCountInAllProcesses () + { + /*SELECT PRO_UID, APP_STATUS, COUNT( * ) + FROM APPLICATION + GROUP BY PRO_UID, APP_STATUS*/ + require_once 'classes/model/Application.php'; - function getCasesCountInAllProcesses(){ - /*SELECT PRO_UID, APP_STATUS, COUNT( * ) - FROM APPLICATION - GROUP BY PRO_UID, APP_STATUS*/ - require_once 'classes/model/Application.php'; + $memcache = & PMmemcached::getSingleton( SYS_SYS ); + $memkey = 'getCasesCountInAllProcesses'; + if (($aProcesses = $memcache->get( $memkey )) === false) { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ApplicationPeer::PRO_UID ); + $oCriteria->addSelectColumn( ApplicationPeer::APP_STATUS ); + $oCriteria->addSelectColumn( 'COUNT(*) AS CNT' ); + $oCriteria->addGroupByColumn( ApplicationPeer::PRO_UID ); + $oCriteria->addGroupByColumn( ApplicationPeer::APP_STATUS ); - $memcache = & PMmemcached::getSingleton(SYS_SYS); - $memkey = 'getCasesCountInAllProcesses'; - if ( ($aProcesses = $memcache->get( $memkey )) === false ) { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ApplicationPeer::PRO_UID); - $oCriteria->addSelectColumn(ApplicationPeer::APP_STATUS); - $oCriteria->addSelectColumn('COUNT(*) AS CNT'); - $oCriteria->addGroupByColumn(ApplicationPeer::PRO_UID); - $oCriteria->addGroupByColumn(ApplicationPeer::APP_STATUS); + $oDataset = ProcessPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $oDataset = ProcessPeer::doSelectRS ( $oCriteria ); - $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - - $aProcesses = Array(); - while($oDataset->next()) { - $row = $oDataset->getRow(); - $aProcesses[$row['PRO_UID']][$row['APP_STATUS']] = $row['CNT']; - } - $memcache->set( $memkey , $aProcesses, PMmemcached::ONE_HOUR ); - } - return $aProcesses; - } - - function getAllProcessesByCategory(){ - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(ProcessPeer::PRO_CATEGORY); - $oCriteria->addSelectColumn('COUNT(*) AS CNT'); - $oCriteria->addGroupByColumn(ProcessPeer::PRO_CATEGORY); - $oDataSet = ProcessPeer::doSelectRS($oCriteria); - $oDataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $aProc = Array(); - while ($oDataSet->next()){ - $row = $oDataSet->getRow(); - $aProc[$row['PRO_CATEGORY']] = $row['CNT']; - } - return $aProc; - } - - function getTriggerWebBotProcess ($proUid, $action) - { - require_once ("classes/model/Triggers.php"); - - if ((!isset($proUid) && $proUid == '') || (!isset($action) && $action == '')) { - return false; + $aProcesses = Array (); + while ($oDataset->next()) { + $row = $oDataset->getRow(); + $aProcesses[$row['PRO_UID']][$row['APP_STATUS']] = $row['CNT']; + } + $memcache->set( $memkey, $aProcesses, PMmemcached::ONE_HOUR ); + } + return $aProcesses; } - $action = G::toUpper($action); - $webBotTrigger = ''; - - switch ($action) { - case 'DELETED': - $var = ProcessPeer::PRO_TRI_DELETED; - break; - case 'CANCELED': - $var = ProcessPeer::PRO_TRI_CANCELED; - break; - case 'PAUSED': - $var = ProcessPeer::PRO_TRI_PAUSED; - break; - case 'REASSIGNED': - $var = ProcessPeer::PRO_TRI_REASSIGNED; - break; + function getAllProcessesByCategory () + { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ProcessPeer::PRO_CATEGORY ); + $oCriteria->addSelectColumn( 'COUNT(*) AS CNT' ); + $oCriteria->addGroupByColumn( ProcessPeer::PRO_CATEGORY ); + $oDataSet = ProcessPeer::doSelectRS( $oCriteria ); + $oDataSet->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $aProc = Array (); + while ($oDataSet->next()) { + $row = $oDataSet->getRow(); + $aProc[$row['PRO_CATEGORY']] = $row['CNT']; + } + return $aProc; } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn($var); - $oCriteria->addSelectColumn(TriggersPeer::TRI_WEBBOT); - $oCriteria->addJoin($var, TriggersPeer::TRI_UID, Criteria::LEFT_JOIN); - $oCriteria->add(ProcessPeer::PRO_UID, $proUid); - $oDataSet = ProcessPeer::doSelectRS($oCriteria); - $oDataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); - if ($oDataSet->next()) { - $row = $oDataSet->getRow(); - $webBotTrigger = $row['TRI_WEBBOT']; + function getTriggerWebBotProcess ($proUid, $action) + { + require_once ("classes/model/Triggers.php"); + + if ((! isset( $proUid ) && $proUid == '') || (! isset( $action ) && $action == '')) { + return false; + } + + $action = G::toUpper( $action ); + $webBotTrigger = ''; + + switch ($action) { + case 'DELETED': + $var = ProcessPeer::PRO_TRI_DELETED; + break; + case 'CANCELED': + $var = ProcessPeer::PRO_TRI_CANCELED; + break; + case 'PAUSED': + $var = ProcessPeer::PRO_TRI_PAUSED; + break; + case 'REASSIGNED': + $var = ProcessPeer::PRO_TRI_REASSIGNED; + break; + } + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( $var ); + $oCriteria->addSelectColumn( TriggersPeer::TRI_WEBBOT ); + $oCriteria->addJoin( $var, TriggersPeer::TRI_UID, Criteria::LEFT_JOIN ); + $oCriteria->add( ProcessPeer::PRO_UID, $proUid ); + $oDataSet = ProcessPeer::doSelectRS( $oCriteria ); + + $oDataSet->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + if ($oDataSet->next()) { + $row = $oDataSet->getRow(); + $webBotTrigger = $row['TRI_WEBBOT']; + } + return $webBotTrigger; } - return $webBotTrigger; - } - public function memcachedDelete() + public function memcachedDelete () { //Limit defined in processmaker/workflow/engine/templates/processes/main.js $limit = 25; $start = 0; - $memcache = &PMmemcached::getSingleton(SYS_SYS); + $memcache = &PMmemcached::getSingleton( SYS_SYS ); - for ($start = 0; $start <= 50 - 1; $start++) { + for ($start = 0; $start <= 50 - 1; $start ++) { $memkey = "processList-allProcesses-" . ($start * $limit) . "-" . $limit; $memkeyTotal = $memkey . "-total"; - $r = $memcache->delete($memkey); - $r = $memcache->delete($memkeyTotal); + $r = $memcache->delete( $memkey ); + $r = $memcache->delete( $memkeyTotal ); } } -} //Process - -function ordProcessByProTitle($a, $b){ - - if ($a['PRO_TITLE']>$b['PRO_TITLE']) { - return 1; - } elseif ($a['PRO_TITLE']<$b['PRO_TITLE']) { - return -1; - } else { - return 0; - } - - - } +//Process + + +function ordProcessByProTitle ($a, $b) +{ + + if ($a['PRO_TITLE'] > $b['PRO_TITLE']) { + return 1; + } elseif ($a['PRO_TITLE'] < $b['PRO_TITLE']) { + return - 1; + } else { + return 0; + } +} +