Skip to content

Commit

Permalink
Rework confirmation to creating/recording answers when acting.
Browse files Browse the repository at this point in the history
When acting as another user with permissions to create or record
answers as that user, rework how the confirmation message is
stored. Instead of piggy backing off of the `invalidSet` key,
use a new `actingConformation` key for this case.

This also skips deleting any proctor authorization key while
waiting for user confirmation to continue.
  • Loading branch information
somiaj committed Dec 12, 2024
1 parent 10abd79 commit 4e91f7c
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 45 deletions.
22 changes: 10 additions & 12 deletions lib/WeBWorK/ContentGenerator/GatewayQuiz.pm
Original file line number Diff line number Diff line change
Expand Up @@ -609,25 +609,23 @@ async sub pre_header_initialize ($c) {
|| $authz->hasPermissions($userID, 'create_new_set_version_when_acting_as_student'))
)
{

$c->{invalidSet} = $c->maketext(
$c->{actingConformation} = $c->maketext(
'You are acting as user [_1]. If you continue, you will create a new version of '
. 'this test for that user, which will count against their allowed maximum '
. 'number of versions for the current time interval. In general, this is not '
. 'what you want to do. Please be sure that you want to do this before clicking '
. 'the "Create New Test Version" button below. Alternatively, click "Cancel".',
$effectiveUserID
);
$c->{invalidVersionCreation} = 1;
$c->{confirmSubmitForStudent} = 1;
$c->{actingConformationCreate} = 1;
return;

} elsif ($effectiveUserID ne $userID) {
$c->{invalidSet} = $c->maketext(
$c->{actingCreationError} = $c->maketext(
'You are acting as user [_1], and do not have the permission to create a new test version '
. 'when acting as another user.',
$effectiveUserID
);
$c->{invalidVersionCreation} = 1;

} elsif (($maxAttemptsPerVersion == 0 || $currentNumAttempts < $maxAttemptsPerVersion)
&& $c->submitTime < $set->due_date() + $ce->{gatewayGracePeriod})
Expand Down Expand Up @@ -665,7 +663,7 @@ async sub pre_header_initialize ($c) {
# student which is dangerous for open test versions. Give a warning unless the user
# has already confirmed they understand the risk.
if ($effectiveUserID ne $userID && !$c->param('submit_for_student_ok')) {
$c->{invalidSet} = $c->maketext(
$c->{actingConformation} = $c->maketext(
'You are trying to view an open test version for [_1] and have the permission to submit '
. 'answers for that user. This is dangerous, as your answers can overwrite the '
. q/student's answers as you move between test pages, preview, or check answers. /
Expand All @@ -675,7 +673,7 @@ async sub pre_header_initialize ($c) {
. 'before viewing open test versions.',
$effectiveUserID
);
$c->{confirmSubmitForStudent} = 1;
return;
}
}
}
Expand All @@ -694,8 +692,8 @@ async sub pre_header_initialize ($c) {
else { delete $c->authen->session->{proctor_authorization_granted}; }
}

# If the set or problem is invalid, then delete any proctor session keys and return.
if ($c->{invalidSet}) {
# If the set is invalid, then delete any proctor session keys and return.
if ($c->{invalidSet} || $c->{actingCreationError}) {
if (defined $c->{assignment_type} && $c->{assignment_type} eq 'proctored_gateway') {
delete $c->authen->session->{proctor_authorization_granted};
}
Expand Down Expand Up @@ -1368,7 +1366,7 @@ sub path ($c, $args) {
$args,
'WeBWorK' => $navigation_allowed ? $c->url_for('root') : '',
$courseName => $navigation_allowed ? $c->url_for('set_list') : '',
$setID eq 'Undefined_Set' || $c->{invalidSet}
$setID eq 'Undefined_Set' || $c->{invalidSet} || $c->{actingCreationError} || $c->{actingConformation}
? ($setID => '')
: (
$c->{set}->set_id => $c->url_for('problem_list', setID => $c->{set}->set_id),
Expand All @@ -1382,7 +1380,7 @@ sub nav ($c, $args) {
my $userID = $c->param('user');
my $effectiveUserID = $c->param('effectiveUser');

return '' if $c->{invalidSet};
return '' if $c->{invalidSet} || $c->{actingCreationError} || $c->{actingConformation};

# Set up and display a student navigation for those that have permission to act as a student.
if ($c->authz->hasPermissions($userID, 'become_student') && $effectiveUserID ne $userID) {
Expand Down
70 changes: 37 additions & 33 deletions templates/ContentGenerator/GatewayQuiz.html.ep
Original file line number Diff line number Diff line change
Expand Up @@ -65,42 +65,46 @@
% my $userID = param('user');
% my $effectiveUserID = param('effectiveUser');
%
% # If the set or problem is invalid, then show that information and exit.
% # If the set is invalid, then show that information and exit.
% if ($c->{invalidSet}) {
<div class="alert alert-danger mb-2">
% if (!$c->{confirmSubmitForStudent} || $c->{invalidVersionCreation}) {
<div class="mb-2">
% if ($c->{invalidVersionCreation}) {
<%= maketext(
'The selected test ([_1]) is not a valid test for [_2] (acted as by [_3]).',
$setID, $effectiveUserID, $userID
) =%>
% } else {
<%= maketext(
'The selected test ([_1]) is not a valid test for [_2].',
$setID, $effectiveUserID
) =%>
% }
</div>
% }
<div class="mb-2">
<%= maketext('The selected test ([_1]) is not a valid test for [_2].', $setID, $effectiveUserID) =%>
</div>
<div><%= $c->{invalidSet} %></div>
% if ($c->{confirmSubmitForStudent}) {
<div class="mt-3">
<%= link_to $c->{invalidVersionCreation}
? maketext('Create New Test Version') : maketext('View Test Version') => $c->systemLink(
url_for,
params => { effectiveUser => $effectiveUserID, user => $userID, submit_for_student_ok => 1 }
),
class => 'btn btn-primary'
=%>
<%= link_to maketext('Cancel') => $c->systemLink(
url_for('problem_list', setID => $setID =~ s/,v\d+$//r),
params => { effectiveUser => $effectiveUserID, user => $userID }
),
class => 'btn btn-primary'
=%>
</div>
% }
</div>
% last;
% }
% # If user tried to create a test version for another user without correct permissions, show message and exit.
% if ($c->{actingCreationError}) {
<div class="alert alert-danger mb-2">
<%= maketext(
'You are acting as user [_1] and do not have the permission to create a new test version when acting '
. 'as another user.',
$effectiveUserID
) =%>
</div>
% last;
% }
% # Get confirmation before creating new test version or working on an open test for another user.
% if ($c->{actingConformation}) {
<div class="alert alert-danger mb-2">
<div class="mb-2"><%= $c->{actingConformation} =%></div>
<div>
<%= link_to $c->{actingConformationCreate}
? maketext('Create New Test Version') : maketext('View Test Version') => $c->systemLink(
url_for,
params => { effectiveUser => $effectiveUserID, user => $userID, submit_for_student_ok => 1 }
),
class => 'btn btn-primary'
=%>
<%= link_to maketext('Cancel') => $c->systemLink(
url_for('problem_list', setID => $setID =~ s/,v\d+$//r),
params => { effectiveUser => $effectiveUserID, user => $userID }
),
class => 'btn btn-primary'
=%>
</div>
</div>
%
% last;
Expand Down

0 comments on commit 4e91f7c

Please sign in to comment.