From 24d1879db0fe1502dfa1a39341bd9dd0f5e7f2e2 Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Date: Fri, 17 Aug 2012 18:55:03 -0400 Subject: [PATCH] BUG 9555 Event log inside Process Designer SOLVED - According to the specifications. - Was removed the option completed y Pending of Processmap - Events - Was add the Tab Logs en Admin. - Was add the the list of events. - Was changed the list Case Scheduler a logs. --- workflow/engine/classes/model/AppEvent.php | 138 ++++---- workflow/engine/menus/setup.php | 7 +- workflow/engine/methods/events/eventList.php | 95 ++++++ workflow/engine/methods/events/eventsAjax.php | 193 ++++++++---- .../skinEngine/base/css/pmos-xtheme-gray.css | 6 + .../uxmodern/css/pmos-xtheme-gray.css | 5 + .../skinEngine/uxs/css/pmos-xtheme-gray.css | 6 + .../engine/templates/events/eventList.html | 3 + workflow/engine/templates/events/eventList.js | 295 ++++++++++++++++++ .../engine/xmlform/events/eventsOptions.xml | 20 -- 10 files changed, 613 insertions(+), 155 deletions(-) create mode 100644 workflow/engine/methods/events/eventList.php create mode 100644 workflow/engine/templates/events/eventList.html create mode 100644 workflow/engine/templates/events/eventList.js diff --git a/workflow/engine/classes/model/AppEvent.php b/workflow/engine/classes/model/AppEvent.php index c282e6432..ac791e4b2 100755 --- a/workflow/engine/classes/model/AppEvent.php +++ b/workflow/engine/classes/model/AppEvent.php @@ -113,72 +113,80 @@ class AppEvent extends BaseAppEvent { } } - 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; + 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->addAsColumn('PRO_TITLE', 'C4.CON_VALUE'); + $oCriteria->addAlias('C1', 'CONTENT'); + $oCriteria->addAlias('C2', 'CONTENT'); + $oCriteria->addAlias('C3', 'CONTENT'); + $oCriteria->addAlias('C4', '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); + $aConditions = array(); + $aConditions[] = array(AppDelegationPeer::PRO_UID, 'C4.CON_ID'); + $aConditions[] = array('C4.CON_CATEGORY', $del . 'PRO_TITLE' . $del); + $aConditions[] = array('C4.CON_LANG', $del . SYS_LANG . $del); + + $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); + $oCriteria->add(AppEventPeer::EVN_UID, '', Criteria::NOT_EQUAL); + if($sProcessUid != ''){ + $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); + } } - catch (Exception $oError) { - throw($oError); - } - } function executeEvents($sNow, $debug=false, &$log=array()) { diff --git a/workflow/engine/menus/setup.php b/workflow/engine/menus/setup.php index 55228f116..adb669db4 100755 --- a/workflow/engine/menus/setup.php +++ b/workflow/engine/menus/setup.php @@ -58,7 +58,7 @@ if ($RBAC->userCanAccess('PM_SETUP') == 1) { $G_TMP_MENU->AddIdRawOption('PM_TABLES', '../pmTables', G::LoadTranslation('ID_ADDITIONAL_TABLES'), 'icon-tables.png','', 'settings'); $G_TMP_MENU->AddIdRawOption('WEBSERVICES', 'webServices', G::LoadTranslation('ID_WEB_SERVICES'), 'icon-webservices.png', '', 'settings'); - $G_TMP_MENU->AddIdRawOption('LOG_CASE_SCHEDULER', '../cases/cases_Scheduler_Log', G::LoadTranslation('ID_LOG_CASE_SCHEDULER'), "icon-logs-list.png",'', 'settings'); + //$G_TMP_MENU->AddIdRawOption('LOG_CASE_SCHEDULER', '../cases/cases_Scheduler_Log', G::LoadTranslation('ID_LOG_CASE_SCHEDULER'), "icon-logs-list.png",'', 'settings'); $G_TMP_MENU->AddIdRawOption('LOGIN', 'loginSettings', G::LoadTranslation('LOGIN'), "",'', 'settings'); $G_TMP_MENU->AddIdRawOption('DASHBOARD', '../dashboard/dashletsList', ucfirst(G::LoadTranslation('ID_DASHBOARD')), '', '', 'settings'); } @@ -82,4 +82,9 @@ if ($RBAC->userCanAccess('PM_SETUP_ADVANCE') == 1) { $G_TMP_MENU->AddIdRawOption('SYSTEM', '../admin/system', G::LoadTranslation('ID_SYSTEM'), '', '', 'settings'); } +if ($RBAC->userCanAccess('PM_SETUP') == 1) { + $G_TMP_MENU->AddIdRawOption('EVENT', '../events/eventList', G::LoadTranslation('ID_EVENTS'), '', '', 'logs'); + $G_TMP_MENU->AddIdRawOption('LOG_CASE_SCHEDULER', '../cases/cases_Scheduler_Log', G::LoadTranslation('ID_LOG_CASE_SCHEDULER'), "icon-logs-list.png",'', 'logs'); +} + diff --git a/workflow/engine/methods/events/eventList.php b/workflow/engine/methods/events/eventList.php new file mode 100644 index 000000000..f59820ca0 --- /dev/null +++ b/workflow/engine/methods/events/eventList.php @@ -0,0 +1,95 @@ +. + * + * For more information, contact Colosa Inc, 2566 Le Jeune Rd., + * Coral Gables, FL, 33134, USA, or email info@colosa.com. + * + */ + +global $RBAC; +if ($RBAC->userCanAccess('PM_SETUP_ADVANCE') != 1) { + G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels'); + G::header('location: ../login/login'); + die; +} + +G::LoadClass('configuration'); +$c = new Configurations(); +$configPage = $c->getConfiguration('eventList', 'pageSize','',$_SESSION['USER_LOGGED']); +$Config['pageSize'] = isset($configPage['pageSize']) ? $configPage['pageSize'] : 20; + +$G_MAIN_MENU = 'processmaker'; +$G_SUB_MENU = 'logs'; +$G_ID_MENU_SELECTED = 'logs'; +$G_ID_SUB_MENU_SELECTED = 'EVENT'; + +//get values for the comboBoxes +$userUid = ( isset($_SESSION['USER_LOGGED'] ) && $_SESSION['USER_LOGGED'] != '' ) ? + $_SESSION['USER_LOGGED'] : null; +$status = array( + array('', G::LoadTranslation('ID_ALL')), + array("PENDING",G::LoadTranslation('ID_OPEN')), + array("COMPLETED",G::LoadTranslation('ID_CLOSE'))); +$type = array( + array('', G::LoadTranslation('ID_ALL')), + array('SEND_MESSAGE',G::LoadTranslation('ID_EVENT_MESSAGE')), + array('EXECUTE_TRIGGER',G::LoadTranslation('ID_EVENT_TIMER')), + array('EXECUTE_CONDITIONAL_TRIGGER',G::LoadTranslation('ID_EVENT_CONDITIONAL'))); +$processes = getProcessArray($userUid ); + +$G_PUBLISH = new Publisher; + +$oHeadPublisher =& headPublisher::getSingleton(); +$oHeadPublisher->addExtJsScript('events/eventList', false); //adding a javascript file .js +$oHeadPublisher->addContent('events/eventList'); //adding a html file .html. +//sending the columns to display in grid +$oHeadPublisher->assign( 'typeValues', $type ); +$oHeadPublisher->assign( 'statusValues', $status ); +$oHeadPublisher->assign( 'processValues', $processes); + +function getProcessArray ( $userUid ) { + global $oAppCache; + require_once ( "classes/model/AppCacheView.php" ); + + $processes = Array(); + $processes[] = array ( '', G::LoadTranslation('ID_ALL_PROCESS') ); + + $cProcess = new Criteria('workflow'); + $cProcess->clearSelectColumns(); + $cProcess->addSelectColumn(AppCacheViewPeer::PRO_UID); + $cProcess->addSelectColumn(AppCacheViewPeer::APP_PRO_TITLE); + $cProcess->setDistinct(AppCacheViewPeer::PRO_UID); + + $cProcess->addAscendingOrderByColumn(AppCacheViewPeer::APP_PRO_TITLE); + + $oDataset = AppCacheViewPeer::doSelectRS($cProcess); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + + while($aRow = $oDataset->getRow()){ + $processes[] = array ( $aRow['PRO_UID'], $aRow['APP_PRO_TITLE'] ); + $oDataset->next(); + } + + return $processes; +} + +G::RenderPage('publish', 'extJs'); + diff --git a/workflow/engine/methods/events/eventsAjax.php b/workflow/engine/methods/events/eventsAjax.php index 639d731d8..852204690 100755 --- a/workflow/engine/methods/events/eventsAjax.php +++ b/workflow/engine/methods/events/eventsAjax.php @@ -1,74 +1,74 @@ ''"; - */ - $sDataBase = 'database_' . strtolower(DB_ADAPTER); - if(G::LoadSystemExist($sDataBase)){ - G::LoadSystem($sDataBase); - $oDataBase = new database(); - $sConcat = $oDataBase->concatString("USR_FIRSTNAME", "' '" , "USR_LASTNAME") ; - } - $sql = " SELECT USR_UID, USR_EMAIL, " . - $sConcat . - " AS USR_FULLNAME FROM USERS " . - " WHERE USR_STATUS = 'ACTIVE' AND USR_EMAIL <> ''"; + /* + $sql = "SELECT USR_UID, USR_EMAIL, CONCAT(USR_FIRSTNAME, ' ' , USR_LASTNAME) AS USR_FULLNAME FROM USERS WHERE USR_STATUS = 'ACTIVE' AND USR_EMAIL <> ''"; + */ + $sDataBase = 'database_' . strtolower(DB_ADAPTER); + if (G::LoadSystemExist($sDataBase)) { + G::LoadSystem($sDataBase); + $oDataBase = new database(); + $sConcat = $oDataBase->concatString("USR_FIRSTNAME", "' '" , "USR_LASTNAME") ; + } + $sql = " SELECT USR_UID, USR_EMAIL, " . + $sConcat . + " AS USR_FULLNAME FROM USERS " . + " WHERE USR_STATUS = 'ACTIVE' AND USR_EMAIL <> ''"; - $oCriteria = new Criteria('workflow'); - $del = DBAdapter::getStringDelimiter(); + $oCriteria = new Criteria('workflow'); + $del = DBAdapter::getStringDelimiter(); - $con = Propel::getConnection("workflow"); - $stmt = $con->prepareStatement($sql); - $rs = $stmt->executeQuery(); + $con = Propel::getConnection("workflow"); + $stmt = $con->prepareStatement($sql); + $rs = $stmt->executeQuery(); - $aRows[] = array('USR_UID'=>'char', 'USR_EMAIL'=>'char', 'USR_FULLNAME'=>'char'); - while($rs->next()){ - $aRows[] = array('USR_UID'=>$rs->getString('USR_UID'), 'USR_EMAIL'=>$rs->getString('USR_EMAIL'), 'USR_FULLNAME'=>$rs->getString('USR_FULLNAME')); - } - //echo '
';		print_r($aRows);
+        $aRows[] = array('USR_UID'=>'char', 'USR_EMAIL'=>'char', 'USR_FULLNAME'=>'char');
+        while($rs->next()){
+            $aRows[] = array('USR_UID'=>$rs->getString('USR_UID'), 'USR_EMAIL'=>$rs->getString('USR_EMAIL'), 'USR_FULLNAME'=>$rs->getString('USR_FULLNAME'));
+        }
+        //echo '
';     print_r($aRows);
 
-		global $_DBArray;
-		$_DBArray['virtualtable']   = $aRows;
-		$_SESSION['_DBArray'] = $_DBArray;
-		G::LoadClass('ArrayPeer');
-		$oCriteria = new Criteria('dbarray');
-		$oCriteria->setDBArrayTable('virtualtable');
+        global $_DBArray;
+        $_DBArray['virtualtable']   = $aRows;
+        $_SESSION['_DBArray'] = $_DBArray;
+        G::LoadClass('ArrayPeer');
+        $oCriteria = new Criteria('dbarray');
+        $oCriteria->setDBArrayTable('virtualtable');
 
-		$G_PUBLISH = new Publisher();
-		$G_PUBLISH->AddContent('propeltable', 'paged-table', 'events/usermailList', $oCriteria);
-		G::RenderPage('publish', 'raw');
-	break;
+        $G_PUBLISH = new Publisher();
+        $G_PUBLISH->AddContent('propeltable', 'paged-table', 'events/usermailList', $oCriteria);
+        G::RenderPage('publish', 'raw');
+    break;
+    case 'showGroups':
+        G::LoadClass('groups');
+        $groups = new Groups();
+        $allGroups= $groups->getAllGroups();
 
-	case 'showGroups':
+        $aRows[] = array('GRP_UID' => 'char', 'GROUP_TITLE' => 'char');
+        foreach ($allGroups as $group) {
+            $UID         = htmlentities($group->getGrpUid());
+            $GROUP_TITLE = strip_tags($group->getGrpTitle());
+            $aRows[] = array('GRP_UID'=>$UID, 'GROUP_TITLE'=>$GROUP_TITLE);
+        }
 
-		G::LoadClass('groups');
-		$groups = new Groups();
-		$allGroups= $groups->getAllGroups();
+        global $_DBArray;
+        $_DBArray['virtualtable']   = $aRows;
+        $_SESSION['_DBArray'] = $_DBArray;
+        G::LoadClass('ArrayPeer');
+        $oCriteria = new Criteria('dbarray');
+        $oCriteria->setDBArrayTable('virtualtable');
 
-		$aRows[] = array('GRP_UID' => 'char', 'GROUP_TITLE' => 'char');
-		foreach($allGroups as $group) {
-		    $UID         = htmlentities($group->getGrpUid());
-			$GROUP_TITLE = strip_tags($group->getGrpTitle());
-			$aRows[] = array('GRP_UID'=>$UID, 'GROUP_TITLE'=>$GROUP_TITLE);
-		}
-
-		global $_DBArray;
-		$_DBArray['virtualtable']   = $aRows;
-		$_SESSION['_DBArray'] = $_DBArray;
-		G::LoadClass('ArrayPeer');
-		$oCriteria = new Criteria('dbarray');
-		$oCriteria->setDBArrayTable('virtualtable');
-
-		$G_PUBLISH = new Publisher();
-		$G_PUBLISH->AddContent('propeltable', 'paged-table', 'events/groupmailList', $oCriteria);
-		G::RenderPage('publish', 'raw');
-	break;
-
-	case 'showDynavars':
+        $G_PUBLISH = new Publisher();
+        $G_PUBLISH->AddContent('propeltable', 'paged-table', 'events/groupmailList', $oCriteria);
+        G::RenderPage('publish', 'raw');
+    break;
+    case 'showDynavars':
         G::LoadClass('xmlfield_InputPM');
         $dynaformFields = getDynaformsVars($_SESSION['PROCESS'], false, false);
         $fields = array(array('id' => 'char', 'dynaform' => 'char', 'name' => 'char'));
@@ -78,15 +78,70 @@ switch($req){
                               'name' => '@#' . $dynaformField['sName'] . '', 'label' => $dynaformField['sLabel']);
         }
 
-		global $_DBArray;
-		$_DBArray['virtualtable'] = $fields;
-		$_SESSION['_DBArray'] = $_DBArray;
-		G::LoadClass('ArrayPeer');
-		$oCriteria = new Criteria('dbarray');
-		$oCriteria->setDBArrayTable('virtualtable');
+        global $_DBArray;
+        $_DBArray['virtualtable'] = $fields;
+        $_SESSION['_DBArray'] = $_DBArray;
+        G::LoadClass('ArrayPeer');
+        $oCriteria = new Criteria('dbarray');
+        $oCriteria->setDBArrayTable('virtualtable');
 
-		$G_PUBLISH = new Publisher();
-		$G_PUBLISH->AddContent('propeltable', 'paged-table', 'events/dynavarsList', $oCriteria);
-		G::RenderPage('publish', 'raw');
-	break;
+        $G_PUBLISH = new Publisher();
+        $G_PUBLISH->AddContent('propeltable', 'paged-table', 'events/dynavarsList', $oCriteria);
+        G::RenderPage('publish', 'raw');
+    break;
+    case 'eventList':
+
+        $start      = (isset($_REQUEST['start']))?      $_REQUEST['start']      : '0';
+        $limit      = (isset($_REQUEST['limit']))?      $_REQUEST['limit']      : '25';
+        $proUid     = (isset($_REQUEST['process']))?    $_REQUEST['process']    : '';
+        $evenType   = (isset($_REQUEST['type']))?       $_REQUEST['type']       : '';
+        $evenStatus = (isset($_REQUEST['status']))?     $_REQUEST['status']     : '';
+        $sort       = isset($_REQUEST['sort']) ?        $_REQUEST['sort']       : '';
+        $dir        = isset($_REQUEST['dir']) ?         $_REQUEST['dir']        : 'ASC';
+
+        require_once 'classes/model/AppEvent.php';
+        $oAppEvent = new AppEvent();
+        // Initialize response object
+        $response = new stdclass();
+        $response->status = 'OK';
+
+        $criteria = new Criteria();
+        $criteria = $oAppEvent->getAppEventsCriteria($proUid, $evenStatus, $evenType);
+        $result = AppEventPeer::doSelectRS($criteria);
+        $result->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+        $data = Array();
+        while( $result->next() ) {
+            $data[] = $result->getRow();
+        }
+        $totalCount = count($data);
+
+        $criteria = new Criteria();
+        $criteria = $oAppEvent->getAppEventsCriteria($proUid, $evenStatus, $evenType);
+        if ($sort != '') {
+            if ($dir == 'ASC') {
+                $criteria->addAscendingOrderByColumn($sort);
+            }
+            else {
+                $criteria->addDescendingOrderByColumn($sort);
+            }
+        } else {
+            $oCriteria->addDescendingOrderByColumn(AppEventPeer::APP_EVN_ACTION_DATE);
+        }
+        if ($limit != '') {
+            $criteria->setLimit($limit);
+            $criteria->setOffset($start);
+        }
+        $result = AppEventPeer::doSelectRS($criteria);
+        $result->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+        $data = Array();
+        $dataPro = array();
+        $index = 0;
+        while( $result->next() ) {
+            $data[] = $result->getRow();
+        }
+        $response = array();
+        $response['totalCount'] = $totalCount;
+        $response['data']       = $data;
+        die(G::json_encode($response));
+    break;
 }
diff --git a/workflow/engine/skinEngine/base/css/pmos-xtheme-gray.css b/workflow/engine/skinEngine/base/css/pmos-xtheme-gray.css
index 177e8496c..82297b022 100755
--- a/workflow/engine/skinEngine/base/css/pmos-xtheme-gray.css
+++ b/workflow/engine/skinEngine/base/css/pmos-xtheme-gray.css
@@ -769,6 +769,12 @@ antes funcionaba.
 	background-position:0 -17011px !important;
 }
 
+.ICON_EVENT{
+	/*ss_table_gear*/
+	background-image:url( /images/icons_silk/sprites.png) !important;
+	background-position:0 -15517px !important;
+}
+
 .ICON_PROCESS_CATEGORY{
 	/*ss_sitemap_color*/
 	background-image:url( /images/icons_silk/sprites.png) !important;
diff --git a/workflow/engine/skinEngine/uxmodern/css/pmos-xtheme-gray.css b/workflow/engine/skinEngine/uxmodern/css/pmos-xtheme-gray.css
index 7c9008fdb..7d398f23c 100644
--- a/workflow/engine/skinEngine/uxmodern/css/pmos-xtheme-gray.css
+++ b/workflow/engine/skinEngine/uxmodern/css/pmos-xtheme-gray.css
@@ -793,6 +793,11 @@ antes funcionaba.
 	background-image:url( /images/icons_silk/sprites.png) !important;
 	background-position:0 -17011px !important;
 }
+.ICON_EVENT{
+	/*ss_table_gear*/
+	background-image:url( /images/icons_silk/sprites.png) !important;
+	background-position:0 -15517px !important;
+}
 
 .ICON_PROCESS_CATEGORY{
 	/*ss_sitemap_color*/
diff --git a/workflow/engine/skinEngine/uxs/css/pmos-xtheme-gray.css b/workflow/engine/skinEngine/uxs/css/pmos-xtheme-gray.css
index 8dfc9bf23..b8617724e 100644
--- a/workflow/engine/skinEngine/uxs/css/pmos-xtheme-gray.css
+++ b/workflow/engine/skinEngine/uxs/css/pmos-xtheme-gray.css
@@ -766,6 +766,12 @@ antes funcionaba.
 	background-position:0 -17011px !important;
 }
 
+.ICON_EVENT{
+	/*ss_table_gear*/
+	background-image:url( /images/icons_silk/sprites.png) !important;
+	background-position:0 -15517px !important;
+}
+
 .ICON_PROCESS_CATEGORY{
 	/*ss_sitemap_color*/
 	background-image:url( /images/icons_silk/sprites.png) !important;
diff --git a/workflow/engine/templates/events/eventList.html b/workflow/engine/templates/events/eventList.html
new file mode 100644
index 000000000..432f567b5
--- /dev/null
+++ b/workflow/engine/templates/events/eventList.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/workflow/engine/templates/events/eventList.js b/workflow/engine/templates/events/eventList.js new file mode 100644 index 000000000..bac4cb99f --- /dev/null +++ b/workflow/engine/templates/events/eventList.js @@ -0,0 +1,295 @@ +/* + * @author: Marco Antonio + * Agos 17st, 2012 + */ +new Ext.KeyMap(document, [{ + key: Ext.EventObject.F5, + fn: function(keycode, e) { + if (! e.ctrlKey) { + if (Ext.isIE) { + // IE6 doesn't allow cancellation of the F5 key, so trick it into + // thinking some other key was pressed (backspace in this case) + e.browserEvent.keyCode = 8; + } + e.stopEvent(); + document.location = document.location; + } else { + Ext.Msg.alert('Refresh', 'You clicked: CTRL-F5'); + } + } +} +]); + +var store; +var cmodel; +var eventsGrid; +var actions; +var filterStatus = ''; + +Ext.onReady(function(){ + Ext.QuickTips.init(); + var resultTpl = new Ext.XTemplate( + '
', + ' {APP_PRO_TITLE}', + '
' + ); + + var columnRenderer = function(data, metadata, record, rowIndex,columnIndex, store) { + var new_text = metadata.style.split(';'); + var style = ''; + if ( !record.data['APP_EVN_LAST_EXECUTION_DATE'] ){ + record.data['APP_EVN_LAST_EXECUTION_DATE'] = ' - '; + } + switch (record.data['EVN_ACTION']) { + case 'EXECUTE_TRIGGER': record.data['EVN_ACTION'] = _('ID_EVENT_TIMER'); + break + case 'EXECUTE_CONDITIONAL_TRIGGER': record.data['EVN_ACTION'] = _('ID_EVENT_CONDITIONAL'); + break + case 'SEND_MESSAGE': record.data['EVN_ACTION'] = _('ID_EVENT_MESSAGE'); + break + } + for (var i = 0; i < new_text.length -1 ; i++) { + var chain = new_text[i] +";"; + if (chain.indexOf('width') == -1) { + style = style + chain; + } + } + metadata.attr = 'ext:qtip="' + data + '" style="'+ style +' white-space: normal; "'; + return data; + }; + + // ComboBox Status + var comboStatus = new Ext.form.ComboBox({ + width : 90, + boxMaxWidth : 90, + editable : false, + mode : 'local', + emptyText: _('ID_SELECT_STATUS'), + store : new Ext.data.ArrayStore({ + fields: ['id', 'value'], + data : statusValues + }), + valueField : 'id', + displayField : 'value', + triggerAction : 'all', + listeners:{ + scope: this, + 'select': function() { + filterStatus = comboStatus.value; + store.setBaseParam( 'status', filterStatus); + store.setBaseParam( 'start', 0); + store.setBaseParam( 'limit', 25); + store.load(); + } + }, + iconCls: 'no-icon' + }); + + // ComboBox Type + var comboType = new Ext.form.ComboBox({ + width : 150, + boxMaxWidth : 150, + editable : false, + mode : 'local', + emptyText: _('ID_EMPTY_TYPE'), + store : new Ext.data.ArrayStore({ + fields: ['id', 'value'], + data : typeValues + }), + valueField : 'id', + displayField : 'value', + triggerAction : 'all', + listeners:{ + scope: this, + 'select': function() { + filterType = comboType.value; + store.setBaseParam( 'type', filterType); + store.setBaseParam( 'start', 0); + store.setBaseParam( 'limit', 25); + store.load(); + } + }, + iconCls: 'no-icon' + }); + + var comboProcess = new Ext.form.ComboBox({ + width : 200, + boxMaxWidth : 200, + editable : true, + displayField : 'APP_PRO_TITLE', + valueField : 'PRO_UID', + forceSelection: false, + emptyText: _('ID_EMPTY_PROCESSES'), + selectOnFocus: true, + tpl: resultTpl, + + typeAhead: true, + mode: 'local', + autocomplete: true, + triggerAction: 'all', + + store : new Ext.data.ArrayStore({ + fields : ['PRO_UID','APP_PRO_TITLE'], + data : processValues + }), + listeners:{ + scope: this, + 'select': function() { + filterProcess = comboProcess.value; + + store.setBaseParam('process', filterProcess); + store.setBaseParam( 'start', 0); + store.setBaseParam( 'limit', 25); + store.load(); + }}, + iconCls: 'no-icon' + }); + + actions = _addPluginActions([ {xtype: 'tbfill'}, _('ID_PROCESS'), comboProcess, '-', _('ID_TYPE'), comboType, '-', _('ID_STATUS'), comboStatus]); + + var stepsFields = Ext.data.Record.create([ + {name : 'APP_EVN_ACTION_DATE', type: 'string'}, + {name : 'APP_EVN_ATTEMPTS', type: 'string'}, + {name : 'APP_EVN_LAST_EXECUTION_DATE', type: 'string'}, + {name : 'APP_EVN_STATUS', type: 'string'}, + {name : 'PRO_TITLE', type: 'string'}, + {name : 'EVN_ACTION', type: 'string'}, + {name : 'EVN_DESCRIPTION', type: 'string'}, + {name : 'TAS_TITLE', type: 'string'}, + {name : 'APP_TITLE', type: 'string'} + ]); + + store = new Ext.data.Store( { + proxy : new Ext.data.HttpProxy({ + url: 'eventsAjax?request=eventList' + }), + remoteSort : true, + sortInfo : stepsFields, + reader : new Ext.data.JsonReader( { + root: 'data', + totalProperty: 'totalCount', + fields : [ + {name : 'APP_UID'}, + {name : 'DEL_INDEX'}, + {name : 'EVN_UID'}, + {name : 'APP_EVN_ACTION_DATE'}, + {name : 'APP_EVN_ATTEMPTS'}, + {name : 'APP_EVN_LAST_EXECUTION_DATE'}, + {name : 'APP_EVN_STATUS'}, + {name : 'PRO_UID'}, + {name : 'PRO_TITLE'}, + {name : 'EVN_WHEN_OCCURS'}, + {name : 'EVN_ACTION'}, + {name : 'EVN_DESCRIPTION'}, + {name : 'TAS_TITLE'}, + {name : 'APP_TITLE'} + ] + }) + }); + store.setDefaultSort('APP_EVN_ACTION_DATE', 'desc'); + + cmodel = new Ext.grid.ColumnModel({ + defaults: { + width: 50 + }, + columns: [ + {id:'APP_UID', dataIndex: 'APP_UID', hidden:true, hideable:false}, + {header: 'PRO_UID', dataIndex: 'PRO_UID', hidden:true, hideable:false}, + {header: 'EVN_UID', dataIndex: 'EVN_UID', hidden:true, hideable:false}, + {header: _('ID_PROCESS'), dataIndex: 'PRO_TITLE', width: 150, hidden: false,renderer: columnRenderer, sortable: true}, + {header: _('ID_TASKS'), dataIndex: 'TAS_TITLE', width: 150, hidden: false,renderer: columnRenderer, sortable: true}, + {header: _('ID_CASE_TITLE'), dataIndex: 'APP_TITLE', width: 150, hidden: false,renderer: columnRenderer, sortable: true}, + {header: _('ID_EVENT_ACTION_DATE'), dataIndex: 'APP_EVN_ACTION_DATE', width: 90, hidden: false,renderer: columnRenderer, sortable: true}, + {header: _('ID_EVENT_LAST_EXECUTION_DATE'), dataIndex: 'APP_EVN_LAST_EXECUTION_DATE', width: 90, hidden: false ,renderer: columnRenderer, sortable: true}, + {header: _('ID_EVENT_DESCRIPTION'), dataIndex: 'EVN_DESCRIPTION', width: 150, hidden: false,renderer: columnRenderer}, + {header: _('ID_EVENT_ACTION'), dataIndex: 'EVN_ACTION', width: 100, hidden: false,renderer: columnRenderer}, + + {header: _('ID_DEL_INDEX'), dataIndex: 'DEL_INDEX', width: 40,hidden:true,hideable:false, renderer: columnRenderer}, + {header: _('APP_EVN_ATTEMPTS'), dataIndex: 'APP_EVN_ATTEMPTS', width: 50, hidden: true,hideable:false,renderer: columnRenderer}, + {header: _('ID_STATUS'), dataIndex: 'APP_EVN_STATUS', width: 40, hidden: false,renderer: columnRenderer} + ] + }); + + bbarpaging = new Ext.PagingToolbar({ + pageSize : 25, + store : store, + displayInfo : true, + displayMsg : _('ID_GRID_PAGE_DISPLAYING_EVENT_MESSAGE') + '    ', + emptyMsg : _('ID_GRID_PAGE_NO_EVENT_MESSAGE') + }); + + eventsGrid = new Ext.grid.GridPanel({ + region: 'center', + layout: 'fit', + id: 'eventsGrid', + height:100, + autoWidth : true, + stateful : true, + stateId : 'grid', + enableColumnResize: true, + enableHdMenu: true, + frame:false, + columnLines: false, + viewConfig: { + forceFit:true + }, + title : _('ID_EVENTS'), + store: store, + cm: cmodel, + tbar: actions, + bbar: bbarpaging, + listeners: { + render: function(){ + this.loadMask = new Ext.LoadMask(this.body, {msg:_('ID_LOADING_GRID')}); + } + } + }); + + eventsGrid.store.load(); + + viewport = new Ext.Viewport({ + layout: 'fit', + autoScroll: false, + items: [ + eventsGrid + ] + }); + }); + +var _addPluginActions = function(defaultactions) { + try { + if (Ext.isArray(_pluginactions)) { + if (_pluginactions.length > 0) { + var positionToInsert = _tbfillPosition(defaultactions); + var leftactions = defaultactions.slice(0, positionToInsert); + var rightactions = defaultactions.slice(positionToInsert, defaultactions.length - 1); + return leftactions.concat(_pluginactions.concat(rightactions)); + } + else { + return defaultactions; + } + } + else { + return defaultactions; + } + } + catch (error) { + return defaultactions; + } +}; + +var _tbfillPosition = function(actions) { + try { + for (var i = 0; i < actions.length; i++) { + if (Ext.isObject(actions[i])) { + if (actions[i].xtype == 'tbfill') { + return i; + } + } + } + return i; + } + catch (error) { + return 0; + } +}; \ No newline at end of file diff --git a/workflow/engine/xmlform/events/eventsOptions.xml b/workflow/engine/xmlform/events/eventsOptions.xml index 632ed18df..1febf63d5 100755 --- a/workflow/engine/xmlform/events/eventsOptions.xml +++ b/workflow/engine/xmlform/events/eventsOptions.xml @@ -5,23 +5,11 @@ New - - Pending - - - - Completed - - - - - - @@ -47,14 +35,6 @@ var eventsNew = function() { popupWindow('@G::LoadTranslation(ID_NEW_EVENT)', '@G::encryptlink(@#eventsNew)?PRO_UID=@%PRO_UID&EVN_TYPE=@%EVN_TYPE' , 540, 500); }; -var eventsPending = function() { - popupWindow('@G::LoadTranslation(ID_PENDING)', '@G::encryptlink(@#eventsPending)?PRO_UID=@%PRO_UID&EVN_TYPE=@%EVN_TYPE' , 800, 400); -}; - -var eventsCompleted = function() { - popupWindow('@G::LoadTranslation(ID_COMPLETED)', '@G::encryptlink(@#eventsCompleted)?PRO_UID=@%PRO_UID&EVN_TYPE=@%EVN_TYPE' , 800, 400); -}; - var eventsEdit = function(sUID) { popupWindow('@G::LoadTranslation(ID_EDIT_EVENT)', '@G::encryptlink(@#eventsEdit)?EVN_UID=' + sUID , 540, 500); };