Made perlcritic a little less grumpy about Survey.pm

This commit is contained in:
Patrick Donelan 2009-02-11 09:28:16 +00:00
parent 5a2f514a5a
commit d9316f47c4

View file

@ -487,6 +487,10 @@ Takes the address of a survey object and creates a copy. The copy is placed at
Returns the address to the new object. Returns the address to the new object.
=head3 $address
See L<WebGUI::Asset::Wobject::Survey::SurveyJSON/Address Parameter>
=cut =cut
sub copyObject { sub copyObject {
@ -512,9 +516,7 @@ Returns the address to the parent object, or the very first section.
=head3 $address =head3 $address
An array ref. The first element of the array ref is the index of See L<WebGUI::Asset::Wobject::Survey::SurveyJSON/Address Parameter>
the section. The second element is the index of the question in
that section. The third element is the index of the answer.
=cut =cut
@ -549,11 +551,11 @@ sub www_newObject {
my $self = shift; my $self = shift;
return $self->session->privilege->insufficient() return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get('groupToEditSurvey') ) ); if !$self->session->user->isInGroup( $self->get('groupToEditSurvey') );
my $ref; my $ref;
my $ids = $self->session->form->process("data"); my $ids = $self->session->form->process('data');
my @inAddress = split /-/, $ids; my @inAddress = split /-/, $ids;
@ -578,9 +580,9 @@ sub www_dragDrop {
my $self = shift; my $self = shift;
return $self->session->privilege->insufficient() return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get('groupToEditSurvey') ) ); if !$self->session->user->isInGroup( $self->get('groupToEditSurvey') );
my $p = from_json( $self->session->form->process("data") ); my $p = from_json( $self->session->form->process('data') );
my @tid = split /-/, $p->{target}->{id}; my @tid = split /-/, $p->{target}->{id};
my @bid = split /-/, $p->{before}->{id}; my @bid = split /-/, $p->{before}->{id};
@ -636,7 +638,7 @@ sub www_dragDrop {
$self->saveSurveyJSON(); $self->saveSurveyJSON();
return $self->www_loadSurvey( { address => $address } ); return $self->www_loadSurvey( { address => $address } );
} ## end sub www_dragDrop }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -657,13 +659,14 @@ sub www_loadSurvey {
my $address = defined $options->{address} ? $options->{address} : undef; my $address = defined $options->{address} ? $options->{address} : undef;
if ( !defined $address ) { if ( !defined $address ) {
if ( my $inAddress = $self->session->form->process("data") ) { if ( my $inAddress = $self->session->form->process('data') ) {
if( $inAddress eq '-' ) { if ( $inAddress eq q{-} ) {
$editflag = 0; $editflag = 0;
$address = [ 0 ]; $address = [0];
} else { }
$address = [ split /-/, $inAddress ]; else {
} $address = [ split /-/, $inAddress ];
}
} }
else { else {
$address = [0]; $address = [0];
@ -676,22 +679,22 @@ sub www_loadSurvey {
my $editHtml; my $editHtml;
if ( $var->{type} eq 'section' ) { if ( $var->{type} eq 'section' ) {
$editHtml = $self->processTemplate( $var, $self->get("sectionEditTemplateId") ); $editHtml = $self->processTemplate( $var, $self->get('sectionEditTemplateId') );
} }
elsif ( $var->{type} eq 'question' ) { elsif ( $var->{type} eq 'question' ) {
$editHtml = $self->processTemplate( $var, $self->get("questionEditTemplateId") ); $editHtml = $self->processTemplate( $var, $self->get('questionEditTemplateId') );
} }
elsif ( $var->{type} eq 'answer' ) { elsif ( $var->{type} eq 'answer' ) {
$editHtml = $self->processTemplate( $var, $self->get("answerEditTemplateId") ); $editHtml = $self->processTemplate( $var, $self->get('answerEditTemplateId') );
} }
# Generate the list of valid goto targets # Generate the list of valid goto targets
my @gotoTargets = $self->surveyJSON->getGotoTargets; my @gotoTargets = $self->surveyJSON->getGotoTargets;
my %buttons; my %buttons;
$buttons{question} = $$address[0]; $buttons{question} = $address->[0];
if ( @$address == 2 or @$address == 3 ) { if ( @{$address} == 2 or @{$address} == 3 ) {
$buttons{answer} = "$$address[0]-$$address[1]"; $buttons{answer} = "$address->[0]-$address->[1]";
} }
my $data = $self->surveyJSON->getDragDropList($address); my $data = $self->surveyJSON->getDragDropList($address);
@ -702,7 +705,7 @@ sub www_loadSurvey {
my @ids; my @ids;
my ( $s, $q, $a ) = ( 0, 0, 0 ); #bools on if a button has already been created my ( $s, $q, $a ) = ( 0, 0, 0 ); #bools on if a button has already been created
foreach (@$data) { foreach (@{$data}) {
if ( $_->{type} eq 'section' ) { if ( $_->{type} eq 'section' ) {
$lastId{section} = ++$scount; $lastId{section} = ++$scount;
if ( $lastType eq 'answer' ) { if ( $lastType eq 'answer' ) {
@ -720,33 +723,35 @@ sub www_loadSurvey {
$a = 1; $a = 1;
} }
$html .= "<li id='$scount-$qcount' class='question'>Q" . ( $qcount + 1 ) . ": $_->{text}<\/li><br>\n"; $html .= "<li id='$scount-$qcount' class='question'>Q" . ( $qcount + 1 ) . ": $_->{text}<\/li><br>\n";
push( @ids, "$scount-$qcount" ); push @ids, "$scount-$qcount";
$lastType = 'question'; $lastType = 'question';
$acount = -1; $acount = -1;
} }
elsif ( $_->{type} eq 'answer' ) { elsif ( $_->{type} eq 'answer' ) {
$lastId{answer} = ++$acount; $lastId{answer} = ++$acount;
$html .= "<li id='$scount-$qcount-$acount' class='answer'>A" . ( $acount + 1 ) . ": $_->{text}<\/li><br>\n"; $html
push( @ids, "$scount-$qcount-$acount" ); .= "<li id='$scount-$qcount-$acount' class='answer'>A"
. ( $acount + 1 )
. ": $_->{text}<\/li><br>\n";
push @ids, "$scount-$qcount-$acount";
$lastType = 'answer'; $lastType = 'answer';
} }
} ## end foreach (@$data) }
#address is the address of the focused object
#buttons are the data to create the Add buttons
#edithtml is the html edit the object
#ddhtml is the html to create the draggable html divs
#ids is a list of all ids passed in which are draggable (for adding events)
#type is the object type
my $return = { my $return = {
"address", $address, "buttons", \%buttons, address => $address, # the address of the focused object
"edithtml", $editflag ? $editHtml : '', buttons => \%buttons, # the data to create the Add buttons
"ddhtml", $html, "ids", \@ids, "type", $var->{type} edithtml => $editflag ? $editHtml : q{}, # the html edit the object
,gotoTargets => \@gotoTargets, ddhtml => $html, # the html to create the draggable html divs
ids => \@ids, # list of all ids passed in which are draggable (for adding events)
type => $var->{type}, # the object type
gotoTargets => \@gotoTargets,
}; };
$self->session->http->setMimeType('application/json'); $self->session->http->setMimeType('application/json');
return to_json($return); return to_json($return);
} ## end sub www_loadSurvey }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -759,13 +764,14 @@ See WebGUI::Asset::prepareView() for details.
sub prepareView { sub prepareView {
my $self = shift; my $self = shift;
$self->SUPER::prepareView(); $self->SUPER::prepareView();
my $templateId = $self->get("templateId"); my $templateId = $self->get('templateId');
if ( $self->session->form->process("overrideTemplateId") ne "" ) { if ( $self->session->form->process('overrideTemplateId') ne q{} ) {
$templateId = $self->session->form->process("overrideTemplateId"); $templateId = $self->session->form->process('overrideTemplateId');
} }
my $template = WebGUI::Asset::Template->new( $self->session, $templateId ); my $template = WebGUI::Asset::Template->new( $self->session, $templateId );
$template->prepare; $template->prepare;
$self->{_viewTemplate} = $template; $self->{_viewTemplate} = $template;
return;
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -778,9 +784,9 @@ Completely remove from WebGUI.
sub purge { sub purge {
my $self = shift; my $self = shift;
$self->session->db->write( "delete from Survey_response where assetId = ?", [ $self->getId() ] ); $self->session->db->write( 'delete from Survey_response where assetId = ?', [ $self->getId() ] );
$self->session->db->write( "delete from Survey_tempReport where assetId = ?", [ $self->getId() ] ); $self->session->db->write( 'delete from Survey_tempReport where assetId = ?', [ $self->getId() ] );
$self->session->db->write( "delete from Survey where assetId = ?", [ $self->getId() ] ); $self->session->db->write( 'delete from Survey where assetId = ?', [ $self->getId() ] );
return $self->SUPER::purge; return $self->SUPER::purge;
} }
@ -794,14 +800,8 @@ See WebGUI::Asset::purgeCache() for details.
sub purgeCache { sub purgeCache {
my $self = shift; my $self = shift;
WebGUI::Cache->new( $self->session, "view_" . $self->getId )->delete; WebGUI::Cache->new( $self->session, 'view_' . $self->getId )->delete;
$self->SUPER::purgeCache; return $self->SUPER::purgeCache;
}
#-------------------------------------------------------------------
sub purgeRevision {
my $self = shift;
return $self->SUPER::purgeRevision;
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -824,7 +824,7 @@ sub view {
my $out = $self->processTemplate( $var, undef, $self->{_viewTemplate} ); my $out = $self->processTemplate( $var, undef, $self->{_viewTemplate} );
return $out; return $out;
} ## end sub view }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -845,9 +845,9 @@ sub getMenuVars {
$var{'view_transposed_results_url'} = $self->getUrl('func=exportTransposedResults'); $var{'view_transposed_results_url'} = $self->getUrl('func=exportTransposedResults');
$var{'view_statistical_overview_url'} = $self->getUrl('func=viewStatisticalOverview'); $var{'view_statistical_overview_url'} = $self->getUrl('func=viewStatisticalOverview');
$var{'view_grade_book_url'} = $self->getUrl('func=viewGradeBook'); $var{'view_grade_book_url'} = $self->getUrl('func=viewGradeBook');
$var{'user_canTakeSurvey'} = $self->session->user->isInGroup( $self->get("groupToTakeSurvey") ); $var{'user_canTakeSurvey'} = $self->session->user->isInGroup( $self->get('groupToTakeSurvey') );
$var{'user_canViewReports'} = $self->session->user->isInGroup( $self->get("groupToViewReports") ); $var{'user_canViewReports'} = $self->session->user->isInGroup( $self->get('groupToViewReports') );
$var{'user_canEditSurvey'} = $self->session->user->isInGroup( $self->get("groupToEditSurvey") ); $var{'user_canEditSurvey'} = $self->session->user->isInGroup( $self->get('groupToEditSurvey') );
return \%var; return \%var;
} }
@ -866,13 +866,13 @@ sub getResponseInfoForView {
my ( $code, $taken ); my ( $code, $taken );
my $maxTakes = $self->getValue("maxResponsesPerUser"); my $maxTakes = $self->getValue('maxResponsesPerUser');
my $id = $self->session->user->userId(); my $id = $self->session->user->userId();
my $anonId my $anonId
= $self->session->form->process("userid") = $self->session->form->process('userid')
|| $self->session->http->getCookies->{"Survey2AnonId"} || $self->session->http->getCookies->{Survey2AnonId}
|| undef; || undef;
$self->session->http->setCookie( "Survey2AnonId", $anonId ) if ($anonId); $anonId && $self->session->http->setCookie( Survey2AnonId => $anonId );
my $ip = $self->session->env->getIp; my $ip = $self->session->env->getIp;
my $string; my $string;
@ -898,37 +898,24 @@ sub getResponseInfoForView {
"select count(*) from Survey_response where $string = ? and assetId = ? and isComplete > 0", "select count(*) from Survey_response where $string = ? and assetId = ? and isComplete > 0",
[ $id, $self->getId() ] ); [ $id, $self->getId() ] );
} ## end if ( $anonId or $id !=... }
elsif ( $id == 1 ) { elsif ( $id == 1 ) {
my $responseId = $self->session->db->quickScalar( my $responseId = $self->session->db->quickScalar(
"select Survey_responseId from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete = 0", 'select Survey_responseId from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete = 0',
[ $id, $ip, $self->getId() ] [ $id, $ip, $self->getId() ]
); );
if ( !$responseId ) { if ( !$responseId ) {
$code = $self->session->db->quickScalar( $code = $self->session->db->quickScalar(
"select isComplete from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete > 0 order by endDate desc limit 1", 'select isComplete from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete > 0 order by endDate desc limit 1',
[ $id, $ip, $self->getId() ] [ $id, $ip, $self->getId() ]
); );
} }
$taken = $self->session->db->quickScalar( $taken = $self->session->db->quickScalar(
"select count(*) from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete > 0", 'select count(*) from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete > 0',
[ $id, $ip, $self->getId() ] [ $id, $ip, $self->getId() ]
); );
} ## end elsif ( $id == 1 ) }
return ( $code, $taken >= $maxTakes ); return ( $code, $taken >= $maxTakes );
} ## end sub getResponseInfoForView
#-------------------------------------------------------------------
=head2 www_view ( )
See WebGUI::Asset::Wobject::www_view() for details.
=cut
sub www_view {
my $self = shift;
return $self->SUPER::www_view(@_);
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -990,9 +977,9 @@ sub www_submitQuestions {
} }
my $responses = $self->session->form->paramsHashRef(); my $responses = $self->session->form->paramsHashRef();
delete $$responses{'func'}; delete $responses->{func};
my @goodResponses = keys %$responses; #load everything. my @goodResponses = keys %{$responses}; #load everything.
my $termInfo = $self->responseJSON->recordResponses( $responses ); my $termInfo = $self->responseJSON->recordResponses( $responses );
@ -1005,37 +992,37 @@ sub www_submitQuestions {
return $self->www_loadQuestions(); return $self->www_loadQuestions();
my $files = 0; # my $files = 0;
#
# for my $id(@$orderOf){ # # for my $id(@$orderOf){
#if a file upload, write to disk # #if a file upload, write to disk
# my $path; # # my $path;
# if($id->{'questionType'} eq 'File Upload'){ # # if($id->{'questionType'} eq 'File Upload'){
# $files = 1; # # $files = 1;
# my $storage = WebGUI::Storage->create($self->session); # # my $storage = WebGUI::Storage->create($self->session);
# my $filename = $storage->addFileFromFormPost( $id->{'Survey_answerId'} ); # # my $filename = $storage->addFileFromFormPost( $id->{'Survey_answerId'} );
# $path = $storage->getPath($filename); # # $path = $storage->getPath($filename);
# } # # }
#$self->session->errorHandler->error("Inserting a response ".$id->{'Survey_answerId'}." $responseId, $path, ".$$responses{$id->{'Survey_answerId'}}); # #$self->session->errorHandler->error("Inserting a response ".$id->{'Survey_answerId'}." $responseId, $path, ".$$responses{$id->{'Survey_answerId'}});
# $self->session->db->write("insert into Survey_questionResponse # # $self->session->db->write("insert into Survey_questionResponse
# select ?, Survey_sectionId, Survey_questionId, Survey_answerId, ?, ?, ?, now(), ?, ? from Survey_answer where Survey_answerId = ?", # # select ?, Survey_sectionId, Survey_questionId, Survey_answerId, ?, ?, ?, now(), ?, ? from Survey_answer where Survey_answerId = ?",
# [$self->getId(), $responseId, $$responses{ $id->{'Survey_answerId'} }, '', $path, ++$lastOrder, $id->{'Survey_answerId'}]); # # [$self->getId(), $responseId, $$responses{ $id->{'Survey_answerId'} }, '', $path, ++$lastOrder, $id->{'Survey_answerId'}]);
# } # # }
if ($files) { # if ($files) {
##special case, need to check for more questions in section, if not, more current up one # ##special case, need to check for more questions in section, if not, more current up one
my $lastA = $self->getLastAnswerInfo($responseId); # my $lastA = $self->getLastAnswerInfo($responseId);
my $questionId = $self->getNextQuestionId( $lastA->{'Survey_questionId'} ); # my $questionId = $self->getNextQuestionId( $lastA->{'Survey_questionId'} );
if ( !$questionId ) { # if ( !$questionId ) {
my $currentSection = $self->getCurrentSection($responseId); # my $currentSection = $self->getCurrentSection($responseId);
$currentSection = $self->getNextSection($currentSection); # $currentSection = $self->getNextSection($currentSection);
if ($currentSection) { # if ($currentSection) {
$self->setCurrentSection( $responseId, $currentSection ); # $self->setCurrentSection( $responseId, $currentSection );
} # }
} # }
return; # return;
} # }
return $self->www_loadQuestions($responseId); # return $self->www_loadQuestions($responseId);
} ## end sub www_submitQuestions }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -1080,12 +1067,10 @@ sub www_loadQuestions {
my $text = $self->prepareShowSurveyTemplate( $section, \@questions ); my $text = $self->prepareShowSurveyTemplate( $section, \@questions );
return $text; return $text;
} ## end sub www_loadQuestions }
#------------------------------------------------------------------- #-------------------------------------------------------------------
#called when the survey is over.
=head2 surveyEnd ( [ $url ], [ $completeCode ] ) =head2 surveyEnd ( [ $url ], [ $completeCode ] )
Marks the survey completed with either 1 or the $completeCode and then sends the url to the site home or if defined, $url. Marks the survey completed with either 1 or the $completeCode and then sends the url to the site home or if defined, $url.
@ -1113,38 +1098,38 @@ sub surveyEnd {
if ( my $responseId = $self->responseId ) { if ( my $responseId = $self->responseId ) {
# $self->session->db->write("update Survey_response set endDate = ? and isComplete > 0 where Survey_responseId = ?",[WebGUI::DateTime->now->toDatabase,$responseId]); # $self->session->db->write("update Survey_response set endDate = ? and isComplete > 0 where Survey_responseId = ?",[WebGUI::DateTime->now->toDatabase,$responseId]);
$self->session->db->setRow( $self->session->db->setRow(
"Survey_response", 'Survey_response',
"Survey_responseId", { 'Survey_responseId', {
Survey_responseId => $responseId, Survey_responseId => $responseId,
endDate => time(), #WebGUI::DateTime->now->toDatabase, endDate => scalar time, #WebGUI::DateTime->now->toDatabase,
isComplete => $completeCode isComplete => $completeCode
} }
); );
} }
if ($self->get('doAfterTimeLimit') eq 'restartSurvey' && $completeCode == 2){ if ($self->get('doAfterTimeLimit') eq 'restartSurvey' && $completeCode == 2){
$self->responseJSON->startTime(time()); $self->responseJSON->startTime(scalar time);
undef $self->{_responseJSON}; undef $self->{_responseJSON};
undef $self->{responseId}; undef $self->{responseId};
return $self->www_loadQuestions('1'); return $self->www_loadQuestions('1');
}else{ } else {
if ( $url !~ /\w/ ) { $url = 0; } if ( $url !~ /\w/ ) { $url = 0; }
if ( $url eq "undefined" ) { $url = 0; } if ( $url eq 'undefined' ) { $url = 0; }
if ( !$url ) { if ( !$url ) {
$url $url
= $self->session->db->quickScalar( = $self->session->db->quickScalar(
"select exitURL from Survey where assetId = ? order by revisionDate desc limit 1", 'select exitURL from Survey where assetId = ? order by revisionDate desc limit 1',
[ $self->getId() ] ); [ $self->getId() ] );
if ( !$url ) { if ( !$url ) {
$url = "/"; $url = q{/};
} }
} }
} }
$url = $self->session->url->gateway($url); $url = $self->session->url->gateway($url);
#$self->session->http->setRedirect($url); #$self->session->http->setRedirect($url);
#$self->session->http->setMimeType('application/json'); #$self->session->http->setMimeType('application/json');
my $json = to_json( { "type", "forward", "url", $url } ); my $json = to_json( { type => 'forward', url => $url } );
return $json; return $json;
} ## end sub surveyEnd }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -1171,50 +1156,50 @@ sub prepareShowSurveyTemplate {
my %hidden = ( 'Hidden', 1 ); my %hidden = ( 'Hidden', 1 );
foreach my $q (@$questions) { foreach my $q (@$questions) {
if ( $fileUpload{ $$q{'questionType'} } ) { $q->{'fileLoader'} = 1; } if ( $fileUpload{ $q->{questionType} } ) { $q->{fileLoader} = 1; }
elsif ( $text{ $$q{'questionType'} } ) { $q->{'textType'} = 1; } elsif ( $text{ $q->{questionType} } ) { $q->{textType} = 1; }
elsif ( $textArea{ $$q{'questionType'} } ) { $q->{'textAreaType'} = 1; } elsif ( $textArea{ $q->{questionType} } ) { $q->{textAreaType} = 1; }
elsif ( $hidden{ $$q{'questionType'} } ) { $q->{'hidden'} = 1; } elsif ( $hidden{ $q->{questionType} } ) { $q->{hidden} = 1; }
elsif ( $multipleChoice{ $$q{'questionType'} } ) { elsif ( $multipleChoice{ $q->{questionType} } ) {
$q->{'multipleChoice'} = 1; $q->{multipleChoice} = 1;
if ( $$q{'maxAnswers'} > 1 ) { if ( $q->{maxAnswers} > 1 ) {
$q->{'maxMoreOne'} = 1; $q->{maxMoreOne} = 1;
} }
} }
elsif ( $dateType{ $$q{'questionType'} } ) { elsif ( $dateType{ $q->{questionType} } ) {
$q->{'dateType'} = 1; $q->{dateType} = 1;
} }
elsif ( $slider{ $$q{'questionType'} } ) { elsif ( $slider{ $q->{questionType} } ) {
$q->{'slider'} = 1; $q->{slider} = 1;
if ( $$q{'questionType'} eq 'Dual Slider - Range' ) { if ( $q->{questionType} eq 'Dual Slider - Range' ) {
$q->{'dualSlider'} = 1; $q->{dualSlider} = 1;
$q->{'a1'} = [ $q->{'answers'}->[0] ]; $q->{a1} = [ $q->{answers}->[0] ];
$q->{'a2'} = [ $q->{'answers'}->[1] ]; $q->{a2} = [ $q->{answers}->[1] ];
} }
} }
if ( $$q{'verticalDisplay'} ) { if ( $q->{verticalDisplay} ) {
$$q{'verts'} = "<p>"; $q->{verts} = '<p>';
$$q{'verte'} = "</p>"; $q->{verte} = '</p>';
} }
} ## end foreach my $q (@$questions) }
$section->{'questions'} = $questions; $section->{questions} = $questions;
$section->{'questionsAnswered'} = $self->responseJSON->{questionsAnswered}; $section->{questionsAnswered} = $self->responseJSON->{questionsAnswered};
$section->{'totalQuestions'} = @{ $self->responseJSON->surveyOrder }; $section->{totalQuestions} = @{ $self->responseJSON->surveyOrder };
$section->{'showProgress'} = $self->get('showProgress'); $section->{showProgress} = $self->get('showProgress');
$section->{'showTimeLimit'} = $self->get('showTimeLimit'); $section->{showTimeLimit} = $self->get('showTimeLimit');
$section->{'minutesLeft'} $section->{minutesLeft}
= int( ( ( $self->responseJSON->startTime() + ( 60 * $self->get('timeLimit') ) ) - time() ) / 60 ); = int( ( ( $self->responseJSON->startTime() + ( 60 * $self->get('timeLimit') ) ) - time() ) / 60 );
if(scalar @$questions == ($section->{'totalQuestions'} - $section->{'questionsAnswered'})){ if(scalar @{$questions} == ($section->{totalQuestions} - $section->{questionsAnswered})){
$section->{isLastPage} = 1 $section->{isLastPage} = 1
} }
my $out = $self->processTemplate( $section, $self->get("surveyQuestionsId") ); my $out = $self->processTemplate( $section, $self->get('surveyQuestionsId') );
$self->session->http->setMimeType('application/json'); $self->session->http->setMimeType('application/json');
return to_json( { "type", "displayquestions", "section", $section, "questions", $questions, "html", $out } ); return to_json( { type => 'displayquestions', section => $section, questions => $questions, html => $out } );
} ## end sub prepareShowSurveyTemplate }
##------------------------------------------------------------------- ##-------------------------------------------------------------------
# #
@ -1397,15 +1382,15 @@ sub canTakeSurvey {
} }
#Does user have too many finished survey responses #Does user have too many finished survey responses
my $maxTakes = $self->getValue("maxResponsesPerUser"); my $maxTakes = $self->getValue('maxResponsesPerUser');
my $ip = $self->session->env->getIp; my $ip = $self->session->env->getIp;
my $id = $self->session->user->userId(); my $id = $self->session->user->userId();
my $takenCount = 0; my $takenCount = 0;
if ( $id == 1 ) { if ( $id == 1 ) {
$takenCount = $self->session->db->quickScalar( $takenCount = $self->session->db->quickScalar(
"select count(*) from Survey_response where userId = ? and ipAddress = ? and assetId = ? 'select count(*) from Survey_response where userId = ? and ipAddress = ? '
and isComplete > ?", [ $id, $ip, $self->getId(), 0 ] . 'and assetId = ? and isComplete > ?', [ $id, $ip, $self->getId(), 0 ]
); );
} }
else { else {
@ -1438,40 +1423,40 @@ sub www_viewGradeBook {
my $db = $self->session->db; my $db = $self->session->db;
return $self->session->privilege->insufficient() return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get("groupToViewReports") ) ); if !$self->session->user->isInGroup( $self->get('groupToViewReports') );
my $var = $self->getMenuVars; my $var = $self->getMenuVars;
$self->loadTempReportTable(); $self->loadTempReportTable();
my $paginator = WebGUI::Paginator->new($self->session,$self->getUrl('func=viewGradebook')); my $paginator = WebGUI::Paginator->new($self->session,$self->getUrl('func=viewGradebook'));
$paginator->setDataByQuery("select userId,username,ipAddress,Survey_responseId,startDate,endDate $paginator->setDataByQuery('select userId,username,ipAddress,Survey_responseId,startDate,endDate'
from Survey_response . ' from Survey_response where assetId='
where assetId=".$db->quote($self->getId)." order by username,ipAddress,startDate"); . $db->quote($self->getId)
. ' order by username,ipAddress,startDate');
my $users = $paginator->getPageData; my $users = $paginator->getPageData;
$var->{question_count} = $self->surveyJSON->questionCount; $var->{question_count} = $self->surveyJSON->questionCount;
my @responseloop; my @responseloop;
foreach my $user (@$users) { foreach my $user (@{$users}) {
my ($correctCount) = $db->quickArray("select count(*) from Survey_tempReport my ($correctCount) = $db->quickArray('select count(*) from Survey_tempReport'
where Survey_responseId=? and isCorrect=1",[$user->{Survey_responseId}]); . ' where Survey_responseId=? and isCorrect=1',[$user->{Survey_responseId}]);
push(@responseloop, { push @responseloop, {
# response_url is left out because it looks like Survey doesn't have a viewIndividualSurvey feature # response_url is left out because it looks like Survey doesn't have a viewIndividualSurvey feature
# yet. # yet.
#'response_url'=>$self->getUrl('func=viewIndividualSurvey;responseId='.$user->{Survey_responseId}), #'response_url'=>$self->getUrl('func=viewIndividualSurvey;responseId='.$user->{Survey_responseId}),
'response_user_name'=>($user->{userId} eq '1') ? $user->{ipAddress} : $user->{username}, 'response_user_name'=>($user->{userId} eq '1') ? $user->{ipAddress} : $user->{username},
'response_count_correct' => $correctCount, 'response_count_correct' => $correctCount,
'response_percent' => round(($correctCount/$var->{question_count})*100) 'response_percent' => round(($correctCount/$var->{question_count})*100)
}); };
} }
$var->{response_loop} = \@responseloop; $var->{response_loop} = \@responseloop;
$paginator->appendTemplateVars($var); $paginator->appendTemplateVars($var);
my $out = $self->processTemplate( $var, $self->get("gradebookTemplateId") ); my $out = $self->processTemplate( $var, $self->get('gradebookTemplateId') );
return $self->session->style->process( $out, $self->get("styleTemplateId") ); return $self->session->style->process( $out, $self->get('styleTemplateId') );
}
} ## end sub www_viewGradeBook
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -1486,7 +1471,7 @@ sub www_viewStatisticalOverview {
my $db = $self->session->db; my $db = $self->session->db;
return $self->session->privilege->insufficient() return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get("groupToViewReports") ) ); if !$self->session->user->isInGroup( $self->get('groupToViewReports') );
$self->loadTempReportTable(); $self->loadTempReportTable();
my $survey = $self->surveyJSON; my $survey = $self->surveyJSON;
@ -1500,13 +1485,13 @@ sub www_viewStatisticalOverview {
my $questionType = $question->{questionType}; my $questionType = $question->{questionType};
my (@answerloop, $totalResponses);; my (@answerloop, $totalResponses);;
if ($questionType eq "Multiple Choice"){ if ($questionType eq 'Multiple Choice'){
$totalResponses = $db->quickScalar("select count(*) from Survey_tempReport $totalResponses = $db->quickScalar('select count(*) from Survey_tempReport'
where sectionNumber=? and questionNumber=?",[$sectionIndex,$questionIndex]); . ' where sectionNumber=? and questionNumber=?',[$sectionIndex,$questionIndex]);
for ( my $answerIndex = 0; $answerIndex <= $#{ $survey->answers([$sectionIndex,$questionIndex]) }; $answerIndex++ ) { for ( my $answerIndex = 0; $answerIndex <= $#{ $survey->answers([$sectionIndex,$questionIndex]) }; $answerIndex++ ) {
my $numResponses = $db->quickScalar("select count(*) from Survey_tempReport my $numResponses = $db->quickScalar('select count(*) from Survey_tempReport'
where sectionNumber=? and questionNumber=? and answerNumber=?", . ' where sectionNumber=? and questionNumber=? and answerNumber=?',
[$sectionIndex,$questionIndex,$answerIndex]); [$sectionIndex,$questionIndex,$answerIndex]);
my $responsePercent; my $responsePercent;
if ($totalResponses) { if ($totalResponses) {
@ -1515,43 +1500,43 @@ sub www_viewStatisticalOverview {
$responsePercent = 0; $responsePercent = 0;
} }
my @commentloop; my @commentloop;
my $comments = $db->read("select answerComment from Survey_tempReport my $comments = $db->read('select answerComment from Survey_tempReport'
where sectionNumber=? and questionNumber=? and answerNumber=?", . ' where sectionNumber=? and questionNumber=? and answerNumber=?',
[$sectionIndex,$questionIndex,$answerIndex]); [$sectionIndex,$questionIndex,$answerIndex]);
while (my ($comment) = $comments->array) { while (my ($comment) = $comments->array) {
push(@commentloop,{ push @commentloop,{
'answer_comment'=>$comment 'answer_comment'=>$comment
}); };
} }
push(@answerloop,{ push @answerloop,{
'answer_isCorrect'=>$survey->answer( [ $sectionIndex, $questionIndex, $answerIndex ] )->{isCorrect}, 'answer_isCorrect'=>$survey->answer( [ $sectionIndex, $questionIndex, $answerIndex ] )->{isCorrect},
'answer' => $survey->answer( [ $sectionIndex, $questionIndex, $answerIndex ] )->{text}, 'answer' => $survey->answer( [ $sectionIndex, $questionIndex, $answerIndex ] )->{text},
'answer_response_count' =>$numResponses, 'answer_response_count' =>$numResponses,
'answer_response_percent' =>$responsePercent, 'answer_response_percent' =>$responsePercent,
'comment_loop'=>\@commentloop 'comment_loop'=>\@commentloop
}); };
} }
} }
else{ else{
my $responses = $db->read("select value,answerComment from Survey_tempReport my $responses = $db->read('select value,answerComment from Survey_tempReport'
where sectionNumber=? and questionNumber=?", . ' where sectionNumber=? and questionNumber=?',
[$sectionIndex,$questionIndex]); [$sectionIndex,$questionIndex]);
while (my $response = $responses->hashRef) { while (my $response = $responses->hashRef) {
push(@answerloop,{ push @answerloop,{
'answer_value' =>$response->{value}, 'answer_value' =>$response->{value},
'answer_comment' =>$response->{answerComment} 'answer_comment' =>$response->{answerComment}
}); };
} }
} }
push(@questionloop,{ push@questionloop,{
'question' => $question->{text}, question => $question->{text},
'question_id' => $sectionIndex.'_'.$questionIndex, question_id => "${sectionIndex}_$questionIndex",
'question_isMultipleChoice' => ($questionType eq "Multiple Choice"), question_isMultipleChoice => ($questionType eq 'Multiple Choice'),
'question_response_total' => $totalResponses, question_response_total => $totalResponses,
'answer_loop' => \@answerloop, answer_loop => \@answerloop,
'questionallowComment' => $question->{allowComment} questionallowComment => $question->{allowComment}
}); };
} ## end for ( my $questionIndex = 0; $questionIndex <= ... }
} }
$paginator->setDataByArrayRef(\@questionloop); $paginator->setDataByArrayRef(\@questionloop);
@questionloop = @{$paginator->getPageData}; @questionloop = @{$paginator->getPageData};
@ -1559,8 +1544,8 @@ sub www_viewStatisticalOverview {
$var->{question_loop} = \@questionloop; $var->{question_loop} = \@questionloop;
$paginator->appendTemplateVars($var); $paginator->appendTemplateVars($var);
my $out = $self->processTemplate( $var, $self->get("overviewTemplateId") ); my $out = $self->processTemplate( $var, $self->get('overviewTemplateId') );
return $self->session->style->process( $out, $self->get("styleTemplateId") ); return $self->session->style->process( $out, $self->get('styleTemplateId') );
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -1568,14 +1553,14 @@ sub www_exportSimpleResults {
my $self = shift; my $self = shift;
return $self->session->privilege->insufficient() return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get("groupToViewReports") ) ); if !$self->session->user->isInGroup( $self->get('groupToViewReports'));
$self->loadTempReportTable(); $self->loadTempReportTable();
my $filename = $self->session->url->escape( $self->get("title") . "_results.tab" ); my $filename = $self->session->url->escape( $self->get('title') . '_results.tab' );
my $content my $content
= $self->session->db->quickTab( = $self->session->db->quickTab(
"select * from Survey_tempReport t where t.assetId=? order by t.Survey_responseId, t.order", 'select * from Survey_tempReport t where t.assetId=? order by t.Survey_responseId, t.order',
[ $self->getId() ] ); [ $self->getId() ] );
return $self->export( $filename, $content ); return $self->export( $filename, $content );
} }
@ -1591,18 +1576,18 @@ Returns transposed results as a tabbed file.
sub www_exportTransposedResults { sub www_exportTransposedResults {
my $self = shift; my $self = shift;
return $self->session->privilege->insufficient() return $self->session->privilege->insufficient()
unless ( $self->session->user->isInGroup( $self->get("groupToViewReports") ) ); if !$self->session->user->isInGroup( $self->get('groupToViewReports') );
$self->loadTempReportTable(); $self->loadTempReportTable();
my $filename = $self->session->url->escape( $self->get("title") . "_transposedResults.tab" ); my $filename = $self->session->url->escape( $self->get('title') . '_transposedResults.tab' );
my $content my $content
= $self->session->db->quickTab( = $self->session->db->quickTab(
"select r.userId, r.username, r.ipAddress, r.startDate, r.endDate, r.isComplete, t.* 'select r.userId, r.username, r.ipAddress, r.startDate, r.endDate, r.isComplete, t.*'
from Survey_tempReport t . ' from Survey_tempReport t'
left join Survey_response r using(Survey_responseId) . ' left join Survey_response r using(Survey_responseId)'
where t.assetId=? . ' where t.assetId=?'
order by r.userId, r.Survey_responseId, t.order", . ' order by r.userId, r.Survey_responseId, t.order',
[ $self->getId() ] ); [ $self->getId() ] );
return $self->export( $filename, $content ); return $self->export( $filename, $content );
} }
@ -1633,8 +1618,8 @@ sub export {
my $store = WebGUI::Storage->createTemp( $self->session ); my $store = WebGUI::Storage->createTemp( $self->session );
my $tmpDir = $store->getPath(); my $tmpDir = $store->getPath();
my $filepath = $store->getPath($filename); my $filepath = $store->getPath($filename);
unless ( open TEMP, ">$filepath" ) { if ( !open TEMP, ">$filepath" ) {
return "Error - Could not open temporary file for writing. Please use the back button and try again"; return 'Error - Could not open temporary file for writing. Please use the back button and try again';
} }
print TEMP $content; print TEMP $content;
close TEMP; close TEMP;
@ -1643,9 +1628,7 @@ sub export {
$self->session->http->setRedirect($fileurl); $self->session->http->setRedirect($fileurl);
return undef; return undef;
} ## end sub export }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -1658,16 +1641,16 @@ Loads the responses from the survey into the Survey_tempReport table, so that ot
sub loadTempReportTable { sub loadTempReportTable {
my $self = shift; my $self = shift;
my $refs = $self->session->db->buildArrayRefOfHashRefs( "select * from Survey_response where assetId = ?", my $refs = $self->session->db->buildArrayRefOfHashRefs( 'select * from Survey_response where assetId = ?',
[ $self->getId() ] ); [ $self->getId() ] );
$self->session->db->write( "delete from Survey_tempReport where assetId = ?", [ $self->getId() ] ); $self->session->db->write( 'delete from Survey_tempReport where assetId = ?', [ $self->getId() ] );
for my $ref (@$refs) { for my $ref (@{$refs}) {
$self->responseJSON( undef, $ref->{Survey_responseId} ); $self->responseJSON( undef, $ref->{Survey_responseId} );
my $count = 1; my $count = 1;
for my $q ( @{ $self->responseJSON->returnResponseForReporting() } ) { for my $q ( @{ $self->responseJSON->returnResponseForReporting() } ) {
if ( @{ $q->{answers} } == 0 and $q->{comment} =~ /\w/ ) { if ( @{ $q->{answers} } == 0 and $q->{comment} =~ /\w/ ) {
$self->session->db->write( $self->session->db->write(
"insert into Survey_tempReport VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ 'insert into Survey_tempReport VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [
$self->getId(), $ref->{Survey_responseId}, $count++, $q->{section}, $self->getId(), $ref->{Survey_responseId}, $count++, $q->{section},
$q->{sectionName}, $q->{question}, $q->{questionName}, $q->{questionComment}, $q->{sectionName}, $q->{question}, $q->{questionName}, $q->{questionComment},
undef, undef, undef, undef, undef, undef, undef, undef,
@ -1678,7 +1661,7 @@ sub loadTempReportTable {
} }
for my $a ( @{ $q->{answers} } ) { for my $a ( @{ $q->{answers} } ) {
$self->session->db->write( $self->session->db->write(
"insert into Survey_tempReport VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ 'insert into Survey_tempReport VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [
$self->getId(), $ref->{Survey_responseId}, $count++, $q->{section}, $self->getId(), $ref->{Survey_responseId}, $count++, $q->{section},
$q->{sectionName}, $q->{question}, $q->{questionName}, $q->{questionComment}, $q->{sectionName}, $q->{question}, $q->{questionName}, $q->{questionComment},
$a->{id}, $a->{value}, $a->{comment}, $a->{time}, $a->{id}, $a->{value}, $a->{comment}, $a->{time},
@ -1686,8 +1669,8 @@ sub loadTempReportTable {
] ]
); );
} }
} ## end for my $q ( @{ $self->responseJSON... }
} ## end for my $ref (@$refs) }
return 1; return 1;
} }