From bf7c3505d7cf955d85cbcfa077497bb0c74478e3 Mon Sep 17 00:00:00 2001 From: Kaleb Murphy Date: Mon, 24 Nov 2008 15:20:13 +0000 Subject: [PATCH] Survey now has fully functioning time limits, can show limits to users, and can show progress --- docs/changelog/7.x.x.txt | 1 + .../packages-7.6.4/root_import_survey.wgpkg | Bin 8634 -> 8676 bytes lib/WebGUI/Asset/Wobject/Survey.pm | 25 +++++++++++++++--- .../Asset/Wobject/Survey/ResponseJSON.pm | 8 +++--- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 21dad1663..64e2d4f02 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,4 +1,5 @@ 7.6.4 + - Survey now will show progress and time limit. - Brand new Survey system. Make sure to export your old results as they will - Made it more obvious how to check out when viewing the cart. - Added a wait timeout parameter to the WAITING method, so that Spectre diff --git a/docs/upgrades/packages-7.6.4/root_import_survey.wgpkg b/docs/upgrades/packages-7.6.4/root_import_survey.wgpkg index 68257d38b148766c197d0bb05cf4538f17a8e475..e9ce7ddc49bc05b2dc6fa3c3d031b811e317d839 100644 GIT binary patch literal 8676 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 "A Survey System", label => "Template ID" }, - timeLimit => { fieldType => 'integer', + showProgress => { + fieldType => "yesNo", + defaultValue => 0, + tab => 'properties', + label => "Show user their progress" + }, + showTimeLimit => { + fieldType => "yesNo", + defaultValue => 0, + tab => 'properties', + label => "Show user their time remaining" + }, + timeLimit => { + fieldType => 'integer', defaultValue => 0, tab => 'properties', hoverHelp => $i18n->get('timelimit hoverHelp'), @@ -593,7 +606,6 @@ sub www_takeSurvey { return $self->surveyEnd(); } }; - return $self->session->style->process($out,$self->get("styleTemplateId")); } @@ -767,6 +779,11 @@ sub prepareShowSurveyTemplate { } } ## end foreach my $q (@$questions) $section->{'questions'} = $questions; + $section->{'questionsAnswered'} = $self->response->{questionsAnswered}; + $section->{'totalQuestions'} = @{$self->response->surveyOrder}; + $section->{'showProgress'} = $self->response->{showProgress}; + $section->{'showTimeLimit'} = $self->response->{showTimeLimit}; + $section->{'minutesLeft'} = int((($self->response->{startTime} + (60 * $self->response->{timeLimit})) - time())/60); my $out = $self->processTemplate( $section, $self->get("surveyQuestionsId") ); @@ -902,6 +919,8 @@ sub getResponseId { $self->{responseId} = $responseId; $self->response->{startTime} = $time; $self->response->{timeLimit} = $self->get("timeLimit"); + $self->response->{showProgress} = $self->get("showProgress"); + $self->response->{showTimeLimit} = $self->get("showTimeLimit"); $self->saveResponseJSON(); } ## end if ( $haveTaken < $allowedTakes) @@ -1042,7 +1061,7 @@ sub loadTempReportTable { sub log { my $self = shift; - $self->session->log->error(shift); + $self->session->log->debug(shift); } 1; diff --git a/lib/WebGUI/Asset/Wobject/Survey/ResponseJSON.pm b/lib/WebGUI/Asset/Wobject/Survey/ResponseJSON.pm index 18c285f93..fd4a8cbd7 100644 --- a/lib/WebGUI/Asset/Wobject/Survey/ResponseJSON.pm +++ b/lib/WebGUI/Asset/Wobject/Survey/ResponseJSON.pm @@ -9,16 +9,17 @@ sub new { my $json = shift; my $log = shift; my $survey = shift; - my $self = {}; + my $temp = decode_json($json) if defined $json; + my $self = defined $temp ? $temp : {}; $self->{survey} = $survey; $self->{log} = $log; - my $temp = decode_json($json) if defined $json; $self->{surveyOrder} = defined $temp->{surveyOrder} ? $temp->{surveyOrder} : []; #an array of question addresses, with the third member being an array of answers $self->{responses} = defined $temp->{responses} ? $temp->{responses} : {}; $self->{lastResponse} = defined $temp->{lastResponse} ? $temp->{lastResponse} : -1; + $self->{questionsAnswered} = defined $temp->{questionsAnswered} ? $temp->{questionsAnswered} : 0; bless( $self, $class ); return $self; } ## end sub new @@ -90,7 +91,7 @@ sub freeze { sub hasTimedOut{ my $self=shift; - return 1 if($self->{startTime} + ($self->{timeLimit} * 60) < time()); + return 1 if($self->{startTime} + ($self->{timeLimit} * 60) < time() and $self->{timeLimit} > 0); return 0; } @@ -198,6 +199,7 @@ sub recordResponses { } ## end if ( defined( $responses... } ## end for my $answer ( @{ $question... $qAnswered = 0 if ( !$aAnswered and $question->{required} ); + $self->{questionsAnswered}++ if($aAnswered); } ## end for my $question (@$questions) #if all responses completed, move the lastResponse index to the last question shown