Skip to content

Commit

Permalink
Dev Default answer values now re-implemented for list(radio), list(dr…
Browse files Browse the repository at this point in the history
…opdown), 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
  • Loading branch information
c-schmitz committed Apr 13, 2010
1 parent 74b2cce commit 3b71bc3
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 59 deletions.
52 changes: 36 additions & 16 deletions admin/database.php
Expand Up @@ -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);
}
}
}
Expand Down Expand Up @@ -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}'");
}
}
}

?>
3 changes: 2 additions & 1 deletion admin/install/create-mysql.sql
Expand Up @@ -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;


Expand Down
24 changes: 16 additions & 8 deletions admin/questionhandling.php
Expand Up @@ -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="<div class='header'>".$clang->gT('Edit default answer values')."</div> "
Expand All @@ -139,21 +139,23 @@
foreach ($questlangs as $language)
{
$editdefvalues .= '<div class="tab-page"> <h2 class="tab">'.getLanguageNameFromCode($language,false).'</h2>';
if ($qtproperties[$questiontype]['answerscales']>0)

// If there are answerscales
if ($qtproperties[$questionrow['type']]['answerscales']>0)
{
$editdefvalues.="<ul> ";
for ($scale_id=0;$scale_id<$qtproperties[$questiontype]['answerscales'];$scale_id++)
for ($scale_id=0;$scale_id<$qtproperties[$questionrow['type']]['answerscales'];$scale_id++)
{
$editdefvalues.=" <li><label for='defaultanswerscale_{$scale_id}_{$language}'>";
if ($qtproperties[$questiontype]['answerscales']>1)
if ($qtproperties[$questionrow['type']]['answerscales']>1)
{
$editdefvalues.=sprintf($clang->gT('Default answer for scale %s:'),$scale_id)."</label>";
}
else
{
$editdefvalues.=sprintf($clang->gT('Default answer:'),$scale_id)."</label>";
$editdefvalues.=sprintf($clang->gT('Default answer value:'),$scale_id)."</label>";
}
$defaultvalue=$connect->GetOne("SELECT defaultvalue FROM ".db_table_name('defaultvalues')." WHERE qid=$qid AND scale_id={$scale_id} AND language='{$language}'");
$defaultvalue=$connect->GetOne("SELECT defaultvalue FROM ".db_table_name('defaultvalues')." WHERE qid=$qid AND and specialtype='' scale_id={$scale_id} AND language='{$language}'");

$editdefvalues.="<select name='defaultanswerscale_{$scale_id}_{$language}' id='defaultanswerscale_{$scale_id}_{$language}'>";
$editdefvalues.="<option value='' ";
Expand All @@ -173,10 +175,16 @@
$editdefvalues.="value='{$answer['code']}'>{$answer['answer']}</option>";
}
$editdefvalues.="</select></li> ";
if ($questionrow['other']=='Y')
{
$defaultvalue=$connect->GetOne("SELECT defaultvalue FROM ".db_table_name('defaultvalues')." WHERE qid=$qid and specialtype='other' AND scale_id={$scale_id} AND language='{$language}'");
if ($defaultvalue===false) $defaultvalue='';
$editdefvalues.="<li><label for='other_{$scale_id}_{$language}'>".$clang->gT("Default value for option 'Other':")."<label><input type='text' name='other_{$scale_id}_{$language}' value='$defaultvalue' id='other_{$scale_id}_{$language}'></li>";
}
}
if ($language==$baselang && count($questlangs)>0)
if ($language==$baselang && count($questlangs)>1)
{
$editdefvalues.="<li><label for=''>".$clang->gT('Use same default value across languages:')."<label><input type='checkbox'></li>";
$editdefvalues.="<li><label for='samedefault'>".$clang->gT('Use same default value across languages:')."<label><input type='checkbox' name='samedefault' id='samedefault'></li>";
}
$editdefvalues.="</ul> ";
$editdefvalues.="</div> "; // Closing page
Expand Down
2 changes: 2 additions & 0 deletions admin/update/upgrade-mysql.php
Expand Up @@ -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();
Expand Down
8 changes: 4 additions & 4 deletions common.php
Expand Up @@ -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"),
Expand Down Expand Up @@ -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)"),
Expand Down Expand Up @@ -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'])
Expand Down
45 changes: 15 additions & 30 deletions qanda.php
Expand Up @@ -1651,11 +1651,6 @@ function do_language($ia)
{
$answer .= SELECTED;
}
elseif ($ansrow['default_value'] == 'Y')
{
$answer .= SELECTED;
$defexists = "Y";
}
$answer .= '>'.getLanguageNameFromCode($ansrow, true)."</option>\n";
}
$answer .= "</select>\n";
Expand Down Expand Up @@ -1727,24 +1722,20 @@ function do_list_dropdown($ia)
$ansresult = db_execute_assoc($ansquery) or safe_die('Couldn\'t get answers<br />'.$ansquery.'<br />'.$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 .= ' <option value="'.$ansrow['code'].'"'.$opt_select.'>'.$ansrow['answer'].'</option>
';
$answer .= "<option value='{$ansrow['code']}' {$opt_select}>{$ansrow['answer']}</option>\n";
}
}
else
Expand All @@ -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']);
}


Expand Down Expand Up @@ -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 .= ' <li>
<input type="radio" name="'.$ia[1].'" id="answer'.$ia[1].$ansrow['code'].'" value="'.$ansrow['code'].'" class="radio" '.$check_ans.' onclick="'.$checkconditionFunction.'(this.value, this.name, this.type)" />
Expand Down Expand Up @@ -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 .= ' <option value="'.$ansrow['code'].'"'.$check_ans.'>'.$ansrow['answer']."</option>\n";

Expand Down

0 comments on commit 3b71bc3

Please sign in to comment.