initial commit from rev. 632
This commit is contained in:
307
workflow/engine/classes/model/AppEvent.php
Normal file
307
workflow/engine/classes/model/AppEvent.php
Normal file
@@ -0,0 +1,307 @@
|
||||
<?php
|
||||
|
||||
require_once 'classes/model/om/BaseAppEvent.php';
|
||||
|
||||
|
||||
/**
|
||||
* Skeleton subclass for representing a row from the 'APP_EVENT' table.
|
||||
*
|
||||
*
|
||||
*
|
||||
* You should add additional methods to this class to meet the
|
||||
* application requirements. This class will only be generated as
|
||||
* long as it does not already exist in the output directory.
|
||||
*
|
||||
* @package classes.model
|
||||
*/
|
||||
class AppEvent extends BaseAppEvent {
|
||||
public function load($sApplicationUID, $iDelegation) {
|
||||
try {
|
||||
$oAppEvent = AppEventPeer::retrieveByPK($sApplicationUID, $iDelegation);
|
||||
if (!is_null($oAppEvent)) {
|
||||
$aFields = $oAppEvent->toArray(BasePeer::TYPE_FIELDNAME);
|
||||
$this->fromArray($aFields, BasePeer::TYPE_FIELDNAME);
|
||||
return $aFields;
|
||||
}
|
||||
else {
|
||||
throw(new Exception('This row doesn\'t exist!'));
|
||||
}
|
||||
}
|
||||
catch (Exception $oError) {
|
||||
throw($oError);
|
||||
}
|
||||
}
|
||||
|
||||
function create($aData) {
|
||||
$oConnection = Propel::getConnection(AppEventPeer::DATABASE_NAME);
|
||||
try {
|
||||
$oAppEvent = new AppEvent();
|
||||
$oAppEvent->fromArray($aData, BasePeer::TYPE_FIELDNAME);
|
||||
if ($oAppEvent->validate()) {
|
||||
$oConnection->begin();
|
||||
$iResult = $oAppEvent->save();
|
||||
$oConnection->commit();
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
$sMessage = '';
|
||||
$aValidationFailures = $oAppEvent->getValidationFailures();
|
||||
foreach($aValidationFailures as $oValidationFailure) {
|
||||
$sMessage .= $oValidationFailure->getMessage() . '<br />';
|
||||
}
|
||||
throw(new Exception('The registry cannot be created!<br />' . $sMessage));
|
||||
}
|
||||
}
|
||||
catch (Exception $oError) {
|
||||
$oConnection->rollback();
|
||||
throw($oError);
|
||||
}
|
||||
}
|
||||
|
||||
function update($aData) {
|
||||
$oConnection = Propel::getConnection(AppEventPeer::DATABASE_NAME);
|
||||
try {
|
||||
$oAppEvent = AppEventPeer::retrieveByPK($aData['APP_UID'], $aData['DEL_INDEX']);
|
||||
if (!is_null($oAppEvent)) {
|
||||
$oAppEvent->fromArray($aData, BasePeer::TYPE_FIELDNAME);
|
||||
if ($oAppEvent->validate()) {
|
||||
$oConnection->begin();
|
||||
$iResult = $oAppEvent->save();
|
||||
$oConnection->commit();
|
||||
return $iResult;
|
||||
}
|
||||
else {
|
||||
$sMessage = '';
|
||||
$aValidationFailures = $oAppEvent->getValidationFailures();
|
||||
foreach($aValidationFailures as $oValidationFailure) {
|
||||
$sMessage .= $oValidationFailure->getMessage() . '<br />';
|
||||
}
|
||||
throw(new Exception('The registry cannot be updated!<br />'.$sMessage));
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw(new Exception('This row doesn\'t exist!'));
|
||||
}
|
||||
}
|
||||
catch (Exception $oError) {
|
||||
$oConnection->rollback();
|
||||
throw($oError);
|
||||
}
|
||||
}
|
||||
|
||||
function remove($sApplicationUID, $iDelegation, $sEvnUid) {
|
||||
$oConnection = Propel::getConnection(AppEventPeer::DATABASE_NAME);
|
||||
try {
|
||||
$oAppEvent = AppEventPeer::retrieveByPK($sApplicationUID, $iDelegation, $sEvnUid);
|
||||
if (!is_null($oAppEvent)) {
|
||||
$oConnection->begin();
|
||||
$iResult = $oAppEvent->delete();
|
||||
$oConnection->commit();
|
||||
return $iResult;
|
||||
}
|
||||
else {
|
||||
throw(new Exception('This row doesn\'t exist!'));
|
||||
}
|
||||
}
|
||||
catch (Exception $oError) {
|
||||
$oConnection->rollback();
|
||||
throw($oError);
|
||||
}
|
||||
}
|
||||
|
||||
function getAppEventsCriteria($sProcessUid, $sStatus = '', $EVN_ACTION='') {
|
||||
try {
|
||||
require_once 'classes/model/Event.php';
|
||||
$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::PRO_UID);
|
||||
$oCriteria->addSelectColumn(EventPeer::EVN_WHEN_OCCURS);
|
||||
$oCriteria->addSelectColumn(EventPeer::EVN_ACTION);
|
||||
$oCriteria->addAsColumn('EVN_DESCRIPTION', 'C1.CON_VALUE');
|
||||
$oCriteria->addAsColumn('TAS_TITLE', 'C2.CON_VALUE');
|
||||
$oCriteria->addAsColumn('APP_TITLE', 'C3.CON_VALUE');
|
||||
$oCriteria->addAlias('C1', 'CONTENT');
|
||||
$oCriteria->addAlias('C2', 'CONTENT');
|
||||
$oCriteria->addAlias('C3', 'CONTENT');
|
||||
$oCriteria->addJoin(AppEventPeer::EVN_UID, EventPeer::EVN_UID, Criteria::LEFT_JOIN);
|
||||
$del = DBAdapter::getStringDelimiter();
|
||||
$aConditions = array();
|
||||
$aConditions[] = array(EventPeer::EVN_UID, 'C1.CON_ID');
|
||||
$aConditions[] = array('C1.CON_CATEGORY', $del . 'EVN_DESCRIPTION' . $del);
|
||||
$aConditions[] = array('C1.CON_LANG', $del . SYS_LANG . $del);
|
||||
$oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
|
||||
$aConditions = array();
|
||||
$aConditions[] = array(AppEventPeer::APP_UID, AppDelegationPeer::APP_UID);
|
||||
$aConditions[] = array(AppEventPeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX);
|
||||
$oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
|
||||
$aConditions = array();
|
||||
$aConditions[] = array(AppDelegationPeer::TAS_UID, 'C2.CON_ID');
|
||||
$aConditions[] = array('C2.CON_CATEGORY', $del . 'TAS_TITLE' . $del);
|
||||
$aConditions[] = array('C2.CON_LANG', $del . SYS_LANG . $del);
|
||||
$oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
|
||||
$aConditions = array();
|
||||
$aConditions[] = array(AppDelegationPeer::APP_UID, 'C3.CON_ID');
|
||||
$aConditions[] = array('C3.CON_CATEGORY', $del . 'APP_TITLE' . $del);
|
||||
$aConditions[] = array('C3.CON_LANG', $del . SYS_LANG . $del);
|
||||
$oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
|
||||
$oCriteria->add(AppEventPeer::EVN_UID, '', Criteria::NOT_EQUAL);
|
||||
$oCriteria->add(EventPeer::PRO_UID, $sProcessUid);
|
||||
|
||||
if($EVN_ACTION != ''){
|
||||
$oCriteria->add(EventPeer::EVN_ACTION, $EVN_ACTION);
|
||||
}
|
||||
|
||||
switch ($sStatus) {
|
||||
case '':
|
||||
//Nothing
|
||||
break;
|
||||
case 'PENDING':
|
||||
$oCriteria->add(AppEventPeer::APP_EVN_STATUS, 'OPEN');
|
||||
break;
|
||||
case 'COMPLETED':
|
||||
$oCriteria->add(AppEventPeer::APP_EVN_STATUS, 'CLOSE');
|
||||
break;
|
||||
}
|
||||
$oCriteria->addDescendingOrderByColumn(AppEventPeer::APP_EVN_ACTION_DATE);
|
||||
return $oCriteria;
|
||||
}
|
||||
catch (Exception $oError) {
|
||||
throw($oError);
|
||||
}
|
||||
}
|
||||
|
||||
function executeEvents($sNow, $debug=false) {
|
||||
|
||||
require_once 'classes/model/Configuration.php';
|
||||
require_once 'classes/model/Triggers.php';
|
||||
G::LoadClass('case');
|
||||
|
||||
$debug = 1;
|
||||
$oCase = new Cases();
|
||||
|
||||
try {
|
||||
$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::PRO_UID);
|
||||
$oCriteria->addSelectColumn(EventPeer::EVN_ACTION);
|
||||
$oCriteria->addSelectColumn(EventPeer::TRI_UID);
|
||||
$oCriteria->addSelectColumn(EventPeer::EVN_ACTION_PARAMETERS);
|
||||
$oCriteria->addSelectColumn(EventPeer::EVN_RELATED_TO);
|
||||
$oCriteria->addSelectColumn(AppDelegationPeer::USR_UID);
|
||||
$oCriteria->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
|
||||
$oCriteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE);
|
||||
|
||||
|
||||
$oCriteria->addJoin(AppEventPeer::EVN_UID, EventPeer::EVN_UID, Criteria::JOIN);
|
||||
|
||||
$aConditions = array();
|
||||
array_push($aConditions, Array(AppEventPeer::APP_UID, AppDelegationPeer::APP_UID));
|
||||
array_push($aConditions, Array(AppEventPeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX));
|
||||
$oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN);
|
||||
|
||||
$oCriteria->addJoin(ApplicationPeer::APP_UID, AppEventPeer::APP_UID);
|
||||
|
||||
$oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); //by me
|
||||
$oCriteria->add(AppEventPeer::APP_EVN_STATUS, 'OPEN');
|
||||
$oCriteria->add(AppEventPeer::APP_EVN_ACTION_DATE, $sNow, Criteria::LESS_EQUAL);
|
||||
|
||||
$oDataset = AppEventPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
$c = 0;
|
||||
while ($oDataset->next()){
|
||||
|
||||
$c++;
|
||||
$aRow = $oDataset->getRow();
|
||||
$oTrigger = new Triggers();
|
||||
$aFields = $oCase->loadCase($aRow['APP_UID']);
|
||||
$oAppEvent = AppEventPeer::retrieveByPK($aRow['APP_UID'], $aRow['DEL_INDEX'], $aRow['EVN_UID']);
|
||||
|
||||
//g::pr($aRow); //die;
|
||||
|
||||
if($debug){
|
||||
require_once 'classes/model/Application.php';
|
||||
$oApp = ApplicationPeer::retrieveByPk($aRow['APP_UID']);
|
||||
$oEv = EventPeer::retrieveByPk($aRow['EVN_UID']);
|
||||
|
||||
println("\nOK+ event \"".$oEv->getEvnDescription()."\" with ID {$aRow['EVN_UID']} was found");
|
||||
println(" - PROCESS................".$aRow['PRO_UID']);
|
||||
println(" - APPLICATION............".$aRow['APP_UID']." CASE #".$oApp->getAppNumber());
|
||||
println(" - ACTION DATE............".$aRow['APP_EVN_ACTION_DATE']);
|
||||
println(" - ATTEMPTS...............".$aRow['APP_EVN_ATTEMPTS']);
|
||||
println(" - INTERVAL WITH TASKS....".$aRow['EVN_RELATED_TO']);
|
||||
}
|
||||
|
||||
if ($aRow['TRI_UID'] == '') {
|
||||
//a rare case when the tri_uid is not set.
|
||||
if($debug) println(" (!) Any trigger was set................................SKIPPED and will be CLOSED");
|
||||
$oAppEvent->setAppEvnStatus('CLOSE');
|
||||
$oAppEvent->save();
|
||||
continue;
|
||||
}
|
||||
|
||||
$oTrigger = TriggersPeer::retrieveByPk($aRow['TRI_UID']);
|
||||
if( !is_object($oTrigger) ){
|
||||
//the trigger record doesn't exist..
|
||||
if($debug) println(" (!) The trigger {$aRow['TRI_UID']} {$oTrigger->getTriTitle()} doesn't exist.......SKIPPED and will be CLOSED");
|
||||
$oAppEvent->setAppEvnStatus('CLOSE');
|
||||
$oAppEvent->save();
|
||||
continue;
|
||||
}
|
||||
|
||||
$oPMScript = new PMScript();
|
||||
|
||||
$oPMScript->setFields($aFields['APP_DATA']);
|
||||
$oPMScript->setScript($oTrigger->getTriWebbot());
|
||||
|
||||
$oPMScript->execute();
|
||||
|
||||
$oAppEvent->setAppEvnLastExecutionDate(date('Y-m-d H:i:s'));
|
||||
|
||||
if( sizeof($_SESSION['TRIGGER_DEBUG']['ERRORS']) == 0 ){
|
||||
if($debug) println(" - The trigger '{$oTrigger->getTriTitle()}' was executed successfully!");
|
||||
//g::pr($aFields);
|
||||
$aFields['APP_DATA'] = $oPMScript->aFields;
|
||||
$oCase->updateCase($aRow['APP_UID'], $aFields);
|
||||
$oAppEvent->setAppEvnStatus('CLOSE');
|
||||
} else {
|
||||
if($debug) {
|
||||
println(" - The trigger {$aRow['TRI_UID']} throw some errors!");
|
||||
print_r($_SESSION['TRIGGER_DEBUG']['ERRORS']);
|
||||
}
|
||||
if ( $oAppEvent->getAppEvnAttempts() > 0 ){
|
||||
$oAppEvent->setAppEvnAttempts($oAppEvent->getAppEvnAttempts() - 1);
|
||||
} else {
|
||||
$oAppEvent->setAppEvnStatus('CLOSE');
|
||||
}
|
||||
}
|
||||
$oAppEvent->save();
|
||||
}
|
||||
return $c;
|
||||
}
|
||||
catch (Exception $oError) {
|
||||
die($oError->getMessage());
|
||||
return $oError->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
function close($APP_UID, $DEL_INDEX){
|
||||
$aRow = $this->load($APP_UID, $DEL_INDEX);
|
||||
$aRow['APP_EVN_STATUS'] = 'CLOSE';
|
||||
$this->update($aRow);
|
||||
}
|
||||
|
||||
} // AppEvent
|
||||
Reference in New Issue
Block a user