View Issue Details

This bug affects 1 person(s).
 8
IDProjectCategoryView StatusLast Update
09595Bug reportsConditionspublic2015-05-07 14:55
Reportergab79 Assigned ToDenisChenu  
PrioritynormalSeveritypartial_block 
Status closedResolutionfixed 
Fixed in Version2.06+ 
Summary09595: PHP error when deleting a condition
Description

PHP errors are shown when deleting a condition

Invalid argument supplied for foreach()

/var/www/html/limesurvey-dev/application/helpers/expressions/em_manager_helper.php(772)

(Error message is attached)

In spite of the warning the condition is actually indeed.

Additional Information

To reproduce

  1. Create a new survey
  2. create a new group and two question (q1 and q2), let the first be yes/no
  3. using condition editor add a condition for q2 "1: yes or no? (qid2) equals Yes (Y)"
  4. return to the question
  5. go edit conditions
  6. click on the delete icon for the condition
TagsNo tags attached.
Attached Files
PHP warning.html (24,216 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 warning</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 warning</h1>

	<p class="message">
		Invalid argument supplied for foreach()	</p>

	<div class="source">
		<p class="file">/var/www/html/limesurvey-dev/application/helpers/expressions/em_manager_helper.php(772)</p>
		<div class="code"><pre><span class="ln">760</span> 
<span class="ln">761</span>             if (is_null($surveyId))
<span class="ln">762</span>             {
<span class="ln">763</span>                 $sQuery='SELECT sid FROM {{surveys}}';
<span class="ln">764</span>                 $aSurveyIDs = Yii::app()-&gt;db-&gt;createCommand($sQuery)-&gt;queryColumn();
<span class="ln">765</span>             }
<span class="ln">766</span>             else{
<span class="ln">767</span>                 $aSurveyIDs=array($surveyId);
<span class="ln">768</span>             }
<span class="ln">769</span>             foreach ($aSurveyIDs as $surveyId )
<span class="ln">770</span>             {
<span class="ln">771</span>                 $releqns = self::ConvertConditionsToRelevance($surveyId,$qid);
<span class="error"><span class="ln error-ln">772</span>                 foreach ($releqns as $key=&gt;$value)
</span><span class="ln">773</span>                 {
<span class="ln">774</span>                     $sQuery = "UPDATE {{questions}} SET relevance=".Yii::app()-&gt;db-&gt;quoteValue($value)." WHERE qid=".$key;
<span class="ln">775</span>                     Yii::app()-&gt;db-&gt;createCommand($sQuery)-&gt;execute();
<span class="ln">776</span>                 }
<span class="ln">777</span>             }
<span class="ln">778</span> 
<span class="ln">779</span>             LimeExpressionManager::SetDirtyFlag();
<span class="ln">780</span>         }
<span class="ln">781</span> 
<span class="ln">782</span>         /**
<span class="ln">783</span>         * This reverses UpgradeConditionsToRelevance().  It removes Relevance for questions that have Condition
<span class="ln">784</span>         * @param &lt;integer&gt; $surveyId
</pre></div>	</div>

	<div class="traces">
		<h2>Stack Trace</h2>
				<table style="width:100%;">
						<tbody><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/limesurvey-dev/application/controllers/admin/conditionsaction.php(368): <strong>LimeExpressionManager</strong>::<strong>UpgradeConditionsToRelevance</strong>(null, "3")				</div>

				<div class="code"><pre><span class="ln">363</span>         // DELETE ENTRY IF THIS IS DELETE
<span class="ln">364</span>         if (isset($p_subaction) &amp;&amp; $p_subaction == "delete")
<span class="ln">365</span>         {
<span class="ln">366</span>             LimeExpressionManager::RevertUpgradeConditionsToRelevance(NULL,$qid);   // in case deleted the last condition
<span class="ln">367</span>             $result = Condition::model()-&gt;deleteRecords(array('cid'=&gt;$p_cid));
<span class="error"><span class="ln error-ln">368</span>             LimeExpressionManager::UpgradeConditionsToRelevance(NULL,$qid);
</span><span class="ln">369</span>         }
<span class="ln">370</span> 
<span class="ln">371</span>         // DELETE ALL CONDITIONS IN THIS SCENARIO
<span class="ln">372</span>         if (isset($p_subaction) &amp;&amp; $p_subaction == "deletescenario")
<span class="ln">373</span>         {
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#1			</td>
			<td class="content">
				<div class="trace-file">
										&nbsp;unknown(0): <strong>conditionsaction</strong>-&gt;<strong>index</strong>("editconditionsform", "861587", "2", "3")				</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;/var/www/html/limesurvey-dev/framework/web/actions/CAction.php(108): <strong>ReflectionMethod</strong>-&gt;<strong>invokeArgs</strong>(conditionsaction, array("editconditionsform", "861587", "2", "3"))				</div>

				<div class="code"><pre><span class="ln">103</span>             elseif($param-&gt;isDefaultValueAvailable())
<span class="ln">104</span>                 $ps[]=$param-&gt;getDefaultValue();
<span class="ln">105</span>             else
<span class="ln">106</span>                 return false;
<span class="ln">107</span>         }
<span class="error"><span class="ln error-ln">108</span>         $method-&gt;invokeArgs($object,$ps);
</span><span class="ln">109</span>         return true;
<span class="ln">110</span>     }
<span class="ln">111</span> }
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#3			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/html/limesurvey-dev/application/core/Survey_Common_Action.php(99): <strong>CAction</strong>-&gt;<strong>runWithParamsInternal</strong>(conditionsaction,
 ReflectionMethod, array("subaction" =&gt; "editconditionsform", 
"surveyid" =&gt; "861587", "gid" =&gt; "2", "qid" =&gt; "3", ...))				</div>

				<div class="code"><pre><span class="ln">094</span>             $oMethod = new ReflectionMethod($this, $sDefault);
<span class="ln">095</span>         }
<span class="ln">096</span> 
<span class="ln">097</span>         // We're all good to go, let's execute it
<span class="ln">098</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">099</span>         return parent::runWithParamsInternal($this, $oMethod, $params);
</span><span class="ln">100</span>     }
<span class="ln">101</span> 
<span class="ln">102</span>     /**
<span class="ln">103</span>     * Some functions have different parameters, which are just an alias of the
<span class="ln">104</span>     * usual parameters we're getting in the url. This function just populates
</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;/var/www/html/limesurvey-dev/framework/web/CController.php(308): <strong>Survey_Common_Action</strong>-&gt;<strong>runWithParams</strong>(array("subaction" =&gt; "editconditionsform", "surveyid" =&gt; "861587", "gid" =&gt; "2", "qid" =&gt; "3", ...))				</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;/var/www/html/limesurvey-dev/framework/web/CController.php(286): <strong>CController</strong>-&gt;<strong>runAction</strong>(conditionsaction)				</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;/var/www/html/limesurvey-dev/framework/web/CController.php(265): <strong>CController</strong>-&gt;<strong>runActionWithFilters</strong>(conditionsaction, 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 app expanded">
			<td class="number">
				#7			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/html/limesurvey-dev/application/controllers/AdminController.php(169): <strong>CController</strong>-&gt;<strong>run</strong>("conditions")				</div>

				<div class="code"><pre><span class="ln">164</span>                     $this-&gt;redirect(array('/admin/authentication/sa/login'));
<span class="ln">165</span>                 }
<span class="ln">166</span>                 
<span class="ln">167</span>             }
<span class="ln">168</span> 
<span class="error"><span class="ln error-ln">169</span>             return parent::run($action);
</span><span class="ln">170</span>     }
<span class="ln">171</span> 
<span class="ln">172</span>     /**
<span class="ln">173</span>     * Routes all the actions to their respective places
<span class="ln">174</span>     *
</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;/var/www/html/limesurvey-dev/framework/web/CWebApplication.php(282): <strong>AdminController</strong>-&gt;<strong>run</strong>("conditions")				</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('yii','Unable to resolve the request "{route}".',
<span class="ln">287</span>                 array('{route}'=&gt;$route===''?$this-&gt;defaultController:$route)));
</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/limesurvey-dev/framework/web/CWebApplication.php(141): <strong>CWebApplication</strong>-&gt;<strong>runController</strong>("admin/conditions/sa/index")				</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">
				#10			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/var/www/html/limesurvey-dev/framework/base/CApplication.php(180): <strong>CWebApplication</strong>-&gt;<strong>processRequest</strong>()				</div>

				<div class="code"><pre><span class="ln">175</span>     public function run()
<span class="ln">176</span>     {
<span class="ln">177</span>         if($this-&gt;hasEventHandler('onBeginRequest'))
<span class="ln">178</span>             $this-&gt;onBeginRequest(new CEvent($this));
<span class="ln">179</span>         register_shutdown_function(array($this,'end'),0,false);
<span class="error"><span class="ln error-ln">180</span>         $this-&gt;processRequest();
</span><span class="ln">181</span>         if($this-&gt;hasEventHandler('onEndRequest'))
<span class="ln">182</span>             $this-&gt;onEndRequest(new CEvent($this));
<span class="ln">183</span>     }
<span class="ln">184</span> 
<span class="ln">185</span>     /**
</pre></div>			</td>
		</tr>
						<tr class="trace app 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/limesurvey-dev/index.php(200): <strong>CApplication</strong>-&gt;<strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">195</span>         die (sprintf('%s should be writable by the webserver (755 or 775).', $runtimePath));
<span class="ln">196</span>     }
<span class="ln">197</span> }
<span class="ln">198</span> 
<span class="ln">199</span> 
<span class="error"><span class="ln error-ln">200</span> Yii::createApplication('LSYii_Application', $config)-&gt;run();
</span><span class="ln">201</span> 
<span class="ln">202</span> /* End of file index.php */
<span class="ln">203</span> /* Location: ./index.php */
</pre></div>			</td>
		</tr>
				</tbody></table>
	</div>

	<div class="version">
		2015-04-02 14:17:54 Apache/2.2.15 (CentOS) <a href="http://www.yiiframework.com/">Yii Framework</a>/1.1.15	</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>



<script type="text/javascript">
/*<![CDATA[*/
if(typeof(console)=='object')
{
	console.group("Application Log");
	console.log("[14:17:54.557][trace][system.db.ar.CActiveRecord] Plugin.findAllByAttributes()");
	console.log("[14:17:54.558][trace][system.db.CDbConnection] Opening DB connection");
	console.log("[14:17:54.567][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `plugins` `t` WHERE `t`.`active`=:yp0. Bound with :yp0=1");
	console.log("[14:17:54.576][trace][system.db.ar.CActiveRecord] SettingGlobal.findAll()");
	console.log("[14:17:54.576][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `settings_global` `t`");
	console.log("[14:17:54.652][trace][system.db.ar.CActiveRecord] Question.find()");
	console.log("[14:17:54.652][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `questions` `t` WHERE qid=:qid LIMIT 1. Bound with :qid=\'3\'");
	console.log("[14:17:54.655][trace][system.db.ar.CActiveRecord] QuestionGroup.find()");
	console.log("[14:17:54.655][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `groups` `t` WHERE gid=:gid LIMIT 1. Bound with :gid=\'2\'");
	console.log("[14:17:54.657][trace][system.db.ar.CActiveRecord] Survey.findByPk()");
	console.log("[14:17:54.657][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `surveys` `t` WHERE `t`.`sid`=861587 LIMIT 1");
	console.log("[14:17:54.672][trace][system.db.CDbCommand] Querying SQL: SELECT DISTINCT c.*, q.sid, q.type\n                FROM conditions AS c\n                LEFT JOIN questions q ON c.cqid=q.qid\n                LEFT JOIN questions qa ON c.qid=qa.qid\n                WHERE  c.qid = 3 AND  1=1\n                UNION\n                SELECT DISTINCT c.*, q.sid, NULL AS TYPE\n                FROM conditions AS c\n                LEFT JOIN questions q ON c.cqid=q.qid\n                LEFT JOIN questions qa ON c.qid=qa.qid\n                WHERE  c.qid = 3 AND  c.cqid = 0 order by qid, sid, scenario, cqid, cfieldname, value");
	console.log("[14:17:54.673][trace][system.db.CDbCommand] Querying SQL: UPDATE questions SET relevance=1 WHERE qid=3");
	console.log("[14:17:54.675][trace][system.db.ar.CActiveRecord] Condition.deleteAll()");
	console.log("[14:17:54.675][trace][system.db.CDbCommand] Executing SQL: DELETE FROM `conditions` WHERE cid=\'3\'");
	console.log("[14:17:54.676][trace][system.db.CDbCommand] Querying SQL: SELECT sid FROM surveys");
	console.log("[14:17:54.677][trace][system.db.ar.CActiveRecord] Question.findAll()");
	console.log("[14:17:54.677][trace][system.db.CDbCommand] Querying SQL: SELECT DISTINCT qid FROM `questions` `t` WHERE qid=:qid and parent_qid=0 GROUP BY qid. Bound with :qid=\'3\'");
	console.log("[14:17:54.679][trace][system.db.ar.CActiveRecord] Question.find()");
	console.log("[14:17:54.679][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `questions` `t` WHERE qid=:qid LIMIT 1. Bound with :qid=3");
	console.log("[14:17:54.687][trace][system.db.ar.CActiveRecord] QuestionAttribute.findAll()");
	console.log("[14:17:54.688][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `question_attributes` `t` WHERE qid=:qid. Bound with :qid=3");
	console.log("[14:17:54.688][trace][system.db.ar.CActiveRecord] Question.findAll()");
	console.log("[14:17:54.688][trace][system.db.CDbCommand] Querying SQL: SELECT DISTINCT qid FROM `questions` `t` WHERE qid=:qid and parent_qid=0 GROUP BY qid. Bound with :qid=\'3\'");
	console.log("[14:17:54.689][trace][system.db.ar.CActiveRecord] Question.find()");
	console.log("[14:17:54.689][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `questions` `t` WHERE qid=:qid LIMIT 1. Bound with :qid=3");
	console.log("[14:17:54.690][trace][system.db.ar.CActiveRecord] QuestionAttribute.findAll()");
	console.log("[14:17:54.690][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `question_attributes` `t` WHERE qid=:qid. Bound with :qid=3");
	console.log("[14:17:54.690][trace][system.db.ar.CActiveRecord] Question.findAll()");
	console.log("[14:17:54.690][trace][system.db.CDbCommand] Querying SQL: SELECT DISTINCT qid FROM `questions` `t` WHERE qid=:qid and parent_qid=0 GROUP BY qid. Bound with :qid=\'3\'");
	console.log("[14:17:54.691][trace][system.db.ar.CActiveRecord] Question.find()");
	console.log("[14:17:54.691][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `questions` `t` WHERE qid=:qid LIMIT 1. Bound with :qid=3");
	console.log("[14:17:54.692][trace][system.db.ar.CActiveRecord] QuestionAttribute.findAll()");
	console.log("[14:17:54.692][trace][system.db.CDbCommand] Querying SQL: SELECT * FROM `question_attributes` `t` WHERE qid=:qid. Bound with :qid=3");
	console.log("[14:17:54.693][trace][system.db.CDbCommand] Querying SQL: SELECT sid FROM surveys");
	console.log("[14:17:54.693][trace][system.db.CDbCommand] Querying SQL: SELECT DISTINCT c.*, q.sid, q.type\n                FROM conditions AS c\n                LEFT JOIN questions q ON c.cqid=q.qid\n                LEFT JOIN questions qa ON c.qid=qa.qid\n                WHERE  c.qid = 3 AND  1=1\n                UNION\n                SELECT DISTINCT c.*, q.sid, NULL AS TYPE\n                FROM conditions AS c\n                LEFT JOIN questions q ON c.cqid=q.qid\n                LEFT JOIN questions qa ON c.qid=qa.qid\n                WHERE  c.qid = 3 AND  c.cqid = 0 order by qid, sid, scenario, cqid, cfieldname, value");
	console.groupEnd();
}
/*]]>*/
</script></body></html>
PHP warning.html (24,216 bytes)   
Bug heat8
Complete LimeSurvey version number (& build)
I will donate to the project if issue is resolved
Browser
Database type & version
Server OS (if known)
Webserver software & version (if known)
PHP Version

Users monitoring this issue

mfaber

Activities

DenisChenu

DenisChenu

2015-04-04 16:57

developer   ~31946

https://github.com/LimeSurvey/LimeSurvey/pull/306

Think the fix fix the issue. But maybe : we need to find why this issue happen ;)

Some $_SESSION still here ?

gab79

gab79

2015-04-04 21:27

reporter   ~31947

I wrote it the same day I filled the bug report and it seems to fix it.
In my tests it happens every time you delete the last condition.

While I was able to reproduce it on three different setups (build 150211 on Centos6 and Centos 7) and from the git clone on Centos6, I doesn't happens on demo.limesurvey.org

DenisChenu

DenisChenu

2015-04-07 09:34

developer   ~31948

Hi,

You need config=2 to reproduce.

I think we don't "reset" EM when we delete condition. We need to delete .

But, i think we reset EM when adding condition (not sure).

gab79

gab79

2015-04-07 10:47

reporter   ~31949

IMHO the point is in /controllers/admin/conditionsaction.php
when deleting a condition we have

LimeExpressionManager::RevertUpgradeConditionsToRelevance(NULL,$qid);
$result = Condition::model()->deleteRecords(array('cid'=>$p_cid));
LimeExpressionManager::UpgradeConditionsToRelevance(NULL,$qid);

however if UpgradeConditionsToRelevance could manage an empty condition set (instead of crashing or skipping it with the fix) RevertUpgradeConditionsToRelevance should be erased and the code will be clear.
To achieve this ConvertConditionsToRelevance should return '1' instead of NULL when there are no conditions... however I don't know the code enough to exclude side effetcs :-)

DenisChenu

DenisChenu

2015-04-07 11:00

developer   ~31950

I think UpgradeConditionsToRelevance must not update relevance if there are no condition. :usnsure:

Then your fix does the trick. If we use ConvertConditionsToRelevance to 1 : then we remove existing expression in Question relevance ... Then removing existing condition if we click on the menu by error ..... :unsure:

Really hard to do exactly what we need.

gab79

gab79

2015-04-07 11:04

reporter   ~31951

I agree with you 100 percent!

DenisChenu

DenisChenu

2015-04-07 16:18

developer   ~31957

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

DenisChenu

DenisChenu

2015-04-07 16:18

developer   ~31958

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

DenisChenu

DenisChenu

2015-04-08 15:39

developer   ~31961

Thanks to Gabriele Mambrini https://github.com/gmambro ;)

c_schmitz

c_schmitz

2015-05-07 14:55

administrator   ~32114

Releasing 2.06RC1

Related Changesets

LimeSurvey: master 021c8aa2

2015-04-02 13:27:38

gab79

Details Diff
Fixed issue 09595: PHP error when deleting a condition Affected Issues
09595
mod - application/helpers/expressions/em_manager_helper.php Diff File

LimeSurvey: 2.06 1932502b

2015-04-07 08:35:36

gab79

Details Diff
Fixed issue 09595: PHP error when deleting a condition Affected Issues
09595
mod - application/helpers/expressions/em_manager_helper.php Diff File

LimeSurvey: 2.06 ccd239ef

2015-04-07 14:17:56

DenisChenu

Details Diff
Merge pull request #307 from gmambro/2.06

Fixed issue 09595: PHP error when deleting a condition
Affected Issues
09595
mod - application/helpers/expressions/em_manager_helper.php Diff File

LimeSurvey: master a8a8c822

2015-04-07 14:18:30

DenisChenu

Details Diff
Merge pull request #306 from gmambro/bug9595

Fixed issue 09595: PHP error when deleting a condition
Affected Issues
09595
mod - application/helpers/expressions/em_manager_helper.php Diff File

Issue History

Date Modified Username Field Change
2015-04-02 14:21 gab79 New Issue
2015-04-02 14:21 gab79 File Added: PHP warning.html
2015-04-02 15:03 Mazi Project Feature requests => Bug reports
2015-04-02 15:06 Mazi Severity feature => partial_block
2015-04-02 17:26 mfaber Issue Monitored: mfaber
2015-04-04 16:57 DenisChenu Note Added: 31946
2015-04-04 21:27 gab79 Note Added: 31947
2015-04-07 09:34 DenisChenu Note Added: 31948
2015-04-07 09:34 DenisChenu Assigned To => DenisChenu
2015-04-07 09:34 DenisChenu Status new => assigned
2015-04-07 10:47 gab79 Note Added: 31949
2015-04-07 11:00 DenisChenu Note Added: 31950
2015-04-07 11:04 gab79 Note Added: 31951
2015-04-07 16:18 gab79 Changeset attached => LimeSurvey 2.06 1932502b
2015-04-07 16:18 DenisChenu Changeset attached => LimeSurvey 2.06 ccd239ef
2015-04-07 16:18 DenisChenu Note Added: 31957
2015-04-07 16:18 DenisChenu Resolution open => fixed
2015-04-07 16:18 gab79 Changeset attached => LimeSurvey master 021c8aa2
2015-04-07 16:18 DenisChenu Changeset attached => LimeSurvey master a8a8c822
2015-04-07 16:18 DenisChenu Note Added: 31958
2015-04-08 15:39 DenisChenu Note Added: 31961
2015-04-08 15:39 DenisChenu Status assigned => resolved
2015-04-08 15:39 DenisChenu Fixed in Version => 2.06+
2015-05-07 14:55 c_schmitz Note Added: 32114
2015-05-07 14:55 c_schmitz Status resolved => closed
2021-08-02 22:23 guest Bug heat 6 => 8