UNPKG

processmaker-builder

Version:

The gulp task runner for ProcessMaker building

1,451 lines (1,361 loc) 92.7 kB
// TODO: Move RCBase64 to an individual file var RCBase64={keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t,r,s,o,i,n,a,h="",c=0;for(e=this.utf8_encode(e);c<e.length;)t=e.charCodeAt(c++),r=e.charCodeAt(c++),s=e.charCodeAt(c++),o=t>>2,i=(3&t)<<4|r>>4,n=(15&r)<<2|s>>6,a=63&s,isNaN(r)?n=a=64:isNaN(s)&&(a=64),h=h+this.keyStr.charAt(o)+this.keyStr.charAt(i)+this.keyStr.charAt(n)+this.keyStr.charAt(a);return h},decode:function(e){var t,r,s,o,i,n,a,h="",c=0;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");c<e.length;)o=this.keyStr.indexOf(e.charAt(c++)),i=this.keyStr.indexOf(e.charAt(c++)),n=this.keyStr.indexOf(e.charAt(c++)),a=this.keyStr.indexOf(e.charAt(c++)),t=o<<2|i>>4,r=(15&i)<<4|n>>2,s=(3&n)<<6|a,h+=String.fromCharCode(t),64!==n&&(h+=String.fromCharCode(r)),64!==a&&(h+=String.fromCharCode(s));return h=this.utf8_decode(h)},utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t,r,s="";for(t=0;t<e.length;t++)r=e.charCodeAt(t),128>r?s+=String.fromCharCode(r):r>127&&2048>r?(s+=String.fromCharCode(r>>6|192),s+=String.fromCharCode(63&r|128)):(s+=String.fromCharCode(r>>12|224),s+=String.fromCharCode(r>>6&63|128),s+=String.fromCharCode(63&r|128));return s},utf8_decode:function(e){for(var t="",r=0,s=0,o=0,i=0;r<e.length;)s=e.charCodeAt(r),128>s?(t+=String.fromCharCode(s),r++):s>191&&224>s?(o=e.charCodeAt(r+1),t+=String.fromCharCode((31&s)<<6|63&o),r+=2):(o=e.charCodeAt(r+1),i=e.charCodeAt(r+2),t+=String.fromCharCode((15&s)<<12|(63&o)<<6|63&i),r+=3);return t}}; var processesGrid, store, comboCategory, winDesigner, newTypeProcess, affectedGroups, processObjectsArray; /** * Shows disabled Process Designer Type message * */ var disabledProcessTypeMessage = function(){ Ext.MessageBox.show({ title: _("ID_ERROR"), msg: _("ID_DESIGNER_PROCESS_DESIGNER_IS_DISABLED"), icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK }); }; /** * Object which loads all supported Process types and their edit function * You can register here Process types to evitate eval funtion * Ex. registerNewProcessType('CPF_STANDARD_TPL', function(rowSelected){ doSomething();}); * * @type {{bpmn: Function, classic: Function, default: Function}} */ var supportedProcessTypes = { 'bpmn': function (rowSelected) { openWindowIfIE("../designer?prj_uid=" + rowSelected.data.PRO_UID); }, 'classic': function (rowSelected) { location.assign("processes_Map?PRO_UID=" + rowSelected.data.PRO_UID); }, 'default': function (rowSelected) { var fn = rowSelected.data.PROJECT_TYPE; fn = fn.replace(/\s/g, "_"); fn = fn.replace(/\-/g, "_"); fn = fn + "DesignerGridRowDblClick"; // Todo We should remove eval functions as they are NSFW eval("var flag = typeof(" + fn + ") == \"function\";"); if (flag) { eval(fn + "(rowSelected.data);"); } else { disabledProcessTypeMessage(); } } }; /** * This Object contains default disabled New Options, * Set to true if you want to disable a create option. * Ex. disabledNewProjectOptions["classicProject"] = true; * * @type {{bpmnProject: boolean, classicProject: boolean}} */ var disabledNewProjectOptions = { 'bpmnProject': false, 'classicProject': false }; /** * Register a new Supported Process Type * * @param name string * @param action function */ function registerNewProcessType(name, action) { try { this.supportedProcessTypes[name] = action; } catch (e) { console.log("Cannot add " + name + " Process type: " + e); } } /** * Disable a Process type for edition * can be used in a plugin like: disableProcessType("classic"); * * @param name */ function disableProcessType(name) { try { if (this.supportedProcessTypes[name]) { this.supportedProcessTypes[name] = disabledProcessTypeMessage; } } catch (e) { console.log("Cannot disable " + name + " Process type:" + e); } } /** * Global variables and variable initialization for import process. */ var importProcessGlobal = {}; importProcessGlobal.proFileName = ""; importProcessGlobal.groupBeforeAccion=""; importProcessGlobal.sNewProUid = ""; importProcessGlobal.importOption = ""; importProcessGlobal.processFileType = ""; importProcessGlobal.isGranularImport = false; importProcessGlobal.objectGranularImport; importProcessGlobal.objectsToImport = []; new Ext.KeyMap(document, { key: Ext.EventObject.F5, fn: function(keycode, e) { if (! e.ctrlKey) { if (Ext.isIE) e.browserEvent.keyCode = 8; e.stopEvent(); document.location = document.location; } else Ext.Msg.alert( _('ID_REFRESH_LABEL') , _('ID_REFRESH_MESSAGE') ); } }); Ext.apply(Ext.form.VTypes, { textWithoutTags: function (value, field) { var strAux = "a|applet|b|body|br|button|code|div|em|embed|form|frame|frameset|head|header|html|iframe|img|input|noscript|object|script|select|style|table|textarea"; return !(eval("/^.*\\x3C[\\s\\x2F]*(?:" + strAux + ")\\s*.*\\x3E.*$/").test(value)); }, textWithoutTagsText: "" }); Ext.onReady(function(){ var i; setExtStateManagerSetProvider('gridProcessMain'); Ext.QuickTips.init(); store = new Ext.data.GroupingStore( { //var store = new Ext.data.Store( { remoteSort: true, proxy : new Ext.data.HttpProxy({ url: 'processesList' }), reader : new Ext.data.JsonReader( { totalProperty: 'totalCount', root: 'data', fields : [ {name : 'PRO_DESCRIPTION'}, {name : 'PRO_UID'}, {name : 'PRO_CATEGORY_LABEL'}, {name : 'PRO_TITLE'}, {name : 'PRO_STATUS'}, {name : 'PRO_STATUS_LABEL'}, {name : 'PRO_CREATE_DATE'}, {name : 'PRO_DEBUG'}, {name : 'PRO_DEBUG_LABEL'}, {name : 'PRO_CREATE_USER_LABEL'}, {name : 'CASES_COUNT', type:'float'}, {name : 'CASES_COUNT_DRAFT', type:'float'}, {name : 'CASES_COUNT_TO_DO', type:'float'}, {name : 'CASES_COUNT_COMPLETED', type:'float'}, {name : 'CASES_COUNT_CANCELLED', type:'float'}, {name : 'PROJECT_TYPE', type:'string'} /*----------------------------------********---------------------------------*/ ,{name : "PRO_TYPE_PROCESS", type: "string"} /*----------------------------------********---------------------------------*/ ,{name : "PRO_UPDATE_DATE"} ] }), //sortInfo:{field: 'PRO_TITLE', direction: "ASC"} //groupField:'PRO_CATEGORY_LABEL' listeners: { load: function (store) { Ext.ComponentMgr.get("export").setDisabled(true); } } }); var expander = new Ext.ux.grid.RowExpander({ tpl : new Ext.Template( '<p><b>' + _('ID_PRO_DESCRIPTION') + ':</b> {PRO_DESCRIPTION}</p><br>' ) }); comboCategory = new Ext.form.ComboBox({ fieldLabel : 'Categoty', hiddenName : 'category', store : new Ext.data.Store( { proxy : new Ext.data.HttpProxy( { url : '../processProxy/categoriesList', method : 'POST' }), reader : new Ext.data.JsonReader( { fields : [ { name : 'CATEGORY_UID' }, { name : 'CATEGORY_NAME' } ] }) }), valueField : 'CATEGORY_UID', displayField : 'CATEGORY_NAME', triggerAction : 'all', emptyText : _('ID_SELECT'), selectOnFocus : true, editable : true, width: 180, allowBlank : true, autocomplete: true, typeAhead: true, allowBlankText : _('ID_SHOULD_SELECT_LANGUAGE_FROM_LIST'), listeners:{ scope: this, 'select': function() { filter = comboCategory.value; store.setBaseParam( 'category', filter); var searchTxt = Ext.util.Format.trim(Ext.getCmp('searchTxt').getValue()); if( searchTxt == '' ){ store.setBaseParam( 'processName', ''); } store.load({params: {category: filter, start: 0, limit: 25}}); }} }) /* storePageSize = new Ext.data.SimpleStore({ fields: ['size'], data: [['20'],['30'],['40'],['50'],['100']], autoLoad: true }); var comboPageSize = new Ext.form.ComboBox({ typeAhead : false, mode : 'local', triggerAction : 'all', store: storePageSize, valueField: 'size', displayField: 'size', width: 50, editable: false, listeners:{ select: function(c,d,i){ //UpdatePageConfig(d.data['size']); bbar.pageSize = parseInt(d.data['size']); bbar.moveFirst(); //Ext.getCmp('bbar').setPageSize(comboPageSize.getValue()); } } }); comboPageSize.setValue(pageSize); var bbar = new Ext.PagingToolbar({ id: 'bbar', pageSize: '15', store: store, displayInfo: true, displayMsg: 'Displaying Processes {0} - {1} of {2}', emptyMsg: "", items:[_('ID_PAGE_SIZE')+':',comboPageSize] }) */ var mnuNewBpmnProject = { text: _("ID_NEW_BPMN_PROJECT"), iconCls: "silk-add", icon: "", pmTypeProject: "bpmnProject", handler: function () { newProcess({type:"bpmnProject"}); } }; var mnuNewProject = { text: _("ID_NEW_PROJECT"), iconCls: "silk-add", icon: "", pmTypeProject: "classicProject", handler: function () { newProcess({type: "classicProject"}); } }; var arrayMenuNewOption = []; if (typeof(arrayFlagMenuNewOption["bpmn"]) != "undefined") { arrayMenuNewOption.push(mnuNewBpmnProject); } if (typeof(arrayFlagMenuNewOption["pm"]) != "undefined") { arrayMenuNewOption.push(mnuNewProject); } for (i = 0; i <= arrayMenuNewOptionPlugin.length - 1; i++) { try { if (typeof(arrayMenuNewOptionPlugin[i].handler) != "undefined") { eval("arrayMenuNewOptionPlugin[i].handler = " + arrayMenuNewOptionPlugin[i].handler + ";"); } arrayMenuNewOption.push(arrayMenuNewOptionPlugin[i]); } catch (e) { } } //Checks all disabled options and removes from new options by pmTypeProject var io = arrayMenuNewOption.length - 1; for (io; io >= 0; io -= 1) { if (disabledNewProjectOptions[arrayMenuNewOption[io].pmTypeProject]) { arrayMenuNewOption.splice(io, 1); } } if (arrayMenuNewOption.length > 1) { newTypeProcess = { xtype: "tbsplit", text: _("ID_NEW"), iconCls: "button_menu_ext ss_sprite ss_add", menu: arrayMenuNewOption, listeners: { "click": function (obj, e) { obj.showMenu(); } } }; } else { // Handler should be the one from the unique option, if not, // should fallback to default pmTypeProject. var handler; if (typeof arrayMenuNewOption[0].handler === "function") { handler = arrayMenuNewOption[0].handler; } else { handler = function () { newProcess({type: arrayMenuNewOption[0].pmTypeProject}); } } newTypeProcess = { text: _("ID_NEW"), iconCls: "button_menu_ext ss_sprite ss_add", handler: handler }; } //Code export - exportGranular (handle) var exportProcessOption; var granularExportProcessOption; var normalExportProcessOption = { id: "export", disabled: true, text: _("ID_EXPORT"), iconCls: "silk-add", icon: "/images/export.png", handler: function () { exportProcess(); } }; /*----------------------------------********---------------------------------*/ if (isGranularFeature) { granularExportProcessOption = { xtype: "tbsplit", id: "export", disabled: true, text: _("ID_EXPORT"), iconCls: "silk-add", icon: "/images/export.png", menu: [ { text: _("ID_NORMAL_EXPORT"), iconCls: "silk-add", icon: "", handler: function () { exportProcess(); } }, { text: _("ID_GRANULAR_EXPORT"), iconCls: "silk-add", icon: "", handler: function () { exportImportProcessObjects('export'); } } ], listeners: { "click": function (obj, e) { obj.showMenu(); } } }; exportProcessOption = granularExportProcessOption; } else { /*----------------------------------********---------------------------------*/ exportProcessOption = normalExportProcessOption; /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ //End code export - exportGranular (handle) processesGrid = new Ext.grid.GridPanel( { region: 'center', layout: 'fit', id: 'processesGrid', height: 500, width:'', title : '', stateful : true, stateId : 'gridProcessMain', enableColumnResize: true, enableHdMenu: true, frame:false, plugins: expander, cls : 'grid_with_checkbox', columnLines: true, viewConfig: { forceFit:true, cls:"x-grid-empty", emptyText: _('ID_NO_RECORDS_FOUND') }, cm: new Ext.grid.ColumnModel({ defaults: { width: 200, sortable: true }, columns: [ expander, // There is a list of allowed columns to sort: // workflow/engine/methods/cases/proxyProcessList.php // This is to prevent ORDER BY injection attacks // It is identical to this list. // If you need to add a new column that is sortable, please // make sure it is added there or sorting will not work. {id:'PRO_UID', dataIndex: 'PRO_UID', hidden:true, hideable:false}, {header: "", dataIndex: 'PRO_STATUS', width: 50, hidden:true, hideable:false}, {header: _('ID_PRO_DESCRIPTION'), dataIndex: 'PRO_DESCRIPTION',hidden:true, hideable:false}, {header: _('ID_PRO_TITLE'), dataIndex: 'PRO_TITLE', width: 300, renderer:function(v,p,r){ // TODO Labels for var 'type' are hardcoded, they must be replaced on the future var color = r.get('PROJECT_TYPE') == 'bpmn'? 'green': 'blue'; var type = r.get('PROJECT_TYPE') == 'bpmn'? ' (BPMN Project)': ''; return Ext.util.Format.htmlEncode(v) + ' ' + String.format("<font color='{0}'>{1}</font>", color, type); }}, {header: _('ID_TYPE'), dataIndex: 'PROJECT_TYPE', width: 60, hidden:false}, {header: _('ID_CATEGORY'), dataIndex: 'PRO_CATEGORY_LABEL', width: 100, hidden:false}, {header: _('ID_STATUS'), dataIndex: 'PRO_STATUS_LABEL', width: 50, renderer:function(v,p,r){ color = r.get('PRO_STATUS') == 'ACTIVE'? 'green': 'red'; return String.format("<font color='{0}'>{1}</font>", color, v); }}, {header: _('ID_PRO_USER'), dataIndex: 'PRO_CREATE_USER_LABEL', width: 150}, {header: _('ID_PRO_CREATE_DATE'), dataIndex: 'PRO_CREATE_DATE', width: 90}, {header: _('ID_INBOX'), dataIndex: 'CASES_COUNT_TO_DO', width: 50, align:'right'}, {header: _('ID_DRAFT'), dataIndex: 'CASES_COUNT_DRAFT', width: 50, align:'right'}, {header: _('ID_COMPLETED'), dataIndex: 'CASES_COUNT_COMPLETED', width: 70, align:'right'}, {header: _('ID_CANCELLED'), dataIndex: 'CASES_COUNT_CANCELLED', width: 70, align:'right'}, {header: _('ID_TOTAL_CASES'), dataIndex: 'CASES_COUNT', width: 75,renderer:function(v){return "<b>"+v+"</b>";}, align:'right'}, {header: _('ID_PRO_DEBUG'), dataIndex: 'PRO_DEBUG_LABEL', width: 50, align:'center'} /*----------------------------------********---------------------------------*/ ,{header: _("ID_TYPE_PROCESS"), dataIndex: "PRO_TYPE_PROCESS", width: 75, align:"left"} /*----------------------------------********---------------------------------*/ ,{header: _("ID_LAN_UPDATE_DATE"), dataIndex: "PRO_UPDATE_DATE", width: 75, align:"left"} ] }), store: store, tbar:[ newTypeProcess,/* { text: _('ID_NEW'), iconCls: 'button_menu_ext ss_sprite ss_add', //icon: '/images/addc.png', handler: newProcess },*/ '-' ,{ text: _('ID_EDIT'), iconCls: 'button_menu_ext ss_sprite ss_pencil', //icon: '/images/edit.gif', handler: editProcess },/*{ text: 'Edit (New Editor)', iconCls: 'button_menu_ext', icon: '/images/pencil_beta.png', handler: editNewProcess },*/{ text: _('ID_STATUS'), id:'activator', icon: '', iconCls: 'silk-add', handler: activeDeactive, disabled:true },{ text: _('ID_DELETE'), iconCls: "button_menu_ext ss_sprite ss_cross", handler:deleteProcess },{ xtype: 'tbseparator' },exportProcessOption,{ text: _('ID_IMPORT'), iconCls: 'silk-add', icon: '/images/import.gif', // handler:importProcess handler : function(){ importProcessGlobal.processFileType = "pm"; importProcess(); } },{ id: 'deleteCasesId', text: _('ID_DELETE_CASES'), iconCls: "button_menu_ext ss_sprite ss_cross", handler: deleteCases, hidden: true },{ xtype: 'tbfill' },{ xtype: 'tbseparator' }, _('ID_CATEGORY'), comboCategory,{ xtype: 'tbseparator' },new Ext.form.TextField ({ id: 'searchTxt', ctCls:'pm_search_text_field', allowBlank: true, width: 150, emptyText: _('ID_EMPTY_SEARCH'),//'enter search term', listeners: { specialkey: function(f,e){ if (e.getKey() == e.ENTER) { doSearch(); } } } }),{ text:'X', ctCls:'pm_search_x_button_des', handler: function(){ //store.setBaseParam( 'category', '<reset>'); store.setBaseParam('processName', ''); store.load({params: {start: 0, limit: 25}}); Ext.getCmp('searchTxt').setValue(''); //comboCategory.setValue(''); //store.reload(); } },{ text: _('ID_SEARCH'), handler: doSearch } ], // paging bar on the bottom bbar: new Ext.PagingToolbar({ pageSize: 25, store: store, displayInfo: true, displayMsg: _('ID_DISPLAY_PROCESSES'), emptyMsg: "", items:[] }), listeners: { rowdblclick: editProcess, render: function(){ this.loadMask = new Ext.LoadMask(this.body, {msg:'Loading...'}); processesGrid.getSelectionModel().on('rowselect', function(){ var rowSelected = processesGrid.getSelectionModel().getSelected(); var activator = Ext.getCmp('activator'); activator.setDisabled(false); /*----------------------------------********---------------------------------*/ if(rowSelected.data.PROJECT_TYPE === 'bpmn' && isGranularFeature){ processesGrid.getTopToolbar().remove('export'); processesGrid.getTopToolbar().insert(6, granularExportProcessOption); processesGrid.getTopToolbar().doLayout(); } else { processesGrid.getTopToolbar().remove('export'); processesGrid.getTopToolbar().insert(6, normalExportProcessOption); processesGrid.getTopToolbar().doLayout(); } /*----------------------------------********---------------------------------*/ Ext.ComponentMgr.get("export").setDisabled(false); if( rowSelected.data.PRO_STATUS == 'ACTIVE' ){ activator.setIcon('/images/deactivate.png'); activator.setText( _('ID_DEACTIVATE') ); } else { activator.setIcon('/images/activate.png'); activator.setText( _('ID_ACTIVATE') ); } }); } } }); if(deleteCasesFlag) { Ext.getCmp("deleteCasesId").show(); } processesGrid.store.load({params: {"function": "languagesList", "start": 0, "limit": 25}}); processesGrid.addListener('rowcontextmenu', onMessageContextMenu,this); processesGrid.on('rowcontextmenu', function (grid, rowIndex, evt) { var sm = grid.getSelectionModel(); sm.selectRow(rowIndex, sm.isSelected(rowIndex)); var rowSelected = Ext.getCmp('processesGrid').getSelectionModel().getSelected(); var activator = Ext.getCmp('activator2'); var debug = Ext.getCmp('debug'); if( rowSelected.data.PRO_STATUS == 'ACTIVE' ){ activator.setIconClass('icon-deactivate'); activator.setText( _('ID_DEACTIVATE') ); } else { activator.setIconClass('icon-activate'); activator.setText( _('ID_ACTIVATE') ); } if( rowSelected.data.PRO_DEBUG == 1){ debug.setIconClass('icon-debug-disabled'); debug.setText(_('ID_DISABLE_DEBUG')); } else { debug.setIconClass('icon-debug'); debug.setText(_('ID_ENABLE_DEBUG')); } if (rowSelected.data.PROJECT_TYPE == "bpmn"){ Ext.getCmp("mnuGenerateBpmn").setDisabled(true); } else { Ext.getCmp("mnuGenerateBpmn").setDisabled(false); } }, this); processesGrid.on('contextmenu', function (evt) { evt.preventDefault(); }, this); function onMessageContextMenu(grid, rowIndex, e) { e.stopEvent(); var coords = e.getXY(); /*----------------------------------********---------------------------------*/ var rowSelected = grid.getStore().getAt(rowIndex); if(rowSelected.data.PROJECT_TYPE === 'bpmn' && isGranularFeature) { messageContextMenu.remove('export-menu'); messageContextMenu.addItem(granularMenuExportOption); } else { messageContextMenu.remove('export-menu'); messageContextMenu.addItem(normalMenuExportOption); } /*----------------------------------********---------------------------------*/ messageContextMenu.showAt([coords[0], coords[1]]); } //code export - exportGranular (handler) var menuExportOption; var granularMenuExportOption; var normalMenuExportOption = { id: 'export-menu', text: _("ID_EXPORT"), icon: "/images/export.png", handler: function () { exportProcess(); } }; /*----------------------------------********---------------------------------*/ if (isGranularFeature) { granularMenuExportOption = { id: 'export-menu', text: _("ID_EXPORT"), icon: "/images/export.png", menu: { showSeparator: false, items: [ { text: _("ID_NORMAL_EXPORT"), iconCls: "silk-add", icon: "", handler: function () { exportProcess(); } }, { text: _("ID_GRANULAR_EXPORT"), iconCls: "silk-add", icon: "", handler: function () { exportImportProcessObjects('export'); } } ] } }; menuExportOption = granularMenuExportOption; } else { /*----------------------------------********---------------------------------*/ menuExportOption = normalMenuExportOption; /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ //End code export - exportGranular (handler) var arrayContextMenuOption = [ { text: _("ID_EDIT"), iconCls: "button_menu_ext ss_sprite ss_pencil", handler: editProcess }, { id: "activator2", text: "", icon: "", handler: activeDeactive }, { id: "debug", text: "", handler: enableDisableDebug }, { text: _("ID_DELETE"), iconCls: "button_menu_ext ss_sprite ss_cross", handler: deleteProcess }, menuExportOption, { id: "mnuGenerateBpmn", text: _("ID_GENERATE_BPMN_PROJECT"), iconCls: "button_menu_ext ss_sprite ss_page_white_go", hidden: true, handler: function () { generateBpmn(); } } ]; for (i = 0; i <= arrayContextMenuOptionPlugin.length - 1; i++) { try { if (typeof(arrayContextMenuOptionPlugin[i].handler) != "undefined") { eval("arrayContextMenuOptionPlugin[i].handler = " + arrayContextMenuOptionPlugin[i].handler + ";"); } arrayContextMenuOption.push(arrayContextMenuOptionPlugin[i]); } catch (e) { } } var messageContextMenu = new Ext.menu.Menu({ id: "messageContextMenu", items: arrayContextMenuOption }); var viewport = new Ext.Viewport({ layout: 'border', autoScroll: true, items: [ processesGrid ] }); }); function newProcess(params) { params = typeof params == 'undefined' ? {type:'classicProject'} : params; // TODO this variable have hardcoded labels, it must be changed on the future var formTitle = (params.type == "classicProject")? _("ID_NEW_PROJECT") : _("ID_NEW_BPMN_PROJECT"); // window.location = 'processes_New'; var ProcessCategories = new Ext.form.ComboBox({ fieldLabel : _('ID_CATEGORY'), hiddenName : 'PRO_CATEGORY', valueField : 'CATEGORY_UID', displayField : 'CATEGORY_NAME', triggerAction : 'all', selectOnFocus : true, editable : false, width: 180, allowBlank : true, value: '', store : new Ext.data.Store( { autoLoad: true, //autoload the data proxy : new Ext.data.HttpProxy( { url : '../processProxy/getCategoriesList', method : 'POST' }), reader : new Ext.data.JsonReader( { fields : [ { name : 'CATEGORY_UID' }, { name : 'CATEGORY_NAME' } ] }) }) }); ProcessCategories.store.on('load',function(store) { ProcessCategories.setValue(store.getAt(0).get('CATEGORY_UID')); }); var frm = new Ext.FormPanel( { id: 'newProcessForm', labelAlign : 'right', bodyStyle : 'padding:5px 5px 0', width : 400, items : [ { id: 'PRO_TITLE', fieldLabel: _('ID_TITLE'), xtype:'textfield', width: 260, maxLength: 100, allowBlank: false, vtype: "textWithoutTags", autoCreate: {tag: 'input', type: 'text', size: '100', autocomplete: 'off', maxlength: '100'}, listeners: { 'focus' : function(value){ document.getElementById("PRO_TITLE").onpaste = function() { return false; }; } } }, { id: 'PRO_DESCRIPTION', fieldLabel: _('ID_DESCRIPTION'), xtype:'textarea', width: 260 }, ProcessCategories ], buttons : [{ text : _('ID_CREATE'), handler : saveProcess },{ text : _('ID_CANCEL'), handler : function() { win.close(); } }] }); var win = new Ext.Window({ id: 'newProjectWin', title: formTitle, //_('ID_CREATE_PROCESS'), width: 470, height: 220, layout:'fit', autoScroll:true, modal: true, maximizable: false, items: [frm], _projectType: params.type }); win.show(); } function saveProcess() { var projectType = Ext.getCmp('newProjectWin')._projectType; Ext.getCmp('PRO_TITLE').setValue((Ext.getCmp('PRO_TITLE').getValue()).trim()); if (Ext.getCmp('newProcessForm').getForm().isValid()) { Ext.getCmp('newProcessForm').getForm().submit({ url : '../processProxy/saveProcess?type=' + projectType, waitMsg : _('ID_SAVING_PROCESS'), waitTitle : "&nbsp;", timeout : 36000, success : function(obj, resp) { if (projectType == 'classicProject') { location.href = 'processes_Map?PRO_UID='+resp.result.PRO_UID; } else { openWindowIfIE('../designer?prj_uid=' + resp.result.PRO_UID); } }, failure: function(obj, resp) { PMExt.error( _('ID_ERROR'), resp.result.msg); } }); } else { PMExt.error( _('ID_ERROR'), _('ID_INVALID_PROCESS_NAME')); } } function doSearch(){ if(comboCategory.getValue() == '') store.setBaseParam( 'category', '<reset>'); filter = Ext.getCmp('searchTxt').getValue(); store.setBaseParam('processName', filter); store.load({params:{processName: filter, start: 0 , limit: 25}}); } editProcess = function(typeParam) { var rowSelected = processesGrid.getSelectionModel().getSelected(); if (!rowSelected) { Ext.Msg.show({ title: _("ID_INFORMATION"), msg: _('ID_NO_SELECTION_WARNING'), buttons: Ext.Msg.INFO, fn: function () { }, animEl: 'elId', icon: Ext.MessageBox.INFO, buttons: Ext.MessageBox.OK }); return; } // Look for edit process type, by default there are two options, bpmn and classic, // replacement of old switch statement. var process = supportedProcessTypes[rowSelected.data.PROJECT_TYPE] || false; if (process) { process(rowSelected); } else { supportedProcessTypes['default'](rowSelected); } }; editNewProcess = function(){ var rowSelected = processesGrid.getSelectionModel().getSelected(); if( rowSelected ) { location.href = '../designer?pro_uid='+rowSelected.data.PRO_UID } else { Ext.Msg.show({ title: _("ID_INFORMATION"), msg: _('ID_NO_SELECTION_WARNING'), buttons: Ext.Msg.INFO, fn: function(){}, animEl: 'elId', icon: Ext.MessageBox.INFO, buttons: Ext.MessageBox.OK }); } } /** * Removes bpmn processes in block (bulk) * @param successCallback * @param failureCallback * @param dataBulk */ deleteProcessBpmn = function (successCallback, failureCallback, dataBulk) { var refreshTokenCalled = false, data = { data: [{ action: 'delete', data: dataBulk }] }; Ext.Ajax.request({ url: HTTP_SERVER_HOSTNAME + '/api/1.0/' + SYS_SYS + '/project/bulk', method: 'POST', jsonData: data, success: function (response) { successCallback(response); }, failure: function (xhr) { if (xhr.status === 401 && !refreshTokenCalled) { refreshTokenCalled = true; return refreshAccessToken(deleteProcessBpmn); } failureCallback(xhr); }, headers: { "Authorization": "Bearer " + credentials.access_token } }); }; /** * Removes classic processes * @param messageError */ deleteProcessClassic = function (messageError) { var message = messageError || '', result; Ext.Ajax.request({ url: 'processes_Delete', success: function (response) { Ext.MessageBox.hide(); processesGrid.store.reload(); result = Ext.util.JSON.decode(response.responseText); if (result) { if (result.status != 0) { message = message + result.msg; } } else { message = message + response.responseText; } if (message) { showMessageError(message); } }, params: {PRO_UIDS: PRO_UIDS} }); }; /** * Displays an error message * @param messageError */ showMessageError = function (messageError) { Ext.MessageBox.hide(); Ext.MessageBox.show({ title: _('ID_ERROR'), msg: messageError, buttons: Ext.MessageBox.OK, icon: Ext.MessageBox.ERROR }); }; /** * Eliminate processes */ deleteProcess = function () { var rows = processesGrid.getSelectionModel().getSelections(), i, e, ids, errLog, isValid, dataBulk = []; if (rows.length > 0) { isValid = true; errLog = []; //verify if the selected rows have not any started or delegated cases for (i = 0; i < rows.length; i += 1) { if (rows[i].get('CASES_COUNT') !== 0) { errLog.push(i); isValid = false; break; } } if (isValid) { ids = []; for (i = 0; i < rows.length; i += 1) { if (rows[i].get('PROJECT_TYPE') === 'classic') { ids.push(rows[i].get('PRO_UID')); } else { dataBulk.push({ type: 'bpmn', prj_uid: rows[i].get('PRO_UID') }); } } PRO_UIDS = ids.join(','); Ext.Msg.confirm( _('ID_CONFIRM'), (rows.length == 1) ? _('ID_PROCESS_DELETE_LABEL') : _('ID_PROCESS_DELETE_ALL_LABEL'), function (btn, text) { if (btn === 'yes') { Ext.MessageBox.show({msg: _('ID_DELETING_ELEMENTS'), wait: true, waitConfig: {interval: 200}}); deleteProcessBpmn( function (response) { Ext.MessageBox.hide(); if (PRO_UIDS.length) { deleteProcessClassic(); PRO_UIDS.length = 0; } processesGrid.store.reload(); }, function (xhr) { if (PRO_UIDS.length) { deleteProcessClassic(Ext.util.JSON.decode(xhr.responseText).error.message); } showMessageError(Ext.util.JSON.decode(xhr.responseText).error.message); }, dataBulk ); } } ); } else { errMsg = ''; for (i = 0; i < errLog.length; i += 1) { e = _('ID_PROCESS_CANT_DELETE'); e = e.replace('{0}', rows[errLog[i]].get('PRO_TITLE')); e = e.replace('{1}', rows[errLog[i]].get('CASES_COUNT')); errMsg += e + '<br/>'; } Ext.MessageBox.show({ title: _('ID_ERROR'), msg: errMsg, buttons: Ext.MessageBox.OK, icon: Ext.MessageBox.ERROR }); } } else { Ext.Msg.show({ title: _("ID_INFORMATION"), msg: _('ID_NO_SELECTION_WARNING'), buttons: Ext.Msg.INFO, fn: function(){}, animEl: 'elId', icon: Ext.MessageBox.INFO, buttons: Ext.MessageBox.OK }); } } var deleteCases = function(){ var rows = processesGrid.getSelectionModel().getSelections(), totalCases = 0, ids = Array(), PRO_UIDS, i; if( rows.length > 0 ) { for (i = 0; i < rows.length; i+= 1) { var numCases = rows[i].get('CASES_COUNT'); if(numCases != 0) { totalCases = totalCases + parseInt(numCases); } } for (i = 0; i < rows.length; i++) { ids[i] = rows[i].get('PRO_UID'); } PRO_UIDS = ids.join(','); Ext.Msg.confirm( _('ID_CONFIRM'), _('ID_DELETE_PROCESS_CASES')+' '+totalCases+' '+_('CASES'), function(btn, text){ if ( btn == 'yes' ){ Ext.MessageBox.show({ msg: _('ID_DELETING_ELEMENTS'), wait:true,waitConfig: {interval:200} }); Ext.Ajax.request({ timeout: 300000, url: 'processes_DeleteCases', success: function(response) { Ext.MessageBox.hide(); processesGrid.store.reload(); result = Ext.util.JSON.decode(response.responseText); if(result){ if(!result.status){ Ext.MessageBox.show({ title: _('ID_ERROR'), msg: result.msg, buttons: Ext.MessageBox.OK, icon: Ext.MessageBox.ERROR }); } } else { Ext.MessageBox.show({ title: _('ID_ERROR'), msg: response.responseText, buttons: Ext.MessageBox.OK, icon: Ext.MessageBox.ERROR }); } }, params: {PRO_UIDS:PRO_UIDS} }); } } ); } else { Ext.Msg.show({ title: _("ID_INFORMATION"), msg: _('ID_NO_SELECTION_WARNING'), buttons: Ext.Msg.INFO, fn: function(){}, animEl: 'elId', icon: Ext.MessageBox.INFO, buttons: Ext.MessageBox.OK }); } } function exportProcess() { var record = processesGrid.getSelectionModel().getSelections(); if (record.length == 1) { if (Ext.getCmp('exportProcessObjectsWindow')) { Ext.getCmp('exportProcessObjectsWindow').close(); } else { processObjectsArray = ''; } var myMask = new Ext.LoadMask(Ext.getBody(), {msg: _("ID_LOADING")}); var proUid = record[0].get("PRO_UID"); myMask.show(); Ext.Ajax.request({ url: "../processes/processes_Export", method: "GET", params: { "pro_uid": proUid, "objects": processObjectsArray }, success: function (response) { var result = JSON.parse(response.responseText); myMask.hide(); if (result.success) { window.location = "../processes/processes_DownloadFile?file_hash=" + encodeURIComponent(result.file_hash); } else { Ext.Msg.show({ title: "", msg: result.message, icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK }); } }, failure: function (response, opts) { myMask.hide(); } }); } else { Ext.Msg.show({ title: _("ID_INFORMATION"), msg: _("ID_NO_SELECTION_WARNING"), icon: Ext.MessageBox.INFO, buttons: Ext.MessageBox.OK }); } } function exportImportProcessObjects(typeAction) { var defaultTypeAction = 'export', windowTitle = _('ID_EXPORT_PROCESS_OBJECTS'), buttonLabel = _('ID_EXPORT'), storeGrid, storeActionField, checkBoxSelMod, gridProcessObjects, colModel, buttonLabel, granularWindow, i; if(typeof typeAction !== undefined) { if(typeAction == 'import') { defaultTypeAction = typeAction; windowTitle = _('ID_IMPORT_PROCESS_OBJECTS'); buttonLabel = _('ID_IMPORT'); } } storeGrid = new Ext.data.GroupingStore( { remoteSort: true, proxy : new Ext.data.HttpProxy({ url: 'processObjects' }), reader : new Ext.data.JsonReader( { totalProperty: 'totalCount', root: 'data', fields : [ {name : 'OBJECT_ID'}, {name : 'OBJECT_NAME'}, {name : 'OBJECT_ACTION'}, {name : 'OBJECT_ENABLE'} ] }) }); storeGrid.load(); storeActionField = new Ext.data.ArrayStore({ fields: ['value', 'text'], data: [ [1, _('ID_ADD_TO_EXISTING')], [2, _('ID_REPLACE_ALL')] ] }); checkBoxSelMod = new Ext.grid.CheckboxSelectionModel({ singleSelect:false, listeners: { beforerowselect: function (sm, row_index, keepExisting, record) { sm.suspendEvents(); if (sm.isSelected(row_index)) { // row already selected, deselect it (note: other selections remain intact on deselect). sm.deselectRow(row_index); } else { sm.selectRow(row_index, true) } sm.resumeEvents(); return false; } } }); gridProcessObjects = new Ext.grid.EditorGridPanel( { region: 'center', layout: 'fit', id: 'gridProcessObjects', height:365, width:355, title : '', stateful : true, stateId : 'gridProcessObjects', enableColumnResize: true, enableHdMenu: false, frame:false, selModel : checkBoxSelMod, showHeaderCheckbox: true, columnLines: true, disableSelection : true, viewConfig: { forceFit:true, cls:"x-grid-empty", emptyText: _('ID_NO_RECORDS_FOUND') }, clicksToEdit: 1, enableColumnResize: false, cm: new Ext.grid.ColumnModel({ defaults: { sortable: false }, columns: [ checkBoxSelMod, {header: 'objectId', dataIndex: 'OBJECT_ID', hidden: true}, {header: _('ID_CHECK_ALL'), dataIndex: 'OBJECT_NAME', width: 5}, {header: '', dataIndex: 'OBJECT_ACTION', width: 5, editor: new Ext.form.ComboBox({ displayField: 'text', forceSelection: true, mode: 'local', typeAhead: false, store: storeActionField, triggerAction: 'all', valueField: 'value', lazyRender: true, disabled: false }), renderer: function(value) { var recordIndex = storeActionField.find('value', value); if (recordIndex === -1) { return _('ID_UNKNOWN') + value; } return storeActionField.getAt(recordIndex).get('text'); } }, {header: 'Name', dataIndex: 'OBJECT_ENABLE', hidden: true} ] }), store: storeGrid, listeners: { render: function(grid) { colModel = grid.getColumnModel(); if(defaultTypeAction === 'export') { colModel.setHidden(3, true); } else { /*import*/ colModel.setHidden(3, false); grid.store.on('load', function(store, records, options){ grid.getSelectionModel().selectAll(); store.each(function(row, j){ if(!inArray(row.get('OBJECT_ID'),importProcessGlobal.objectGranularImport)) { store.remove(row); } if(row.get('OBJECT_ID') === "PROCESSDEFINITION") { /*process definition*/ row.set("OBJECT_ACTION","2"); } }); }); } }, beforeedit: function(editor, e, eOpts) { var row = editor.record; if(row.get('OBJECT_ID') === 1) { /*process definition*/ return false; } } } }); granularWindow = new Ext.Window({ id : 'exportProcessObjectsWindow', title : windowTitle, header : false, width : 350, height : 430, modal : true, overflowY : 'scroll', maximizable : false, resizable : false, items : [ gridProcessObjects ], buttons : [ { text : buttonLabel, handler : function() { var selectedObjects = gridProcessObjects.getSelectionModel().getSelections(); var i; if(selectedObjects.length < 1) { Ext.Msg.show({ title: _("ID_INFORMATION"), msg: _("ID_NO_SELECTION_WARNING"), icon: Ext.MessageBox.INFO, buttons: Ext.MessageBox.OK }); return; } processObjectsArray = []; if(defaultTypeAction === 'export') { if(selectedObjects.length > 0) { for (i = 0; i < selectedObjects.length; i++) { processObjectsArray.push(selectedObjects[i].get('OBJECT_ID')); } processObjectsArray = JSON.stringify(processObjectsArray); exportProcess(); } } else { /*import*/ if(selectedObjects.length > 0) { for (i = 0; i < selectedObjects.length; i++) { processObjectsArray.push( { id: selectedObjects[i].get('OBJECT_ID'), action: selectedObjects[i].get('OBJECT_ACTION') === 1 ? 'merge' : 'replace' } ); } processObjectsArray = JSON.stringify(processObjectsArray); } importProcessGlobal.objectsToImport = processObjectsArray; Ext.getCmp('objectsToImport').setValue(processObjectsArray); var uploader = Ext.getCmp('formUploader'); uploader.getForm().setValues({"objectsToImport":processObjectsArray}); if (uploader.getForm().isValid()) { uploader.getForm().submit({ url : 'processes_Import_Ajax', waitMsg : _('ID_UPLOADING_PROCESS_FILE'), waitTitle : "&nbsp;", timeout: 3600, success: function(o, resp) { var resp_ = Ext.util.JSON.decode(resp.response.responseText); var sNewProUid = resp_.sNewProUid; if (resp_.ExistGroupsInDatabase == 0) { if (typeof(resp_.project_type) != "undefined" && resp_.project_type == "bpmn") { if (typeof(resp_.project_type_aux) != "undefined" && resp_.project_type_aux == "NORMAL") { importProcessCallbackFile = false; } var goTo = importProcessCallbackFile ? importProcessCallbackFile : "../designer?prj_uid="; openWindowIfIE(goTo + sNewProUid); } else { window.location.href = "processes_Map?PRO_UID=" + sNewProUid; } } else { affectedGroups = resp_.affectedGroups; importProcessGlobal.proFileName = resp_.proFileName; importProcessGlobal.groupBeforeAccion = resp_.groupBeforeAccion; importProcessGlobal.sNewProUid = resp_.sNewProUid; importProcessGlobal.importOption = resp_.importOption;