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; } /**