Skip to content

Commit

Permalink
Fixed issue #06983: partial : add new response in dataentry for ranki…
Browse files Browse the repository at this point in the history
…ng question

Fixed issue: Add new question in dataentry for checkbox
Fixed issue: Add new question in dataentry if admin lang are not in survey lang
Dev: Only for new response actually, edit response are broken
Dev: Surely other question type to review
  • Loading branch information
Shnoulle committed Dec 1, 2012
1 parent ea9018f commit f524f14
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 152 deletions.
7 changes: 3 additions & 4 deletions application/controllers/admin/dataentry.php
Expand Up @@ -603,7 +603,7 @@ public function editdata($subaction, $id, $surveyid, $language='')
}
$output .= "\t<tr";
if ($highlight) $output .=" class='odd'";
else $aDataentryoutput .=" class='even'";
else $output .=" class='even'";

$highlight=!$highlight;
$output .=">\n"
Expand Down Expand Up @@ -1167,7 +1167,7 @@ public function view($surveyid, $lang=NULL)
if(is_null($lang) || !in_array($lang,$slangs))
{
$sDataEntryLanguage = $baselang;
$blang = $clang;
$blang = new Limesurvey_lang($baselang);
} else {
Yii::app()->loadLibrary('Limesurvey_lang',array($lang));
$blang = new Limesurvey_lang($lang);
Expand Down Expand Up @@ -1203,7 +1203,7 @@ public function view($surveyid, $lang=NULL)
{
LimeExpressionManager::StartProcessingGroup($degrow['gid'], ($thissurvey['anonymized']!="N"),$surveyid);

$results = Questions::model()->with('question_types')->findAllByAttributes(array('gid' => $degrow['gid'], 'language' => $sDataEntryLanguage), array('order' => 'question_order'));
$results = Questions::model()->with('question_types')->findAllByAttributes(array('gid' => $degrow['gid'],'parent_qid' => '0', 'language' => $sDataEntryLanguage), array('order' => 'question_order'));
$aDataentryoutput .= "\t<tr>\n"
."<td colspan='3' align='center'><strong>".flattenText($degrow['group_name'],true)."</strong></td>\n"
."\t</tr>\n";
Expand All @@ -1218,7 +1218,6 @@ public function view($surveyid, $lang=NULL)
// TODO - can questions be hidden? Are JavaScript variables names used? Consistently with everywhere else?
// TMSW Conditions->Relevance: Show relevance equation instead of conditions here - better yet, have data entry use survey-at-a-time but with different view

$qinfo = LimeExpressionManager::GetQuestionStatus($deqrow['qid']);
$q = $qinfo['info']['q'];
$qidattributes = is_a($q, 'QuestionModule') ? $q->getAttributeValues() : array();
Expand Down
8 changes: 4 additions & 4 deletions application/modules/CheckQuestion.php
Expand Up @@ -667,7 +667,7 @@ public function getDataEntryView($language)
$meaquery = "SELECT title, question FROM {{questions}} WHERE parent_qid={$this->id} AND language='{$language->getlangcode()}' ORDER BY question_order";
$mearesult = dbExecuteAssoc($meaquery);
$meacount = $mearesult->getRowCount();

$fieldname="{$this->surveyid}X{$this->gid}X{$this->id}";// $this->fieldname give the last sq fieldname in dataentry
$output = '';
if ($this->isother == "Y") $meacount++;
if ($dcols > 0 && $meacount >= $dcols)
Expand All @@ -684,13 +684,13 @@ public function getDataEntryView($language)
echo $divider;
$upto=0;
}
$output .= "<input type='checkbox' class='checkboxbtn' name='{$this->fieldname}{$mearow['title']}' id='answer{$this->fieldname}{$mearow['title']}' value='Y' />";
$output .= "<label for='answer{$this->fieldname}{$mearow['title']}'>{$mearow['question']}</label><br />";
$output .= "<input type='checkbox' class='checkboxbtn' name='{$fieldname}{$mearow['title']}' id='answer{$fieldname}{$mearow['title']}' value='Y' />";
$output .= "<label for='answer{$fieldname}{$mearow['title']}'>{$mearow['question']}</label><br />";
$upto++;
}
if ($this->isother == "Y")
{
$output .= $language->gT("Other") . "<input type='text' name='{$this->fieldname}other' />";
$output .= $language->gT("Other") . "<input type='text' name='{$fieldname}other' />";
}
$output .= "</td></tr></table>";
}
Expand Down
171 changes: 27 additions & 144 deletions application/modules/RankingQuestion.php
Expand Up @@ -294,11 +294,11 @@ public function getHeaderIncludes()
public function createFieldmap()
{
$clang = Yii::app()->lang;
$data = Answers::model()->findAllByAttributes(array('qid' => $this->id, 'language' => $this->language));
$data = Answers::model()->findAllByAttributes(array('qid' => $this->id,'parent_qid' => '0', 'language' => $this->language));
$map = array();
for ($i=1; $i<=count($data); $i++)
{
$fieldname="{$this->surveyid}X{$this->gid}X{$this->id}$i";
$fieldname="{$this->surveyid}X{$this->gid}X{$this->id}{$i}";
$q = clone $this;
$q->fieldname = $fieldname;
$q->aid = $i;
Expand Down Expand Up @@ -458,155 +458,38 @@ public function getValueJS()

public function getDataEntryView($language)
{
$ansquery = "SELECT * FROM {{answers}} WHERE qid={$this->id} AND language='{$language->getlangcode()}' ORDER BY sortorder, answer";
$ansresult = dbExecuteAssoc($ansquery);
$anscount = $ansresult->getRowCount();

foreach ($ansresult->readAll() as $ansrow)
{
$answers[] = array($ansrow['code'], $ansrow['answer']);
}
for ($i=1; $i<=$anscount; $i++)
{
if (isset($fname))
$ansquery = "SELECT * FROM {{answers}} WHERE qid={$this->id} AND language='{$language->getlangcode()}' and scale_id=0 ORDER BY sortorder, answer";
$ansresult = Yii::app()->db->createCommand($ansquery)->query()->readAll();
$anscount = count($ansresult);
$answers= array();
foreach ($ansresult as $ansrow)
{
$myfname=$fname.$i;
$answers[] = $ansrow;
}
if (isset($myfname) && Yii::app()->session[$myfname])
{
$existing++;
}
}
$fieldname="{$this->surveyid}X{$this->gid}X{$this->id}";// $this->fieldname give the last sq fieldname in dataentry
$output = "";
$output .= "<div id='question{$this->id}' class='ranking-answers'><ul class='answers-list'>";
for ($i=1; $i<=$anscount; $i++)
{
if (isset($fname))
{
$myfname = $fname.$i;
}
if (isset($myfname) && Yii::app()->session[$myfname])
{
foreach ($answers as $ans)
{
if ($ans[0] == Yii::app()->session[$myfname])
{
$thiscode=$ans[0];
$thistext=$ans[1];
}
}
}
if (!isset($ranklist)) {$ranklist="";}
$ranklist .= "&nbsp;<font color='#000080'>{$i}:&nbsp;<input class='ranklist' type='text' name='RANK{$i}' id='RANK_{$this->id}{$i}'";
if (isset($myfname) && Yii::app()->session[$myfname])
{
$ranklist .= " value='";
$ranklist .= $thistext;
$ranklist .= "'";
}
$ranklist .= " onFocus=\"this.blur()\" />\n";
$ranklist .= "<input type='hidden' id='d{$this->fieldname}{$i}' name='{$this->fieldname}{$i}' value='";
$chosen[]=""; //create array
if (isset($myfname) && Yii::app()->session[$myfname])
{
$ranklist .= $thiscode;
$chosen[]=array($thiscode, $thistext);
}
$ranklist .= "' /></font>\n";
$ranklist .= "<img src='".Yii::app()->getConfig('imageurl')."/cut.gif' alt='".$language->gT("Remove this item")."' title='".$language->gT("Remove this item")."' ";
if (!isset($existing) || $i != $existing)
{
$ranklist .= "style='display:none'";
$output .= "\n<li class=\"select-item\">";
$output .="<label for=\"answer{$fieldname}{$i}\">";
if($i==1){
$output .=$language->gT('First choice');
}else{
$output .=$language->gT('Next choice');
}
$ranklist .= " id='cut_{$this->id}{$i}' onclick=\"deletethis_{$this->id}(document.addsurvey.RANK_{$this->id}{$i}.value, document.addsurvey.d{$this->fieldname}{$i}.value, document.addsurvey.RANK_{$this->id}{$i}.id, this.id)\" /><br />\n\n";
}
$choicelist = "<select size='{$anscount}' class='choicelist' name='CHOICES' id='CHOICES_{$this->id}' onclick=\"rankthis_{$this->id}(this.options[this.selectedIndex].value, this.options[this.selectedIndex].text)\" >\n";
foreach ($answers as $ans)
{

if (!in_array($ans, $chosen))
$output .= "<select name=\"{$fieldname}{$i}\" id=\"answer{$fieldname}{$i}\">\n";
$output .= "\t<option value=\"\">".$language->gT('None')."</option>\n";
foreach ($answers as $ansrow)
{
$choicelist .= "\t<option value='{$ans[0]}'>{$ans[1]}</option>\n";
$output .= "\t<option value=\"".$ansrow['code']."\" >".flattenText($ansrow['answer'])."</option>\n";
}
$output .= "</select>\n";
$output .="</label>";
}
$choicelist .= "</select>\n";
$output = <<<OUTPUT
<script type='text/javascript'>
<!--
function rankthis_{$this->id}(\$code, \$value)
{
\$index=document.addsurvey.CHOICES_{$this->id}.selectedIndex;
for (i=1; i<={$anscount}; i++)
{
\$b=i;
\$b += '';
\$inputname="RANK_{$this->id}"+\$b;
\$hiddenname="d{$this->fieldname}"+\$b;
\$cutname="cut_{$this->id}"+i;
document.getElementById(\$cutname).style.display='none';
if (!document.getElementById(\$inputname).value)
{
document.getElementById(\$inputname).value=\$value;
document.getElementById(\$hiddenname).value=\$code;
document.getElementById(\$cutname).style.display='';
for (var b=document.getElementById('CHOICES_{$this->id}').options.length-1; b>=0; b--)
{
if (document.getElementById('CHOICES_{$this->id}').options[b].value == \$code)
{
document.getElementById('CHOICES_{$this->id}').options[b] = null;
}
}
i=$anscount;
}
}
if (document.getElementById('CHOICES_{$this->id}').options.length == 0)
{
document.getElementById('CHOICES_{$this->id}').disabled=true;
}
document.addsurvey.CHOICES_{$this->id}.selectedIndex=-1;
}
function deletethis_{$this->id}(\$text, \$value, \$name, \$thisname)
{
var qid='{$this->id}';
var lngth=qid.length+4;
var cutindex=\$thisname.substring(lngth, \$thisname.length);
cutindex=parseFloat(cutindex);
document.getElementById(\$name).value='';
document.getElementById(\$thisname).style.display='none';
if (cutindex > 1)
{
\$cut1name="cut_{$this->id}"+(cutindex-1);
\$cut2name="d{$this->fieldname}"+(cutindex);
document.getElementById(\$cut1name).style.display='';
document.getElementById(\$cut2name).value='';
}
else
{
\$cut2name="d{$this->fieldname}"+(cutindex);
document.getElementById(\$cut2name).value='';
}
var i=document.getElementById('CHOICES_{$this->id}').options.length;
document.getElementById('CHOICES_{$this->id}').options[i] = new Option(\$text, \$value);
if (document.getElementById('CHOICES_{$this->id}').options.length > 0)
{
document.getElementById('CHOICES_{$this->id}').disabled=false;
}
}
//-->
</script>
<table>
<tr>
<td align='left' valign='top' width='200'>
<strong>{$language->gT("Your choices")}:</strong><br />
{$choicelist}
</td>
<td align='left'>
<strong>{$language->gT("Your ranking")}:</strong><br />
{$ranklist}
</td>
</tr>
</table>
<input type='hidden' name='multi' value='{$anscount}' />
<input type='hidden' name='lastfield' value='' />
OUTPUT;
$output .="</li>";
$output .= '</ul>';
$output .= '</div>';
return $output;
}

Expand Down Expand Up @@ -724,4 +607,4 @@ public function questionProperties($prop = false)
return $prop?$props[$prop]:$props;
}
}
?>
?>

0 comments on commit f524f14

Please sign in to comment.