View Issue Details

IDProjectCategoryView StatusLast Update
16025Bug reportsSurvey takingpublic2020-05-13 09:09
ReporterDenisChenu Assigned To 
PriorityhighSeverityminor 
Status newResolutionopen 
Product Version4.1.12 
Summary16025: Broken survey language (lack of questionl10ns) unfixable
Description

When change language : there are way wher $_SESSION of extra language can not be set.

Steps To Reproduce

NB: Cannot be reproduced without corrupt db.

With debug set.

  1. Import https://github.com/LimeSurvey/LimeSurvey/blob/master/docs/demosurveys/ls3_sample_survey_multilingual_fr_de_en_it.lss
  2. Launch survey in English (primary language)
  3. Change language : see the error

If you add newtest = Y : it seems to work after with all language. But then we loose prefill by URL

Without debug :

  1. Launch survey
  2. language FR : seems OK
  3. Move next : nothing happen
  4. Move next : throw : 'This response already submitted'
Additional Information

Seems since the language system updater (i didn't control with previous version )

TagsNo tags attached.
Complete LimeSurvey version number (& build)4.1.120github
I will donate to the project if issue is resolvedNo
Browsernot relevant
Database & DB-Versionnot relevant
Server OS (if known)not relevant
Webserver software & version (if known)not relevant
PHP Versionnot relevant

Relationships

related to 16265 new Condition don't works 

Activities

DenisChenu

DenisChenu

2020-03-24 10:18

developer  

PHP notice.html (18,880 bytes)   
<!DOCTYPE html>
<html lang="fr" dir="ltr" class="fr dir-ltr  no-js " >
            



<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="generator" content="LimeSurvey http://www.limesurvey.org" />

        

    <link rel="stylesheet" type="text/css" href="/master/assets/fonts/noto.css" />
<link rel="stylesheet" type="text/css" href="/master/assets/fonts/font-src/fontawesome/css/font-awesome.css" />
<link rel="stylesheet" type="text/css" href="/master/assets/packages/limesurvey/survey.css" />
<link rel="stylesheet" type="text/css" href="/master/assets/packages/embeddables/build/embeddables.css" />
<link rel="stylesheet" type="text/css" href="/master/assets/packages/template-core/spectrum.css" />
<link rel="stylesheet" type="text/css" href="/master/assets/packages/template-core/template-core.css" />
<link rel="stylesheet" type="text/css" href="/master/assets/packages/template-core/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css" />
<link rel="stylesheet" type="text/css" href="/master/assets/packages/bootstrap/bootstrap.css" />
<link rel="stylesheet" type="text/css" href="/master/assets/packages/bootstrap/yiistrap.css" />
<link rel="stylesheet" type="text/css" href="/master/themes/survey/vanilla/css/ajaxify.css" />
<link rel="stylesheet" type="text/css" href="/master/themes/survey/vanilla/css/theme.css" />
<link rel="stylesheet" type="text/css" href="/master/themes/survey/vanilla/css/custom.css" />
<link rel="stylesheet" type="text/css" href="/master/assets/styles-public/expressions.css" />
<link rel="stylesheet" type="text/css" href="/master/assets/styles-public/lime-progress.css" />
<script type='text/javascript'>window.debugState = {frontend : (0 === 1), backend : (0 === 1)};</script><script type="text/javascript" src="/master/third_party/jquery/jquery-3.4.1.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/third_party/jquery/jquery-migrate-3.1.0.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/third_party/moment/moment-with-locales.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/packages/expressions/em_javascript.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/packages/lslog/build/lslog.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/packages/pjax/pjax.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/packages/limesurvey/survey.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/packages/template-core/spectrum.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/packages/template-core/template-core.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/packages/bootstrap/bootstrap.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/packages/bootstrap/plugins/bootstrapconfirm/bootstrapconfirm.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/themes/survey/vanilla/scripts/theme.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/themes/survey/vanilla/scripts/ajaxify.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/themes/survey/vanilla/scripts/custom.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/scripts/survey_runtime.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/scripts/admin/expression.js" class="headScriptTag"></script>
<script type="text/javascript" src="/master/assets/scripts/nojs.js" class="headScriptTag"></script>
<script type="text/javascript">
/*<![CDATA[*/
LSvar={"bFixNumAuto":1,"bNumRealValue":0,"sLEMradix":",","lang":{"confirm":{"confirm_cancel":"Annuler","confirm_ok":"OK"}},"showpopup":0,"startPopups":{},"debugMode":2};
LSvar= LSvar || {};
LSvar.bFixNumAuto = 1;
LSvar.bNumRealValue = 0;
/*]]>*/
</script>
<title>
        Exemple de questionnaire EN/FR/DE
    </title>

    <link rel="shortcut icon" href="/master/tmp/assets/9c9ab2dc/favicon.ico" />
    <script type="text/javascript">
        if(window.basicThemeScripts === undefined){ 
            window.basicThemeScripts = new ThemeScripts(); 
        } 
    </script>
        
            
        
        


    
</head>

        <body style="padding-top: 90px;" class=" vanilla font-noto lang-fr  "  >

                            <span style="display: none;" id="__emcache_debug" value="off"></span>
        
                            <div id="beginScripts" class="script-container">
                <script type="text/javascript" src="/master/third_party/decimal/decimal.js"></script>
<script type="text/javascript" src="/master/assets/packages/decimalcustom/decimalcustom.js"></script>
<script type="text/javascript">
/*<![CDATA[*/
setJsVar();
var LEMmode='group';
var LEMgseq=-1;
ExprMgr_process_relevance_and_tailoring = function(evt_type,sgqa,type){
if (typeof LEM_initialized == 'undefined') {
LEM_initialized=true;
LEMsetTabIndexes();
}
if (evt_type == 'onchange' && (typeof last_sgqa !== 'undefined' && sgqa==last_sgqa) && (typeof last_evt_type !== 'undefined' && last_evt_type == 'TAB' && type != 'checkbox')) {
  last_evt_type='onchange';
  last_sgqa=sgqa;
  return;
}
if (evt_type == 'updated'  && (typeof last_sgqa !== 'undefined' && sgqa==last_sgqa)) {
  last_evt_type='updated';
  last_sgqa=sgqa;
  return;
}
last_evt_type = evt_type;
last_sgqa=sgqa;

}

/*]]>*/
</script>

            </div>
               

                <article>

            <div id="dynamicReloadContainer">
            
                                                    
<!-- Bootstrap Navigation Bar -->
<div class=" navbar navbar-default navbar-fixed-top" >
    <div class=" navbar-header   "  >
        <button type="button" class=" navbar-toggle collapsed "  data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"   >
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>

                            <div class=" navbar-brand "   >
                Exemple de questionnaire EN/FR/DE
            </div>
            </div>
    <div id="navbar" class=" collapse navbar-collapse "  >
        <ul class=" nav navbar-nav  navbar-action-link  navbar-right" >
                <!-- Load unfinished survey button -->
    <li class=" ls-no-js-hidden " >
        <a href="#" data-limesurvey-submit='{ "loadall":"loadall" }' class=' ls-link-action ls-link-loadall  animate' >
            Charger un questionnaire non terminé
        </a>
    </li>


            


      <!-- Exit and clear survey -->
    <li class=" ls-no-js-hidden "  >
        <a href="#" data-limesurvey-submit='{ "clearall":"clearall" }'  data-confirmedby='{ "confirm-clearall":"confirm" }' data-confirmlabel='Veuillez confirmer que vous souhaitez effacer vos réponses ?' class=' ls-link-action ls-link-clearall  animate'  >
            Sortir et effacer vos réponses
        </a>
    </li>
  
            


            

        
    <!-- Language Changer, top menu version -->
    <li class=" ls-no-js-hidden form-change-lang  dropdown"   >
        <a class="  dropdown-toggle animate"  data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false"  >

                        Langue : Français
            <span class="  caret"   ></span>
        </a>

        <ul class=" language_change_container  dropdown-menu" id="langs-container"  style="overflow: scroll"  >
                                        <li class="index-item "  >
                    <a href='#' data-limesurvey-lang='de-informal' class="ls-language-link  animate"  >
                        Deutsch (Du)
                    </a>
                </li>
                            <li class="index-item "  >
                    <a href='#' data-limesurvey-lang='en' class="ls-language-link  animate"  >
                        Anglais
                    </a>
                </li>
                            <li class="index-item "  >
                    <a href='#' data-limesurvey-lang='fr' class="ls-language-link  animate"  >
                        Français
                    </a>
                </li>
                    </ul>
    </li>





        </ul>
    </div>
</div>

                
                                                    
    <!-- Top container -->
    <div class=" top-container  space-col"    >
        <div class="  container-fluid"  >
                            
                                <div class=" progress "  >
                    <div class=" progress-bar "   role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="min-width: 2em; width: 0%;">
                        0%
                    </div>
                </div>
                    </div> <!-- must hide it without javascript -->
    </div>

                
                <!-- Outer Frame Container -->
                                                                            <!-- outer frame container -->
<div class=" outerframe    container-fluid  " id="outerframeContainer"  >
        
<!-- Main Row -->
<div id="main-row"  >
    <!-- Main Col -->
    <div class="  col-centered  space-col" id="main-col" >

                                





                        

                                        



<!-- No JavaScript alert -->
<div class=' ls-js-hidden warningjs  alert alert-danger '    data-type='checkjavascript'>
    Attention : l’exécution de JavaScript est désactivée dans votre navigateur ou sur ce site. Vous risquez de ne pas pouvoir répondre à toutes les questions. Veuillez vérifier les paramètres de votre navigateur.
</div>


    
    <!-- Start of language change Form-->
    <form id="firstpage-changelang" autocomplete="off" class="form" action="/master/index.php/994978" method="post">


    
    
        
            <!-- Language Changer -->
    <div class="   form-change-lang form-inline"  >
        <label class=" "  for="lang">
            <span class="control-label" >Langue :</span>
            <select class="form-control" name="lang" id="lang">
<option value="de-informal">Deutsch (Du)</option>
<option value="en">English</option>
<option value="fr" selected="selected">Français</option>
</select>
        </label>
        <!-- for no js functionality (need form) -->
                <button type="submit" value="changelang" name="move" class="btn btn-info ls-language-changer-item ">Changer de langue</button>
    </div>

        
    


    </form>







<!-- Start of the main Form-->
<form id="limesurvey" name="limesurvey" autocomplete="off" class="survey-form-container form" action="/master/index.php/994978" method="post">

<!-- Ajax value -->
<!-- Needs to be set by javascript! Because if JavaScript is disabled, ajaxmode will completely fail! -->



<!-- Field Names -->
<input type='hidden' name='fieldnames' value='' id='fieldnames' />



<!-- Submit button -->
<button type="submit" id="defaultbtn" value="default" name="move" class="submit hidden" style="display:none">défaut</button>
 <!-- main form -->

        <input id="sid" type="hidden" value="994978" name="sid" /><input id="lastgroupname" type="hidden" value="_WELCOME_SCREEN_" name="lastgroupname" /><input id="LEMpostKey" type="hidden" value="2141757493" name="LEMpostKey" /><input id="thisstep" type="hidden" value="0" name="thisstep" />
<script type='text/javascript'>
<!--
var LEMmode='group';
var LEMgseq=-1;
ExprMgr_process_relevance_and_tailoring = function(evt_type,sgqa,type){
if (typeof LEM_initialized == 'undefined') {
LEM_initialized=true;
LEMsetTabIndexes();
}
if (evt_type == 'onchange' && (typeof last_sgqa !== 'undefined' && sgqa==last_sgqa) && (typeof last_evt_type !== 'undefined' && last_evt_type == 'TAB' && type != 'checkbox')) {
  last_evt_type='onchange';
  last_sgqa=sgqa;
  return;
}
if (evt_type == 'updated'  && (typeof last_sgqa !== 'undefined' && sgqa==last_sgqa)) {
  last_evt_type='updated';
  last_sgqa=sgqa;
  return;
}
last_evt_type = evt_type;
last_sgqa=sgqa;

}
//-->
</script>
<input type='hidden' id='aQuestionsWithDependencies' data-qids='[]' />

        
<!-- Welcome Message -->
<div id="welcome-container" class="" >

    <!-- Survey Name -->
    <h1 class=" survey-name  text-center"  >
        Exemple de questionnaire EN/FR/DE
    </h1>

    <!-- Survey description -->
    <div class=" survey-description  text-info text-center" >
        Ce sondage montre toutes les types de questions de LimeSurvey et quelques options. 
    </div>

    <!-- Welcome text -->
    <div class=" survey-welcome  h4 text-primary" >
        <p>
	Ceci est le message d'accueil de votre sondage !! Vous pouvez l'éditer dans les paramètres du questionnaire.</p>

    </div>

    <!-- Question count -->
    <div class=" number-of-questions   text-muted" >
        <div class=' question-count-text ' >

                                                            Il y a 46 questions dans ce questionnaire.
                                  </div>
  </div>
</div>


    
<!-- Privacy message -->

<div class=" privacy  row" >
    <div class="   col-sm-12 col-centered" >
                                                    <div class="  h4 text-primary " >
                    Ce questionnaire est anonyme.
                </div>
                <div>
                    <p class=" ls-privacy-body " >
                        L’enregistrement de vos réponses à ce questionnaire ne contient aucune information permettant de vous identifier, à moins que l’une des questions ne vous le demande explicitement.
                    </p>
                    <p class=" ls-privacy-body ">
                        If you used an identifying access code to access this survey, please rest assured that this code will not be stored together with your responses. It is managed in a separate database and will only be updated to indicate whether you did (or did not) complete this survey. There is no way of matching identification access codes with survey responses.
                    </p>
                </div>
                                                                    </div>
</div>


        

<!-- PRESENT THE NAVIGATOR -->
<div class="    row navigator space-col" id="navigator-container" >

    <!-- Previous button container -->
    <div class="   col-xs-6 text-left" >

                    </div>
    <div class="   col-xs-6 text-right">

                
                                        <!-- Button Next -->
                <button  id="ls-button-submit" type="submit" value="movenext" name="move"  accesskey="n" class="   ls-move-btn ls-move-next-btn ls-move-submit-btn action--ls-button-submit  btn btn-lg btn-primary " >
                    Suivant
                </button>
                        </div>
</div>
<!-- Extra navigator part -->
    <!-- extra tools, can be shown with javascript too (just remove ls-js-hidden class -->
    <div class="row ls-js-hidden">
        <!-- Extra button container -->
        <div class="col-xs-6 clearall-saveall-wrapper">
                                <button  type="submit" value="loadall" name="loadall"  accesskey="l" class="ls-saveaction ls-loadall  action--ls-button-submit btn btn-default">Charger un questionnaire non terminé</button>

                                </div>
         <!-- Index container -->
            </div>



</form> <!-- main form -->



            

    </div> <!-- main col -->
</div> <!-- main row -->
</div>
                
                                



<!-- Bootstrap Modal Alert -->
<div id="bootstrap-alert-box-modal" class=" modal fade " >
    <div class=" modal-dialog " >
        <div class=" modal-content "  >
            <div class=" modal-header "  style="min-height:40px;"  >
                <button   type="button" data-dismiss="modal" aria-hidden="true"  class=" close "  >&times;</button>
                <div class=" modal-title h4 " >&nbsp;</div>
            </div>
            <div class=" modal-body " >
            </div>
                        <div class=" modal-footer " >
                <a  href="#" data-dismiss="modal"   class=" btn btn-default ">Fermer</a>
            </div>
                    </div>
    </div>
</div>


                                

                        </div>

        </article>
                    
                            <div id="bottomScripts" class="script-container">
                <script type="text/javascript" src="/master/assets/packages/embeddables/build/embeddables.js"></script>
<script type="text/javascript">
/*<![CDATA[*/

            try{ 
                triggerEmClassChange(); 
            } catch(e) {
                console.ls.warn('triggerEmClassChange could not be run. Is survey.js correctly loaded?');
            }

activateLanguageChanger(); 

                if(window.basicThemeScripts === undefined){ 
                    window.basicThemeScripts = new ThemeScripts(); 
                } 
                basicThemeScripts.initGlobal(); 
                
triggerEmRelevance();
jQuery(document).off('pjax:scriptcomplete.mainBottom').on('ready pjax:scriptcomplete.mainBottom', function() {
activateActionLink();
activateConfirmButton();
basicThemeScripts.initTopMenuLanguageChanger('.ls-language-link ', 'form#limesurvey'); 

    $('#limesurvey').append('<input type="hidden" name="ajax" value="off" id="ajax" />');
    

    if(window.basicThemeScripts === undefined){ 
        window.basicThemeScripts = new ThemeScripts(); 
    } 
    basicThemeScripts.initWelcomePage(); 

updateMandatoryErrorClass();
});
jQuery(document).off('pjax:scriptsuccess.debugger').on('pjax:scriptsuccess.debugger',function(e) { console.ls.log('PJAX scriptsuccess', e); });
jQuery(document).off('pjax:scripterror.debugger').on('pjax:scripterror.debugger',function(e) { console.ls.log('PJAX scripterror', e); });
jQuery(document).off('pjax:scripttimeout.debugger').on('pjax:scripttimeout.debugger',function(e) { console.ls.log('PJAX scripttimeout', e); });
jQuery(document).off('pjax:success.debugger').on('pjax:success.debugger',function(e) { console.ls.log('PJAX success', e);});
jQuery(document).off('pjax:error.debugger').on('pjax:error.debugger',function(e) { console.ls.log('PJAX error', e);});
/*]]>*/
</script>

            </div>
           

                    <script>
                window.basicThemeScripts.init();
            </script>
                
    </body>
</html>
PHP notice.html (18,880 bytes)   
DenisChenu

DenisChenu

2020-03-24 10:24

developer  

Peek debug0.gif (553,495 bytes)
Peek debug2.gif (534,167 bytes)
DenisChenu

DenisChenu

2020-03-24 10:28

developer   ~56744

Same issue with https://github.com/LimeSurvey/LimeSurvey/commit/4f948560635dbbecdd5755628430a653218d0637

Then : not related to your fix ....

DenisChenu

DenisChenu

2020-03-24 10:30

developer   ~56745

Last edited: 2020-04-01 17:23

https://github.com/LimeSurvey/LimeSurvey/commit/7c04afd2ebe2dca98f89e036d180afcc3c3bb387 : same issue ...

The a 4.0.0 issue .....

DenisChenu

DenisChenu

2020-03-24 10:31

developer   ~56746

Last edited: 2020-04-01 17:23

Assigned to @cdorin : urgent issue .....

DenisChenu

DenisChenu

2020-04-01 17:38

developer   ~56874

@cdorin : maybe move severity to more than minor ?

ollehar

ollehar

2020-04-16 12:02

administrator   ~57140

Does this work in LS3?

ollehar

ollehar

2020-04-16 12:26

administrator   ~57142

All tests should be done without newtest, right?

ollehar

ollehar

2020-04-16 13:13

administrator   ~57145

Can't reproduce on latest master. More info?

DenisChenu

DenisChenu

2020-04-16 15:06

developer   ~57161

All tests should be done without newtest, right?

??? I start with or without newtes.

Still can reproduce
See Peek debug0.gif : exactly same issue

  1. get the start link (with or without newtest)
  2. Start browser (no session)
  3. Past the link
  4. Update language on welcome page
  5. Move next : nothing happen
  6. Move next : this survey was already submitted ...

I make a screencast with 2 window maybe ?

DenisChenu

DenisChenu

2020-04-16 15:13

developer   ~57162

New screencast : showing submitted with start page at 0

Peek 16-04-2020 15-12.gif (1,298,763 bytes)
ollehar

ollehar

2020-04-16 15:42

administrator   ~57163

Works perfectly fine for me:

  1. Import demo survey
  2. Activate survey
  3. Copy link for FR
  4. Open private window
  5. Paste link, come to welcome page
  6. Change to Dutch
  7. Click next
  8. Next page is shown as expected
DenisChenu

DenisChenu

2020-04-16 16:03

developer   ~57165

session ? PHP version ?

Did you try with brower private mode or a new clean browser ? because if you use admin browser : it work.

Undefined index: fr
$questionarray[3] = $arQuestion->questionl10ns[$_SESSION['survey_'.$surveyid]['s_lang']]->question;

See PHP Notice

PHP notice-2.html (17,139 bytes)   
<!DOCTYPE html PUBLIC
	"-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>PHP notice</title>

<style type="text/css">
/*<![CDATA[*/
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;}
body{line-height:1;}
ol,ul{list-style:none;}
blockquote,q{quotes:none;}
blockquote:before,blockquote:after,q:before,q:after{content:none;}
:focus{outline:0;}
ins{text-decoration:none;}
del{text-decoration:line-through;}
table{border-collapse:collapse;border-spacing:0;}

body {
	font: normal 9pt "Verdana";
	color: #000;
	background: #fff;
}

h1 {
	font: normal 18pt "Verdana";
	color: #f00;
	margin-bottom: .5em;
}

h2 {
	font: normal 14pt "Verdana";
	color: #800000;
	margin-bottom: .5em;
}

h3 {
	font: bold 11pt "Verdana";
}

pre {
	font: normal 11pt Menlo, Consolas, "Lucida Console", Monospace;
}

pre span.error {
	display: block;
	background: #fce3e3;
}

pre span.ln {
	color: #999;
	padding-right: 0.5em;
	border-right: 1px solid #ccc;
}

pre span.error-ln {
	font-weight: bold;
}

.container {
	margin: 1em 4em;
}

.version {
	color: gray;
	font-size: 8pt;
	border-top: 1px solid #aaa;
	padding-top: 1em;
	margin-bottom: 1em;
}

.message {
	color: #000;
	padding: 1em;
	font-size: 11pt;
	background: #f3f3f3;
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;
	margin-bottom: 1em;
	line-height: 160%;
}

.source {
	margin-bottom: 1em;
}

.code pre {
	background-color: #ffe;
	margin: 0.5em 0;
	padding: 0.5em;
	line-height: 125%;
	border: 1px solid #eee;
}

.source .file {
	margin-bottom: 1em;
	font-weight: bold;
}

.traces {
	margin: 2em 0;
}

.trace {
	margin: 0.5em 0;
	padding: 0.5em;
}

.trace.app {
	border: 1px dashed #c00;
}

.trace .number {
	text-align: right;
	width: 2em;
	padding: 0.5em;
}

.trace .content {
	padding: 0.5em;
}

.trace .plus,
.trace .minus {
	display:inline;
	vertical-align:middle;
	text-align:center;
	border:1px solid #000;
	color:#000;
	font-size:10px;
	line-height:10px;
	margin:0;
	padding:0 1px;
	width:10px;
	height:10px;
}

.trace.collapsed .minus,
.trace.expanded .plus,
.trace.collapsed pre {
	display: none;
}

.trace-file {
	cursor: pointer;
	padding: 0.2em;
}

.trace-file:hover {
	background: #f0ffff;
}
/*]]>*/
</style>
</head>

<body>
<div class="container">
	<h1>PHP notice</h1>

	<p class="message">
		Undefined index: fr	</p>

	<div class="source">
		<p class="file">/mnt/data/shnoulle/nginx/www/master/application/helpers/frontend_helper.php(1641)</p>
		<div class="code"><pre><span class="ln">1629</span> */
<span class="ln">1630</span> function updateFieldArray()
<span class="ln">1631</span> {
<span class="ln">1632</span>     global $surveyid;
<span class="ln">1633</span> 
<span class="ln">1634</span> 
<span class="ln">1635</span>     if (isset($_SESSION[&#039;survey_&#039;.$surveyid][&#039;fieldarray&#039;])) {
<span class="ln">1636</span>         foreach ($_SESSION[&#039;survey_&#039;.$surveyid][&#039;fieldarray&#039;] as $key =&gt; $value) {
<span class="ln">1637</span>             $questionarray = &amp;$_SESSION[&#039;survey_&#039;.$surveyid][&#039;fieldarray&#039;][$key];
<span class="ln">1638</span>             $arQuestion = Question::model()-&gt;findByPk($questionarray[0]);
<span class="ln">1639</span>             if (!empty($arQuestion)) {
<span class="ln">1640</span>                 $questionarray[2] = $arQuestion-&gt;title;
<span class="error"><span class="ln error-ln">1641</span>                 $questionarray[3] = $arQuestion-&gt;questionl10ns[$_SESSION[&#039;survey_&#039;.$surveyid][&#039;s_lang&#039;]]-&gt;question;
</span><span class="ln">1642</span>             }
<span class="ln">1643</span>             unset($questionarray);
<span class="ln">1644</span>         }
<span class="ln">1645</span>     }
<span class="ln">1646</span> }
<span class="ln">1647</span> 
<span class="ln">1648</span> /**
<span class="ln">1649</span> * checkCompletedQuota() returns matched quotas information for the current response
<span class="ln">1650</span> * @param integer $surveyid - Survey identification number
<span class="ln">1651</span> * @param bool $return - set to true to return information, false do the quota
<span class="ln">1652</span> * @return array|void - nested array, Quotas-&gt;Members-&gt;Fields, includes quota information matched in session.
<span class="ln">1653</span> */
</pre></div>	</div>

	<div class="traces">
		<h2>Stack Trace</h2>
				<table style="width:100%;">
						<tr class="trace app expanded">
			<td class="number">
				#0			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/master/application/controllers/survey/index.php(301): <strong>updateFieldArray</strong>()				</div>

				<div class="code"><pre><span class="ln">296</span>             }
<span class="ln">297</span> 
<span class="ln">298</span>             // Update the Session var only if needed
<span class="ln">299</span>             if (App()-&gt;language != $sOldLang) {
<span class="ln">300</span>                 UpdateGroupList($surveyid, App()-&gt;language); // to refresh the language strings in the group list session variable
<span class="error"><span class="ln error-ln">301</span>                 updateFieldArray(); // to refresh question titles and question text
</span><span class="ln">302</span>             }
<span class="ln">303</span>         }
<span class="ln">304</span> 
<span class="ln">305</span>         //GET BASIC INFORMATION ABOUT THIS SURVEY
<span class="ln">306</span>         $thissurvey = getSurveyInfo($surveyid, $_SESSION[&#039;survey_&#039;.$surveyid][&#039;s_lang&#039;]);
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#1			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/master/application/controllers/survey/index.php(24): <strong>index</strong>-><strong>action</strong>()				</div>

				<div class="code"><pre><span class="ln">19</span>     public $oTemplate;
<span class="ln">20</span> 
<span class="ln">21</span>     public function run()
<span class="ln">22</span>     {
<span class="ln">23</span>         useFirebug();
<span class="error"><span class="ln error-ln">24</span>         $this-&gt;action();
</span><span class="ln">25</span>     }
<span class="ln">26</span> 
<span class="ln">27</span>     public function action()
<span class="ln">28</span>     {
<span class="ln">29</span>         global $surveyid;
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#2			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/master/framework/web/actions/CAction.php(76): <strong>index</strong>-><strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">71</span>     {
<span class="ln">72</span>         $method=new ReflectionMethod($this, &#039;run&#039;);
<span class="ln">73</span>         if($method-&gt;getNumberOfParameters()&gt;0)
<span class="ln">74</span>             return $this-&gt;runWithParamsInternal($this, $method, $params);
<span class="ln">75</span> 
<span class="error"><span class="ln error-ln">76</span>         $this-&gt;run();
</span><span class="ln">77</span>         return true;
<span class="ln">78</span>     }
<span class="ln">79</span> 
<span class="ln">80</span>     /**
<span class="ln">81</span>      * Executes a method of an object with the supplied named parameters.
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#3			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/master/framework/web/CController.php(308): <strong>CAction</strong>-><strong>runWithParams</strong>(array(&quot;sid&quot; =&gt; &quot;994978&quot;))				</div>

				<div class="code"><pre><span class="ln">303</span>     {
<span class="ln">304</span>         $priorAction=$this-&gt;_action;
<span class="ln">305</span>         $this-&gt;_action=$action;
<span class="ln">306</span>         if($this-&gt;beforeAction($action))
<span class="ln">307</span>         {
<span class="error"><span class="ln error-ln">308</span>             if($action-&gt;runWithParams($this-&gt;getActionParams())===false)
</span><span class="ln">309</span>                 $this-&gt;invalidActionParams($action);
<span class="ln">310</span>             else
<span class="ln">311</span>                 $this-&gt;afterAction($action);
<span class="ln">312</span>         }
<span class="ln">313</span>         $this-&gt;_action=$priorAction;
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#4			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/master/framework/web/CController.php(286): <strong>CController</strong>-><strong>runAction</strong>(index)				</div>

				<div class="code"><pre><span class="ln">281</span>      * @see runAction
<span class="ln">282</span>      */
<span class="ln">283</span>     public function runActionWithFilters($action,$filters)
<span class="ln">284</span>     {
<span class="ln">285</span>         if(empty($filters))
<span class="error"><span class="ln error-ln">286</span>             $this-&gt;runAction($action);
</span><span class="ln">287</span>         else
<span class="ln">288</span>         {
<span class="ln">289</span>             $priorAction=$this-&gt;_action;
<span class="ln">290</span>             $this-&gt;_action=$action;
<span class="ln">291</span>             CFilterChain::create($this,$action,$filters)-&gt;run();
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#5			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/master/framework/web/CController.php(265): <strong>CController</strong>-><strong>runActionWithFilters</strong>(index, array())				</div>

				<div class="code"><pre><span class="ln">260</span>         {
<span class="ln">261</span>             if(($parent=$this-&gt;getModule())===null)
<span class="ln">262</span>                 $parent=Yii::app();
<span class="ln">263</span>             if($parent-&gt;beforeControllerAction($this,$action))
<span class="ln">264</span>             {
<span class="error"><span class="ln error-ln">265</span>                 $this-&gt;runActionWithFilters($action,$this-&gt;filters());
</span><span class="ln">266</span>                 $parent-&gt;afterControllerAction($this,$action);
<span class="ln">267</span>             }
<span class="ln">268</span>         }
<span class="ln">269</span>         else
<span class="ln">270</span>             $this-&gt;missingAction($actionID);
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#6			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/master/framework/web/CWebApplication.php(282): <strong>CController</strong>-><strong>run</strong>(&quot;index&quot;)				</div>

				<div class="code"><pre><span class="ln">277</span>         {
<span class="ln">278</span>             list($controller,$actionID)=$ca;
<span class="ln">279</span>             $oldController=$this-&gt;_controller;
<span class="ln">280</span>             $this-&gt;_controller=$controller;
<span class="ln">281</span>             $controller-&gt;init();
<span class="error"><span class="ln error-ln">282</span>             $controller-&gt;run($actionID);
</span><span class="ln">283</span>             $this-&gt;_controller=$oldController;
<span class="ln">284</span>         }
<span class="ln">285</span>         else
<span class="ln">286</span>             throw new CHttpException(404,Yii::t(&#039;yii&#039;,&#039;Unable to resolve the request &quot;{route}&quot;.&#039;,
<span class="ln">287</span>                 array(&#039;{route}&#039;=&gt;$route===&#039;&#039;?$this-&gt;defaultController:$route)));
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#7			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/master/framework/web/CWebApplication.php(141): <strong>CWebApplication</strong>-><strong>runController</strong>(&quot;survey/index/sid/994978&quot;)				</div>

				<div class="code"><pre><span class="ln">136</span>             foreach(array_splice($this-&gt;catchAllRequest,1) as $name=&gt;$value)
<span class="ln">137</span>                 $_GET[$name]=$value;
<span class="ln">138</span>         }
<span class="ln">139</span>         else
<span class="ln">140</span>             $route=$this-&gt;getUrlManager()-&gt;parseUrl($this-&gt;getRequest());
<span class="error"><span class="ln error-ln">141</span>         $this-&gt;runController($route);
</span><span class="ln">142</span>     }
<span class="ln">143</span> 
<span class="ln">144</span>     /**
<span class="ln">145</span>      * Registers the core application components.
<span class="ln">146</span>      * This method overrides the parent implementation by registering additional core components.
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#8			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/master/framework/base/CApplication.php(185): <strong>CWebApplication</strong>-><strong>processRequest</strong>()				</div>

				<div class="code"><pre><span class="ln">180</span>     public function run()
<span class="ln">181</span>     {
<span class="ln">182</span>         if($this-&gt;hasEventHandler(&#039;onBeginRequest&#039;))
<span class="ln">183</span>             $this-&gt;onBeginRequest(new CEvent($this));
<span class="ln">184</span>         register_shutdown_function(array($this,&#039;end&#039;),0,false);
<span class="error"><span class="ln error-ln">185</span>         $this-&gt;processRequest();
</span><span class="ln">186</span>         if($this-&gt;hasEventHandler(&#039;onEndRequest&#039;))
<span class="ln">187</span>             $this-&gt;onEndRequest(new CEvent($this));
<span class="ln">188</span>     }
<span class="ln">189</span> 
<span class="ln">190</span>     /**
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#9			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/master/index.php(182): <strong>CApplication</strong>-><strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">177</span> require_once APPPATH . &#039;core/LSYii_Application&#039; . EXT;
<span class="ln">178</span> 
<span class="ln">179</span> $config = require_once(APPPATH . &#039;config/internal&#039; . EXT);
<span class="ln">180</span> 
<span class="ln">181</span> Yii::$enableIncludePath = false;
<span class="error"><span class="ln error-ln">182</span> Yii::createApplication(&#039;LSYii_Application&#039;, $config)-&gt;run();
</span><span class="ln">183</span> 
<span class="ln">184</span> /* End of file index.php */
<span class="ln">185</span> /* Location: ./index.php */
</pre></div>			</td>
		</tr>
				</table>
	</div>

	<div class="version">
		2020-04-16 14:01:18 nginx/1.16.1 <a href="http://www.yiiframework.com/">Yii Framework</a>/1.1.22-dev	</div>
</div>

<script type="text/javascript">
/*<![CDATA[*/
var traceReg = new RegExp("(^|\\s)trace-file(\\s|$)");
var collapsedReg = new RegExp("(^|\\s)collapsed(\\s|$)");

var e = document.getElementsByTagName("div");
for(var j=0,len=e.length;j<len;j++){
	if(traceReg.test(e[j].className)){
		e[j].onclick = function(){
			var trace = this.parentNode.parentNode;
			if(collapsedReg.test(trace.className))
				trace.className = trace.className.replace("collapsed", "expanded");
			else
				trace.className = trace.className.replace("expanded", "collapsed");
		}
	}
}
/*]]>*/
</script>

</body>
</html>
PHP notice-2.html (17,139 bytes)   
ollehar

ollehar

2020-04-16 16:08

administrator   ~57166

Session what? PHP is 7.4.

Admin interface is in normal window, survey taking in private window.

DenisChenu

DenisChenu

2020-04-16 16:16

developer   ~57168

Last edited: 2020-04-16 16:17

View 2 revisions

Arg ...

Check DB : the S question didn't seems to exist ... in fr

I sedn my DB because

  1. Update question (qid = 3282 (Survey 994978)) and save dodn't shown any error or fix the issue
  2. Check integrety didn't fix the issue.
ls_master.sql.zip (133,878 bytes)
ollehar

ollehar

2020-04-16 16:20

administrator   ~57169

OK, so it's a problem in question editor?

ollehar

ollehar

2020-04-16 16:21

administrator   ~57170

Question id can be different, what's the question code?

ollehar

ollehar

2020-04-16 16:27

administrator   ~57173

I'm not too eager to debug your corrupt database, sorry. xD

DenisChenu

DenisChenu

2020-04-16 16:29

developer   ~57174

Last edited: 2020-04-16 16:30

View 2 revisions

S

No : in questionl10ns : qid are same for all language

Else : more a check integrity here (in my opinion)

But : better if question editor throw an error or something like this : see screencast

Peek 16-04-2020 16-29.gif (992,083 bytes)
DenisChenu

DenisChenu

2020-04-16 16:31

developer   ~57175

PS : it's not to fix my corrupted database (it's my test DB ... dev DB , no real data): but

  1. checkintegrtity MUST fix this issue (it does in 3.X : create unexisting question language etc ..)
  2. question editor must show something different
ollehar

ollehar

2020-04-16 16:32

administrator   ~57176

That bug is so bad... (in your gif)

DenisChenu

DenisChenu

2020-04-16 16:37

developer   ~57179

Maybe some other strange issue can came from simple error like this

Some vue error

[Vue warn]: Error in render: &quot;TypeError: this.$store.state.currentQuestionI10N[this.$store.state.activeLanguage] is undefined&quot;
found in
---> &lt;MainEditor> at src/components/mainEditor.vue
       &lt;TransitionGroup>
         &lt;Lsnextquestioneditor> at src/App.vue
           &lt;Root> vue.esm.js:628
TypeError: &quot;this.$store.state.currentQuestionI10N[this.$store.state.activeLanguage] is undefined&quot;
    get mainEditor.vue:218
    VueJS 4
    render mainEditor.vue:88
    VueJS 7
vue.esm.js:1897
DenisChenu

DenisChenu

2020-04-16 16:39

developer   ~57180

admin/questioneditor/sa/saveQuestionData/gid/189/sid/994978 return a success ...

Maybe start by it

ollehar

ollehar

2020-04-16 16:40

administrator   ~57181

Cannot reproduce your editor bug. Clear assets?

ollehar

ollehar

2020-04-16 16:40

administrator   ~57182

And browser cache... And try with debug = 2 (don't use asset manager cache).

DenisChenu

DenisChenu

2020-04-16 16:40

developer   ~57183

With my DB ?

DenisChenu

DenisChenu

2020-04-16 16:43

developer   ~57185

The editor bug is due to a broken DB .....

Just delete fr and de question in you DB for sample survey ....

ollehar

ollehar

2020-04-16 16:44

administrator   ~57186

No. Why try with a corrupt db? How did it get corrupt in the first place?

DenisChenu

DenisChenu

2020-04-16 16:44

developer   ~57187

I update title to

16025: Broken survey language (lack of questionl10ns) unfixable

ollehar

ollehar

2020-04-16 16:45

administrator   ~57188

OK, sure, but that's low priority. We have a bunch of blocking issue, this is fine-tuning.

DenisChenu

DenisChenu

2020-05-13 09:09

developer   ~57727

No time, and seems there are more possibility than DB export …

Issue History

Date Modified Username Field Change
2020-03-24 10:18 DenisChenu New Issue
2020-03-24 10:18 DenisChenu Status new => assigned
2020-03-24 10:18 DenisChenu Assigned To => p_teichmann
2020-03-24 10:18 DenisChenu File Added: PHP notice.html
2020-03-24 10:18 DenisChenu File Added: Capture d’écran du 2020-03-24 10-16-24.png
2020-03-24 10:24 DenisChenu Summary Potential PHP Notice with debug = 2 => Broken survey after language changer on home page
2020-03-24 10:24 DenisChenu File Added: Peek debug0.gif
2020-03-24 10:24 DenisChenu File Added: Peek debug2.gif
2020-03-24 10:28 DenisChenu Assigned To p_teichmann =>
2020-03-24 10:28 DenisChenu Status assigned => new
2020-03-24 10:28 DenisChenu Note Added: 56744
2020-03-24 10:30 DenisChenu Note Added: 56745
2020-03-24 10:30 DenisChenu Assigned To => cdorin
2020-03-24 10:30 DenisChenu Status new => assigned
2020-03-24 10:31 DenisChenu Note Added: 56746
2020-04-01 17:23 cdorin Assigned To cdorin =>
2020-04-01 17:23 cdorin Priority none => high
2020-04-01 17:23 cdorin Status assigned => confirmed
2020-04-01 17:38 DenisChenu Note Added: 56874
2020-04-16 12:02 ollehar Note Added: 57140
2020-04-16 12:26 ollehar Note Added: 57142
2020-04-16 13:13 ollehar Assigned To => ollehar
2020-04-16 13:13 ollehar Status confirmed => feedback
2020-04-16 13:13 ollehar Note Added: 57145
2020-04-16 15:06 DenisChenu Note Added: 57161
2020-04-16 15:06 DenisChenu Status feedback => assigned
2020-04-16 15:13 DenisChenu File Added: Peek 16-04-2020 15-12.gif
2020-04-16 15:13 DenisChenu Note Added: 57162
2020-04-16 15:42 ollehar Note Added: 57163
2020-04-16 16:03 DenisChenu File Added: PHP notice-2.html
2020-04-16 16:03 DenisChenu Note Added: 57165
2020-04-16 16:08 ollehar Note Added: 57166
2020-04-16 16:16 DenisChenu File Added: ls_master.sql.zip
2020-04-16 16:16 DenisChenu Note Added: 57168
2020-04-16 16:16 DenisChenu Summary Broken survey after language changer on home page => Broken survey language (lack of questionl10ns) unfixable
2020-04-16 16:17 DenisChenu Note Edited: 57168 View Revisions
2020-04-16 16:20 ollehar Note Added: 57169
2020-04-16 16:21 ollehar Note Added: 57170
2020-04-16 16:27 ollehar Note Added: 57173
2020-04-16 16:29 DenisChenu File Added: Peek 16-04-2020 16-29.gif
2020-04-16 16:29 DenisChenu Note Added: 57174
2020-04-16 16:30 DenisChenu Note Edited: 57174 View Revisions
2020-04-16 16:31 DenisChenu Note Added: 57175
2020-04-16 16:32 ollehar Note Added: 57176
2020-04-16 16:37 DenisChenu Note Added: 57179
2020-04-16 16:39 DenisChenu File Added: Capture d’écran du 2020-04-16 16-38-59.png
2020-04-16 16:39 DenisChenu Note Added: 57180
2020-04-16 16:40 ollehar Note Added: 57181
2020-04-16 16:40 ollehar Note Added: 57182
2020-04-16 16:40 DenisChenu Note Added: 57183
2020-04-16 16:43 DenisChenu Note Added: 57185
2020-04-16 16:44 ollehar Note Added: 57186
2020-04-16 16:44 DenisChenu Note Added: 57187
2020-04-16 16:45 ollehar Note Added: 57188
2020-04-16 16:46 ollehar Steps to Reproduce Updated View Revisions
2020-04-19 11:56 DenisChenu Assigned To ollehar => DenisChenu
2020-05-13 09:08 DenisChenu Relationship added related to 16265
2020-05-13 09:09 DenisChenu Assigned To DenisChenu =>
2020-05-13 09:09 DenisChenu Status assigned => new
2020-05-13 09:09 DenisChenu Note Added: 57727