From bcbc02a13082f9960a23f0c220f9c68c0613589f Mon Sep 17 00:00:00 2001 From: Enrique Ponce de Leon Date: Fri, 11 Mar 2011 21:03:41 +0000 Subject: [PATCH] BPMN Editor - Input Documents Manager Fixed --- workflow/engine/classes/class.processMap.php | 22 + .../controllers/processOptionsProxy.php | 106 ++ .../engine/templates/bpmn/ProcessOptions.js | 952 ++++++++---------- 3 files changed, 555 insertions(+), 525 deletions(-) create mode 100644 workflow/engine/controllers/processOptionsProxy.php diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php index 118f47f0a..1bafc4e79 100644 --- a/workflow/engine/classes/class.processMap.php +++ b/workflow/engine/classes/class.processMap.php @@ -5362,10 +5362,13 @@ class processMap { */ function getExtInputDocumentsCriteria($start, $limit,$sProcessUID = '') { + $aTasks = $this->getAllInputDocsByTask($sProcessUID); $sDelimiter = DBAdapter::getStringDelimiter (); $oCriteria = new Criteria ( 'workflow' ); $oCriteria->addSelectColumn ( InputDocumentPeer::INP_DOC_UID ); $oCriteria->addSelectColumn ( InputDocumentPeer::PRO_UID ); + $oCriteria->addSelectColumn ( InputDocumentPeer::INP_DOC_VERSIONING ); + $oCriteria->addSelectColumn ( InputDocumentPeer::INP_DOC_DESTINATION_PATH ); $oCriteria->addAsColumn ( 'INP_DOC_TITLE', 'C1.CON_VALUE' ); $oCriteria->addAsColumn ( 'INP_DOC_DESCRIPTION', 'C2.CON_VALUE' ); $oCriteria->addAlias ( 'C1', 'CONTENT' ); @@ -5401,6 +5404,7 @@ class processMap { $aRow ['INP_DOC_TITLE'] = $inputDocumentObj ['INP_DOC_TITLE']; $aRow ['INP_DOC_DESCRIPTION'] = $inputDocumentObj ['INP_DOC_DESCRIPTION']; } + $aRow['INP_DOC_TASKS'] = isset($aTasks[$aRow ['INP_DOC_UID']]) ? $aTasks[$aRow ['INP_DOC_UID']] :0; $inputDocArray [] = $aRow; $oDataset->next (); } @@ -6736,5 +6740,23 @@ function saveExtEvents($oData) return $triggersArray; } + + function getAllInputDocsByTask($sPRO_UID){ + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(StepPeer::STEP_UID_OBJ); + $oCriteria->addSelectColumn('COUNT(*) AS CNT'); + $oCriteria->addGroupByColumn(StepPeer::STEP_UID_OBJ); + $oCriteria->add(StepPeer::STEP_TYPE_OBJ,'INPUT_DOCUMENT'); + $oCriteria->add(StepPeer::PRO_UID, $sPRO_UID); + $oDataset = StepPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + $aIDocs = array(); + while ($oDataset->next()){ + $row = $oDataset->getRow(); + $aIDocs[$row['STEP_UID_OBJ']] = $row['CNT']; + } + return $aIDocs; + } } diff --git a/workflow/engine/controllers/processOptionsProxy.php b/workflow/engine/controllers/processOptionsProxy.php new file mode 100644 index 000000000..a6bcd64c6 --- /dev/null +++ b/workflow/engine/controllers/processOptionsProxy.php @@ -0,0 +1,106 @@ +PRO_UID; + $start = isset($params->start) ? $params->start: 0; + $limit = isset($params->limit) ? $params->limit: ''; + + $rows = $oProcessMap->getExtInputDocumentsCriteria($start, $limit,$pro_uid); + $total = $oProcessMap->getAllInputDocumentCount(); + $aDocs = $oProcessMap->getAllInputDocsByTask($pro_uid); + array_shift($rows); + + $this->PRO_UID = $pro_uid; + $this->success = true; + $this->idocs = $rows; + $this->total_idocs = $total; + } + + function canDeleteInputDoc($params){ + G::LoadClass('processMap'); + $oProcessMap = new processMap(new DBConnection); + $aRows = $oProcessMap->getAllInputDocsByTask($params->PRO_UID); + $response = isset($aRows[$params->IDOC_UID]) ? false : true; + $this->success = $response; + } + + function deleteInputDoc($params){ + require_once 'classes/model/StepSupervisor.php'; + require_once 'classes/model/ObjectPermission.php'; + require_once 'classes/model/InputDocument.php'; + G::LoadClass('processMap'); + + $oStepSupervisor = new StepSupervisor(); + $fields2=$oStepSupervisor->loadInfo($params->IDOC_UID); + $oStepSupervisor->remove($fields2['STEP_UID']); + + $oPermission = new ObjectPermission(); + $fields3=$oPermission->loadInfo($params->IDOC_UID); + if(is_array($fields3)) + $oPermission->remove($fields3['OP_UID']); + + $oInputDocument = new InputDocument(); + $fields = $oInputDocument->load($params->IDOC_UID); + + $oInputDocument->remove($params->IDOC_UID); + + $oStep = new Step(); + $oStep->removeStep('INPUT_DOCUMENT', $params->IDOC_UID); + + $oOP = new ObjectPermission(); + $oOP->removeByObject('INPUT', $params->IDOC_UID); + + //refresh dbarray with the last change in inputDocument + $oMap = new processMap(); + $oCriteria = $oMap->getInputDocumentsCriteria($params->PRO_UID); + + $this->success = true; + $this->msg = G::LoadTranslation('ID_INPUT_DOC_SUCCESS_DELETE'); + } + + function saveInputDoc($params){ + require_once 'classes/model/InputDocument.php'; + G::LoadClass( 'processMap' ); + + $aData = array(); + $aData['PRO_UID'] = $params->PRO_UID; + $aData['INP_DOC_UID'] = $params->INP_DOC_UID; + $aData['INP_DOC_TITLE'] = $params->INP_DOC_TITLE; + $aData['INP_DOC_FORM_NEEDED'] = $params->INP_DOC_FORM_NEEDED; + if ($aData['INP_DOC_FORM_NEEDED'] != 'VIRTUAL'){ + $aData['INP_DOC_ORIGINAL'] = $params->INP_DOC_ORIGINAL; + }else{ + $aData['INP_DOC_ORIGINAL'] = 'ORIGINAL'; + } + $aData['INP_DOC_VERSIONING'] = $params->INP_DOC_VERSIONING; + $aData['INP_DOC_DESCRIPTION'] = $params->INP_DOC_DESCRIPTION; + $aData['INP_DOC_DESTINATION_PATH'] = $params->INP_DOC_DESTINATION_PATH; + $aData['INP_DOC_TAGS'] = $params->INP_DOC_TAGS; + + $oInputDocument = new InputDocument(); + if ($aData['INP_DOC_UID'] == '') { + unset($aData['INP_DOC_UID']); + $oInputDocument->create($aData); + $this->msg = G::LoadTranslation('ID_INPUT_DOC_SUCCESS_NEW'); + }else { + $oInputDocument->update($aData); + $this->msg = G::LoadTranslation('ID_INPUT_DOC_SUCCESS_UPDATE'); + } + + //refresh dbarray with the last change in inputDocument + $oMap = new processMap(); + $oCriteria = $oMap->getInputDocumentsCriteria($aData['PRO_UID']); + $this->success = true; + } + function loadInputDoc($params){ + require_once 'classes/model/InputDocument.php'; + $oInputDocument = new InputDocument(); + $fields = $oInputDocument->load($params->IDOC_UID); + $this->success = true; + $this->data = $fields; + } +} //End processOptionsProxy \ No newline at end of file diff --git a/workflow/engine/templates/bpmn/ProcessOptions.js b/workflow/engine/templates/bpmn/ProcessOptions.js index 4f4d8aa20..beb95927c 100755 --- a/workflow/engine/templates/bpmn/ProcessOptions.js +++ b/workflow/engine/templates/bpmn/ProcessOptions.js @@ -1224,593 +1224,495 @@ ProcessOptions.prototype.dbConnection = function() ProcessOptions.prototype.addInputDoc= function(_5625) { + var gridWidow; + var inputDocGrid; + var inputDocStore; + var expander; + var inputDocColumns; + var render_version; + var newButton; + var editButton; + var deleteButton; + var saveButton; + var cancelButton; + var smodel; + var bbarpaging; + var idocsContextMenu; + var newIDocWindow; + var inputDocForm; - var inpDocFields = Ext.data.Record.create([ - { - name: 'INP_DOC_UID', - type: 'string' - }, - { - name: 'PRO_UID', - type: 'string' - }, - { - name: 'INP_DOC_TITLE', - type: 'string' - }, - { - name: 'INP_DOC_DESCRIPTION', - type: 'string' - },{ - name: 'INP_DOC_VERSIONING', - type: 'string' - },{ - name: 'INP_DOC_DESTINATION_PATH', - type: 'string' + //Renderer for Versioning Field + render_version = function(value){ + var out = ''; + switch(value){ + case '0': out = 'No'; break; + case '1': out = 'Yes'; break; } - ]); - - var editor = new Ext.ux.grid.RowEditor({ - saveText: _('ID_UPDATE') - }); - - var btnAdd = new Ext.Button({ - id : 'btnAdd', + return out; + } + + + + newButton = new Ext.Action({ text : _('ID_NEW'), iconCls: 'button_menu_ext ss_sprite ss_add', - handler: function () { - newIOWindow.show(); + handler: function(){ inputDocForm.getForm().reset(); - inputDocForm.getForm().items.items[2].hide(); - inputDocForm.getForm().items.items[2].getEl().up('.x-form-item').setDisplayed(false); // show label - inputDocForm.getForm().items.items[0].focus('',200); + Ext.getCmp('idoc_FORM_NEEDED').setValue('VIRTUAL'); + Ext.getCmp('idoc_VERSIONING').setValue('0'); + inputDocForm.getForm().findField('INP_DOC_TAGS').setValue('INPUT'); + inputDocForm.getForm().findField('PRO_UID').setValue(pro_uid); + newIDocWindow.setTitle(_('ID_NEW_INPUTDOCS')); + newIDocWindow.show(); } }); - - //edit input document Function - var editInputDoc = function() { - editor.stopEditing(); - var rowSelected = Ext.getCmp('inputdocGrid').getSelectionModel().getSelections(); - if( rowSelected.length == 0 ) { - PMExt.error('', _('ID_NO_SELECTION_WARNING')); - return false; - } - var inputDocUID = rowSelected[0].get('INP_DOC_UID'); - inputDocForm.form.load({ - url : 'bpmn/proxyExtjs.php?INP_DOC_UID=' +inputDocUID+'&action=editInputDocument', - method : 'GET', - waitMsg : 'Loading', - success : function(form, action) { - newIOWindow.show(); - Ext.getCmp("INP_DOC_UID").setValue(inputDocUID); - }, - failure:function(form, action) { - PMExt.notify( _('ID_STATUS') , _('ID_LOAD_FAILED') ); - } - }); - } - - var removeInputDoc = function(){ - ids = Array(); - - editor.stopEditing(); - var rowsSelected = Ext.getCmp('inputdocGrid').getSelectionModel().getSelections(); - - if( rowsSelected.length == 0 ) { - PMExt.error('', _('ID_NO_SELECTION_WARNING')); - return false; - } - - for(i=0; i