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;
+ }
+}
+