From d44e0f10a6ad5221d060a0d17ada39ac90e96c9f Mon Sep 17 00:00:00 2001 From: Hector Cortez Date: Tue, 14 May 2013 13:53:12 -0400 Subject: [PATCH] BUG 0000 Rad Map Perdida de sesion cuando se ejecuta casos SOLVED - Added Login modal to continue the session for dynaforms in cases. --- gulliver/js/form/core/form.js | 112 ++++++++++++++++++ gulliver/js/maborak/core/maborak.js | 7 +- gulliver/system/class.headPublisher.php | 1 + .../engine/methods/cases/cases_SaveData.php | 11 +- workflow/engine/methods/cases/cases_Step.php | 8 ++ .../methods/services/sessionPersists.php | 23 +++- workflow/engine/templates/xmlform.html | 1 + 7 files changed, 153 insertions(+), 10 deletions(-) diff --git a/gulliver/js/form/core/form.js b/gulliver/js/form/core/form.js index 9959ec687..f1a8ac242 100755 --- a/gulliver/js/form/core/form.js +++ b/gulliver/js/form/core/form.js @@ -2903,6 +2903,15 @@ var changeStatusSubmitFields = function(newStatusTo) { **/ var validateForm = function(sRequiredFields) { + + sFormName = document.getElementById('__DynaformName__'); + if ((typeof(sFormName) != 'undefined' && sFormName != 'login') && (typeof(usernameLogged) != 'undefined' && usernameLogged != '') ) { + if (!sessionPersits()) { + showPromptLogin('session'); + return false; + } + } + // Disabling submit buttons changeStatusSubmitFields('disabled'); @@ -3270,6 +3279,109 @@ var saveAndRefreshForm = function(oObject) { } }; + +/** + * @function sessionPersits + * + * @returns {@exp;response@pro;status} + */ +var sessionPersits = function() { + var rpc = new leimnud.module.rpc.xmlhttp({ + url: '../services/sessionPersists', + args: 'dynaformRestoreValues=' + dynaformSVal, + async: false + }); + rpc.make(); + var response = rpc.xmlhttp.responseText.parseJSON(); + return response.status; +}; + +/** + * @function showPromptLogin + * + * @param {type} lastAction + * @returns {showPrompt} + */ +var showPromptLogin = function(lastAction) { + lastActionPerformed = lastAction; + promptPanel = new leimnud.module.panel(); + promptPanel.options={ + statusBarButtons:[{value: _('LOGIN')}], + position:{center:true}, + size:{w:300,h:130}, + control:{ + close:false, + resize:false + }, + fx:{ + modal:true + } + }; + promptPanel.setStyle={ + content:{ + padding:10, + paddingBottom:2, + textAlign:'left', + paddingLeft:50, + backgroundRepeat:'no-repeat', + backgroundPosition:'10 50%', + backgroundColor:'transparent', + borderWidth:0 + } + }; + promptPanel.make(); + promptPanel.addContent(_('ID_DYNAFORM_EDITOR_LOGIN_AGAIN')); + promptPanel.addContent('
'); + var thePassword = $dce('input'); + thePassword.type = 'password'; + thePassword.id = 'thePassword'; + leimnud.dom.setStyle(thePassword,{ + font:'normal 8pt Tahoma,MiscFixed', + color:'#000', + width:'100%', + marginTop:3, + backgroundColor:'white', + border:'1px solid #919B9C' + }); + promptPanel.addContent(thePassword); + thePassword.focus(); + thePassword.onkeyup=function(evt) + { + var evt = (window.event)?window.event:evt; + var key = (evt.which)?evt.which:evt.keyCode; + if(key == 13) { + verifyLogin(); + } + }.extend(this); + promptPanel.fixContent(); + promptPanel.elements.statusBarButtons[0].onmouseup = verifyLogin; +}; + +/** + * @function verifyLogin + * + * @returns {unresolved} + */ +var verifyLogin = function() { + if (document.getElementById('thePassword').value.trim() == '') { + alert(_('ID_WRONG_PASS')); + return; + } + var rpc = new leimnud.module.rpc.xmlhttp({ + url : '../login/authentication', + args: 'form[USR_USERNAME]=' + usernameLogged + '&form[USR_PASSWORD]=' + document.getElementById('thePassword').value.trim() + '&form[USR_LANG]=' + SYS_LANG + }); + rpc.callback = function(rpc) { + if (rpc.xmlhttp.responseText.indexOf('form[USR_USERNAME]') == -1) { + promptPanel.remove(); + lastActionPerformed = ''; + } else { + alert(_('ID_WRONG_PASS')); + } + }.extend(this); + rpc.make(); +}; + /** * @function saveForm * @author gustavo cruz gustavo[at]colosa[dot]com diff --git a/gulliver/js/maborak/core/maborak.js b/gulliver/js/maborak/core/maborak.js index 3da0b6c84..088caa8fd 100644 --- a/gulliver/js/maborak/core/maborak.js +++ b/gulliver/js/maborak/core/maborak.js @@ -1194,7 +1194,8 @@ vtext.failed();}else{vtext.passed();}} dropdowns=grids[j].getElementsByTagName('select');for(i=0;i0){sRequiredFields=sRequiredFields.replace(/%27/gi,'"');} +return(invalidFields);};var changeStatusSubmitFields=function(newStatusTo){var newStatus=newStatusTo=='disabled';var formElements=document.getElementsByTagName('form');for(var i=0;i0){sRequiredFields=sRequiredFields.replace(/%27/gi,'"');} if(typeof(sRequiredFields)!='object'||sRequiredFields.indexOf("%39")>0){sRequiredFields=sRequiredFields.replace(/%39/gi,"'");} aRequiredFields=eval(sRequiredFields);var sMessage='';var invalid_fields=Array();var fielEmailInvalid=Array();for(var i=0;i0){oAux[0].action+='&_REFRESH_=1';oAux[0].submit();}}};var saveForm=function(oObject,actionParameter){if(oObject){var actionUrl=actionParameter||oObject.form.action.replace('cases_SaveData','saveForm');ajax_post(actionUrl,oObject.form,'POST');} +else{var oAux=window.document.getElementsByTagName('form');if(oAux.length>0){oAux[0].action+='&_REFRESH_=1';oAux[0].submit();}}};var sessionPersits=function(){var rpc=new leimnud.module.rpc.xmlhttp({url:'../services/sessionPersists',args:'dynaformRestoreValues='+dynaformSVal,async:false});rpc.make();var response=rpc.xmlhttp.responseText.parseJSON();return response.status;};var showPromptLogin=function(lastAction){lastActionPerformed=lastAction;promptPanel=new leimnud.module.panel();promptPanel.options={statusBarButtons:[{value:_('LOGIN')}],position:{center:true},size:{w:300,h:130},control:{close:false,resize:false},fx:{modal:true}};promptPanel.setStyle={content:{padding:10,paddingBottom:2,textAlign:'left',paddingLeft:50,backgroundRepeat:'no-repeat',backgroundPosition:'10 50%',backgroundColor:'transparent',borderWidth:0}};promptPanel.make();promptPanel.addContent(_('ID_DYNAFORM_EDITOR_LOGIN_AGAIN'));promptPanel.addContent('
');var thePassword=$dce('input');thePassword.type='password';thePassword.id='thePassword';leimnud.dom.setStyle(thePassword,{font:'normal 8pt Tahoma,MiscFixed',color:'#000',width:'100%',marginTop:3,backgroundColor:'white',border:'1px solid #919B9C'});promptPanel.addContent(thePassword);thePassword.focus();thePassword.onkeyup=function(evt) +{var evt=(window.event)?window.event:evt;var key=(evt.which)?evt.which:evt.keyCode;if(key==13){verifyLogin();}}.extend(this);promptPanel.fixContent();promptPanel.elements.statusBarButtons[0].onmouseup=verifyLogin;};var verifyLogin=function(){if(document.getElementById('thePassword').value.trim()==''){alert(_('ID_WRONG_PASS'));return;} +var rpc=new leimnud.module.rpc.xmlhttp({url:'../login/authentication',args:'form[USR_USERNAME]='+usernameLogged+'&form[USR_PASSWORD]='+document.getElementById('thePassword').value.trim()+'&form[USR_LANG]='+SYS_LANG});rpc.callback=function(rpc){if(rpc.xmlhttp.responseText.indexOf('form[USR_USERNAME]')==-1){promptPanel.remove();lastActionPerformed='';}else{alert(_('ID_WRONG_PASS'));}}.extend(this);rpc.make();};var saveForm=function(oObject,actionParameter){if(oObject){var actionUrl=actionParameter||oObject.form.action.replace('cases_SaveData','saveForm');ajax_post(actionUrl,oObject.form,'POST');} else{var oAux=window.document.getElementsByTagName('form');if(oAux.length>0){var actionUrl=actionParameter||oAux[0].action.replace('cases_SaveData','saveForm');ajax_post(actionUrl,oAux[0],'POST');}}};var validateURL=function(url){var regexp=/http?s?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?/;if(regexp.test(url)){return true;}else{return false;}};var saveAndRedirectForm=function(oObject,oLocation){saveForm(oObject);if(validateURL(oLocation)){if(typeof(parent)!="undefined"){parent.location.href=oLocation;}else{document.location.href=oLocation;}}};var removeRequiredById=function(sFieldName){if(!notValidateThisFields.inArray(sFieldName)){notValidateThisFields.push(sFieldName);var oAux=document.getElementById('__notValidateThisFields__');if(oAux){oAux.value=notValidateThisFields.toJSONString();}}};var enableRequiredById=function(sFieldName){if(notValidateThisFields.inArray(sFieldName)){var i;var aAux=[];for(i=0;iaddScriptFile("/js/maborak/core/maborak.js"); $this->translationsFile = "/js/ext/translation." . SYS_LANG . ".js"; + $this->addScriptCode(' var usernameLogged = "' . (isset($_SESSION['USR_USERNAME']) ? $_SESSION['USR_USERNAME'] : '') . '";var SYS_LANG = "' . SYS_LANG . '";'); } public function &getSingleton() diff --git a/workflow/engine/methods/cases/cases_SaveData.php b/workflow/engine/methods/cases/cases_SaveData.php index 3e8ed85a2..0703598e7 100755 --- a/workflow/engine/methods/cases/cases_SaveData.php +++ b/workflow/engine/methods/cases/cases_SaveData.php @@ -3,7 +3,7 @@ * cases_SaveData.php * * ProcessMaker Open Source Edition - * Copyright (C) 2004 - 2008 Colosa Inc.23 + * Copyright (C) 2004 - 2008 Colosa Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -26,8 +26,7 @@ try { if ($_GET['APP_UID'] !== $_SESSION['APPLICATION']) { - throw new Exception( G::LoadTranslation( 'ID_INVALID_APPLICATION_ID_MSG', array ('{1}',G::LoadTranslation( 'ID_REOPEN' ) - ) ) ); + throw new Exception( G::LoadTranslation( 'ID_INVALID_APPLICATION_ID_MSG', array ('{1}',G::LoadTranslation( 'ID_REOPEN' ) ) ) ); } $oForm = new Form( $_SESSION["PROCESS"] . "/" . $_GET["UID"], PATH_DYNAFORM ); @@ -227,11 +226,9 @@ try { $oFolder = new AppFolder(); $documentFileStructure = $oFolder->getFolderStructure(); - $aFields = array ("APP_UID" => $_SESSION["APPLICATION"],"DEL_INDEX" => $_SESSION["INDEX"],"USR_UID" => $_SESSION["USER_LOGGED"],"DOC_UID" => $indocUid,"APP_DOC_TYPE" => "INPUT","APP_DOC_CREATE_DATE" => date( "Y-m-d H:i:s" ),"APP_DOC_COMMENT" => "","APP_DOC_TITLE" => "","APP_DOC_FILENAME" => $arrayFileName[$i],"FOLDER_UID" => $oFolder->createFromPath( $aID["INP_DOC_DESTINATION_PATH"] ),"APP_DOC_TAGS" => $oFolder->parseTags( $aID["INP_DOC_TAGS"] ),"APP_DOC_FIELDNAME" => $fieldName - ); + $aFields = array ("APP_UID" => $_SESSION["APPLICATION"],"DEL_INDEX" => $_SESSION["INDEX"],"USR_UID" => $_SESSION["USER_LOGGED"],"DOC_UID" => $indocUid,"APP_DOC_TYPE" => "INPUT","APP_DOC_CREATE_DATE" => date( "Y-m-d H:i:s" ),"APP_DOC_COMMENT" => "","APP_DOC_TITLE" => "","APP_DOC_FILENAME" => $arrayFileName[$i],"FOLDER_UID" => $oFolder->createFromPath( $aID["INP_DOC_DESTINATION_PATH"] ),"APP_DOC_TAGS" => $oFolder->parseTags( $aID["INP_DOC_TAGS"] ),"APP_DOC_FIELDNAME" => $fieldName); } else { - $aFields = array ("APP_UID" => $_SESSION["APPLICATION"],"DEL_INDEX" => $_SESSION["INDEX"],"USR_UID" => $_SESSION["USER_LOGGED"],"DOC_UID" => - 1,"APP_DOC_TYPE" => "ATTACHED","APP_DOC_CREATE_DATE" => date( "Y-m-d H:i:s" ),"APP_DOC_COMMENT" => "","APP_DOC_TITLE" => "","APP_DOC_FILENAME" => $arrayFileName[$i],"APP_DOC_FIELDNAME" => $fieldName - ); + $aFields = array ("APP_UID" => $_SESSION["APPLICATION"],"DEL_INDEX" => $_SESSION["INDEX"],"USR_UID" => $_SESSION["USER_LOGGED"],"DOC_UID" => - 1,"APP_DOC_TYPE" => "ATTACHED","APP_DOC_CREATE_DATE" => date( "Y-m-d H:i:s" ),"APP_DOC_COMMENT" => "","APP_DOC_TITLE" => "","APP_DOC_FILENAME" => $arrayFileName[$i],"APP_DOC_FIELDNAME" => $fieldName); } $oAppDocument = new AppDocument(); diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index ba01e13af..a240ac991 100755 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -177,6 +177,14 @@ try { } //Obtain previous and next step - End +$aRequiredFields = array( + 'APPLICATION' => $Fields['APP_DATA']['APPLICATION'], + 'PROCESS' => $Fields['APP_DATA']['PROCESS'], + 'TASK' => $Fields['APP_DATA']['TASK'], + 'INDEX' => $Fields['APP_DATA']['INDEX'], + 'APP_DATA' => $Fields['APP_DATA'] +); +$oHeadPublisher->addScriptCode('var dynaformSVal = \'' . serialize($aRequiredFields) . '\';'); try { //Add content content step - Start diff --git a/workflow/engine/methods/services/sessionPersists.php b/workflow/engine/methods/services/sessionPersists.php index 82b9bd033..fe50ff0b8 100755 --- a/workflow/engine/methods/services/sessionPersists.php +++ b/workflow/engine/methods/services/sessionPersists.php @@ -2,6 +2,27 @@ $response = new stdclass(); $response->status = isset($_SESSION['USER_LOGGED']); if (isset($_REQUEST['dynaformEditorParams'])) { - $_SESSION['Current_Dynafom']['Parameters'] = unserialize(stripslashes($_REQUEST['dynaformEditorParams'])); + $_SESSION['Current_Dynafom']['Parameters'] = unserialize(stripslashes($_REQUEST['dynaformEditorParams'])); +} +if (isset($_REQUEST['dynaformRestoreValues'])) { + $aRetValues = unserialize(stripslashes($_REQUEST['dynaformRestoreValues'])); + if (isset($aRetValues['APPLICATION'])) { + $_SESSION['APPLICATION'] = $aRetValues['APPLICATION']; + } + if (isset($aRetValues['PROCESS'])) { + $_SESSION['PROCESS'] = $aRetValues['PROCESS']; + } + if (isset($aRetValues['TASK'])) { + $_SESSION['TASK'] = $aRetValues['TASK']; + } + if (isset($aRetValues['INDEX'])) { + $_SESSION['INDEX'] = $aRetValues['INDEX']; + } + if (isset($aRetValues['TRIGGER_DEBUG'])) { + $_SESSION['TRIGGER_DEBUG'] = $aRetValues['TRIGGER_DEBUG']; + } + if (isset($aRetValues['APP_DATA'])) { + $_SESSION['APP_DATA'] = $aRetValues['APP_DATA']; + } } die(G::json_encode($response)); \ No newline at end of file diff --git a/workflow/engine/templates/xmlform.html b/workflow/engine/templates/xmlform.html index e52702280..d70d47988 100755 --- a/workflow/engine/templates/xmlform.html +++ b/workflow/engine/templates/xmlform.html @@ -8,6 +8,7 @@ + {foreach from=$form->fields item=field} {if ($field->type==='title')}