From d248f79754d526dd106b42a57da3af18187fdcd3 Mon Sep 17 00:00:00 2001 From: Hugo Loza Date: Thu, 21 Jul 2011 18:37:03 -0400 Subject: [PATCH] BUG 6212 Skin Importing feature Ready to import skins... Just left to enable NEW and Delete --- workflow/engine/methods/setup/skin_Ajax.php | 100 ++++++++++++++- workflow/engine/templates/setup/skinList.js | 127 ++++++++++++++++++-- 2 files changed, 217 insertions(+), 10 deletions(-) diff --git a/workflow/engine/methods/setup/skin_Ajax.php b/workflow/engine/methods/setup/skin_Ajax.php index f37b4cf94..417fb56e6 100644 --- a/workflow/engine/methods/setup/skin_Ajax.php +++ b/workflow/engine/methods/setup/skin_Ajax.php @@ -1,13 +1,13 @@ listContent(); + $swConfigFile = false; + + foreach ($aFiles as $key => $val) { + if (basename($val['filename']) == 'config.xml') { + $skinName = dirname($val['filename']); + $skinArray = explode("/", $skinName); + if (count($skinArray) == 1) { + $swConfigFile = true; + } + } + } + + if (!$swConfigFile) { + @unlink(PATH_CUSTOM_SKINS . '.tmp' . PATH_SEP . $filename); + throw ( new Exception(G::LoadTranslation('ID_SKIN_CONFIGURATION_MISSING')) ); + } + + if (is_dir(PATH_CUSTOM_SKINS . $skinName)) { + if ((isset($_REQUEST['overwrite_files'])) && ($_REQUEST['overwrite_files'] == 'on')) { + G::rm_dir(PATH_CUSTOM_SKINS . $skinName, false); + } else { + throw ( new Exception(G::LoadTranslation('ID_SKIN_ALREADY_EXISTS')) ); + } + } + $res = $tar->extract(PATH_CUSTOM_SKINS); + if (!$res) { + throw ( new Exception(G::LoadTranslation('ID_SKIN_ERROR_EXTRACTING')) ); + } +//Delete Temporal + @unlink(PATH_CUSTOM_SKINS . '.tmp' . PATH_SEP . $filename); + + $response['success'] = true; + $response['message'] = G::LoadTranslation('ID_SKIN_SUCCESSFUL_IMPORTED'); + print_r(G::json_encode($response)); + } catch (Exception $e) { + $response['success'] = false; + $response['message'] = $e->getMessage(); + $response['error'] = $e->getMessage(); + print_r(G::json_encode($response)); + } +} + function exportSkin($skinToExport) { try { if (!isset($_REQUEST['SKIN_FOLDER_ID'])) { @@ -95,7 +189,7 @@ function exportSkin($skinToExport) { $tar->_compress = false; addTarFolder($tar, $skinFolder, PATH_CUSTOM_SKINS); - + $response['success'] = true; $response['message'] = $skinTar; diff --git a/workflow/engine/templates/setup/skinList.js b/workflow/engine/templates/setup/skinList.js index 5ab4f3388..6ed82b096 100755 --- a/workflow/engine/templates/setup/skinList.js +++ b/workflow/engine/templates/setup/skinList.js @@ -101,8 +101,8 @@ Ext.onReady(function(){ importButton = new Ext.Action({ text: _('ID_IMPORT'), iconCls: 'button_menu_ext ss_sprite ss_basket_put', - //handler: CopyButtonAction, - disabled: true + handler: importSkin, + disabled: false }); exportButton = new Ext.Action({ text: _('ID_EXPORT'), @@ -371,7 +371,120 @@ onMessageContextMenu = function (grid, rowIndex, e) { //Do Nothing Function DoNothing = function(){}; +importSkin = function(){ + importDialog = new Ext.Window( { + id: "importDialog", + title:_('ID_UPLOAD'), + autoCreate: true, + modal:true, + width:400, + autoHeight:true, + shadow:true, + minWidth:100, + minHeight:50, + proxyDrag: true, + resizable: true, + keys: { + key: 27, + fn : function(){ + importDialog.hide(); + } + }, + items:[ + { + xtype:'form', + autoScroll:true, + autoHeight:true, + id:"uploadform", + fileUpload:true, + labelWidth:90, + url:'skin_Ajax', + tooltip:"Max File Size XXX MB
Max Post SizeXXX MB
", + frame:false, + items:[ + { + xtype:"displayfield", + value:"Max File Size XXX MB
Max Post SizeXXX MB
" + }, + { + xtype:"fileuploadfield", + fieldLabel:"File ", + id:"uploadedFile", + name:"uploadedFile", + width:100, + buttonOnly:false + }, + { + xtype:"checkbox", + fieldLabel:"Overwrite", + name:"overwrite_files", + checked:true + } + ], + buttons:[ + { + text:_('ID_SAVE'), + handler: function() { + //statusBarMessage( _('ID_UPLOADING_FILE'), true, true ); + importDialog.getEl().mask(_('ID_SKIN_IMPORTING')); + form = Ext.getCmp("uploadform").getForm(); + //Ext.getCmp("uploadform").getForm().submit(); + //console.log(form); + //console.log(form.url); + Ext.getCmp("uploadform").getForm().submit({ + //reset: true, + reset: false, + success: function(form, action) { + + store.reload(); + + Ext.getCmp("importDialog").destroy(); + }, + failure: function(form, action) { + Ext.getCmp("importDialog").destroy(); + + if( !action.result ) { + Ext.MessageBox.alert("error", _('ID_ERROR')); + return; + } + Ext.MessageBox.alert("error", action.result.error); + + }, + scope: Ext.getCmp("uploadform"), + // add some vars to the request, similar to hidden fields + params: { + option: "standardupload", + action: "importSkin", + requestType: "xmlhttprequest", + confirm: "true" + } + }); + } + }, + { + text:_('ID_CANCEL'), + handler: function() { + Ext.getCmp("importDialog").destroy(); + } + } + ] + } + ] + + }); + // importDialog.doLayout(); + + // recalculate + // Window size + //importDialog.syncSize(); + // center the window + //importDialog.center(); + importDialog.on( 'hide', function() { + importDialog.destroy(true); + } ); + importDialog.show(); +}; exportSkin = function(){ viewport.getEl().mask(_('ID_SKIN_EXPORTING')); rowSelected = infoGrid.getSelectionModel().getSelected(); @@ -381,7 +494,7 @@ exportSkin = function(){ params: { action: 'exportSkin', SKIN_FOLDER_ID: rowSelected.data.SKIN_FOLDER_ID - }, + }, success: function(r,o){ viewport.getEl().unmask(); var resp = Ext.util.JSON.decode(r.responseText); @@ -433,8 +546,8 @@ DoSearch = function(){ infoGrid.store.load({ params: { textFilter: searchText.getValue() - } - }); + } + }); }; //Edit Calendar Action @@ -454,7 +567,7 @@ DeleteButtonAction = function(){ params: { action: 'canDeleteCalendar', CAL_UID: rowSelected.data.CALENDAR_UID - }, + }, success: function(r,o){ viewport.getEl().unmask(); var resp = Ext.util.JSON.decode(r.responseText); @@ -468,7 +581,7 @@ DeleteButtonAction = function(){ params: { action: 'deleteCalendar', CAL_UID: rowSelected.data.CALENDAR_UID - }, + }, success: function(r,o){ viewport.getEl().unmask(); editButton.disable();