BUG 0000 Rad Map Perdida de sesion cuando se ejecuta casos SOLVED

- Added Login modal to continue the session for dynaforms in cases.
This commit is contained in:
Hector Cortez
2013-05-14 13:53:12 -04:00
parent dae407c822
commit d44e0f10a6
7 changed files with 153 additions and 10 deletions

View File

@@ -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('<br />');
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

View File

@@ -1194,7 +1194,8 @@ vtext.failed();}else{vtext.passed();}}
dropdowns=grids[j].getElementsByTagName('select');for(i=0;i<dropdowns.length;i++){var vtext=new input(dropdowns[i]);if(dropdowns[i].getAttribute("pm:required")=="1"&&dropdowns[i].value==''){$label=dropdowns[i].name.split("[");$labelPM=dropdowns[i].getAttribute("pm:label");if($labelPM==''||$labelPM==null){$fieldName=$label[3].split("]")[0]+" "+$label[2].split("]")[0];}else{$fieldName=$labelPM+" "+$label[2].split("]")[0];}
fieldGridName=$label[1]+"["+$label[2]+"["+$label[3].split("]")[0];if(!notValidateThisFields.inArray(fieldGridName)){invalidFields.push($fieldName);}
vtext.failed();}else{vtext.passed();}}}
return(invalidFields);};var changeStatusSubmitFields=function(newStatusTo){var newStatus=newStatusTo=='disabled';var formElements=document.getElementsByTagName('form');for(var i=0;i<formElements.length;i++){var inputElements=formElements[i].getElementsByTagName('input');for(var j=0;j<inputElements.length;j++){if(typeof(inputElements[j].type)!='undefined'){if(inputElements[j].type=='submit'){inputElements[j].disabled=newStatus;}}}}};var validateForm=function(sRequiredFields){changeStatusSubmitFields('disabled');if(typeof(sRequiredFields)!='object'||sRequiredFields.indexOf("%27")>0){sRequiredFields=sRequiredFields.replace(/%27/gi,'"');}
return(invalidFields);};var changeStatusSubmitFields=function(newStatusTo){var newStatus=newStatusTo=='disabled';var formElements=document.getElementsByTagName('form');for(var i=0;i<formElements.length;i++){var inputElements=formElements[i].getElementsByTagName('input');for(var j=0;j<inputElements.length;j++){if(typeof(inputElements[j].type)!='undefined'){if(inputElements[j].type=='submit'){inputElements[j].disabled=newStatus;}}}}};var validateForm=function(sRequiredFields){sFormName=document.getElementById('__DynaformName__');if((typeof(sFormName)!='undefined'&&sFormName!='login')&&(typeof(usernameLogged)!='undefined'&&usernameLogged!='')){if(!sessionPersits()){showPromptLogin('session');return false;}}
changeStatusSubmitFields('disabled');if(typeof(sRequiredFields)!='object'||sRequiredFields.indexOf("%27")>0){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;i<aRequiredFields.length;i++){aRequiredFields[i].label=(aRequiredFields[i].label=='')?aRequiredFields[i].name:aRequiredFields[i].label;if(!notValidateThisFields.inArray(aRequiredFields[i].name)){if(typeof aRequiredFields[i].required!='undefined'){required=aRequiredFields[i].required;}
else{required=1;}
@@ -1231,7 +1232,9 @@ else{var arrayForm=document.getElementsByTagName("form");var inputAux;var id="";
var arrayLink=frm.getElementsByTagName("a");for(i2=0;i2<=arrayLink.length-1;i2++){var link=arrayLink[i2];if(typeof link.id!="undefined"&&link.id!=""&&link.id!="form[DYN_BACKWARD]"&&link.id!="form[DYN_FORWARD]"){var strHtml=link.parentNode.innerHTML;strHtml=stringReplace("\\x0A","",strHtml);strHtml=stringReplace("\\x0D","",strHtml);strHtml=stringReplace("\\x09","",strHtml);if(/^.*pm:field.*$/.test(strHtml)){id=link.id+"_";if(!document.getElementById(id)){var strAux=link.id.replace("form[","");strAux=strAux.substring(0,strAux.length-1);inputAux=document.createElement("input");inputAux.type="hidden";inputAux.id=id;inputAux.name=link.id;inputAux.value=link.href;frm.appendChild(inputAux);inputAux=document.createElement("input");inputAux.type="hidden";inputAux.id=id+"label";inputAux.name="form["+strAux+"_label]";inputAux.value=link.innerHTML;frm.appendChild(inputAux);}}}}}
return true;}};var getObject=function(sObject){var i;var oAux=null;var iLength=__aObjects__.length;for(i=0;i<iLength;i++){oAux=__aObjects__[i].getElementByName(sObject);if(oAux){return oAux;}}
return oAux;};var saveAndRefreshForm=function(oObject){if(oObject){oObject.form.action+='&_REFRESH_=1';oObject.form.submit();}
else{var oAux=window.document.getElementsByTagName('form');if(oAux.length>0){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('<br />');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;i<notValidateThisFields.length;i++){if(notValidateThisFields[i]!=sFieldName){aAux.push(notValidateThisFields[i]);}}
notValidateThisFields=aAux;var oAux=document.getElementById('__notValidateThisFields__');if(oAux){oAux.value=notValidateThisFields.toJSONString();}}};function dynaformVerifyFieldName(){pme_validating=true;setTimeout('verifyFieldName1();',0);return true;}
function verifyFieldName1(){if(getField('PME_VALIDATE_NAME').value=='__error_session__'){showPrompt('refreshDynaformEditor');return;}

View File

@@ -90,6 +90,7 @@ class headPublisher
{
$this->addScriptFile("/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()

View File

@@ -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 ('<a href=\'' . $_SERVER['HTTP_REFERER'] . '\'>{1}</a>',G::LoadTranslation( 'ID_REOPEN' )
) ) );
throw new Exception( G::LoadTranslation( 'ID_INVALID_APPLICATION_ID_MSG', array ('<a href=\'' . $_SERVER['HTTP_REFERER'] . '\'>{1}</a>',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();

View File

@@ -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

View File

@@ -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));

View File

@@ -8,6 +8,7 @@
<td valign='top'>
<input type="hidden" class="notValidateThisFields" name="__notValidateThisFields__" id="__notValidateThisFields__" value="{$form->objectRequiredFields}" />
<input type="hidden" name="DynaformRequiredFields" id="DynaformRequiredFields" value="{$form->objectRequiredFields}" />
<input type="hidden" name="__DynaformName__" id="__DynaformName__" value="{$form->name}" />
<table cellspacing="0" cellpadding="0" border="0" width="100%">
{foreach from=$form->fields item=field}
{if ($field->type==='title')}