From 10755c3b8382a94c0c4ce3768a71139b3ddd877f Mon Sep 17 00:00:00 2001 From: Patrick Donelan Date: Wed, 29 Jul 2009 06:37:34 +0000 Subject: [PATCH] Fixed Survey reporting bugs * Survey::responseJSON mutator was not doing the right thing when responseId argument was passed in * www_viewGradeBook template fixes and documentation --- ...port_survey_default-gradebook-report.wgpkg | Bin 0 -> 1913 bytes lib/WebGUI/Asset/Wobject/Survey.pm | 70 +++++++++++------- lib/WebGUI/Help/Asset_Survey.pm | 6 ++ lib/WebGUI/i18n/English/Asset_Survey.pm | 46 ++++++++++++ 4 files changed, 96 insertions(+), 26 deletions(-) create mode 100644 docs/upgrades/packages-7.7.17/root_import_survey_default-gradebook-report.wgpkg diff --git a/docs/upgrades/packages-7.7.17/root_import_survey_default-gradebook-report.wgpkg b/docs/upgrades/packages-7.7.17/root_import_survey_default-gradebook-report.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..3781c245790705d1fe51831cb4de8792ed771bb5 GIT binary patch literal 1913 zcmV-<2Zs0`iwFP!00000|Ls|AQyVuB=5v09#xp7DOyW0e48(PZ5C}{XN`v##DXmAo zlWm2wbdhw}PLu!Mm2^Jc*>~8G&}lo|Oo*{|SC4k3)$<(Xjk|xU)oQER+}NmAYprJ0 z{g0BTx>2jux3*f_Tdmsm2CCJX_1Xpkm%D!=sjvWOAyzWP4&+QrH`f2~)C!_R#NtJT~J}ae;><{Z%M|H`Q0F;@MPZ$wzB@riPEDbi}zT}9dBr0|~d!`_D=FB8Nw(AaI zBmx6kaIPwJtk++Wk+>qWicbbO3e=OKz&`17e)&WYJ?@;TJf^-+n2AtJe}5*p;%XM! zl%+B<6g&z~{6n8A>y^SXud*3vW5n>7{B%*Gep|1hcZCItm)5x`A?g>7b=no&xeymj z|Fh0?fFzNUa#n^oW$ceB`-K@Jeazco$4%mKrUVZpgb9sByJ7&)!E#WaO4ymRE>!_> z(MI)DIAzA#75LKNxh5Eqo}i%ulrC1Xc0X@4M3thbKE1L-F?bZgUg~+6>ExfA8Yi=u z9AGpOWbl(q1OdaI-3>k1C>_-K^MolP7}gMR@Mu$8AZxMtcynKGyq*oc`Qy`h6?Aa@ zd|9#lIleBwBpG}bQN#kMAR6Q88zMu_pq}SZe@qpeShJ7|1)FAJ2?}CezXWZuatRm8 zfQOA@t7owkWqvW??0=)v8o`e$^ke(nC4xTK?xwb^s62+Fqxd-5AIV)x| z=s*neD2cz$gwFb#Ce?kEN<}>!^!ODK21)+jvg>sAXl{S2)tWBW({1d!v>Gd8S5(3l2Pj2~@wM^vH-4FY665r&WYszAxn zD5HHr(2PfVZ`%(O%oI{whf$P8F?i(n;eG=qB1qU6v z$XU~Cg?zZ(Z{bXse_L1SaVX1eQ3JK{fCK^OSs4O~B;w@iTQuN2)F;?%H1k_3J=RdC zNsq6^fK&VtTs1$jzM$SX?!dDUus532cf2yG47g=K+&o+AFpUAIX6RQl|1X+zAw}hqzvCIBm&caW0v&GN(;$xEu;{MR^3Ib4WS}{V)aw z$JJ9PcAha9y@GaKj>0alS34`r8SqjQ*B&_65FihBZ3ep|ii04U9x~k;EX7R`Mao7* zQ1w;>M}m*fuz>Auh+)dckn)2OX2V=YPZ9o<%iVai zTo@|#MWVB0Mp8suUefTCD?s5HN@m7W2?C)Mbv6B56NFA^WYkIthoGRY(kjPr?{oUu z27}dZJBYfFZ=!&tnEmm`?v!0!zBu{yv>7~8weCa)(|zX>VgY^I04vD$-rjNd^{eIF zQ~8Q(#biZXMl(?vXL>Oc>8)bMc6VF5yUkWTl`VZTv_jC0#MtE3lp48~>?^k(IpUKO zcErWlCNNbdXo6Pb%@yAwI^7`Q?T%-swcNLo>=if1Tp>BdSo&t26rcP8fmAGv+?lqm z0|I2kP`gM3K#Hea&>r~{t&$!|ap5(@4R`*3P+rW1wqC5!6>W0?CWL3To@lEgEpaOi zk>><^<9h9o=d?mIOxT2V7IFUqs|?>Su(=V( zFNl%l^)^>2E)QR5Ugi#DnrQ<`SmN%*tliyv=@=Qdem7)2K3@q%cXWd=Ps~C?=@%Ib zNYD5U^Gkg6u^(+!Kb%hvKGfN#^WW%BEyeSwJfBG*E{hQi+nSTO(zeg1 SCALAR | UNDEF, optional => 1 }, { type => SCALAR, optional => 1}); - $responseId ||= $self->responseId; - - if (!$self->{_responseJSON} || $json) { - - # See if we need to load responseJSON from the database + # Mutate if lazy-loading, or json/responseId provided + if (!$self->{_responseJSON} || $json || $responseId) { + + # Either user-provided, or loaded from L + $responseId ||= $self->responseId; + + # If json undefined, load responseJSON from the db if (!defined $json) { $json = $self->session->db->quickScalar( 'select responseJSON from Survey_response where Survey_responseId = ?', [ $responseId ] ); } - + # Instantiate the ResponseJSON instance, and store it $self->{_responseJSON} = WebGUI::Asset::Wobject::Survey::ResponseJSON->new( $self->surveyJSON, $json ); } @@ -2187,9 +2189,9 @@ Returns the Grade Book screen. =cut sub www_viewGradeBook { - my $self = shift; - my $db = $self->session->db; - + my $self = shift; + my $db = $self->session->db; + return $self->session->privilege->insufficient() if !$self->session->user->isInGroup( $self->get('groupToViewReports') ); @@ -2197,26 +2199,42 @@ sub www_viewGradeBook { $self->loadTempReportTable(); - my $paginator = WebGUI::Paginator->new($self->session,$self->getUrl('func=viewGradebook')); - $paginator->setDataByQuery('select userId,username,ipAddress,Survey_responseId,startDate,endDate' - . ' from Survey_response where assetId=' - . $db->quote($self->getId) - . ' order by username,ipAddress,startDate'); - my $users = $paginator->getPageData; + my $paginator = WebGUI::Paginator->new( $self->session, $self->getUrl('func=viewGradebook') ); + my $userClause = ''; + if (my $userId = $self->session->form->process('userId')) { + $userClause = ' and userId = ' . $db->quote($userId); + } + my $quotedAssetId = $db->quote( $self->getId ); + $paginator->setDataByQuery( <getPageData; $var->{question_count} = $self->surveyJSON->questionCount; - + my @responseloop; - foreach my $user (@{$users}) { - my ($correctCount) = $db->quickArray('select count(*) from Survey_tempReport' - . ' where Survey_responseId=? and isCorrect=1',[$user->{Survey_responseId}]); - push @responseloop, { - # response_url is left out because it looks like Survey doesn't have a viewIndividualSurvey feature - # yet. - #'response_url'=>$self->getUrl('func=viewIndividualSurvey;responseId='.$user->{Survey_responseId}), - 'response_user_name'=>($user->{userId} eq '1') ? $user->{ipAddress} : $user->{username}, - 'response_count_correct' => $correctCount, - 'response_percent' => round(($correctCount/$var->{question_count})*100) + foreach my $row ( @{$rows} ) { + my ($correctCount) + = $db->quickArray( + 'select count(*) from Survey_tempReport' . ' where Survey_responseId=? and isCorrect=1', + [ $row->{Survey_responseId} ] ); + push @responseloop, + { + response_feedback_url => $self->getUrl("func=showFeedback;responseId=$row->{Survey_responseId}"), + response_id => $row->{Survey_responseId}, + response_userId => $row->{userId}, + response_ip => $row->{ip}, + response_startDate => $row->{startDate} + && WebGUI::DateTime->new( $self->session, $row->{startDate} )->toUserTimeZone, + response_endDate => $row->{endDate} + && WebGUI::DateTime->new( $self->session, $row->{endDate} )->toUserTimeZone, + response_user_name => ( $row->{userId} eq '1' ) ? $row->{ipAddress} : $row->{username}, + response_count_correct => $correctCount, + response_percent => round( ( $correctCount / $var->{question_count} ) * 100 ), }; } $var->{response_loop} = \@responseloop; diff --git a/lib/WebGUI/Help/Asset_Survey.pm b/lib/WebGUI/Help/Asset_Survey.pm index a85d73fd6..8fec9787b 100644 --- a/lib/WebGUI/Help/Asset_Survey.pm +++ b/lib/WebGUI/Help/Asset_Survey.pm @@ -81,6 +81,12 @@ our $HELP = { { 'name' => 'question_count' }, { 'name' => 'response_loop', 'variables' => [ + { 'name' => 'response_feedback_url' }, + { 'name' => 'response_id' }, + { 'name' => 'response_userId' }, + { 'name' => 'response_ip' }, + { 'name' => 'response_startDate' }, + { 'name' => 'response_endDate' }, { 'name' => 'response_user_name' }, { 'name' => 'response_count_correct' }, { 'name' => 'response_percent' } diff --git a/lib/WebGUI/i18n/English/Asset_Survey.pm b/lib/WebGUI/i18n/English/Asset_Survey.pm index 1090cf5d1..5505d3a9c 100644 --- a/lib/WebGUI/i18n/English/Asset_Survey.pm +++ b/lib/WebGUI/i18n/English/Asset_Survey.pm @@ -923,6 +923,42 @@ directly inside the answer_loop for other types of questions.|, context => q|Description of a template variable for a template Help page.|, lastUpdated => 1149654771, }, + + response_feedback_url => { + message => q|The URL of the individual response feedback page.|, + context => q|Description of a template variable for a template Help page.|, + lastUpdated => 0, + }, + + response_id => { + message => q|The unique ID of the response.|, + context => q|Description of a template variable for a template Help page.|, + lastUpdated => 0, + }, + + response_userId => { + message => q|The userId of the user that completed the response.|, + context => q|Description of a template variable for a template Help page.|, + lastUpdated => 0, + }, + + response_ip => { + message => q|The IP Address of the user that completed the response.|, + context => q|Description of a template variable for a template Help page.|, + lastUpdated => 0, + }, + + response_startDate => { + message => q|The Start Date of the response.|, + context => q|Description of a template variable for a template Help page.|, + lastUpdated => 0, + }, + + response_endDate => { + message => q|The End Date of the response.|, + context => q|Description of a template variable for a template Help page.|, + lastUpdated => 0, + }, 'survey template common vars title' => { message => q|Survey Template Common Vars|, @@ -1638,6 +1674,16 @@ section/answer.|, message => q{Tests Failed}, lastUpdated => 0, }, + + 'start date' => { + message => q{Start Date}, + lastUpdated => 0, + }, + + 'end date' => { + message => q{End Date}, + lastUpdated => 0, + }, };