View Issue Details

This bug affects 1 person(s).
 6
IDProjectCategoryView StatusLast Update
17107Bug reportsSurvey takingpublic2021-09-21 15:42
ReporterDenisChenu Assigned Toc_schmitz  
PrioritynoneSeverityminor 
Status acknowledgedResolutionopen 
Product Version3.25.12 
Summary17107: Survey seems without any question when testing (admin user)
DescriptionWhen admin user test survey : he can have an empty survey if debug is not set.

If debug set : ` Undefined index: gid `
Steps To ReproduceImport 3 sample lts survey
Activate
Launch a test
Move to 1st page
Come back to admin page
Save a question (updated or not)
Come back to survey
Move next

See screencast
Additional InformationVery old issue,
No real way to fix the issue BUT we need to show a clean error to user (empty survey is awfull).

TagsNo tags attached.
Bug heat6
Complete LimeSurvey version number (& build)3.25.14
I will donate to the project if issue is resolvedNo
Browsernot relevant
Database type & versionnot relevant
Server OS (if known)not relevant
Webserver software & version (if known)not relevant
PHP Versionnot relevant

Relationships

related to 17216 new Large survey with many questions with conditions very slow to save. 
related to 16867 closedgabrieljenik Randomization happen in survey logic file and in export 
related to 17479 acknowledgedgalads How to change template and survey format temporary from outside 

Users monitoring this issue

User List Mazi

Activities

DenisChenu

DenisChenu

2021-02-18 09:43

developer  

Peek 13-02-2021 10-30.gif (1,279,785 bytes)
Peek 13-02-2021 10-31.gif (681,139 bytes)
PHP notice.html (19,362 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: gid	</p>

	<div class="source">
		<p class="file">/mnt/data/shnoulle/nginx/www/3LTS/application/helpers/SurveyRuntimeHelper.php(1683)</p>
		<div class="code"><pre><span class="ln">1671</span> 
<span class="ln">1672</span>     private function setGroup()
<span class="ln">1673</span>     {
<span class="ln">1674</span>         if (!$this-&gt;previewgrp &amp;&amp; !$this-&gt;previewquestion) {
<span class="ln">1675</span>             if (($this-&gt;bShowEmptyGroup) || !isset($_SESSION[$this-&gt;LEMsessid][&#039;grouplist&#039;])) {
<span class="ln">1676</span>                 $this-&gt;gid              = -1; // Make sure the gid is unused. This will assure that the foreach (fieldarray as ia) has no effect.
<span class="ln">1677</span>                 $this-&gt;groupname        = gT(&quot;Submit your answers&quot;);
<span class="ln">1678</span>                 $this-&gt;groupdescription = gT(&quot;There are no more questions. Please press the &lt;Submit&gt; button to finish this survey.&quot;);
<span class="ln">1679</span>             } else if ($this-&gt;sSurveyMode != &#039;survey&#039;) {
<span class="ln">1680</span>                 if ($this-&gt;sSurveyMode != &#039;group&#039;) {
<span class="ln">1681</span>                     $this-&gt;aStepInfo = LimeExpressionManager::GetStepIndexInfo($this-&gt;aMoveResult[&#039;seq&#039;]);
<span class="ln">1682</span>                 }
<span class="error"><span class="ln error-ln">1683</span>                 $this-&gt;gid              = $this-&gt;aStepInfo[&#039;gid&#039;];
</span><span class="ln">1684</span>                 $this-&gt;groupname        = $this-&gt;aStepInfo[&#039;gname&#039;];
<span class="ln">1685</span>                 $this-&gt;groupdescription = $this-&gt;aStepInfo[&#039;gtext&#039;];
<span class="ln">1686</span>                 $this-&gt;groupname        = LimeExpressionManager::ProcessString($this-&gt;groupname, null, null, 3, 1, false, true, false);
<span class="ln">1687</span>                 $this-&gt;groupdescription = LimeExpressionManager::ProcessString($this-&gt;groupdescription, null, null, 3, 1, false, true, false);
<span class="ln">1688</span>             }
<span class="ln">1689</span>         }
<span class="ln">1690</span>     }
<span class="ln">1691</span> 
<span class="ln">1692</span>     private function fixMaxStep()
<span class="ln">1693</span>     {
<span class="ln">1694</span>         // NOTE: must stay after setPreview  because of ()$this-&gt;sSurveyMode == &#039;group&#039; &amp;&amp; $this-&gt;previewgrp) condition touching step
<span class="ln">1695</span>         if ($_SESSION[$this-&gt;LEMsessid][&#039;step&#039;] &gt; $_SESSION[$this-&gt;LEMsessid][&#039;maxstep&#039;]) {
</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/3LTS/application/helpers/SurveyRuntimeHelper.php(116): <strong>SurveyRuntimeHelper</strong>-><strong>setGroup</strong>()				</div>

				<div class="code"><pre><span class="ln">111</span>             $this-&gt;setNotAnsweredAndNotValidated();
<span class="ln">112</span>         } else {
<span class="ln">113</span>             $this-&gt;setPreview();
<span class="ln">114</span>         }
<span class="ln">115</span>         $this-&gt;moveSubmitIfNeeded();
<span class="error"><span class="ln error-ln">116</span>         $this-&gt;setGroup();
</span><span class="ln">117</span>         $this-&gt;fixMaxStep();
<span class="ln">118</span> 
<span class="ln">119</span>         //******************************************************************************************************
<span class="ln">120</span>         //PRESENT SURVEY
<span class="ln">121</span>         //******************************************************************************************************
</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/3LTS/application/controllers/survey/index.php(595): <strong>SurveyRuntimeHelper</strong>-><strong>run</strong>(&quot;282267&quot;, array(&quot;surveyid&quot; =&gt; &quot;282267&quot;, &quot;thissurvey&quot; =&gt; array(&quot;htmlemail&quot; =&gt; &quot;Y&quot;, &quot;format&quot; =&gt; &quot;G&quot;, &quot;template&quot; =&gt; &quot;vanilla&quot;, &quot;language&quot; =&gt; &quot;en&quot;, ...), &quot;thisstep&quot; =&gt; &quot;1&quot;, &quot;tokensexist&quot; =&gt; 0, ...))				</div>

				<div class="code"><pre><span class="ln">590</span>         unset($redata);
<span class="ln">591</span>         $redata = compact(array_keys(get_defined_vars()));
<span class="ln">592</span>         Yii::import(&#039;application.helpers.SurveyRuntimeHelper&#039;);
<span class="ln">593</span>         $tmp = new SurveyRuntimeHelper();
<span class="ln">594</span>         // try {
<span class="error"><span class="ln error-ln">595</span>             $tmp-&gt;run($surveyid, $redata);
</span><span class="ln">596</span>         // } catch (WrongTemplateVersionException $ex) {
<span class="ln">597</span>         //     echo $ex-&gt;getMessage();
<span class="ln">598</span>         // }
<span class="ln">599</span>     }
<span class="ln">600</span> 
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<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/3LTS/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">
				#3			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/3LTS/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">
				#4			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/3LTS/framework/web/CController.php(308): <strong>CAction</strong>-><strong>runWithParams</strong>(array(&quot;r&quot; =&gt; &quot;survey/index&quot;, &quot;sid&quot; =&gt; &quot;282267&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">
				#5			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/3LTS/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">
				#6			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/3LTS/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">
				#7			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/3LTS/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">
				#8			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/3LTS/framework/web/CWebApplication.php(141): <strong>CWebApplication</strong>-><strong>runController</strong>(&quot;survey/index&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">
				#9			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/3LTS/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 collapsed">
			<td class="number">
				#10			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/mnt/data/shnoulle/nginx/www/3LTS/index.php(194): <strong>CApplication</strong>-><strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">189</span> require_once APPPATH . &#039;core/LSYii_Application&#039; . EXT;
<span class="ln">190</span> 
<span class="ln">191</span> $config = require_once(APPPATH . &#039;config/internal&#039; . EXT);
<span class="ln">192</span> 
<span class="ln">193</span> Yii::$enableIncludePath = false;
<span class="error"><span class="ln error-ln">194</span> Yii::createApplication(&#039;LSYii_Application&#039;, $config)-&gt;run();
</span><span class="ln">195</span> 
<span class="ln">196</span> /* End of file index.php */
<span class="ln">197</span> /* Location: ./index.php */
</pre></div>			</td>
		</tr>
				</table>
	</div>

	<div class="version">
		2021-02-18 08:40:28 nginx/1.18.0 <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.html (19,362 bytes)   
DenisChenu

DenisChenu

2021-02-28 10:16

developer   ~62565

My opinion : **must** show "Your session is outdated"
gabrieljenik

gabrieljenik

2021-04-23 19:39

manager   ~64140

I believe this a conflict on the createFieldmap, which is used on the frontend and admin side.
When going back and forth it probably gets overwriten and corrupted
DenisChenu

DenisChenu

2021-04-23 22:36

developer   ~64143

No : it's Expresssionmanager resetted

https://forums.limesurvey.org/forum/can-i-do-this-with-limesurvey/124120-very-slow-save-times-on-large-survey

https://github.com/LimeSurvey/LimeSurvey/blob/d10b50202a333a909f044c48c50e4e1d56ff3f01/application/controllers/admin/database.php#L869-L871

Issue History

Date Modified Username Field Change
2021-02-18 09:43 DenisChenu New Issue
2021-02-18 09:43 DenisChenu File Added: Peek 13-02-2021 10-30.gif
2021-02-18 09:43 DenisChenu File Added: Peek 13-02-2021 10-31.gif
2021-02-18 09:43 DenisChenu File Added: PHP notice.html
2021-02-18 09:44 DenisChenu Relationship added related to 16867
2021-02-18 10:20 DenisChenu Summary Survey without any question (admin user) => Survey seems without any question when testing (admin user)
2021-02-18 14:09 c_schmitz Assigned To => c_schmitz
2021-02-18 14:09 c_schmitz Status new => acknowledged
2021-02-28 10:16 DenisChenu Note Added: 62565
2021-04-23 19:39 gabrieljenik Note Added: 64140
2021-04-23 22:36 DenisChenu Note Added: 64143
2021-04-23 22:36 DenisChenu Relationship added related to 17216
2021-07-28 17:52 DenisChenu Relationship added related to 17479
2021-09-21 15:42 Mazi Issue Monitored: Mazi
2021-09-21 15:42 Mazi Bug heat 4 => 6