diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php index 5e92108a1..d8558d9c2 100644 --- a/workflow/engine/classes/class.processMap.php +++ b/workflow/engine/classes/class.processMap.php @@ -3097,6 +3097,133 @@ class processMap { return $oCriteria; } + function getExtObjectsPermissions($sProcessUID) { + G::LoadClass('case'); + Cases::verifyTable (); + $aObjectsPermissions = array(); + //$aObjectsPermissions [] = array('OP_UID' => 'char', 'TASK_TARGET' => 'char', 'GROUP_USER' => 'char', 'TASK_SOURCE' => 'char', 'OBJECT_TYPE' => 'char', 'OBJECT' => 'char', 'PARTICIPATED' => 'char', 'ACTION' => 'char', 'OP_CASE_STATUS' => 'char'); + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_UID); + $oCriteria->addSelectColumn(ObjectPermissionPeer::TAS_UID); + $oCriteria->addSelectColumn(ObjectPermissionPeer::USR_UID); + $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_USER_RELATION); + $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_TASK_SOURCE); + $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_PARTICIPATE); + $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_OBJ_TYPE); + $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_OBJ_UID); + $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_ACTION); + $oCriteria->addSelectColumn(ObjectPermissionPeer::OP_CASE_STATUS); + $oCriteria->add(ObjectPermissionPeer::PRO_UID, $sProcessUID); + $oDataset = ObjectPermissionPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + //Obtain task target + if (($aRow ['TAS_UID'] != '') && ($aRow ['TAS_UID'] != '0')) { + try { + $oTask = new Task ( ); + $aFields = $oTask->load($aRow ['TAS_UID']); + $sTaskTarget = $aFields ['TAS_TITLE']; + } catch (Exception $oError) { + $sTaskTarget = 'All Tasks'; + } + } else { + $sTaskTarget = G::LoadTranslation('ID_ANY_TASK'); + } + //Obtain user or group + if ($aRow ['OP_USER_RELATION'] == 1) { + $oUser = new Users ( ); + $aFields = $oUser->load($aRow ['USR_UID']); + $sUserGroup = $aFields ['USR_FIRSTNAME'] . ' ' . $aFields ['USR_LASTNAME'] . ' (' . $aFields ['USR_USERNAME'] . ')'; + } else { + $oGroup = new Groupwf ( ); + if ($aRow ['USR_UID'] != '') { + try { + $aFields = $oGroup->load($aRow ['USR_UID']); + $sUserGroup = $aFields ['GRP_TITLE']; + } catch (Exception $oError) { + $sUserGroup = '(GROUP DELETED)'; + } + } else { + $sUserGroup = G::LoadTranslation('ID_ANY'); + } + } + //Obtain task source + if (($aRow ['OP_TASK_SOURCE'] != '') && ($aRow ['OP_TASK_SOURCE'] != '0')) { + try { + $oTask = new Task ( ); + $aFields = $oTask->load($aRow ['OP_TASK_SOURCE']); + $sTaskSource = $aFields ['TAS_TITLE']; + } catch (Exception $oError) { + $sTaskSource = 'All Tasks'; + } + } else { + $sTaskSource = G::LoadTranslation('ID_ANY_TASK'); + } + //Obtain object and type + switch ($aRow ['OP_OBJ_TYPE']) { + case 'ANY' : + $sObjectType = G::LoadTranslation('ID_ALL'); + $sObject = G::LoadTranslation('ID_ALL'); + break; + /* case 'ANY_DYNAFORM': + $sObjectType = G::LoadTranslation('ID_ANY_DYNAFORM'); + $sObject = G::LoadTranslation('ID_ALL'); + break; + case 'ANY_INPUT': + $sObjectType = G::LoadTranslation('ID_ANY_INPUT'); + $sObject = G::LoadTranslation('ID_ALL'); + break; + case 'ANY_OUTPUT': + $sObjectType = G::LoadTranslation('ID_ANY_OUTPUT'); + $sObject = G::LoadTranslation('ID_ALL'); + break; */ + case 'DYNAFORM' : + $sObjectType = G::LoadTranslation('ID_DYNAFORM'); + if (($aRow ['OP_OBJ_UID'] != '') && ($aRow ['OP_OBJ_UID'] != '0')) { + $oDynaform = new Dynaform ( ); + $aFields = $oDynaform->load($aRow ['OP_OBJ_UID']); + $sObject = $aFields ['DYN_TITLE']; + } else { + $sObject = G::LoadTranslation('ID_ALL'); + } + break; + case 'INPUT' : + $sObjectType = G::LoadTranslation('ID_INPUT_DOCUMENT'); + if (($aRow ['OP_OBJ_UID'] != '') && ($aRow ['OP_OBJ_UID'] != '0')) { + $oInputDocument = new InputDocument ( ); + $aFields = $oInputDocument->load($aRow ['OP_OBJ_UID']); + $sObject = $aFields ['INP_DOC_TITLE']; + } else { + $sObject = G::LoadTranslation('ID_ALL'); + } + break; + case 'OUTPUT' : + $sObjectType = G::LoadTranslation('ID_OUTPUT_DOCUMENT'); + if (($aRow ['OP_OBJ_UID'] != '') && ($aRow ['OP_OBJ_UID'] != '0')) { + $oOutputDocument = new OutputDocument ( ); + $aFields = $oOutputDocument->load($aRow ['OP_OBJ_UID']); + $sObject = $aFields ['OUT_DOC_TITLE']; + } else { + $sObject = G::LoadTranslation('ID_ALL'); + } + break; + } + //Participated + if ($aRow ['OP_PARTICIPATE'] == 0) { + $sParticipated = G::LoadTranslation('ID_NO'); + } else { + $sParticipated = G::LoadTranslation('ID_YES'); + } + //Obtain action (permission) + $sAction = G::LoadTranslation('ID_' . $aRow ['OP_ACTION']); + //Add to array + $aObjectsPermissions [] = array('OP_UID' => $aRow ['OP_UID'], 'TASK_TARGET' => $sTaskTarget, 'GROUP_USER' => $sUserGroup, 'TASK_SOURCE' => $sTaskSource, 'OBJECT_TYPE' => $sObjectType, 'OBJECT' => $sObject, 'PARTICIPATED' => $sParticipated, 'ACTION' => $sAction, 'OP_CASE_STATUS' => $aRow ['OP_CASE_STATUS']); + $oDataset->next(); + } + return $aObjectsPermissions; + } + /** * objectsPermissionsList * @@ -5357,5 +5484,90 @@ class processMap { throw ($e); } } + + function newExtObjectPermission($sProcessUID) + { + $aUsersGroups = array(); + $aUsersGroups [] = array('UID' => 'char', 'LABEL' => 'char'); + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(GroupwfPeer::GRP_UID); + $oCriteria->addAsColumn('GRP_TITLE', ContentPeer::CON_VALUE); + $aConditions = array(); + $aConditions [] = array(GroupwfPeer::GRP_UID, ContentPeer::CON_ID); + $aConditions [] = array(ContentPeer::CON_CATEGORY, DBAdapter::getStringDelimiter () . 'GRP_TITLE' . DBAdapter::getStringDelimiter ()); + $aConditions [] = array(ContentPeer::CON_LANG, DBAdapter::getStringDelimiter () . SYS_LANG . DBAdapter::getStringDelimiter ()); + $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); + $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); + $oDataset = GroupwfPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aUsersGroups [] = array('UID' => '2|' . $aRow ['GRP_UID'], 'LABEL' => $aRow ['GRP_TITLE'] . ' (' . G::LoadTranslation('ID_GROUP') . ')'); + $oDataset->next(); + } + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(UsersPeer::USR_UID); + $oCriteria->addSelectColumn(UsersPeer::USR_USERNAME); + $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); + $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); + $oDataset = UsersPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aUsersGroups [] = array('UID' => '1|' . $aRow ['USR_UID'], 'LABEL' => $aRow ['USR_FIRSTNAME'] . ' ' . $aRow ['USR_LASTNAME'] . ' (' . $aRow ['USR_USERNAME'] . ')'); + $oDataset->next(); + } + $aAllObjects = array(); + $aAllObjects [] = array('UID' => 'char', 'LABEL' => 'char'); + $aAllDynaforms = array(); + $aAllDynaforms [] = array('UID' => 'char', 'LABEL' => 'char'); + $aAllInputs = array(); + $aAllInputs [] = array('UID' => 'char', 'LABEL' => 'char'); + $aAllOutputs = array(); + $aAllOutputs [] = array('UID' => 'char', 'LABEL' => 'char'); + $oCriteria = $this->getDynaformsCriteria($sProcessUID); + $oCriteria->add(DynaformPeer::DYN_TYPE, 'XMLFORM'); + $oDataset = DynaformPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aRow ['DYN_TITLE'] = (isset($aRow ['DYN_TITLE'])) ? $aRow ['DYN_TITLE'] : ''; + $aAllObjects [] = array('UID' => 'DYNAFORM|' . $aRow ['DYN_UID'], + 'LABEL' => $aRow ['DYN_TITLE'] . ' (' . G::LoadTranslation('ID_DYNAFORM') . ')'); + $aAllDynaforms [] = array('UID' => $aRow ['DYN_UID'], + 'LABEL' => $aRow ['DYN_TITLE']); + $oDataset->next(); + } + G::LoadClass('ArrayPeer'); + $oDataset = ArrayBasePeer::doSelectRS($this->getInputDocumentsCriteria($sProcessUID)); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAllObjects [] = array('UID' => 'INPUT_DOCUMENT|' . $aRow ['INP_DOC_UID'], + 'LABEL' => $aRow ['INP_DOC_TITLE'] . ' (' . G::LoadTranslation('ID_INPUT_DOCUMENT') . ')'); + $aAllInputs [] = array('UID' => $aRow ['INP_DOC_UID'], + 'LABEL' => $aRow ['INP_DOC_TITLE']); + $oDataset->next(); + } + G::LoadClass('ArrayPeer'); + $oDataset = ArrayBasePeer::doSelectRS($this->getOutputDocumentsCriteria($sProcessUID)); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $aAllObjects [] = array('UID' => 'OUTPUT_DOCUMENT|' . $aRow ['OUT_DOC_UID'], 'LABEL' => $aRow ['OUT_DOC_TITLE'] . ' (' . G::LoadTranslation('ID_OUTPUT_DOCUMENT') . ')'); + $aAllOutputs [] = array('UID' => $aRow ['OUT_DOC_UID'], 'LABEL' => $aRow ['OUT_DOC_TITLE']); + $oDataset->next(); + } + global $_DBArray; + $_DBArray = (isset($_SESSION ['_DBArray']) ? $_SESSION ['_DBArray'] : ''); + $_DBArray ['usersGroups'] = $aUsersGroups; + $_DBArray ['allObjects'] = $aAllObjects; + $_DBArray ['allDynaforms'] = $aAllDynaforms; + $_DBArray ['allInputs'] = $aAllInputs; + $_DBArray ['allOutputs'] = $aAllOutputs; + $_SESSION ['_DBArray'] = $_DBArray; + return($_SESSION['_DBArray']); + } } diff --git a/workflow/engine/methods/bpmn/proxyObjectPermissions.php b/workflow/engine/methods/bpmn/proxyObjectPermissions.php new file mode 100755 index 000000000..9b44caeb7 --- /dev/null +++ b/workflow/engine/methods/bpmn/proxyObjectPermissions.php @@ -0,0 +1,19 @@ +getExtObjectsPermissions($_GET['pid']); + + } + if ( isset($_GET['pid'] )&& isset($_GET['t']) ) + { + $rows = $oProcessMap->newExtObjectPermission($_GET['pid']); + + } + + $result['totalCount'] = count($rows); + $result['data'] = $rows; + print json_encode($result); +?> diff --git a/workflow/engine/templates/bpmn/ProcessMapContext.js b/workflow/engine/templates/bpmn/ProcessMapContext.js index 14eebe3c3..dda5f30ea 100755 --- a/workflow/engine/templates/bpmn/ProcessMapContext.js +++ b/workflow/engine/templates/bpmn/ProcessMapContext.js @@ -322,7 +322,367 @@ ProcessMapContext.prototype.delLines= function() ProcessMapContext.prototype.processPermission= function() { - Ext.MessageBox.alert('Status','Process Permission'); + var pro_uid = workflow.getUrlVars(); + //Database store code starts here + var dbConnFields = Ext.data.Record.create([ + { name: 'OP_UID',type: 'string'}, + { name: 'TASK_TARGET',type: 'string'}, + { name: 'GROUP_USER',type: 'string'}, + { name: 'TASK_SOURCE',type: 'string'}, + { name: 'PARTICIPATED',type: 'string'}, + { name: 'OBJECT_TYPE',type: 'string'}, + { name: 'OBJECT',type: 'string'}, + { name: 'ACTION',type: 'string'}, + { name: 'OP_CASE_STATUS',type: 'string'} + ]); + +var PermissionStore = new Ext.data.JsonStore({ + root : 'data', + totalProperty: 'totalCount', + idProperty : 'gridIndex', + remoteSort : true, + fields : dbConnFields, + proxy: new Ext.data.HttpProxy({ + url: 'proxyObjectPermissions.php?pid='+pro_uid + }) + }); + PermissionStore.load(); + +var PermissionGridColumn = new Ext.grid.ColumnModel({ + columns: [ + new Ext.grid.RowNumberer(), + { + id: 'TASK_TARGET', + header: 'Target Task', + dataIndex: 'TASK_TARGET', + //width: 100, + editable: false, + sortable: true, + editor: new Ext.form.TextField({ + //allowBlank: false + }) + },{ + id: 'GROUP_USER', + header: 'Group or Users', + dataIndex: 'GROUP_USER', + //width: 100, + sortable: true, + editor: new Ext.form.TextField({ + //allowBlank: false + }) + },{ + id: 'TASK_SOURCE', + header: 'Origin Task', + dataIndex: 'TASK_SOURCE', + //width: 100, + sortable: true, + editor: new Ext.form.TextField({ + //allowBlank: false + }) + },{ + id: 'PARTICIPATED', + header: 'Participation', + dataIndex: 'PARTICIPATED', + width: 100, + sortable: true, + editor: new Ext.form.TextField({ + //allowBlank: false + }) + },{ + id: 'OBJECT_TYPE', + header: 'Type', + dataIndex: 'OBJECT_TYPE', + //width: 100, + editable: false, + sortable: true, + editor: new Ext.form.TextField({ + //allowBlank: false + }) + },{ + id: 'OBJECT', + header: 'Object', + dataIndex: 'OBJECT', + //width: 100, + sortable: true, + editor: new Ext.form.TextField({ + //allowBlank: false + }) + },{ + id: 'ACTION', + header: 'Permission', + dataIndex: 'ACTION', + //width: 100, + sortable: true, + editor: new Ext.form.TextField({ + //allowBlank: false + }) + },{ + id: 'OP_CASE_STATUS', + header: 'Status', + dataIndex: 'OP_CASE_STATUS', + width: 100, + sortable: true, + editor: new Ext.form.TextField({ + //allowBlank: false + }) + } + ] + }); + + var PermissionGrid = new Ext.grid.GridPanel({ + store: PermissionStore, + id : 'mygrid', + loadMask: true, + loadingText: 'Loading...', + renderTo: 'cases-grid', + frame: false, + autoHeight:false, + clicksToEdit: 1, + width:450, + minHeight:400, + height :400, + layout: 'fit', + cm: PermissionGridColumn, + stripeRows: true, + //tbar: tb, + viewConfig: {forceFit: true} + }); + + var gridWindow = new Ext.Window({ + title: 'Process Permissions', + collapsible: false, + maximizable: true, + width: 600, + //autoHeight: true, + height: 450, + layout: 'fit', + plain: true, + bodyStyle: 'padding:5px;', + buttonAlign: 'center', + items: PermissionGrid + + }); + var btnNew = new Ext.Button({ + id: 'btnNew', + text: 'New', + iconCls: 'application_add', + handler: function () { + formWindow.show(); + } + }) + + var PermissionForm =new Ext.FormPanel({ + // title:"Add new Database Source", + collapsible: false, + maximizable: true, + width:450, + frame:true, + plain: true, + bodyStyle: 'padding:5px;', + buttonAlign: 'center', + + items:[{ + width :150, + xtype :'combo', + mode :'local', + editable :false, + fieldLabel :'Status Case', + triggerAction :'all', + forceSelection : true, + name :'OP_CASE_STATUS', + displayField :'name', + value :'ALL', + valueField :'value', + store :new Ext.data.JsonStore({ + fields : ['name', 'value'], + data : [ + {name : 'ALL', value: '0'}, + {name : 'DRAFTS', value: '1'}, + {name : 'TO DO', value: '2'}, + {name : 'PAUSED', value: '3'}, + {name : 'COMPLETED', value: '4'}]}) + },{ + width :150, + xtype :'combo', + mode :'local', + editable :false, + fieldLabel :'Target Task', + triggerAction :'all', + forceSelection : true, + name :'TASK_TARGET', + displayField :'name', + value :'All Tasks', + valueField :'value', + store :new Ext.data.JsonStore({ + fields : ['name', 'value'], + data : [ + {name : 'All tasks', value: '0'}, + {name : 'Apply for leave', value: '1'}, + {name : 'HR approval', value: '2'}, + {name : 'Supervisor Approval', value: '3'}]}) + },{ + width :150, + xtype :'combo', + mode :'local', + editable :false, + fieldLabel :'Group or Users', + triggerAction :'all', + forceSelection : true, + name :'GROUP_USER', + displayField :'name', + value :'Administrator(Admin)', + valueField :'value', + store :new Ext.data.JsonStore({ + fields : ['name', 'value'], + data : [ + {name : 'Administrator(Admin)', value: '0'}]}) + },{ + width :150, + xtype :'combo', + mode :'local', + editable :false, + fieldLabel :'Origin Task', + triggerAction :'all', + forceSelection : true, + name :'TASK_SOURCE', + displayField :'name', + value :'All Tasks', + valueField :'value', + store :new Ext.data.JsonStore({ + fields : ['name', 'value'], + data : [ + {name : 'All tasks', value: '0'}, + {name : 'Apply for leave', value: '1'}, + {name : 'HR approval', value: '2'}, + {name : 'Supervisor Approval', value: '3'}]}) + },{ + width :150, + xtype :'combo', + mode :'local', + editable :false, + fieldLabel :'Participation Required?', + triggerAction :'all', + forceSelection : true, + name :'PARTICIPATED', + displayField :'name', + value :'Yes', + valueField :'value', + store :new Ext.data.JsonStore({ + fields : ['name', 'value'], + data : [ + {name : 'Yes', value: '0'}, + {name : 'No', value: '1'}]}) + },{ + width :150, + xtype :'combo', + mode :'local', + editable :false, + fieldLabel :'Type', + triggerAction :'all', + forceSelection : true, + name :'OBJECT_TYPE', + displayField :'name', + value :'All', + valueField :'value', + store :new Ext.data.JsonStore({ + fields : ['name', 'value'], + data : [ + {name : 'All', value: '0'}, + {name : 'Dynaform', value: '1'}, + {name : 'Input Document', value: '2'}, + {name : 'Output Document', value: '3'}]}) + },{ + width :150, + xtype :'combo', + mode :'local', + editable :false, + fieldLabel :'Permission', + triggerAction :'all', + forceSelection : true, + name :'ACTION', + displayField :'name', + value :'View', + valueField :'value', + store :new Ext.data.JsonStore({ + fields : ['name', 'value'], + data : [ + {name : 'View', value: '0'}, + {name : 'Block', value: '1'}]}) + } + ] + }) + +var formStore = new Ext.data.JsonStore({ + root : 'data', + totalProperty: 'totalCount', + idProperty : 'gridIndex', + remoteSort : true, + fields : dbConnFields, + proxy: new Ext.data.HttpProxy({ + url: 'proxyObjectPermissions.php?pid='+pro_uid+'&t=1' + }) + }); + formStore.load(); + +var formWindow = new Ext.Window({ + title: 'New specific Permission', + collapsible: false, + maximizable: true, + width: 450, + //autoHeight: true, + height: 400, + //layout: 'fit', + plain: true, + bodyStyle: 'padding:5px;', + buttonAlign: 'center', + items: PermissionForm, + buttons: [{ + text: 'Create', + handler: function(){ + var getForm = PermissionForm.getForm().getValues(); + var Status = getForm.OP_CASE_STATUS; + var TargetTask = getForm.TASK_TARGET; + var GroupUser = getForm.GROUP_USER; + var OriginTask = getForm.TASK_SOURCE; + var Participation = getForm.PARTICIPATED; + var Type = getForm.OBJECT_TYPE; + var Permission = getForm.ACTION; + Ext.Ajax.request({ + url : '../bpmn/processes_Ajax.php', + method: 'POST', + params:{ + type :Type, + 2625 :Server, + db_name :DatabaseName, + user :Username , + passwd :Password, + port :Port, + desc :Description, + action :'newObjectPermission' + }, + success: function(response) { + Ext.MessageBox.alert ('Status','Connection Saved Successfully.'); + } + }); + + //var getData = getstore.data.items; + //taskExtObj.saveTaskUsers(getData); + + formWindow.close(); + dbStore.reload(); + } + },{ + text: 'Cancel', + handler: function(){ + // when this button clicked, + formWindow.close(); + } + }] + }); + + + gridWindow.show(); + } ProcessMapContext.prototype.processSupervisors= function() @@ -1041,4 +1401,4 @@ ProcessMapContext.prototype.processFileManager= function() }] }); window.show(); -} \ No newline at end of file +}