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
"+TRANSLATIONS.ID_DESCRIPTION+": {INP_DOC_DESCRIPTION}
") + }); + + inputDocColumns = new Ext.grid.ColumnModel({ + defaults: { + editable: false, + sortable: true + }, + columns: [ + expander, + {id: 'INP_DOC_UID', dataIndex: 'INP_DOC_UID', hidden:true, hideable:false}, + {header: _('ID_TITLE'), dataIndex: 'INP_DOC_TITLE', width: 350}, + {header: _('ID_VERSIONING'), dataIndex: 'INP_DOC_VERSIONING', width: 100, renderer: render_version}, + {header: _('ID_DESTINATION_PATH'), dataIndex: 'INP_DOC_DESTINATION_PATH', width: 150}, + {header: _('ID_TASK'), dataIndex: 'INP_DOC_TASKS', width: 100, align: 'center'} + ] + }); + + inputDocGrid = new Ext.grid.GridPanel({ + store: inputDocStore, + cm: inputDocColumns, + sm: smodel, + id: 'inputdocGrid', loadMask: true, - //loadingText: 'Loading...', - //renderTo: 'cases-grid', frame: false, - autoHeight:false, + autoWidth: true, clicksToEdit: 1, - minHeight:350, - height :350, + height:100, layout: 'fit', plugins: expander, - cm: inputDocColumns, stripeRows: true, - tbar: tb, - bbar: new Ext.PagingToolbar({ - pageSize: 10, - store: inputDocStore, - displayInfo: true, - displayMsg: 'Displaying Input Document {0} - {1} of {2}', - emptyMsg: "No Input Document to display", - items:[] - }), - viewConfig: {forceFit: true} - }); - - //connecting context menu to grid + tbar: [newButton, '-', editButton, deleteButton], + bbar: bbarpaging, + viewConfig: {forceFit: true}, + view: new Ext.grid.GroupingView({ + forceFit:true, + groupTextTpl: '{text}' + }) + }); + + //connecting context menu to grid inputDocGrid.addListener('rowcontextmenu', onInputDocContextMenu,this); - + //by default the right click is not selecting the grid row over the mouse //we need to set this four lines inputDocGrid.on('rowcontextmenu', function (grid, rowIndex, evt) { var sm = grid.getSelectionModel(); sm.selectRow(rowIndex, sm.isSelected(rowIndex)); }, this); - + //prevent default inputDocGrid.on('contextmenu', function (evt) { - evt.preventDefault(); + evt.preventDefault(); }, this); - + function onInputDocContextMenu(grid, rowIndex, e) { e.stopEvent(); var coords = e.getXY(); - dynaformsContextMenu.showAt([coords[0], coords[1]]); + idocsContextMenu.showAt([coords[0], coords[1]]); } - - var dynaformsContextMenu = new Ext.menu.Menu({ - id: 'messageContextMenu', - items: [{ - text: _('ID_EDIT'), - iconCls: 'button_menu_ext ss_sprite ss_pencil', - handler: editInputDoc - },{ - text: _('ID_DELETE'), - icon: '/images/delete.png', - handler: removeInputDoc - },{ - text: _('ID_UID'), - handler: function(){ - var rowSelected = Ext.getCmp('inputdocGrid').getSelectionModel().getSelected(); - workflow.createUIDButton(rowSelected.data.INP_DOC_UID); - } - } - ] - }); - - var gridWindow = new Ext.Window({ + + inputDocGrid.store.load(); + + gridWindow = new Ext.Window({ title: _('ID_REQUEST_DOCUMENTS'), - width: 550, + width: 600, height: 350, minWidth: 200, minHeight: 350, layout: 'fit', plain: true, items: inputDocGrid, - autoScroll: true - }); - - var newIOWindow = new Ext.Window({ - title: _('ID_NEW_INPUTDOCS'), - width: 550, - height: 410, - minWidth: 200, - minHeight: 405, - autoScroll: true, - layout: 'fit', - plain: true, - items: inputDocForm + autoScroll: true, + modal: true }); + + newIDocWindow = new Ext.Window({ + title: _('ID_NEW_INPUTDOCS'), + width: 550, + id: 'frmNewInputDoc', + autoHeight: true, + autoScroll: true, + closable: false, + layout: 'fit', + plain: true, + modal: true, + items: inputDocForm + }); + gridWindow.show(); } - - ProcessOptions.prototype.addOutputDoc= function(_5625) {