From 29d4cb3fa0dbb1ca0809d9375baaf2d135ad16df Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Date: Wed, 28 Nov 2012 12:50:02 -0400 Subject: [PATCH] =?UTF-8?q?BUG=2010110=20A=C3=B1r=20modulo=20de=20logs=20p?= =?UTF-8?q?ara=20envio=20de=20correos=20electronicos=20SOLVED?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - According to the specifications. - Was add the the list of emails. enter the commit message for your changes. Lines starting --- workflow/engine/classes/model/AppMessage.php | 8 + workflow/engine/menus/setup.php | 1 + workflow/engine/methods/mails/emailList.php | 96 +++++ workflow/engine/methods/mails/emailsAjax.php | 154 ++++++++ .../engine/templates/mails/emailList.html | 3 + workflow/engine/templates/mails/emailList.js | 355 ++++++++++++++++++ 6 files changed, 617 insertions(+) create mode 100644 workflow/engine/methods/mails/emailList.php create mode 100644 workflow/engine/methods/mails/emailsAjax.php create mode 100644 workflow/engine/templates/mails/emailList.html create mode 100644 workflow/engine/templates/mails/emailList.js diff --git a/workflow/engine/classes/model/AppMessage.php b/workflow/engine/classes/model/AppMessage.php index 0ce2e71bc..9b4996dbc 100755 --- a/workflow/engine/classes/model/AppMessage.php +++ b/workflow/engine/classes/model/AppMessage.php @@ -120,5 +120,13 @@ class AppMessage extends BaseAppMessage return $this->getAppMsgUid(); } } + + public function updateStatus($msgUid, $msgStatus) + { + $message = AppMessagePeer::retrieveByPk( $msgUid ); + $message->fromArray( $message, BasePeer::TYPE_FIELDNAME ); + $message->setAppMsgStatus($msgStatus); + $message->save(); + } } diff --git a/workflow/engine/menus/setup.php b/workflow/engine/menus/setup.php index bd0fd6a6f..7f562e290 100755 --- a/workflow/engine/menus/setup.php +++ b/workflow/engine/menus/setup.php @@ -85,5 +85,6 @@ 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_CASE_SCHEDULER'), "icon-logs-list.png",'', 'logs'); $G_TMP_MENU->AddIdRawOption("CRON", "../setup/cron", G::LoadTranslation("ID_CRON_ACTIONS"), null, null, "logs"); + $G_TMP_MENU->AddIdRawOption('EMAILS', '../mails/emailList', ucfirst (strtolower ( G::LoadTranslation('ID_EMAILS'))), '', '', 'logs'); } diff --git a/workflow/engine/methods/mails/emailList.php b/workflow/engine/methods/mails/emailList.php new file mode 100644 index 000000000..f0f02e952 --- /dev/null +++ b/workflow/engine/methods/mails/emailList.php @@ -0,0 +1,96 @@ +. + * + * 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 = 'EMAILS'; + +//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 ("sent", "Sent"), + array ("pending", "Pending") +); +//$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( 'mails/emailList', false ); //adding a javascript file .js +$oHeadPublisher->addContent( 'mails/emailList' ); //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/mails/emailsAjax.php b/workflow/engine/methods/mails/emailsAjax.php new file mode 100644 index 000000000..588761d33 --- /dev/null +++ b/workflow/engine/methods/mails/emailsAjax.php @@ -0,0 +1,154 @@ +status = 'OK'; + + $criteria = new Criteria(); + $criteria->addJoin(AppMessagePeer::APP_UID, ApplicationPeer::APP_UID); + if ($emailStatus != '') { + $criteria->add( AppMessagePeer::APP_MSG_STATUS, $emailStatus, Criteria::LESS_EQUAL ); + } + if ($proUid != '') { + $criteria->add( ApplicationPeer::PRO_UID, $proUid); + } + if ($dateFrom != '') { + if ($dateTo != '') { + $criteria->add( $criteria->getNewCriterion( AppMessagePeer::APP_MSG_DATE, $dateFrom, Criteria::GREATER_EQUAL )->addAnd( $criteria->getNewCriterion( AppMessagePeer::APP_MSG_DATE, $dateTo, Criteria::LESS_EQUAL ) ) ); + } else { + $criteria->add( AppMessagePeer::APP_MSG_DATE, $dateFrom, Criteria::GREATER_EQUAL ); + } + } elseif ($dateTo != '') { + $criteria->add( AppMessagePeer::APP_MSG_DATE, $dateTo, Criteria::LESS_EQUAL ); + } + + $result = AppMessagePeer::doSelectRS($criteria); + $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $data = Array(); + while ( $result->next() ) { + $data[] = $result->getRow(); + } + $totalCount = count($data); + + $criteria = new Criteria(); + $criteria->addSelectColumn(AppMessagePeer::APP_MSG_UID); + $criteria->addSelectColumn(AppMessagePeer::APP_UID); + $criteria->addSelectColumn(AppMessagePeer::DEL_INDEX); + $criteria->addSelectColumn(AppMessagePeer::APP_MSG_TYPE); + $criteria->addSelectColumn(AppMessagePeer::APP_MSG_SUBJECT); + $criteria->addSelectColumn(AppMessagePeer::APP_MSG_FROM); + + $criteria->addSelectColumn(AppMessagePeer::APP_MSG_TO); + $criteria->addSelectColumn(AppMessagePeer::APP_MSG_BODY); + $criteria->addSelectColumn(AppMessagePeer::APP_MSG_STATUS); + $criteria->addSelectColumn(AppMessagePeer::APP_MSG_DATE); + $criteria->addSelectColumn(AppMessagePeer::APP_MSG_SEND_DATE); + $criteria->addSelectColumn(AppMessagePeer::APP_MSG_SHOW_MESSAGE); + + $criteria->addSelectColumn(ApplicationPeer::PRO_UID); + + $criteria->addAsColumn('PRO_TITLE', 'C2.CON_VALUE'); + $criteria->addAlias('C2', 'CONTENT'); + + if ($emailStatus != '') { + $criteria->add( AppMessagePeer::APP_MSG_STATUS, $emailStatus, Criteria::LESS_EQUAL ); + } + if ($proUid != '') { + $criteria->add( ApplicationPeer::PRO_UID, $proUid); + } + if ($dateFrom != '') { + if ($dateTo != '') { + $criteria->add( $criteria->getNewCriterion( AppMessagePeer::APP_MSG_DATE, $dateFrom, Criteria::GREATER_EQUAL )->addAnd( $criteria->getNewCriterion( AppMessagePeer::APP_MSG_DATE, $dateTo, Criteria::LESS_EQUAL ) ) ); + } else { + $criteria->add( AppMessagePeer::APP_MSG_DATE, $dateFrom, Criteria::GREATER_EQUAL ); + } + } elseif ($dateTo != '') { + $criteria->add( AppMessagePeer::APP_MSG_DATE, $dateTo, Criteria::LESS_EQUAL ); + } + + if ($sort != '') { + if ($dir == 'ASC') { + $criteria->addAscendingOrderByColumn($sort); + } else { + $criteria->addDescendingOrderByColumn($sort); + } + } else { + $oCriteria->addDescendingOrderByColumn(AppMessagePeer::APP_MSG_SEND_DATE ); + } + if ($limit != '') { + $criteria->setLimit($limit); + $criteria->setOffset($start); + } + $criteria->addJoin(AppMessagePeer::APP_UID, ApplicationPeer::APP_UID); + + $conditions = array(); + $conditions[] = array(ApplicationPeer::PRO_UID, 'C2.CON_ID'); + $conditions[] = array( + 'C2.CON_CATEGORY', DBAdapter::getStringDelimiter() . 'PRO_TITLE' . DBAdapter::getStringDelimiter() + ); + $conditions[] = array( + 'C2.CON_LANG', DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter() + ); + $criteria->addJoinMC($conditions, Criteria::LEFT_JOIN); + $result = AppMessagePeer::doSelectRS($criteria); + $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $data = Array(); + $dataPro = array(); + $index = 0; + $content = new Content(); + $tasTitleDefault = G::LoadTranslation('ID_TASK_NOT_RELATED'); + while ( $result->next() ) { + + $row = $result->getRow(); + $row['APP_MSG_FROM'] =htmlentities($row['APP_MSG_FROM'], ENT_QUOTES, "UTF-8"); + $row['APP_MSG_STATUS'] = ucfirst ( $row['APP_MSG_STATUS']); + $row['TAS_TITLE'] = $tasTitleDefault; + if ($row['DEL_INDEX'] != 0) { + $criteria = new Criteria(); + $criteria->addSelectColumn(AppDelegationPeer::PRO_UID); + $criteria->addSelectColumn(AppDelegationPeer::TAS_UID); + $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $criteria->add(AppDelegationPeer::APP_UID, $row['APP_UID']); + $resultDelegation = AppDelegationPeer::doSelectRS($criteria); + $resultDelegation->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $row['TAS_TITLE'] = '-'; + while ($resultDelegation->next()) { + $rowDelegation = $resultDelegation->getRow(); + if ($row['DEL_INDEX'] == $rowDelegation['DEL_INDEX']) { + $row['TAS_TITLE'] = $content->load( 'TAS_TITLE', '', $rowDelegation['TAS_UID'], SYS_LANG ); + break; + } + } + } + + $data[] = $row; + } + $response = array(); + $response['totalCount'] = $totalCount; + $response['data'] = $data; + die(G::json_encode($response)); + break; + case 'updateStatusMessage': + if (isset($_REQUEST['APP_MSG_UID']) && isset($_REQUEST['APP_MSG_STATUS'])) { + $message = new AppMessage(); + $result = $message->updateStatus($_REQUEST['APP_MSG_UID'], $_REQUEST['APP_MSG_STATUS']); + } + break; +} + diff --git a/workflow/engine/templates/mails/emailList.html b/workflow/engine/templates/mails/emailList.html new file mode 100644 index 000000000..432f567b5 --- /dev/null +++ b/workflow/engine/templates/mails/emailList.html @@ -0,0 +1,3 @@ +
+
+
diff --git a/workflow/engine/templates/mails/emailList.js b/workflow/engine/templates/mails/emailList.js new file mode 100644 index 000000000..ff1611a64 --- /dev/null +++ b/workflow/engine/templates/mails/emailList.js @@ -0,0 +1,355 @@ +/* + * @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 emailsGrid; +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 = ''; + 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; + }; + + var dateFrom = new Ext.form.DateField({ + id:'dateFrom', + format: 'Y-m-d', + width: 120, + value: '' + }); + + var dateTo = new Ext.form.DateField({ + id:'dateTo', + format: 'Y-m-d', + width: 120, + value: '' + }); + + // 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' + }); + + 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, _('ID_DELEGATE_DATE_FROM'), + dateFrom, + ' ', + _('ID_TO'), + dateTo, + new Ext.Button ({ + text: _('ID_FILTER_BY_DELEGATED_DATE'), + handler: function(){ + store.setBaseParam('dateFrom', dateFrom.getValue()); + store.setBaseParam('dateTo', dateTo.getValue()); + store.load({params:{ start : 0 , limit : 25 }}); + } + }) + ]); + + var stepsFields = Ext.data.Record.create([ + {name : 'APP_MSG_TYPE', type: 'string'}, + {name : 'APP_MSG_FROM', type: 'string'}, + {name : 'APP_MSG_TO', type: 'string'}, + {name : 'APP_MSG_DATE', type: 'string'}, + {name : 'APP_MSG_STATUS', type: 'string'} + + ]); + + store = new Ext.data.Store( { + proxy : new Ext.data.HttpProxy({ + url: 'emailsAjax?request=MessageList' + }), + remoteSort : true, + sortInfo : stepsFields, + reader : new Ext.data.JsonReader( { + root: 'data', + totalProperty: 'totalCount', + fields : [ + {name : 'APP_MSG_UID'}, + {name : 'APP_UID'}, + {name : 'DEL_INDEX'}, + {name : 'PRO_UID'}, + {name : 'TAS_UID'}, + {name : 'PRO_TITLE'}, + {name : 'TAS_TITLE'}, + {name : 'APP_MSG_TYPE'}, + {name : 'APP_MSG_SUBJECT'}, + {name : 'APP_MSG_FROM'}, + {name : 'APP_MSG_TO'}, + {name : 'APP_MSG_STATUS'}, + {name : 'APP_MSG_DATE'}, + {name : 'APP_MSG_SEND_DATE'}, + {name : 'APP_MSG_BODY'} + ] + }) + }); + store.setDefaultSort('APP_MSG_DATE', 'desc'); + + var expander = new Ext.ux.grid.RowExpander({ + tpl : new Ext.Template( + '


'+_('ID_PREVIEW')+':
'+ + '
'+ + '
'+ + '
 
'+ + '
{APP_MSG_BODY}
'+ + '
 
'+ + '
'+ + '
'+ + '



' + ) + }); + + var statusValuesGrid = statusValues; + statusValuesGrid.splice( 0, 1 ); + cmodel = new Ext.grid.ColumnModel({ + viewConfig: { + forceFit:true, + cls:"x-grid-empty", + emptyText: _('ID_NO_RECORDS_FOUND') + }, + defaults: { + width: 50 + }, + columns: [ + expander, + {id:'APP_MSG_UID', dataIndex: 'APP_MSG_UID', hidden:true, hideable:false}, + {header: 'APP_UID', dataIndex: 'APP_UID', hidden:true, hideable:false}, + {header: 'DEL_INDEX', dataIndex: 'DEL_INDEX', hidden:true, hideable:false}, + {header: 'PRO_UID', dataIndex: 'PRO_UID', hidden:true, hideable:false, sortable: false}, + {header: 'TAS_UID', dataIndex: 'TAS_UID', hidden:true, hideable:false, sortable: false}, + {header: _('ID_PROCESS'), dataIndex: 'PRO_TITLE', width: 100, hidden: false,renderer: columnRenderer, sortable: false}, + {header: _('ID_TASK'), dataIndex: 'TAS_TITLE', width: 100, hidden: false,renderer: columnRenderer, sortable: false}, + {header: _('ID_TYPE'), dataIndex: 'APP_MSG_TYPE', width: 50, hidden: false,renderer: columnRenderer, sortable: true}, + {header: _('ID_DATE_LABEL'), dataIndex: 'APP_MSG_DATE', width: 80,hidden:false, renderer: columnRenderer, sortable: true}, + //{header: _('ID_DERIVED'), dataIndex: 'APP_MSG_SEND_DATE', width: 80,hidden:false,hideable:false, renderer: columnRenderer, sortable: true}, + {header: _('ID_SUBJECT'), dataIndex: 'APP_MSG_SUBJECT', width: 80,hidden:false, renderer: columnRenderer, sortable: true}, + {header: _('ID_FROM'), dataIndex: 'APP_MSG_FROM', width: 80,hidden:false,renderer: columnRenderer, sortable: true}, + {header: _('ID_TO'), dataIndex: 'APP_MSG_TO', width: 80,hidden:false,renderer: columnRenderer, sortable: true}, + //{header: _('ID_STATUS'), dataIndex: 'APP_MSG_STATUS', width: 50,hidden:false,hideable:false, renderer: columnRenderer, sortable: true} + { + header: _('ID_STATUS'), + dataIndex: 'APP_MSG_STATUS', + width: 50, + //hidden:false, + //hideable:false, + renderer: columnRenderer, + //sortable: true, + editor: new Ext.form.ComboBox({ + listClass: 'x-combo-list-small', + mode: 'local', + displayField:'value', + lazyRender: true, + triggerAction: 'all', + valueField:'id', + editable: false, + store: new Ext.data.ArrayStore({ + fields: ['id', 'value'], + data : statusValuesGrid + }), + listeners: { + select: function(a, b) { + var row = emailsGrid.getSelectionModel().getSelected(); + Ext.MessageBox.show({ msg: _('ID_PROCESSING'), wait:true,waitConfig: {interval:200} }); + Ext.Ajax.request({ + url : 'emailsAjax' , + params : { + request : 'updateStatusMessage', + APP_MSG_UID: row.data.APP_MSG_UID, + APP_MSG_STATUS: this.value + }, + success: function ( result, request ) { + Ext.MessageBox.hide(); + }, + failure: function ( result, request) { + if (typeof(result.responseText) != 'undefined') { + Ext.MessageBox.alert(_('ID_FAILED'), result.responseText); + } + } + }); + } + } + }) + } + ] + }); + + smodel = new Ext.grid.RowSelectionModel({ + singleSelect: true + }); + + bbarpaging = new Ext.PagingToolbar({ + pageSize : 25, + store : store, + displayInfo : true, + displayMsg : _('ID_GRID_PAGE_DISPLAYING_EMAIL_MESSAGE') + '    ', + emptyMsg : _('ID_GRID_PAGE_NO_EMAIL_MESSAGE') + }); + + emailsGrid = new Ext.grid.EditorGridPanel({ + region: 'center', + layout: 'fit', + id: 'emailsGrid', + height:100, + autoWidth : true, + stateful : true, + stateId : 'grid', + enableColumnResize: true, + enableHdMenu: true, + frame:false, + columnLines: false, + viewConfig: { + forceFit:true + }, + clicksToEdit: 1, + title : _('ID_EMAILS'), + store: store, + cm: cmodel, + sm: smodel, + tbar: actions, + bbar: bbarpaging, + plugins: expander, + listeners: { + render: function(){ + this.loadMask = new Ext.LoadMask(this.body, {msg:_('ID_LOADING_GRID')}); + } + } + }); + + emailsGrid.store.load(); + + viewport = new Ext.Viewport({ + layout: 'fit', + autoScroll: false, + items: [ + emailsGrid + ] + }); + }); + +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