diff --git a/admin/database.php b/admin/database.php index b224f5ba3ba..26cf901a7ca 100644 --- a/admin/database.php +++ b/admin/database.php @@ -386,7 +386,7 @@ function get_max_question_order($gid) $questiontype=$connect->GetOne("SELECT type FROM ".db_table_name('questions')." WHERE qid=$postqid"); $qtproperties=getqtypelist('','array'); - if ($qtproperties[$questiontype]['answerscales']>0) + if ($qtproperties[$questiontype]['answerscales']>0 && $qtproperties[$questiontype]['subqestions']==0) { for ($scale_id=0;$scale_id<$qtproperties[$questiontype]['answerscales'];$scale_id++) { @@ -394,15 +394,41 @@ function get_max_question_order($gid) { if (isset($_POST['defaultanswerscale_'.$scale_id.'_'.$language])) { - Updatedefaultvalues($postqid,$scale_id,'',$language,$_POST['defaultanswerscale_'.$scale_id.'_'.$language],true); + Updatedefaultvalues($postqid,0,$scale_id,'',$language,$_POST['defaultanswerscale_'.$scale_id.'_'.$language],true); } if (isset($_POST['other_'.$scale_id.'_'.$language])) { - Updatedefaultvalues($postqid,$scale_id,'other',$language,$_POST['other_'.$scale_id.'_'.$language],true); + Updatedefaultvalues($postqid,0,$scale_id,'other',$language,$_POST['other_'.$scale_id.'_'.$language],true); } } } } + if ($qtproperties[$questiontype]['subquestions']>0) + { + + foreach ($questlangs as $language) + { + $sqquery = "SELECT * FROM ".db_table_name('questions')." WHERE sid=$surveyid AND gid=$gid AND parent_qid=$postqid and language=".db_quoteall($language)." and scale_id=0 order by question_order"; + $sqresult = db_execute_assoc($sqquery); + $sqrows = $sqresult->GetRows(); + + for ($scale_id=0;$scale_id<$qtproperties[$questiontype]['subquestions'];$scale_id++) + { + foreach ($sqrows as $aSubquestionrow) + { + if (isset($_POST['defaultanswerscale_'.$scale_id.'_'.$language.'_'.$aSubquestionrow['qid']])) + { + Updatedefaultvalues($postqid,$aSubquestionrow['qid'],$scale_id,'',$language,$_POST['defaultanswerscale_'.$scale_id.'_'.$language.'_'.$aSubquestionrow['qid']],true); + } +/* if (isset($_POST['other_'.$scale_id.'_'.$language])) + { + Updatedefaultvalues($postqid,$qid,$scale_id,'other',$language,$_POST['other_'.$scale_id.'_'.$language],true); + } */ + + } + } + } + } } @@ -1400,23 +1426,23 @@ function get_max_question_order($gid) * @param mixed $defaultvalue The default value itself * @param boolean $ispost If defaultvalue is from a $_POST set this to true to properly quote things */ -function Updatedefaultvalues($qid,$scale_id,$specialtype,$language,$defaultvalue,$ispost) +function Updatedefaultvalues($qid,$sqid,$scale_id,$specialtype,$language,$defaultvalue,$ispost) { global $connect; if ($defaultvalue=='') // Remove the default value if it is empty { - $connect->execute("DELETE FROM ".db_table_name('defaultvalues')." WHERE qid=$qid AND specialtype='$specialtype' AND scale_id={$scale_id} AND language='{$language}'"); + $connect->execute("DELETE FROM ".db_table_name('defaultvalues')." WHERE sqid=$sqid AND qid=$qid AND specialtype='$specialtype' AND scale_id={$scale_id} AND language='{$language}'"); } else { - $exists=$connect->GetOne("SELECT qid FROM ".db_table_name('defaultvalues')." WHERE qid=$qid AND specialtype=$specialtype'' AND scale_id={$scale_id} AND language='{$language}'"); + $exists=$connect->GetOne("SELECT qid FROM ".db_table_name('defaultvalues')." WHERE sqid=$sqid AND qid=$qid AND specialtype=$specialtype'' AND scale_id={$scale_id} AND language='{$language}'"); if ($exists===false) { - $connect->execute('INSERT INTO '.db_table_name('defaultvalues')." (defaultvalue,qid,scale_id,language,specialtype) VALUES (".db_quoteall($defaultvalue,$ispost).",{$qid},{$scale_id},'{$language}','{$specialtype}')"); + $connect->execute('INSERT INTO '.db_table_name('defaultvalues')." (defaultvalue,qid,scale_id,language,specialtype,sqid) VALUES (".db_quoteall($defaultvalue,$ispost).",{$qid},{$scale_id},'{$language}','{$specialtype}',{$sqid})"); } else { - $connect->execute('Update '.db_table_name('defaultvalues')." set defaultvalue=".db_quoteall($defaultvalue,$ispost)." WHERE qid=$qid AND specialtype='' AND scale_id={$scale_id} AND language='{$language}'"); + $connect->execute('Update '.db_table_name('defaultvalues')." set defaultvalue=".db_quoteall($defaultvalue,$ispost)." WHERE sqid=$sqid AND qid=$qid AND specialtype='' AND scale_id={$scale_id} AND language='{$language}'"); } } } diff --git a/admin/html.php b/admin/html.php index bd04675f9aa..6924aee9c88 100644 --- a/admin/html.php +++ b/admin/html.php @@ -1713,17 +1713,11 @@ $vasummary .="\n" ."" ."\n" - ."\n" - ."\n"; + ."\n" + ."\n"; if ($activated != 'Y' && $first) { - $vasummary .="\n"; + $vasummary .="\n"; } $vasummary .="" .""; @@ -1750,7 +1744,7 @@ if ($activated == 'Y' ) // if activated { - $vasummary .= " ' + inserthtml='' } else { - inserthtml='' + inserthtml='' } tablerow.after(inserthtml); tablerow.next().find('.btnaddanswer').click(addinput); diff --git a/admin/update/upgrade-mysql.php b/admin/update/upgrade-mysql.php index 42b469671c1..1b34e370858 100644 --- a/admin/update/upgrade-mysql.php +++ b/admin/update/upgrade-mysql.php @@ -351,15 +351,16 @@ function db_upgrade($oldversion) { modify_database("", "ALTER TABLE `prefix_questions` ADD `parent_qid` integer NOT NULL default '0'"); echo $modifyoutput; flush(); modify_database("", "ALTER TABLE `prefix_answers` ADD `scale_id` tinyint NOT NULL default '0'"); echo $modifyoutput; flush(); modify_database("", "ALTER TABLE `prefix_questions` ADD `scale_id` tinyint NOT NULL default '0'"); echo $modifyoutput; flush(); - modify_database("", "ALTER TABLE `prefix_questions` ADD `same_default` tinyint NOT NULL default '0'"); echo $modifyoutput; flush(); + modify_database("", "ALTER TABLE `prefix_questions` ADD `same_default` tinyint NOT NULL default '0' COMMENT 'Saves if user set to use the same default value across languages in default options dialog'"); echo $modifyoutput; flush(); modify_database("", "ALTER TABLE `prefix_answers` DROP PRIMARY KEY, ADD PRIMARY KEY USING BTREE (`qid`,`code`,`language`,`scale_id`)"); echo $modifyoutput; flush(); modify_database("", "CREATE TABLE `prefix_defaultvalues` ( `qid` int(11) NOT NULL default '0', `scale_id` int(11) NOT NULL default '0', + `sqid` int(11) NOT NULL default '0', `language` varchar(20) NOT NULL, `specialtype` varchar(20) NOT NULL default '', `defaultvalue` text, - PRIMARY KEY (qid, scale_id, `language`) + PRIMARY KEY (`qid` , `scale_id`, `language`, `specialtype`, sqid` ) ) ENGINE=$databasetabletype CHARACTER SET utf8 COLLATE utf8_unicode_ci;"); echo $modifyoutput; flush(); // -Move all 'answers' that are subquestions to the questions table @@ -564,7 +565,21 @@ function upgrade_tables143() global $modifyoutput,$dbprefix, $connect; + + $answerquery = "select a.*, q.sid, q.gid from {$dbprefix}answers a,{$dbprefix}questions q where a.qid=q.qid and q.type in ('L','O','!') and a.default_value='Y'"; + $answerresult = db_execute_assoc($answerquery); + if (!$answerresult) {return "Database Error";} + else + { + while ( $row = $answerresult->FetchRow() ) + { + modify_database("","INSERT INTO {$dbprefix}defaultvalues (qid, scale_id,language,specialtype,defaultvalue) VALUES ({$row['qid']},0,".db_quoteall($row['language']).",'',".db_quoteall($row['code']).")"); echo $modifyoutput; flush(); + } + } + + // Convert answers to subquestions + $answerquery = "select a.*, q.sid, q.gid from {$dbprefix}answers a,{$dbprefix}questions q where a.qid=q.qid and q.type in ('1','A','B','C','E','F','H','K',';',':','M','P','Q')"; $answerresult = db_execute_assoc($answerquery); if (!$answerresult) {return "Database Error";} diff --git a/common.php b/common.php index 35a6c46ba7f..7b33cafc516 100644 --- a/common.php +++ b/common.php @@ -399,7 +399,7 @@ function getqtypelist($SelectedCode = "T", $ReturnType = "selector") 'answerscales'=>1), "M"=>array('description'=>$clang->gT("Multiple Options"), 'subquestions'=>1, - 'hasdefaultvalues'=>0, + 'hasdefaultvalues'=>1, 'assessable'=>0, 'answerscales'=>0), "N"=>array('description'=>$clang->gT("Numerical Input"), @@ -5519,7 +5519,7 @@ function FixLanguageConsistency($sid, $availlangs) if ($gresult->RecordCount() < 1) { if ($databasetype=='odbc_mssql' || $databasetype=='odbtp' || $databasetype=='mssql_n') {@$connect->Execute('SET IDENTITY_INSERT '.db_table_name('questions')." ON");} //Checked - $query = "INSERT INTO ".db_table_name('questions')." (qid,sid,gid,type,title,question,preg,help,other,mandatory,lid,question_order,language) VALUES('{$question['qid']}','{$question['sid']}','{$question['gid']}','{$question['type']}',".db_quoteall($question['title']).",".db_quoteall($question['question']).",".db_quoteall($question['preg']).",".db_quoteall($question['help']).",'{$question['other']}','{$question['mandatory']}','{$question['lid']}','{$question['question_order']}','{$lang}')"; + $query = "INSERT INTO ".db_table_name('questions')." (qid,sid,gid,type,title,question,preg,help,other,mandatory,question_order,language, scale_id) VALUES('{$question['qid']}','{$question['sid']}','{$question['gid']}','{$question['type']}',".db_quoteall($question['title']).",".db_quoteall($question['question']).",".db_quoteall($question['preg']).",".db_quoteall($question['help']).",'{$question['other']}','{$question['mandatory']}','{$question['question_order']}','{$lang}',{$question['scale_id']})"; $connect->Execute($query) or safe_die($query."
".$connect->ErrorMsg()); //Checked if ($databasetype=='odbc_mssql' || $databasetype=='odbtp' || $databasetype=='mssql_n') {$connect->Execute('SET IDENTITY_INSERT '.db_table_name('questions')." OFF");} //Checked } @@ -5546,7 +5546,7 @@ function FixLanguageConsistency($sid, $availlangs) if ($gresult->RecordCount() < 1) { if ($databasetype=='odbc_mssql' || $databasetype=='odbtp' || $databasetype=='mssql_n') {@$connect->Execute('SET IDENTITY_INSERT '.db_table_name('answers')." ON");} //Checked - $query = "INSERT INTO ".db_table_name('answers')." (qid,code,answer,default_value,sortorder,language,assessment_value) VALUES('{$answer['qid']}',".db_quoteall($answer['code']).",".db_quoteall($answer['answer']).",".db_quoteall($answer['default_value']).",'{$answer['sortorder']}','{$lang}',{$answer['assessment_value']})"; + $query = "INSERT INTO ".db_table_name('answers')." (qid,code,answer,scale_id,sortorder,language,assessment_value) VALUES('{$answer['qid']}',".db_quoteall($answer['code']).",".db_quoteall($answer['answer']).",{$answer['scale_id']},'{$answer['sortorder']}','{$lang}',{$answer['assessment_value']})"; $connect->Execute($query) or safe_die($connect->ErrorMsg()); //Checked if ($databasetype=='odbc_mssql' || $databasetype=='odbtp' || $databasetype=='mssql_n') {$connect->Execute('SET IDENTITY_INSERT '.db_table_name('answers')." OFF");} //Checked }
 \n" - .$clang->gT("Code") - ."\n" - .$clang->gT("Subquestion") - ."".$clang->gT("Code")."".$clang->gT("Subquestion")."\n" - .$clang->gT("Action") - ."".$clang->gT("Action")."
{$row['title']}"; } elseif ($activated != 'Y' && $first) // If survey is decactivated diff --git a/admin/install/create-mysql.sql b/admin/install/create-mysql.sql index 55c9b829253..12d7cad2831 100644 --- a/admin/install/create-mysql.sql +++ b/admin/install/create-mysql.sql @@ -43,9 +43,10 @@ CREATE TABLE `prefix_defaultvalues` ( `qid` int(11) NOT NULL default '0', `specialtype` varchar(20) NOT NULL default '', `scale_id` int(11) NOT NULL default '0', + `sqid` int(11) NOT NULL default '0', `language` varchar(20) NOT NULL, `defaultvalue` text, - PRIMARY KEY (`qid` , `scale_id`, `language`, `specialtype` ) + PRIMARY KEY (`qid` , `scale_id`, `language`, `specialtype`, `sqid` ) ) ENGINE=$databasetabletype CHARACTER SET utf8 COLLATE utf8_unicode_ci; @@ -149,6 +150,7 @@ CREATE TABLE `prefix_questions` ( `language` varchar(20) default 'en', `default_value` text, `scale_id` tinyint NOT NULL default '0', + `same_default` tinyint NOT NULL default '0' COMMENT 'Saves if user set to use the same default value across languages in default options dialog', PRIMARY KEY (`qid`,`language`) ) ENGINE=$databasetabletype AUTO_INCREMENT=1 CHARACTER SET utf8 COLLATE utf8_unicode_ci; diff --git a/admin/questionhandling.php b/admin/questionhandling.php index f2a4aaaffc4..d96d7f98519 100644 --- a/admin/questionhandling.php +++ b/admin/questionhandling.php @@ -130,7 +130,7 @@ $baselang = GetBaseLanguageFromSurveyID($surveyid); array_unshift($questlangs,$baselang); - $questionrow=$connect->GetRow("SELECT type, other FROM ".db_table_name('questions')." WHERE sid=$surveyid AND gid=$gid AND qid=$qid AND language='$baselang'"); + $questionrow=$connect->GetRow("SELECT type, other, title, question FROM ".db_table_name('questions')." WHERE sid=$surveyid AND gid=$gid AND qid=$qid AND language='$baselang'"); $qtproperties=getqtypelist('','array'); $editdefvalues="
".$clang->gT('Edit default answer values')."
" @@ -155,7 +155,7 @@ { $editdefvalues.=sprintf($clang->gT('Default answer value:'),$scale_id).""; } - $defaultvalue=$connect->GetOne("SELECT defaultvalue FROM ".db_table_name('defaultvalues')." WHERE qid=$qid AND and specialtype='' scale_id={$scale_id} AND language='{$language}'"); + $defaultvalue=$connect->GetOne("SELECT defaultvalue FROM ".db_table_name('defaultvalues')." WHERE qid=$qid AND specialtype='' and scale_id={$scale_id} AND language='{$language}'"); $editdefvalues.=""; } } + } + + // If there are subquestions and no answerscales + if ($qtproperties[$questionrow['type']]['answerscales']==0 && $qtproperties[$questionrow['type']]['subquestions']>0) + { + for ($scale_id=0;$scale_id<$qtproperties[$questionrow['type']]['subquestions'];$scale_id++) + { + $sqquery = "SELECT * FROM ".db_table_name('questions')." WHERE sid=$surveyid AND gid=$gid AND parent_qid=$qid and language=".db_quoteall($language)." and scale_id=0 order by question_order"; + $sqresult = db_execute_assoc($sqquery); + $sqrows = $sqresult->GetRows(); + if ($qtproperties[$questionrow['type']]['subquestions']>1) + { + $editdefvalues.="
".sprintf($clang->gT('Default answer for scale %s:'),$scale_id)."$clang->gT(''),'Y'=>$clang->gT('Checked')); + } + $editdefvalues.="
    "; + + foreach ($sqrows as $aSubquestion) + { + $defaultvalue=$connect->GetOne("SELECT defaultvalue FROM ".db_table_name('defaultvalues')." WHERE qid=$qid AND specialtype='' and sqid={$aSubquestion['qid']} and scale_id={$scale_id} AND language='{$language}'"); + $editdefvalues.="
  • "; + $editdefvalues.="
  • "; diff --git a/admin/scripts/subquestions.js b/admin/scripts/subquestions.js index dd5c135c98c..b13b2f346e8 100644 --- a/admin/scripts/subquestions.js +++ b/admin/scripts/subquestions.js @@ -89,11 +89,11 @@ function addinput() nextcode=getNextCode($(this).parent().parent().find('.code').val()); var randomid='new'+Math.floor(Math.random()*111111) if (x==0) { - inserthtml='