From 3b71bc33261e7592c99399908f104658d466c1f1 Mon Sep 17 00:00:00 2001 From: Carsten Schmitz Date: Tue, 13 Apr 2010 11:15:30 +0000 Subject: [PATCH] Dev Default answer values now re-implemented for list(radio), list(dropdown), and list with comments New feature: Default values can now be set in a different dialog. Language dependant default values for the option 'Other' now possible Dev Work in progress git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey@8584 b72ed6b6-b9f8-46b5-92b4-906544132732 --- admin/database.php | 52 +++++++++++++++++++++++----------- admin/install/create-mysql.sql | 3 +- admin/questionhandling.php | 24 ++++++++++------ admin/update/upgrade-mysql.php | 2 ++ common.php | 8 +++--- qanda.php | 45 ++++++++++------------------- 6 files changed, 75 insertions(+), 59 deletions(-) diff --git a/admin/database.php b/admin/database.php index 9859dd43bd2..b224f5ba3ba 100644 --- a/admin/database.php +++ b/admin/database.php @@ -393,23 +393,12 @@ function get_max_question_order($gid) foreach ($questlangs as $language) { if (isset($_POST['defaultanswerscale_'.$scale_id.'_'.$language])) + { + Updatedefaultvalues($postqid,$scale_id,'',$language,$_POST['defaultanswerscale_'.$scale_id.'_'.$language],true); + } + if (isset($_POST['other_'.$scale_id.'_'.$language])) { - if ($_POST['defaultanswerscale_'.$scale_id.'_'.$language]=='') // Remove the default value if it is empty - { - $connect->execute("DELETE FROM ".db_table_name('defaultvalues')." WHERE qid=$postqid AND scale_id={$scale_id} AND language='{$language}'"); - } - else - { - $exists=$connect->GetOne("SELECT * FROM ".db_table_name('defaultvalues')." WHERE qid=$postqid AND scale_id={$scale_id} AND language='{$language}'"); - if ($exists===false) - { - $connect->execute('INSERT INTO '.db_table_name('defaultvalues')." (defaultvalue,qid,scale_id,language) VALUES (".db_quoteall($_POST['defaultanswerscale_'.$scale_id.'_'.$language],true).",{$postqid},{$scale_id},'{$language}')"); - } - else - { - $connect->execute('Update '.db_table_name('defaultvalues')." set defaultvalue=".db_quoteall($_POST['defaultanswerscale_'.$scale_id.'_'.$language],true)." WHERE qid=$postqid AND scale_id={$scale_id} AND language='{$language}'"); - } - } + Updatedefaultvalues($postqid,$scale_id,'other',$language,$_POST['other_'.$scale_id.'_'.$language],true); } } } @@ -1400,5 +1389,36 @@ function get_max_question_order($gid) include("access_denied.php"); } +/** +* THis is a convenience function to update/delete answer default values. If the given +* $defaultvalue is empty then the entry is removed from table defaultvalues +* +* @param mixed $qid Question ID +* @param mixed $scale_id Scale ID +* @param mixed $specialtype Special type (i.e. for 'Other') +* @param mixed $language Language (defaults are language specific) +* @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) +{ + 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}'"); + } + 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}'"); + 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}')"); + } + 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}'"); + } + } +} ?> \ No newline at end of file diff --git a/admin/install/create-mysql.sql b/admin/install/create-mysql.sql index 61bbbbb532e..55c9b829253 100644 --- a/admin/install/create-mysql.sql +++ b/admin/install/create-mysql.sql @@ -41,10 +41,11 @@ CREATE TABLE `prefix_conditions` ( 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', `language` varchar(20) NOT NULL, `defaultvalue` text, - PRIMARY KEY (`qid` , `scale_id`, `language` ) + PRIMARY KEY (`qid` , `scale_id`, `language`, `specialtype` ) ) ENGINE=$databasetabletype CHARACTER SET utf8 COLLATE utf8_unicode_ci; diff --git a/admin/questionhandling.php b/admin/questionhandling.php index 4d4c307f348..f2a4aaaffc4 100644 --- a/admin/questionhandling.php +++ b/admin/questionhandling.php @@ -130,7 +130,7 @@ $baselang = GetBaseLanguageFromSurveyID($surveyid); array_unshift($questlangs,$baselang); - $questiontype=$connect->GetOne("SELECT type FROM ".db_table_name('questions')." WHERE sid=$surveyid AND gid=$gid AND qid=$qid AND language='$baselang'"); + $questionrow=$connect->GetRow("SELECT type, other 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')."
" @@ -139,21 +139,23 @@ foreach ($questlangs as $language) { $editdefvalues .= '

'.getLanguageNameFromCode($language,false).'

'; - if ($qtproperties[$questiontype]['answerscales']>0) + + // If there are answerscales + if ($qtproperties[$questionrow['type']]['answerscales']>0) { $editdefvalues.=" "; $editdefvalues.="
"; // Closing page diff --git a/admin/update/upgrade-mysql.php b/admin/update/upgrade-mysql.php index bd3d5d43edd..42b469671c1 100644 --- a/admin/update/upgrade-mysql.php +++ b/admin/update/upgrade-mysql.php @@ -351,11 +351,13 @@ 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_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', `language` varchar(20) NOT NULL, + `specialtype` varchar(20) NOT NULL default '', `defaultvalue` text, PRIMARY KEY (qid, scale_id, `language`) ) ENGINE=$databasetabletype CHARACTER SET utf8 COLLATE utf8_unicode_ci;"); echo $modifyoutput; flush(); diff --git a/common.php b/common.php index 4630967eb11..35a6c46ba7f 100644 --- a/common.php +++ b/common.php @@ -407,9 +407,9 @@ function getqtypelist($SelectedCode = "T", $ReturnType = "selector") 'hasdefaultvalues'=>0, 'assessable'=>0, 'answerscales'=>0), - "O"=>array('description'=>$clang->gT("List With Comment"), + "O"=>array('description'=>$clang->gT("List with comment"), 'subquestions'=>0, - 'hasdefaultvalues'=>0, + 'hasdefaultvalues'=>1, 'assessable'=>0, 'answerscales'=>1), "P"=>array('description'=>$clang->gT("Multiple Options With Comments"), @@ -454,7 +454,7 @@ function getqtypelist($SelectedCode = "T", $ReturnType = "selector") 'answerscales'=>0), "!"=>array('description'=>$clang->gT("List (Dropdown)"), 'subquestions'=>0, - 'hasdefaultvalues'=>0, + 'hasdefaultvalues'=>1, 'assessable'=>0, 'answerscales'=>1), ":"=>array('description'=>$clang->gT("Array (Numbers)"), @@ -2437,7 +2437,7 @@ function createFieldMap($surveyid, $style='short', $force_refresh=false) { $fieldmap[$fieldname]['mandatory']=$arow['mandatory']; $fieldmap[$fieldname]['hasconditions']=$conditions; $fieldmap[$fieldname]['usedinconditions']=$usedinconditions; - $fieldmap[$fieldname]['defaultvalue']=$connect->GetOne("SELECT defaultvalue FROM ".db_table_name('defaultvalues')." WHERE qid={$arow['gid']} AND scale_id=0 AND language='{$clang->langcode}'"); + $fieldmap[$fieldname]['defaultvalue']=$connect->GetOne("SELECT defaultvalue FROM ".db_table_name('defaultvalues')." WHERE qid={$arow['qid']} AND scale_id=0 AND language='{$clang->langcode}'"); } switch($arow['type']) diff --git a/qanda.php b/qanda.php index b4b4f08dc7d..acaf77ac87a 100644 --- a/qanda.php +++ b/qanda.php @@ -1651,11 +1651,6 @@ function do_language($ia) { $answer .= SELECTED; } - elseif ($ansrow['default_value'] == 'Y') - { - $answer .= SELECTED; - $defexists = "Y"; - } $answer .= '>'.getLanguageNameFromCode($ansrow, true)."\n"; } $answer .= "\n"; @@ -1727,24 +1722,20 @@ function do_list_dropdown($ia) $ansresult = db_execute_assoc($ansquery) or safe_die('Couldn\'t get answers
'.$ansquery.'
'.$connect->ErrorMsg()); //Checked if (!isset($optCategorySeparator)) - { + { while ($ansrow = $ansresult->FetchRow()) { + $opt_select = ''; if ($_SESSION[$ia[1]] == $ansrow['code']) { $opt_select = SELECTED; } - elseif ($ansrow['default_value'] == 'Y') + elseif ($ansrow['code']==$_SESSION['fieldmap'][$ia[1]]['defaultvalue']) { - $opt_select = SELECTED; - $defexists = 'Y'; - } - else - { - $opt_select = ''; + $check_ans = CHECKED; + $defexists=true; } - $answer .= ' - '; + $answer .= "\n"; } } else @@ -1758,11 +1749,11 @@ function do_list_dropdown($ia) // The blank category is left at the end outside optgroups if ($categorytext == '') { - $defaultopts[] = array ( 'code' => $ansrow['code'], 'answer' => $answertext, 'default_value' => $ansrow['default_value']); + $defaultopts[] = array ( 'code' => $ansrow['code'], 'answer' => $answertext, 'default_value' => $_SESSION['fieldmap'][$ia[1]]['defaultvalue']); } else { - $optgroups[$categorytext][] = array ( 'code' => $ansrow['code'], 'answer' => $answertext, 'default_value' => $ansrow['default_value']); + $optgroups[$categorytext][] = array ( 'code' => $ansrow['code'], 'answer' => $answertext, 'default_value' => $_SESSION['fieldmap'][$ia[1]]['defaultvalue']); } @@ -2249,18 +2240,15 @@ function do_listwithcomment($ia) while ($ansrow=$ansresult->FetchRow()) { + $check_ans = ''; if ($_SESSION[$ia[1]] == $ansrow['code']) { $check_ans = CHECKED; } - elseif ($ansrow['default_value'] == 'Y') + elseif ($ansrow['code']==$_SESSION['fieldmap'][$ia[1]]['defaultvalue']) { $check_ans = CHECKED; - $defexists = 'Y'; - } - else - { - $check_ans = ''; + $defexists=true; } $answer .= '
  • @@ -2322,18 +2310,15 @@ function do_listwithcomment($ia) // --> END NEW FEATURE - SAVE while ($ansrow=$ansresult->FetchRow()) { + $check_ans = ''; if ($_SESSION[$ia[1]] == $ansrow['code']) { $check_ans = SELECTED; } - elseif ($ansrow['default_value'] == 'Y') + elseif ($ansrow['code']==$_SESSION['fieldmap'][$ia[1]]['defaultvalue']) { - $check_ans = SELECTED; - $defexists = "Y"; - } - else - { - $check_ans = ''; + $check_ans = CHECKED; + $defexists=true; } $answer .= ' \n";