View Issue Details

This bug affects 2 person(s).
 12
IDProjectCategoryView StatusLast Update
17897Bug reportsStatisticspublic2022-12-01 10:01
Reporteratisne Assigned Togabrieljenik  
PrioritynoneSeveritypartial_block 
Status ready for mergeResolutionfixed 
Product Version5.2.x 
Summary17897: Build of statistics fails with DivisionByZero
Description

The build of the statistics of a survey with a conditional question that is not answered fails with a DivisionByZero error (please see error stack in attachment).

Steps To Reproduce

Steps to reproduce

1- Create a new survey
2- Add a question of type Yes/No
3- Add a question of type Long free text
4- Add a condition on this last question: the first Yes/No question = 'Yes'
5- Activate the survey
6- Run the survey
7- Answer 'No' to the Yes/No question
8- Send results
9- Go to 'Statistics'
10- In 'General filters > Data selection', select the option 'Subtotals based on displayed questions'
11- In 'Response filters', select the question group
12- Click on 'View statistics'

Expected result

See the statistics

Actual result

500 : Erreur interne au serveur
Division by zero

TagsNo tags attached.
Bug heat12
Complete LimeSurvey version number (& build)5.2.11+220124
I will donate to the project if issue is resolvedNo
Browser
Database type & versionpgsql 13.5
Server OS (if known)docker with image php:8.0-apache
Webserver software & version (if known)apache 2.4.51
PHP Version8.0.13

Users monitoring this issue

User List baptisted76

Activities

atisne

atisne

2022-02-16 15:25

reporter  

DivisionByZeroError.html (20,300 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>DivisionByZeroError</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>DivisionByZeroError</h1>

	<p class="message">
		Division by zero	</p>

	<div class="source">
		<p class="file">/var/www/html/application/helpers/admin/statistics_helper.php(2610)</p>
		<div class="code"><pre><span class="ln">2598</span>             if (isset($_POST[&#039;noncompleted&#039;]) and ($_POST[&#039;noncompleted&#039;] == 1)) {
<span class="ln">2599</span>                 //counter
<span class="ln">2600</span>                 $i = 0;
<span class="ln">2601</span> 
<span class="ln">2602</span>                 while (isset($gdata[$i])) {
<span class="ln">2603</span>                     if (isset($showaggregated_indice_table[$i]) &amp;&amp; $showaggregated_indice_table[$i] == &quot;aggregated&quot;) {
<span class="ln">2604</span>                         // do nothing, we don&#039;t rewrite aggregated results
<span class="ln">2605</span>                         // or at least I don&#039;t know how !!! (lemeur)
<span class="ln">2606</span>                     } else {
<span class="ln">2607</span>                         //we want to have some &quot;real&quot; data here
<span class="ln">2608</span>                         if ($gdata[$i] != &quot;N/A&quot;) {
<span class="ln">2609</span>                             //calculate percentage
<span class="error"><span class="ln error-ln">2610</span>                             $gdata[$i] = ($grawdata[$i] / $TotalCompleted) * 100;
</span><span class="ln">2611</span>                         }
<span class="ln">2612</span>                     }
<span class="ln">2613</span> 
<span class="ln">2614</span>                     //increase counter
<span class="ln">2615</span>                     $i++;
<span class="ln">2616</span>                 }    //end while (data available)
<span class="ln">2617</span>             }    //end if -&gt; noncompleted checked
<span class="ln">2618</span> 
<span class="ln">2619</span>             //noncompleted is NOT checked
<span class="ln">2620</span>             else {
<span class="ln">2621</span>                 //calculate total number of incompleted records
<span class="ln">2622</span>                 $TotalIncomplete = max(($results - $TotalCompleted), 0); // don&#039;t show negative number
</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;/var/www/html/application/helpers/admin/statistics_helper.php(3713): <strong>statistics_helper</strong>-><strong>displayResults</strong>()				</div>

				<div class="code"><pre><span class="ln">3708</span>                 $outputs = $this-&gt;buildOutputList($rt, $language, $surveyid, $outputType, $sql, $sLanguageCode);
<span class="ln">3709</span>                 $sOutputHTML .= $outputs[&#039;statisticsoutput&#039;];
<span class="ln">3710</span>                 //2. Collect and Display results #######################################################################
<span class="ln">3711</span>                 if (isset($outputs[&#039;alist&#039;]) &amp;&amp; $outputs[&#039;alist&#039;]) {
<span class="ln">3712</span>                     //Make sure there really is an answerlist, and if so:
<span class="error"><span class="ln error-ln">3713</span>                     $display = $this-&gt;displayResults($outputs, $results, $rt, $outputType, $surveyid, $sql, $usegraph, $browse, $sLanguageCode);
</span><span class="ln">3714</span>                     $sOutputHTML .= $display[&#039;statisticsoutput&#039;];
<span class="ln">3715</span>                     $aStatisticsData = array_merge($aStatisticsData, $display[&#039;astatdata&#039;]);
<span class="ln">3716</span>                 }    //end if -&gt; collect and display results
<span class="ln">3717</span> 
<span class="ln">3718</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;/var/www/html/application/controllers/admin/statistics.php(469): <strong>statistics_helper</strong>-><strong>generate_html_chartjs_statistics</strong>()				</div>

				<div class="code"><pre><span class="ln">464</span>         //Show Summary results
<span class="ln">465</span>         if (isset($summary) &amp;&amp; $summary) {
<span class="ln">466</span>             $outputType = Yii::app()-&gt;request-&gt;getPost(&#039;outputtype&#039;, &#039;html&#039;);
<span class="ln">467</span>             switch ($outputType) {
<span class="ln">468</span>                 case &#039;html&#039;:
<span class="error"><span class="ln error-ln">469</span>                     $statisticsoutput .= $helper-&gt;generate_html_chartjs_statistics($surveyid, $summary, $summary, $usegraph, $outputType, &#039;DD&#039;, $statlang);
</span><span class="ln">470</span>                     break;
<span class="ln">471</span>                 case &#039;pdf&#039;:
<span class="ln">472</span>                     $helper-&gt;generate_statistics($surveyid, $summary, $summary, $usegraph, $outputType, &#039;D&#039;, $statlang);
<span class="ln">473</span>                     exit;
<span class="ln">474</span>                     break;
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#2			</td>
			<td class="content">
				<div class="trace-file">
										&nbsp;unknown(0): <strong>statistics</strong>-><strong>run</strong>()				</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;/var/www/html/framework/web/actions/CAction.php(115): <strong>ReflectionMethod</strong>-><strong>invokeArgs</strong>()				</div>

				<div class="code"><pre><span class="ln">110</span>             elseif($param-&gt;isDefaultValueAvailable())
<span class="ln">111</span>                 $ps[]=$param-&gt;getDefaultValue();
<span class="ln">112</span>             else
<span class="ln">113</span>                 return false;
<span class="ln">114</span>         }
<span class="error"><span class="ln error-ln">115</span>         $method-&gt;invokeArgs($object,$ps);
</span><span class="ln">116</span>         return true;
<span class="ln">117</span>     }
<span class="ln">118</span> }
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#4			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/html/application/core/Survey_Common_Action.php(86): <strong>CAction</strong>-><strong>runWithParamsInternal</strong>()				</div>

				<div class="code"><pre><span class="ln">81</span>             $oMethod = new ReflectionMethod($this, $sDefault);
<span class="ln">82</span>         }
<span class="ln">83</span> 
<span class="ln">84</span>         // We&#039;re all good to go, let&#039;s execute it
<span class="ln">85</span>         // runWithParamsInternal would automatically get the parameters of the method and populate them as required with the params
<span class="error"><span class="ln error-ln">86</span>         return parent::runWithParamsInternal($this, $oMethod, $params);
</span><span class="ln">87</span>     }
<span class="ln">88</span> 
<span class="ln">89</span>     /**
<span class="ln">90</span>      * Some functions have different parameters, which are just an alias of the
<span class="ln">91</span>      * usual parameters we&#039;re getting in the url. This function just populates
</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;/var/www/html/framework/web/CController.php(308): <strong>Survey_Common_Action</strong>-><strong>runWithParams</strong>()				</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">
				#6			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/html/framework/web/CController.php(286): <strong>CController</strong>-><strong>runAction</strong>()				</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">
				#7			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/html/framework/web/CController.php(265): <strong>CController</strong>-><strong>runActionWithFilters</strong>()				</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 app collapsed">
			<td class="number">
				#8			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/html/application/controllers/AdminController.php(202): <strong>CController</strong>-><strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">197</span>         }
<span class="ln">198</span> 
<span class="ln">199</span>         $this-&gt;runModuleController($action);
<span class="ln">200</span> 
<span class="ln">201</span> 
<span class="error"><span class="ln error-ln">202</span>         return parent::run($action);
</span><span class="ln">203</span>     }
<span class="ln">204</span> 
<span class="ln">205</span>     /**
<span class="ln">206</span>      * Starting with LS4, 3rd party developper can extends any of the LimeSurve controllers.
<span class="ln">207</span>      *
</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;/var/www/html/framework/web/CWebApplication.php(282): <strong>AdminController</strong>-><strong>run</strong>()				</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">
				#10			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/html/framework/web/CWebApplication.php(141): <strong>CWebApplication</strong>-><strong>runController</strong>()				</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">
				#11			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/html/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">
				#12			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/html/index.php(192): <strong>CApplication</strong>-><strong>run</strong>()				</div>

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

	<div class="version">
		2022-02-16 10:47:51 Apache/2.4.51 (Debian) <a href="http://www.yiiframework.com/">Yii Framework</a>/1.1.24-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>
DivisionByZeroError.html (20,300 bytes)   
Mazi

Mazi

2022-10-28 16:42

updater   ~72472

We are facing the same issue with the attached survey. Simply imoort the LSA file and run the simpel stats.
There is a single choice question which shows conditionally. Sounds like the exact same problem.

Mazi

Mazi

2022-10-28 16:43

updater   ~72473

@ollehar, @c_schmitz: This one is currently assigned to galads. But I think this user is not active anymore. Can you please assign it to @gabrieljenik or anyone else?

gabrieljenik

gabrieljenik

2022-10-31 13:43

manager   ~72480

Haven't seen this. I will grab it.

Mazi

Mazi

2022-10-31 15:20

updater   ~72489

@gabrieljenik: Only happens in very special cases as outlined above. There needs to be a question with conditions and that question may not have received answers yet. My attached survey should show it.

gabrieljenik

gabrieljenik

2022-11-07 14:45

manager   ~72615

Master PR: https://github.com/LimeSurvey/LimeSurvey/pull/2704

gabrieljenik

gabrieljenik

2022-11-16 14:40

manager   ~72771

@Mazi when testing couldn't reproduce this exactly as you mentioned.
Can you please test and give your comments?

Mazi

Mazi

2022-11-20 16:39

updater   ~72825

@gabrieljenik, simply import the adjusted survey, go to the statistics feature, select to include all answers and then show statistics. You then get the error shown at the attached screenshot.

image.png (12,344 bytes)   
image.png (12,344 bytes)   
Mazi

Mazi

2022-11-25 16:55

updater   ~72902

I can confirm that the fix solves the problem. With it we can call the statistics just fine. Please include the fix at the next release.

Mazi

Mazi

2022-11-29 13:08

updater   ~72929

Can we add the fix to the next release?

gabrieljenik

gabrieljenik

2022-12-01 10:01

manager   ~72954

Fix committed to master branch: http://bugs.limesurvey.org/plugin.php?page=Source/view&amp;id=34063

Related Changesets

LimeSurvey: master 899cc67a

2022-12-01 10:01:19

gabrieljenik


Committer: GitHub Details Diff
Fixed issue 17897: Build of statistics fails with DivisionByZero (#2704)

Co-authored-by: lapiudevgit <devgit@lapiu.biz>
Affected Issues
17897
mod - application/helpers/admin/statistics_helper.php Diff File

Issue History

Date Modified Username Field Change
2022-02-16 15:25 atisne New Issue
2022-02-16 15:25 atisne File Added: DivisionByZeroError.html
2022-02-16 15:25 atisne File Added: survey_archive_185759.lsa
2022-02-17 09:42 galads Assigned To => galads
2022-02-17 09:42 galads Status new => acknowledged
2022-06-23 09:11 baptisted76 Issue Monitored: baptisted76
2022-06-23 09:11 baptisted76 Bug heat 0 => 2
2022-10-28 16:42 Mazi Note Added: 72472
2022-10-28 16:42 Mazi File Added: survey_archive_874591.lsa
2022-10-28 16:42 Mazi Bug heat 2 => 4
2022-10-28 16:42 Mazi Bug heat 4 => 10
2022-10-28 16:43 Mazi Note Added: 72473
2022-10-31 13:43 gabrieljenik Status acknowledged => confirmed
2022-10-31 13:43 gabrieljenik Note Added: 72480
2022-10-31 13:43 gabrieljenik Bug heat 10 => 12
2022-10-31 13:43 gabrieljenik Assigned To galads => gabrieljenik
2022-10-31 15:20 Mazi Note Added: 72489
2022-11-03 20:23 gabrieljenik Status confirmed => assigned
2022-11-07 14:45 gabrieljenik Status assigned => ready for code review
2022-11-07 14:45 gabrieljenik Note Added: 72615
2022-11-07 14:45 gabrieljenik Assigned To gabrieljenik => DenisChenu
2022-11-07 15:39 DenisChenu Assigned To DenisChenu =>
2022-11-07 15:39 DenisChenu Status ready for code review => ready for testing
2022-11-16 14:40 gabrieljenik Note Added: 72771
2022-11-20 16:39 Mazi Note Added: 72825
2022-11-20 16:39 Mazi File Added: image.png
2022-11-25 16:55 Mazi Note Added: 72902
2022-11-25 17:06 gabrieljenik Assigned To => ollehar
2022-11-25 17:06 gabrieljenik Status ready for testing => ready for merge
2022-11-29 13:08 Mazi Note Added: 72929
2022-12-01 10:01 gabrieljenik Changeset attached => LimeSurvey master 899cc67a
2022-12-01 10:01 gabrieljenik Note Added: 72954
2022-12-01 10:01 gabrieljenik Assigned To ollehar => gabrieljenik
2022-12-01 10:01 gabrieljenik Resolution open => fixed