package WebGUI::Wobject::Survey; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2003 Plain Black LLC. #------------------------------------------------------------------- # Please read the legal notices (docs/legal.txt) and the license # (docs/license.txt) that came with this distribution before using # this software. #------------------------------------------------------------------- # http://www.plainblack.com info@plainblack.com #------------------------------------------------------------------- use strict; use Tie::CPHash; use WebGUI::DateTime; use WebGUI::HTMLForm; use WebGUI::Icon; use WebGUI::International; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; use WebGUI::URL; use WebGUI::Utility; use WebGUI::Wobject; our @ISA = qw(WebGUI::Wobject); #------------------------------------------------------------------- sub _addAnswer { $_[0]->setCollateral("Survey_answer","Survey_answerId",{ Survey_id=>$_[0]->get("Survey_id"), Survey_questionId=>$_[2], Survey_answerId=>"new", answer=>WebGUI::International::get($_[1],$_[0]->get("namespace")) },1,0,"Survey_id"); } #------------------------------------------------------------------- sub _setAnswerType { $_[0]->setCollateral("Survey_question","Survey_questionId",{ Survey_questionId=>$_[2], Survey_id=>$_[0]->get("Survey_id"), answerFieldType=>$_[1] },1,0,"Survey_id"); } #------------------------------------------------------------------- sub _submenu { my ($output, $key); return $_[1] if ($session{form}{makePrintable}); $output = '
'; $output .= $_[1]; $output .= ''; $output .= '
  • '.WebGUI::International::get(62,$_[0]->get("namespace")).''; $output .= '
  • '.WebGUI::International::get(63,$_[0]->get("namespace")).''; $output .= '
  • '.WebGUI::International::get(64,$_[0]->get("namespace")).''; $output .= '
  • '.WebGUI::International::get(65,$_[0]->get("namespace")).''; $output .= '
  • '.WebGUI::International::get(61,$_[0]->get("namespace")).''; $output .= '
  • '.WebGUI::International::get(59,$_[0]->get("namespace")).''; $output .= '
  • '.WebGUI::International::get(60,$_[0]->get("namespace")).''; $output .= '
  • '; return $output; } #------------------------------------------------------------------- sub duplicate { my ($w, $newSurveyId, $qdata, $adata, $rdata, $a, $b, $c); $w = $_[0]->SUPER::duplicate($_[1]); $w = WebGUI::Wobject::Survey->new({wobjectId=>$w,namespace=>$_[0]->get("namespace")}); $newSurveyId = getNextId("Survey_id"); $w->set({ Survey_id=>$newSurveyId }); $a = WebGUI::SQL->read("select * from Survey_question where Survey_id=".$_[0]->get("Survey_id") ." order by sequenceNumber"); while ($qdata = $a->hashRef) { $b = WebGUI::SQL->read("select * from Survey_answer where Survey_questionId=".$qdata->{Survey_questionId} ." order by sequenceNumber"); $qdata->{Survey_questionId} = "new"; $qdata->{Survey_id} = $newSurveyId; $qdata->{Survey_questionId} = $w->setCollateral("Survey_question","Survey_questionId",$qdata,1,0,"Survey_id"); while ($adata = $b->hashRef) { $c = WebGUI::SQL->read("select * from Survey_response where Survey_answerId=".$adata->{Survey_answerId}); $adata->{Survey_answerId} = "new"; $adata->{Survey_questionId} = $qdata->{Survey_questionId}; $adata->{Survey_id} = $newSurveyId; $adata->{Survey_answerId} = $w->setCollateral("Survey_answer", "Survey_answerId", $adata, 1, 0, "Survey_Id"); while ($rdata = $c->hashRef) { $rdata->{Survey_responseId} = "new"; $rdata->{Survey_answerId} = $adata->{Survey_answerId}; $rdata->{Survey_id} = $newSurveyId; $rdata->{Survey_questionId} = $qdata->{Survey_questionId}; $w->setCollateral("Survey_response","Survey_responseId",$rdata,0,0); } $c->finish; } $b->finish; } $a->finish; } #------------------------------------------------------------------- sub name { return WebGUI::International::get(1,$_[0]->get("namespace")); } #------------------------------------------------------------------- sub new { my $class = shift; my $property = shift; my $self = WebGUI::Wobject->new( -properties=>$property, -extendedProperties=>{ Survey_id=>{}, questionOrder=>{ defaultValue=>"sequential" }, groupToTakeSurvey=>{ defaultValue=>2 }, groupToViewReports=>{ defaultValue=>4 }, mode=>{ defaultValue=>"survey" } } ); bless $self, $class; } #------------------------------------------------------------------- sub purge { my ($count) = WebGUI::SQL->quickArray("select count(*) from Survey where Survey_id=".$_[0]->get("Survey_id")); if ($count < 2) { ### Check for other wobjects using this survey. WebGUI::SQL->write("delete from Survey_question where Survey_id=".$_[0]->get("Survey_id")); WebGUI::SQL->write("delete from Survey_answer where Survey_id=".$_[0]->get("Survey_id")); WebGUI::SQL->write("delete from Survey_response where Survey_id=".$_[0]->get("Survey_id")); } $_[0]->SUPER::purge(); } #------------------------------------------------------------------- sub uiLevel { return 5; } #------------------------------------------------------------------- sub www_deleteAnswer { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); return $_[0]->confirm(WebGUI::International::get(45,$_[0]->get("namespace")), WebGUI::URL::page('func=deleteAnswerConfirm&wid='.$_[0]->get("wobjectId").'&aid=' .$session{form}{aid}.'&qid='.$session{form}{qid})); } #------------------------------------------------------------------- sub www_deleteAnswerConfirm { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); WebGUI::SQL->write("delete from Survey_response where Survey_answerId=$session{form}{aid}"); $_[0]->deleteCollateral("Survey_answer","Survey_answerId",$session{form}{aid}); $_[0]->reorderCollateral("Survey_answer","Survey_answerId","Survey_id"); return $_[0]->www_editQuestion; } #------------------------------------------------------------------- sub www_deleteQuestion { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); return $_[0]->confirm(WebGUI::International::get(44,$_[0]->get("namespace")), WebGUI::URL::page('func=deleteQuestionConfirm&wid='.$_[0]->get("wobjectId").'&qid='.$session{form}{qid})); } #------------------------------------------------------------------- sub www_deleteQuestionConfirm { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); WebGUI::SQL->write("delete from Survey_answer where Survey_questionId=$session{form}{qid}"); WebGUI::SQL->write("delete from Survey_response where Survey_questionId=$session{form}{qid}"); $_[0]->deleteCollateral("Survey_question","Survey_questionId",$session{form}{qid}); $_[0]->reorderCollateral("Survey_question","Survey_questionId","Survey_id"); return $_[0]->www_edit; } #------------------------------------------------------------------- sub www_deleteResponses { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); return $_[0]->_submenu($_[0]->confirm(WebGUI::International::get(72,$_[0]->get("namespace")), WebGUI::URL::page('func=deleteResponsesConfirm&wid='.$_[0]->get("wobjectId").'&uid=' .$session{form}{uid}.'&ip='.$session{form}{ip}))); } #------------------------------------------------------------------- sub www_deleteResponsesConfirm { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); WebGUI::SQL->write("delete from Survey_response where ((userId=$session{form}{uid} and userId<>1) or (userId=1 and ipAddress='$session{form}{ip}')) and Survey_id=".$_[0]->get("Survey_id")); return $_[0]->www_viewGradebook; } #------------------------------------------------------------------- sub www_deleteAllResponses { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); return $_[0]->_submenu($_[0]->confirm(WebGUI::International::get(74,$_[0]->get("namespace")), WebGUI::URL::page('func=deleteAllResponsesConfirm&wid='.$_[0]->get("wobjectId")))); } #------------------------------------------------------------------- sub www_deleteAllResponsesConfirm { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); WebGUI::SQL->write("delete from Survey_response where Survey_id=".$_[0]->get("Survey_id")); return ""; } #------------------------------------------------------------------- sub www_edit { my ($output, $sth, %data); tie %data, 'Tie::CPHash'; my $properties = WebGUI::HTMLForm->new; my $layout = WebGUI::HTMLForm->new; my $privileges = WebGUI::HTMLForm->new; $properties->hidden("Survey_id",($_[0]->get("Survey_id") || getNextId("Survey_id"))); $layout->select( -name=>"questionOrder", -options=>{ sequential => WebGUI::International::get(5,$_[0]->get("namespace")), random => WebGUI::International::get(6,$_[0]->get("namespace")), response => WebGUI::International::get(7,$_[0]->get("namespace")) }, -label=>WebGUI::International::get(8,$_[0]->get("namespace")), -value=>[$_[0]->getValue("questionOrder")] ); $properties->select( -name=>"mode", -options=>{ survey => WebGUI::International::get(9,$_[0]->get("namespace")), quiz => WebGUI::International::get(10,$_[0]->get("namespace")) }, -label=>WebGUI::International::get(11,$_[0]->get("namespace")), -value=>[$_[0]->getValue("mode")] ); $privileges->group( -name=>"groupToTakeSurvey", -value=>[$_[0]->getValue("groupToTakeSurvey")], -label=>WebGUI::International::get(12,$_[0]->get("namespace")) ); $privileges->group( -name=>"groupToViewReports", -label=>WebGUI::International::get(13,$_[0]->get("namespace")), -value=>[$_[0]->getValue("groupToViewReports")] ); if ($_[0]->get("wobjectId") eq "new") { $properties->whatNext( -options=>{ addQuestion=>WebGUI::International::get(28,$_[0]->get("namespace")), backToPage=>WebGUI::International::get(745) }, -value=>"addQuestion" ); } $output = $_[0]->SUPER::www_edit( -properties=>$properties->printRowsOnly, -layout=>$layout->printRowsOnly, -privileges=>$privileges->printRowsOnly, -headingId=>2, -helpId=>1 ); if ($_[0]->get("wobjectId") ne "new") { $output .= ''.WebGUI::International::get(30,$_[0]->get("namespace")).'

    '; $sth = WebGUI::SQL->read("select Survey_questionId,question from Survey_question where Survey_id=" .$_[0]->get("Survey_id")." order by sequenceNumber"); while (%data = $sth->hash) { $output .= deleteIcon('func=deleteQuestion&wid='.$_[0]->get("wobjectId").'&qid='.$data{Survey_questionId}) .editIcon('func=editQuestion&wid='.$_[0]->get("wobjectId").'&qid='.$data{Survey_questionId}) .moveUpIcon('func=moveQuestionUp&wid='.$_[0]->get("wobjectId").'&qid='.$data{Survey_questionId}) .moveDownIcon('func=moveQuestionDown&wid='.$_[0]->get("wobjectId").'&qid='.$data{Survey_questionId}) .' '.$data{question}.'
    '; } $sth->finish; } return $output; } #------------------------------------------------------------------- sub www_editSave { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); $_[0]->SUPER::www_editSave(); if ($session{form}{proceed} eq "addQuestion") { $session{form}{qid} = "new"; return $_[0]->www_editQuestion; } return ""; } #------------------------------------------------------------------- sub www_editAnswer { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); my ($question, $output, $f, $answer); $answer = $_[0]->getCollateral("Survey_answer","Survey_answerId",$session{form}{aid}); $output = '

    '.WebGUI::International::get(18,$_[0]->get("namespace")).'

    '; $f = WebGUI::HTMLForm->new; $f->hidden("wid",$session{form}{wid}); $f->hidden("func","editAnswerSave"); $f->hidden("qid",$session{form}{qid}); $f->hidden("aid",$answer->{Survey_answerId}); $f->text( -name=>"answer", -value=>$answer->{answer}, -label=>WebGUI::International::get(19,$_[0]->get("namespace")) ); if ($_[0]->get("mode") eq "quiz") { $f->yesNo( -name=>"isCorrect", -value=>$answer->{isCorrect}, -label=>WebGUI::International::get(20,$_[0]->get("namespace")) ); } else { $f->hidden("isCorrect",0); } if ($_[0]->get("questionOrder") eq "response") { $question = WebGUI::SQL->buildHashRef("select Survey_questionId,question from Survey_question where Survey_id=".$_[0]->get("Survey_id")." order by sequenceNumber"); $f->select( -name=>"gotoQuestion", -options=>$question, -value=>[$answer->{gotoQuestion}], -label=>WebGUI::International::get(21,$_[0]->get("namespace")) ); } if ($answer->{Survey_answerId} eq "new") { my %options; tie %options, 'Tie::IxHash'; %options = ( "addAnswer"=>WebGUI::International::get(24,$_[0]->get("namespace")), "addQuestion"=>WebGUI::International::get(28,$_[0]->get("namespace")), "editQuestion"=>WebGUI::International::get(75,$_[0]->get("namespace")), "backToPage"=>WebGUI::International::get(745) ); $f->whatNext( -options=>\%options, -value=>"addAnswer" ); } $f->submit; $output .= $f->print; return $output; } #------------------------------------------------------------------- sub www_editAnswerSave { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); $_[0]->setCollateral("Survey_answer", "Survey_answerId", { Survey_answerId => $session{form}{aid}, Survey_questionId => $session{form}{qid}, answer => $session{form}{answer}, isCorrect => $session{form}{isCorrect}, Survey_id=>$_[0]->get("Survey_id"), gotoQuestion => $session{form}{gotoQuestion} },1,0,"Survey_Id"); if ($session{form}{proceed} eq "addQuestion") { $session{form}{qid} = "new"; } elsif ($session{form}{proceed} eq "addAnswer") { $session{form}{aid} = "new"; return $_[0]->www_editAnswer(); } elsif ($session{form}{proceed} eq "backToPage") { return ""; } return $_[0]->www_editQuestion(); } #------------------------------------------------------------------- sub www_editQuestion { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); my ($output, $f, $question, $answerFieldType, $sth, %data); tie %data, 'Tie::CPHash'; $question = $_[0]->getCollateral("Survey_question","Survey_questionId",$session{form}{qid}); $output = '

    '.WebGUI::International::get(17,$_[0]->get("namespace")).'

    '; $answerFieldType = $question->{answerFieldType} || "radioList"; $f = WebGUI::HTMLForm->new; $f->hidden("wid",$_[0]->get("wobjectId")); $f->hidden("func","editQuestionSave"); $f->hidden("qid",$question->{Survey_questionId}); $f->hidden("answerFieldType",$answerFieldType); $f->HTMLArea( -name=>"question", -value=>$question->{question}, -label=>WebGUI::International::get(14,$_[0]->get("namespace")) ); $f->yesNo( -name=>"allowComment", -value=>$question->{allowComment}, -label=>WebGUI::International::get(15,$_[0]->get("namespace")) ); $f->yesNo( -name=>"randomizeAnswers", -value=>$question->{randomizeAnswers}, -label=>WebGUI::International::get(16,$_[0]->get("namespace")) ); if ($question->{Survey_questionId} eq "new") { my %options; tie %options, 'Tie::IxHash'; %options = ( "addMultipleChoiceAnswer"=>WebGUI::International::get(24,$_[0]->get("namespace")), "addTextAnswer"=>WebGUI::International::get(29,$_[0]->get("namespace")), "addBooleanAnswer"=>WebGUI::International::get(25,$_[0]->get("namespace")), "addFrequencyAnswer"=>WebGUI::International::get(26,$_[0]->get("namespace")), "addOpinionAnswer"=>WebGUI::International::get(27,$_[0]->get("namespace")), #"addQuestion"=>WebGUI::International::get(28,$_[0]->get("namespace")), "backToPage"=>WebGUI::International::get(745) ); $f->whatNext( -options=>\%options, -value=>"addMultipleChoiceAnswer" ); } $f->submit; $output .= $f->print; if ($question->{Survey_questionId} ne "new" && $question->{answerFieldType} ne "text") { $output .= '{Survey_questionId}).'">'.WebGUI::International::get(23,$_[0]->get("namespace")).'

    '; $sth = WebGUI::SQL->read("select Survey_answerId,answer from Survey_answer where Survey_questionId=".$question->{Survey_questionId}." order by sequenceNumber"); while (%data = $sth->hash) { $output .= deleteIcon('func=deleteAnswer&wid='.$_[0]->get("wobjectId") .'&qid='.$question->{Survey_questionId}.'&aid='.$data{Survey_answerId}) .editIcon('func=editAnswer&wid='.$_[0]->get("wobjectId").'&qid='.$question->{Survey_questionId} .'&aid='.$data{Survey_answerId}) .moveUpIcon('func=moveAnswerUp&wid='.$_[0]->get("wobjectId") .'&qid='.$question->{Survey_questionId}.'&aid='.$data{Survey_answerId}) .moveDownIcon('func=moveAnswerDown&wid='.$_[0]->get("wobjectId").'&qid=' .$question->{Survey_questionId}.'&aid='.$data{Survey_answerId}) .' '.$data{answer}.'
    '; } $sth->finish; } return $output; } #------------------------------------------------------------------- sub www_editQuestionSave { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); $session{form}{qid} = $_[0]->setCollateral("Survey_question", "Survey_questionId", { question=>$session{form}{question}, Survey_questionId=>$session{form}{qid}, Survey_id=>$_[0]->get("Survey_id"), allowComment=>$session{form}{allowComment}, answerFieldType=>$session{form}{answerFieldType}, randomizeAnswers=>$session{form}{randomizeAnswers} },1,0,"Survey_id"); if ($session{form}{proceed} eq "addMultipleChoiceAnswer") { $session{form}{aid} = "new"; return $_[0]->www_editAnswer(); } elsif ($session{form}{proceed} eq "addTextAnswer") { $_[0]->_setAnswerType("text",$session{form}{qid}); $_[0]->_addAnswer(0,$session{form}{qid}); } elsif ($session{form}{proceed} eq "addBooleanAnswer") { $_[0]->_addAnswer(31,$session{form}{qid}); $_[0]->_addAnswer(32,$session{form}{qid}); return $_[0]->www_editQuestion(); } elsif ($session{form}{proceed} eq "addOpinionAnswer") { $_[0]->_addAnswer(33,$session{form}{qid}); $_[0]->_addAnswer(34,$session{form}{qid}); $_[0]->_addAnswer(35,$session{form}{qid}); $_[0]->_addAnswer(36,$session{form}{qid}); $_[0]->_addAnswer(37,$session{form}{qid}); $_[0]->_addAnswer(38,$session{form}{qid}); $_[0]->_addAnswer(39,$session{form}{qid}); return $_[0]->www_editQuestion(); } elsif ($session{form}{proceed} eq "addFrequencyAnswer") { $_[0]->_addAnswer(40,$session{form}{qid}); $_[0]->_addAnswer(41,$session{form}{qid}); $_[0]->_addAnswer(42,$session{form}{qid}); $_[0]->_addAnswer(43,$session{form}{qid}); $_[0]->_addAnswer(39,$session{form}{qid}); return $_[0]->www_editQuestion(); } elsif ($session{form}{proceed} eq "addQuestion") { $session{form}{qid} eq "new"; return $_[0]->www_editQuestion(); } elsif ($session{form}{proceed} eq "backToPage") { return "" } return $_[0]->www_edit; } #------------------------------------------------------------------- sub www_exportAnswers { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); $session{header}{filename} = WebGUI::URL::escape($_[0]->get("title")."_answers.tab"); $session{header}{mimetype} = "text/tab"; return WebGUI::SQL->quickTab("select * from Survey_answer where Survey_id=".$_[0]->get("Survey_id")); } #------------------------------------------------------------------- sub www_exportComposite { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); $session{header}{filename} = WebGUI::URL::escape($_[0]->get("title")."_composite.tab"); $session{header}{mimetype} = "text/tab"; return WebGUI::SQL->quickTab("select b.question, a.response, a.userId, a.username, a.ipAddress, a.comment, a.dateOfResponse from Survey_response a left join Survey_question b on a.Survey_questionId=b.Survey_questionId where a.Survey_id=".$_[0]->get("Survey_id")." order by a.userId, a.ipAddress, b.sequenceNumber"); } #------------------------------------------------------------------- sub www_exportQuestions { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); $session{header}{filename} = WebGUI::URL::escape($_[0]->get("title")."_questions.tab"); $session{header}{mimetype} = "text/tab"; return WebGUI::SQL->quickTab("select * from Survey_question where Survey_id=".$_[0]->get("Survey_id")); } #------------------------------------------------------------------- sub www_exportResponses { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); $session{header}{filename} = WebGUI::URL::escape($_[0]->get("title")."_responses.tab"); $session{header}{mimetype} = "text/tab"; return WebGUI::SQL->quickTab("select * from Survey_response where Survey_id=".$_[0]->get("Survey_id")); } #------------------------------------------------------------------- sub www_moveAnswerDown { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); $_[0]->moveCollateralDown("Survey_answer","Survey_answerId",$session{form}{aid},"Survey_id"); return $_[0]->www_editQuestion; } #------------------------------------------------------------------- sub www_moveAnswerUp { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); $_[0]->moveCollateralUp("Survey_answer","Survey_answerId",$session{form}{aid},"Survey_id"); return $_[0]->www_editQuestion; } #------------------------------------------------------------------- sub www_moveQuestionDown { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); $_[0]->moveCollateralDown("Survey_question","Survey_questionId",$session{form}{qid},"Survey_id"); return $_[0]->www_edit; } #------------------------------------------------------------------- sub www_moveQuestionUp { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); $_[0]->moveCollateralUp("Survey_question","Survey_questionId",$session{form}{qid},"Survey_id"); return $_[0]->www_edit; } #------------------------------------------------------------------- sub www_respond { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToTakeSurvey"))); return "" unless ($session{form}{Survey_answerId} ne ""); my ($previousResponse) = WebGUI::SQL->quickArray("select count(*) from Survey_response where Survey_answerId=$session{form}{Survey_answerId} and ((userId=".$session{user}{userId}." and userId<>1) or (userId=1 and ipAddress='".$session{form}{ip}."'))"); return "" if ($previousResponse); my $answer = $_[0]->getCollateral("Survey_answer","Survey_answerId",$session{form}{Survey_answerId}); my $response = $session{form}{response} || $answer->{answer}; $_[0]->setCollateral("Survey_response","Survey_responseId",{ Survey_responseId=>"new", Survey_answerId=>$session{form}{Survey_answerId}, Survey_questionId=>$answer->{Survey_questionId}, Survey_id=>$answer->{Survey_id}, comment=>$session{form}{comment}, response=>$response, userId=>$session{user}{userId}, username=>$session{user}{username}, dateOfResponse=>time(), ipAddress=>$session{env}{REMOTE_ADDR} },0,0); return ""; } #------------------------------------------------------------------- sub www_view { my ($output, $f, $previous, $questionOrder, $previousResponse, $question); $output = $_[0]->displayTitle; $output .= $_[0]->description; if (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))) { $output .= '' .WebGUI::International::get(68,$_[0]->get("namespace")).'

    '; } if (WebGUI::Privilege::isInGroup($_[0]->get("groupToTakeSurvey"))) { $previousResponse = WebGUI::SQL->quickHashRef("select Survey_questionId, Survey_answerId from Survey_response where Survey_id=".$_[0]->get("Survey_id") ." and ((userId=$session{user}{userId} and userId<>1) or (userId=1 and ipAddress='$session{env}{REMOTE_ADDR}')) order by dateOfResponse desc"); $questionOrder = $_[0]->get("questionOrder"); if ($previousResponse->{Survey_questionId}) { if ($questionOrder eq "random") { my @questions = WebGUI::SQL->buildArray("select Survey_questionId from Survey_response where Survey_id=".$_[0]->get("Survey_id")." and ((userId=$session{user}{userId} and userId<>1) or (userId=1 and ipAddress='$session{env}{REMOTE_ADDR}'))"); if ($#questions >= 0) { @questions = WebGUI::SQL->buildArray("select Survey_questionId from Survey_question where Survey_id=".$_[0]->get("Survey_id") ." and Survey_questionId not in (".join(",",@questions).")"); } if ($#questions >= 0) { $question = $_[0]->getCollateral("Survey_question","Survey_questionId", $questions[rand($#questions+1)]); } } if ($questionOrder eq "response" && $previousResponse->{Survey_answerId}) { my ($responseDriver) = WebGUI::SQL->quickArray("select gotoQuestion from Survey_answer where Survey_answerId=".$previousResponse->{Survey_answerId}); if ($responseDriver) { $question = $_[0]->getCollateral("Survey_question","Survey_questionId",$responseDriver); } else { $questionOrder = "sequential"; } } if ($questionOrder eq "sequential" && $previousResponse->{Survey_questionId}) { my $previousQuestion = $_[0]->getCollateral("Survey_question","Survey_questionId", $previousResponse->{Survey_questionId}); $previousQuestion->{sequenceNumber} = 0 unless($previousQuestion->{sequenceNumber}); $question = WebGUI::SQL->quickHashRef("select * from Survey_question where Survey_id=" .$_[0]->get("Survey_id")." and sequenceNumber>".$previousQuestion->{sequenceNumber} ." order by sequenceNumber"); } } else { if ($questionOrder eq "random") { my @questions = WebGUI::SQL->buildArray("select Survey_questionId from Survey_question where Survey_id=".$_[0]->get("Survey_id")); $question = $_[0]->getCollateral("Survey_question","Survey_questionId", $questions[rand($#questions+1)]); if ($question->{Survey_questionId} eq "new") { delete $question->{Survey_questionId}; } } else { $question = WebGUI::SQL->quickHashRef("select * from Survey_question where Survey_id=".$_[0]->get("Survey_id")." order by sequenceNumber"); } } if ($question->{Survey_questionId}) { $output .= $question->{question}; $f = WebGUI::HTMLForm->new; $f->hidden("func","respond"); $f->hidden("wid",$_[0]->get("wobjectId")); if ($question->{answerFieldType} eq "text") { my ($answer) = WebGUI::SQL->quickArray("select Survey_answerId from Survey_answer where Survey_questionId=".$question->{Survey_questionId}); $f->hidden("Survey_answerId",$answer); $f->text( -name=>"response" ); } else { my $answer = WebGUI::SQL->buildHashRef("select Survey_answerId,answer from Survey_answer where Survey_questionId=".$question->{Survey_questionId}." order by sequenceNumber"); if ($question->{randomizeAnswers}) { $answer = randomizeHash($answer); } $f->radioList( -options=>$answer, -name=>"Survey_answerId", -vertical=>1 ); } if ($question->{allowComment}) { $f->textarea( -name=>"comment", -label=>WebGUI::International::get(51,$_[0]->get("namespace")) ); } $f->submit(WebGUI::International::get(50,$_[0]->get("namespace"))); $output .= $f->print; } else { if ($_[0]->get("mode") eq "survey") { $output .= WebGUI::International::get(46,$_[0]->get("namespace")); } else { $output .= WebGUI::International::get(47,$_[0]->get("namespace")); my ($questionCount) = WebGUI::SQL->quickArray("select count(*) from Survey_question where Survey_id=".$_[0]->get("Survey_id")); my ($correctCount) = WebGUI::SQL->quickArray("select count(*) from Survey_response a, Survey_answer b where a.Survey_id=".$_[0]->get("Survey_id")." and ((userId=$session{user}{userId} and userId<>1) or (userId=1 and ipAddress='$session{env}{REMOTE_ADDR}')) and a.Survey_answerId=b.Survey_answerId and b.isCorrect=1"); if ($questionCount > 0) { $output .= "

    ".WebGUI::International::get(52,$_[0]->get("namespace")).": " .$correctCount."/".$questionCount ."
    ".WebGUI::International::get(54,$_[0]->get("namespace")).": " .round(($correctCount/$questionCount)*100)."%

    "; } } } } else { if ($_[0]->get("mode") eq "survey") { $output .= WebGUI::International::get(48,$_[0]->get("namespace")); } else { $output .= WebGUI::International::get(49,$_[0]->get("namespace")); } } return $output; } #------------------------------------------------------------------- sub www_viewComments { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); my ($output, $sth, $comment); $output = '

    '.WebGUI::International::get(57,$_[0]->get("namespace")).'

    '; $sth = WebGUI::SQL->read("select comment from Survey_response where Survey_questionId=".$session{form}{qid}); while (($comment) = $sth->array) { $output .= $comment."

    \n"; } $sth->finish; return $_[0]->_submenu($output); } #------------------------------------------------------------------- sub www_viewGradebook { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); my ($output, $p, $users, $user); $output = '

    '.WebGUI::International::get(71,$_[0]->get("namespace")).'

    '; $p = WebGUI::Paginator->new('func=viewGradebook&wid='.$_[0]->get("wobjectId")); $p->setDataByQuery("select userId,username,ipAddress from Survey_response group by userId,username,ipAddress order by username,ipAddress"); $users = $p->getPageData; my ($questionCount) = WebGUI::SQL->quickArray("select count(*) from Survey_question where Survey_id=".$_[0]->get("Survey_id")); $output .= ''; $output .= ''; foreach $user (@$users) { $output .= ''; $output .= ''; my ($correctCount) = WebGUI::SQL->quickArray("select count(*) from Survey_response a, Survey_answer b where a.Survey_id=".$_[0]->get("Survey_id")." and ((userId=".$user->{userId}." and userId<>1) or (userId=1 and ipAddress='".$user->{ipAddress}."')) and a.Survey_answerId=b.Survey_answerId and b.isCorrect=1"); $output .= ''; $output .= ''; $output .= ''; } $output .= '
    '.WebGUI::International::get(67,$_[0]->get("namespace")).' '.WebGUI::International::get(52,$_[0]->get("namespace")).' '.WebGUI::International::get(54,$_[0]->get("namespace")).'
    '; if ($user->{userId} == 1) { $output .= $user->{ipAddress}; } else { $output .= $user->{username}; } $output .= ''.$correctCount.'/'.$questionCount.''.round(($correctCount/$questionCount)*100).'
    '; $output .= $p->getBarTraditional; return $_[0]->_submenu($output); } #------------------------------------------------------------------- sub www_viewIndividualSurvey { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); my ($output, $questions, $sth, $qdata, $rdata, $adata, $p); $output = '

    '.WebGUI::International::get(70,$_[0]->get("namespace")).'

    '; $output .= ''.WebGUI::International::get(69,$_[0]->get("namespace")).'

    '; my ($start) = WebGUI::SQL->quickArray("select min(dateOfResponse) from Survey_response where Survey_id=".$_[0]->get("Survey_id")." and ((userId=".$session{form}{uid}." and userId<>1) or (userId=1 and ipAddress='".$session{form}{ip}."'))"); my ($end) = WebGUI::SQL->quickArray("select max(dateOfResponse) from Survey_response where Survey_id=".$_[0]->get("Survey_id")." and ((userId=".$session{form}{uid}." and userId<>1) or (userId=1 and ipAddress='".$session{form}{ip}."'))"); $output .= ''.WebGUI::International::get(76,$_[0]->get("namespace")).': '.epochToHuman($start).'
    '; $output .= ''.WebGUI::International::get(77,$_[0]->get("namespace")).': '.epochToHuman($end).'
    '; $output .= ''.WebGUI::International::get(78,$_[0]->get("namespace")).': '.int(($end-$start)/60).' ' .WebGUI::International::get(79,$_[0]->get("namespace")).', '.(($end-$start)%60).' ' .WebGUI::International::get(80,$_[0]->get("namespace")).'

    '; $p = WebGUI::Paginator->new(WebGUI::URL::page('func=viewIndividualSurvey&wid='.$_[0]->get("wobjectId") .'&uid='.$session{form}{uid}.'&ip='.$session{form}{ip})); $p->setDataByQuery("select Survey_questionId,question,answerFieldType from Survey_question where Survey_id=".$_[0]->get("Survey_id")." order by sequenceNumber"); $questions = $p->getPageData; foreach $qdata (@$questions) { $output .= ''.$qdata->{question}.'
    ' .''; if ($qdata->{answerFieldType} eq "radioList") { $output .= ''; } $output .= ''; $rdata = WebGUI::SQL->quickHashRef("select Survey_answerId,response,comment from Survey_response where Survey_questionId=".$qdata->{Survey_questionId}." and ((userId=".$session{form}{uid}." and userId<>1) or (userId=1 and ipAddress='".$session{form}{ip}."'))"); $output .= ''; if ($rdata->{comment} ne "") { $output .= '' .''; } $output .= "
    ' .WebGUI::International::get(19,$_[0]->get("namespace")).''; $sth = WebGUI::SQL->read("select Survey_answerId,answer from Survey_answer where Survey_questionId=".$qdata->{Survey_questionId}." and isCorrect=1 order by sequenceNumber"); while ($adata = $sth->hashRef) { $output .= $adata->{answer}.'
    '; } $sth->finish; $output .= '
    ' .WebGUI::International::get(66,$_[0]->get("namespace")).''.$rdata->{response}.'
    ' .WebGUI::International::get(57,$_[0]->get("namespace")).''.$rdata->{comment}.'

    \n"; } return $_[0]->_submenu($output); } #------------------------------------------------------------------- sub www_viewResponses { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); my ($output, $sth, $response); $output = '

    '.WebGUI::International::get(66,$_[0]->get("namespace")).'

    '; $sth = WebGUI::SQL->read("select response from Survey_response where Survey_questionId=".$session{form}{qid}); while (($response) = $sth->array) { $output .= $response."

    \n"; } $sth->finish; return $_[0]->_submenu($output); } #------------------------------------------------------------------- sub www_viewStatisticalOverview { return "" unless (WebGUI::Privilege::isInGroup($_[0]->get("groupToViewReports"))); my ($output, $p, $questions, $question, $sth, $answer, $totalResponses, $data); $output = '

    '.WebGUI::International::get(58,$_[0]->get("namespace")).'

    '; $output .= ''.WebGUI::International::get(73,$_[0]->get("namespace")).'

    '; $p = WebGUI::Paginator->new(WebGUI::URL::page('op=viewStatisticalOverview')); $p->setDataByQuery("select Survey_questionId,question,answerFieldType,allowComment from Survey_question where Survey_id=".$_[0]->get("Survey_id")." order by sequenceNumber"); $questions = $p->getPageData; foreach $question (@$questions) { $output .= ''.$question->{question}.''; if ($question->{answerFieldType} eq "radioList") { $output .= ''; $output .= ''; ($totalResponses) = WebGUI::SQL->quickArray("select count(*) from Survey_response where Survey_questionId=".$question->{Survey_questionId}); $sth = WebGUI::SQL->read("select Survey_answerId,answer,isCorrect from Survey_answer where Survey_questionId=".$question->{Survey_questionId}." order by sequenceNumber"); while ($answer = $sth->hashRef) { if ($answer->{isCorrect}) { $output .= ''; } else { $output .= ''; } $output .= ''; ($data) = WebGUI::SQL->quickArray("select count(*) from Survey_response where Survey_answerId=".$answer->{Survey_answerId}); $output .= ''; $output .= ''; $output .= ''; } $sth->finish; $output .= "
    '.WebGUI::International::get(19,$_[0]->get("namespace")).' '.WebGUI::International::get(53,$_[0]->get("namespace")).' '.WebGUI::International::get(54,$_[0]->get("namespace")).'
    '.$answer->{answer}.''.$data.''; if ($totalResponses) { $output .= round(($data/$totalResponses)*100); } else { $output .= '0'; } $output .= '
    "; } else { $output .= '
    '.WebGUI::International::get(55,$_[0]->get("namespace")) .'
    '; } if ($question->{allowComment}) { $output .= ''.WebGUI::International::get(56,$_[0]->get("namespace")).''; } $output .= '


    '; } $output .= $p->getBarTraditional; return $_[0]->_submenu($output); } 1;