Index: common_functions.php
===================================================================
--- common_functions.php	(revisione 11199)
+++ common_functions.php	(copia locale)
@@ -7668,90 +7668,71 @@
  */
 function bCheckQuestionForAnswer($q, $aFieldnamesInfoInv)
 {
-    $qtype = $_SESSION['fieldmap'][$aFieldnamesInfoInv[$q][0]]['type'];
+    $qtype = @$_SESSION['fieldmap'][$aFieldnamesInfoInv[$q][0]]['type'];
 
-    if ($qtype == 'X')
-    {
-        // boilerplate have no answers
-        return true;
-    }
-    else if ($qtype == 'M' || $qtype == 'P' || $qtype == 'O')
-    {
-        // multiple choice and list with comments question types - just one answer is required and comments are not required
-        $bAnsw = false;
-        foreach($aFieldnamesInfoInv[$q] as $sField)
-        {
-            if(!strstr($sField, 'comment') && isset($_SESSION[$sField]) && trim($_SESSION[$sField])!='')
-            {
-                $bAnsw = true;
-                break;
-            }
-        }
-    }
-    else if ($qtype == 'F' || $qtype == ':' || $qtype == ';' || $qtype == '1' || $qtype == 'C' || $qtype == 'B' || $qtype == 'A' || $qtype == 'E')
-    {
-        // array question types - if filtered only displayed answer are required
-        $bAnsw = true;
+    switch ($qtype) {
+        case 'X':
+            return true;
+        case 'M':
+        case 'P':
+        case 'O':
+            // multiple choice and list with comments question types - just one answer is required and comments are not required
+            foreach($aFieldnamesInfoInv[$q] as $sField)
+                if(!strstr($sField, 'comment') && isset($_SESSION[$sField]) && trim($_SESSION[$sField])!='')
+                    return true;
+            return false;
+        case 'F':
+        case ':':
+        case ';':
+        case '1':
+        case 'C':
+        case 'B':
+        case 'A':
+        case 'E':
+            // array question types - if filtered only displayed answer are required
+            $qattr = getQuestionAttributes(@$_SESSION['fieldmap'][$aFieldnamesInfoInv[$q][0]]['qid'], $qtype);
 
-        $qid=$_SESSION['fieldmap'][$aFieldnamesInfoInv[$q][0]]['qid'];
+            $qcodefilter = @$qattr['array_filter'];
 
-        $gquery = "SELECT * FROM ".db_table_name('question_attributes')." WHERE qid={$qid} AND attribute ='array_filter'";
-        $qresult = db_execute_assoc($gquery); //checked
-        $qrows = $qresult->GetRows();
+            $sgqfilter = '';
 
-        $filter=$qrows[0]['value'];
+            foreach($_SESSION['fieldarray'] as $field)
+                //look for the multiple choice filter
+                if ($field[2] == $qcodefilter && $field[4] == 'M')
+                {
+                    //filter SQG
+                    $sgqfilter = $field[1];
+                    break;
+                }
 
-        //if there is no filter checkall answers
-        if (trim($filter) == '')
-            goto checkall;
-
-
-        foreach($_SESSION['fieldarray'] as $field)
-        {
-            //look for the multiple choice filter
-            if ($field[2] == $filter && $field[4] == 'M')
+            //if filter not found checkall answers
+            if ($sgqfilter == '')
             {
-                //filter SQG
-                $array_filter = $field[1];
-                break;
+                // all answers required
+                foreach($aFieldnamesInfoInv[$q] as $sField)
+                    if(!isset($_SESSION[$sField]) || trim($_SESSION[$sField])=='')
+                        return false;
+                return true;
             }
-        }
-        
-        //if filter not found checkall answers
-        if ($array_filter == '')
-            goto checkall;
 
-        foreach($aFieldnamesInfoInv[$q] as $sField)
-        {
-        //keep only first SQ for multiple scale answer
-        $aid = explode('_',$_SESSION['fieldmap'][$sField]['aid']);
-        $aid = explode('#',$aid[0]);
-
-        if ($_SESSION[$array_filter.$aid[0]]=='Y' && $_SESSION[$sField]=='')
-	        {
-                $bAnsw = false;
-		        break;
-	        }
-        }
-
-    }
-    else
-    {
-        checkall:
-        // all answers required for all other question types
-        $bAnsw = true;
-        foreach($aFieldnamesInfoInv[$q] as $sField)
-        {
-            if(!isset($_SESSION[$sField]) || trim($_SESSION[$sField])=='')
+            foreach($aFieldnamesInfoInv[$q] as $sField)
             {
-                $bAnsw = false;
-                break;
+                //keep only first subquestion code for multiple scale answer
+                $aid = explode('_',$_SESSION['fieldmap'][$sField]['aid']);
+                $aid = explode('#',$aid[0]);
+                //if a checked answer in the multiple choice is not present
+                if ($_SESSION[$sgqfilter.$aid[0]] == 'Y' && $_SESSION[$sField] == '')
+                    return false;    
             }
-        }
-
+            return true;
+        default:
+            // all answers required for all other question types
+            foreach($aFieldnamesInfoInv[$q] as $sField)
+                if(!isset($_SESSION[$sField]) || trim($_SESSION[$sField])=='')
+                    return false;
+            return true;
     }
 
-    return $bAnsw;
 }
 
 /**
