Skip to content

Commit

Permalink
Dev More fixes and changes. Defaults are now available for Multipe ch…
Browse files Browse the repository at this point in the history
…oice question type. Fixed several bogs on the way. Please re-setup your dev DB since there have been table changes

git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey@8589 b72ed6b6-b9f8-46b5-92b4-906544132732
  • Loading branch information
c-schmitz committed Apr 13, 2010
1 parent 661fd40 commit 057eb62
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 28 deletions.
42 changes: 34 additions & 8 deletions admin/database.php
Expand Up @@ -386,23 +386,49 @@ 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++)
{
foreach ($questlangs as $language)
{
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);
} */

}
}
}
}

}

Expand Down Expand Up @@ -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}'");
}
}
}
Expand Down
14 changes: 4 additions & 10 deletions admin/html.php
Expand Up @@ -1713,17 +1713,11 @@
$vasummary .="<table class='answertable' id='answertable_{$anslang}_{$scale_id}' align='center'>\n"
."<thead>"
."<tr><th>&nbsp;</th>\n"
."<th align='right'>\n"
.$clang->gT("Code")
."</th>\n"
."</th><th align='center'>\n"
.$clang->gT("Subquestion")
."</th>\n";
."<th align='right'>".$clang->gT("Code")."</th>\n"
."</th><th align='center'>".$clang->gT("Subquestion")."</th>\n";
if ($activated != 'Y' && $first)
{
$vasummary .="<th align='center'>\n"
.$clang->gT("Action")
."</th>\n";
$vasummary .="<th align='center'>".$clang->gT("Action")."</th>\n";
}
$vasummary .="</tr></thead>"
."<tbody align='center'>";
Expand All @@ -1750,7 +1744,7 @@

if ($activated == 'Y' ) // if activated
{
$vasummary .= "&nbsp;</td><td><input type='hidden' name='code_{$row['qid']}' value=\"{$row['title']}\" maxlength='5' size='5'"
$vasummary .= "&nbsp;</td><td><input type='hidden' name='code_{$row['qid']}_{$row['scale_id']}' value=\"{$row['title']}\" maxlength='5' size='5'"
." />{$row['title']}";
}
elseif ($activated != 'Y' && $first) // If survey is decactivated
Expand Down
4 changes: 3 additions & 1 deletion admin/install/create-mysql.sql
Expand Up @@ -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;


Expand Down Expand Up @@ -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;

Expand Down
42 changes: 40 additions & 2 deletions admin/questionhandling.php
Expand Up @@ -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="<div class='header'>".$clang->gT('Edit default answer values')."</div> "
Expand All @@ -155,7 +155,7 @@
{
$editdefvalues.=sprintf($clang->gT('Default answer value:'),$scale_id)."</label>";
}
$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.="<select name='defaultanswerscale_{$scale_id}_{$language}' id='defaultanswerscale_{$scale_id}_{$language}'>";
$editdefvalues.="<option value='' ";
Expand All @@ -182,6 +182,44 @@
$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 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.=" <div class='header'>".sprintf($clang->gT('Default answer for scale %s:'),$scale_id)."</div<";
}
if ($questionrow['type']=='M')
{
$options=array(''=>$clang->gT('<No default value>'),'Y'=>$clang->gT('Checked'));
}
$editdefvalues.="<ul>";

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.="<li><label for='defaultanswerscale_{$scale_id}_{$language}_{$aSubquestion['qid']}'>{$aSubquestion['title']}: ".FlattenText($aSubquestion['question'])."</label>";
$editdefvalues.="<select name='defaultanswerscale_{$scale_id}_{$language}_{$aSubquestion['qid']}' id='defaultanswerscale_{$scale_id}_{$language}_{$aSubquestion['qid']}'>";
foreach ($options as $value=>$label)
{
$editdefvalues.="<option ";
if ($value==$defaultvalue)
{
$editdefvalues.= " selected='selected' ";
}
$editdefvalues.="value='{$value}'>{$label}</option>";
}
$editdefvalues.="</select></li> ";
}
}

if ($language==$baselang && count($questlangs)>1)
{
$editdefvalues.="<li><label for='samedefault'>".$clang->gT('Use same default value across languages:')."<label><input type='checkbox' name='samedefault' id='samedefault'></li>";
Expand Down
4 changes: 2 additions & 2 deletions admin/scripts/subquestions.js
Expand Up @@ -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='<tr class="row_'+newposition+'" style="display:none;"><td><img class="handle" src="../images/handle.png" /></td><td><input id="code_'+randomid+'" name="code_'+randomid+'" class="code" type="text" maxlength="5" size="5" value="'+nextcode+'" /></td><td><input type="text" size="100" id="answer_'+languages[x]+'_'+randomid+'" name="answer_'+languages[x]+'_'+randomid+'" class="answer" value="'+newansweroption_text+'"></input><img src="../images/edithtmlpopup.png" class="btneditanswer" /></td><td><img src="../images/addanswer.png" class="btnaddanswer" /><img src="../images/deleteanswer.png" class="btndelanswer" /></td></tr>'
inserthtml='<tr class="row_'+newposition+'" style="display:none;"><td><img class="handle" src="../images/handle.png" /></td><td><input id="code_'+randomid+'_'+scale_id+'" name="code_'+randomid+'_'+scale_id+'" class="code" type="text" maxlength="5" size="5" value="'+nextcode+'" /></td><td><input type="text" size="100" id="answer_'+languages[x]+'_'+randomid+'_'+scale_id+'" name="answer_'+languages[x]+'_'+randomid+'_'+scale_id+'" class="answer" value="'+newansweroption_text+'"></input><img src="../images/edithtmlpopup.png" class="btneditanswer" /></td><td><img src="../images/addanswer.png" class="btnaddanswer" /><img src="../images/deleteanswer.png" class="btndelanswer" /></td></tr>'
}
else
{
inserthtml='<tr class="row_'+newposition+'" style="display:none;"><td>&nbsp;</td><td>'+nextcode+'</td><td><input type="text" size="100" id="answer_'+languages[x]+'_'+randomid+'" name="answer_'+languages[x]+'_'+randomid+'" class="answer" value="New answer option"></input><img src="../images/edithtmlpopup.png" class="btnaddanswer" /></td><td>&nbsp;</td></tr>'
inserthtml='<tr class="row_'+newposition+'" style="display:none;"><td>&nbsp;</td><td>'+nextcode+'</td><td><input type="text" size="100" id="answer_'+languages[x]+'_'+randomid+'_'+scale_id+'" name="answer_'+languages[x]+'_'+randomid+'_'+scale_id+'" class="answer" value="New answer option"></input><img src="../images/edithtmlpopup.png" class="btnaddanswer" /></td><td>&nbsp;</td></tr>'
}
tablerow.after(inserthtml);
tablerow.next().find('.btnaddanswer').click(addinput);
Expand Down
19 changes: 17 additions & 2 deletions admin/update/upgrade-mysql.php
Expand Up @@ -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
Expand Down Expand Up @@ -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";}
Expand Down

0 comments on commit 057eb62

Please sign in to comment.