[system] / trunk / webwork2 / lib / WeBWorK / ContentGenerator / Problem.pm Repository:
ViewVC logotype

Diff of /trunk/webwork2/lib/WeBWorK/ContentGenerator/Problem.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 2761 Revision 2762
80################################################################################ 80################################################################################
81 81
82# Subroutines to determine if a user "can" perform an action. Each subroutine is 82# Subroutines to determine if a user "can" perform an action. Each subroutine is
83# called with the following arguments: 83# called with the following arguments:
84# 84#
85# ($self, $User, $PermissionLevel, $EffectiveUser, $Set, $Problem) 85# ($self, $User, $EffectiveUser, $Set, $Problem)
86 86
87sub can_showOldAnswers { 87sub can_showOldAnswers {
88 #my ($self, $User, $PermissionLevel, $EffectiveUser, $Set, $Problem) = @_; 88 #my ($self, $User, $EffectiveUser, $Set, $Problem) = @_;
89 89
90 return 1; 90 return 1;
91} 91}
92 92
93sub can_showCorrectAnswers { 93sub can_showCorrectAnswers {
94 my ($self, $User, $PermissionLevel, $EffectiveUser, $Set, $Problem) = @_; 94 my ($self, $User, $EffectiveUser, $Set, $Problem) = @_;
95 my $authz = $self->r->authz; 95 my $authz = $self->r->authz;
96 96
97 return 97 return
98 after($Set->answer_date) 98 after($Set->answer_date)
99 || 99 ||
100 $authz->hasPermissions($User->user_id, "show_correct_answers_before_answer_date") 100 $authz->hasPermissions($User->user_id, "show_correct_answers_before_answer_date")
101 ; 101 ;
102} 102}
103 103
104sub can_showHints { 104sub can_showHints {
105 #my ($self, $User, $PermissionLevel, $EffectiveUser, $Set, $Problem) = @_; 105 #my ($self, $User, $EffectiveUser, $Set, $Problem) = @_;
106 106
107 return 1; 107 return 1;
108} 108}
109 109
110sub can_showSolutions { 110sub can_showSolutions {
111 my ($self, $User, $PermissionLevel, $EffectiveUser, $Set, $Problem) = @_; 111 my ($self, $User, $EffectiveUser, $Set, $Problem) = @_;
112 my $authz = $self->r->authz; 112 my $authz = $self->r->authz;
113 113
114 return 114 return
115 after($Set->answer_date) 115 after($Set->answer_date)
116 || 116 ||
117 $authz->hasPermissions($User->user_id, "show_solutions_before_answer_date") 117 $authz->hasPermissions($User->user_id, "show_solutions_before_answer_date")
118 ; 118 ;
119} 119}
120 120
121sub can_recordAnswers { 121sub can_recordAnswers {
122 my ($self, $User, $PermissionLevel, $EffectiveUser, $Set, $Problem, $submitAnswers) = @_; 122 my ($self, $User, $EffectiveUser, $Set, $Problem, $submitAnswers) = @_;
123 my $authz = $self->r->authz; 123 my $authz = $self->r->authz;
124 my $thisAttempt = $submitAnswers ? 1 : 0; 124 my $thisAttempt = $submitAnswers ? 1 : 0;
125 if ($User->user_id ne $EffectiveUser->user_id) { 125 if ($User->user_id ne $EffectiveUser->user_id) {
126 return $authz->hasPermissions($User->user_id, "record_answers_when_acting_as_student"); 126 return $authz->hasPermissions($User->user_id, "record_answers_when_acting_as_student");
127 } 127 }
141 return $authz->hasPermissions($User->user_id, "record_answers_after_answer_date"); 141 return $authz->hasPermissions($User->user_id, "record_answers_after_answer_date");
142 } 142 }
143} 143}
144 144
145sub can_checkAnswers { 145sub can_checkAnswers {
146 my ($self, $User, $PermissionLevel, $EffectiveUser, $Set, $Problem, $submitAnswers) = @_; 146 my ($self, $User, $EffectiveUser, $Set, $Problem, $submitAnswers) = @_;
147 my $authz = $self->r->authz; 147 my $authz = $self->r->authz;
148 my $thisAttempt = $submitAnswers ? 1 : 0; 148 my $thisAttempt = $submitAnswers ? 1 : 0;
149 149
150 if (before($Set->open_date)) { 150 if (before($Set->open_date)) {
151 return $authz->hasPermissions($User->user_id, "check_answers_before_open_date"); 151 return $authz->hasPermissions($User->user_id, "check_answers_before_open_date");
385 unless defined $user; 385 unless defined $user;
386 386
387 my $effectiveUser = $db->getUser($effectiveUserName); # checked 387 my $effectiveUser = $db->getUser($effectiveUserName); # checked
388 die "record for user $effectiveUserName (effective user) does not exist." 388 die "record for user $effectiveUserName (effective user) does not exist."
389 unless defined $effectiveUser; 389 unless defined $effectiveUser;
390
391 my $PermissionLevel = $db->getPermissionLevel($userName); # checked
392 die "permission level record for user $userName does not exist (but the user does? odd...)"
393 unless defined $PermissionLevel;
394 my $permissionLevel = $PermissionLevel->permission;
395 390
396 # obtain the merged set for $effectiveUser 391 # obtain the merged set for $effectiveUser
397 my $set = $db->getMergedSet($effectiveUserName, $setName); # checked 392 my $set = $db->getMergedSet($effectiveUserName, $setName); # checked
398 393
399 # Database fix (in case of undefined published values) 394 # Database fix (in case of undefined published values)
499 494
500 $self->{userName} = $userName; 495 $self->{userName} = $userName;
501 $self->{effectiveUserName} = $effectiveUserName; 496 $self->{effectiveUserName} = $effectiveUserName;
502 $self->{user} = $user; 497 $self->{user} = $user;
503 $self->{effectiveUser} = $effectiveUser; 498 $self->{effectiveUser} = $effectiveUser;
504 $self->{permissionLevel} = $permissionLevel;
505 $self->{set} = $set; 499 $self->{set} = $set;
506 $self->{problem} = $problem; 500 $self->{problem} = $problem;
507 $self->{editMode} = $editMode; 501 $self->{editMode} = $editMode;
508 502
509 ##### form processing ##### 503 ##### form processing #####
560 checkAnswers => 0, 554 checkAnswers => 0,
561 getSubmitButton => 0, 555 getSubmitButton => 0,
562 ); 556 );
563 557
564 # does the user have permission to use certain options? 558 # does the user have permission to use certain options?
565 my @args = ($user, $PermissionLevel, $effectiveUser, $set, $problem); 559 my @args = ($user, $effectiveUser, $set, $problem);
566 my %can = ( 560 my %can = (
567 showOldAnswers => $self->can_showOldAnswers(@args), 561 showOldAnswers => $self->can_showOldAnswers(@args),
568 showCorrectAnswers => $self->can_showCorrectAnswers(@args), 562 showCorrectAnswers => $self->can_showCorrectAnswers(@args),
569 showHints => $self->can_showHints(@args), 563 showHints => $self->can_showHints(@args),
570 showSolutions => $self->can_showSolutions(@args), 564 showSolutions => $self->can_showSolutions(@args),
571 recordAnswers => $self->can_recordAnswers(@args, 0), 565 recordAnswers => $self->can_recordAnswers(@args, 0),
572 checkAnswers => $self->can_checkAnswers(@args, $submitAnswers), 566 checkAnswers => $self->can_checkAnswers(@args, $submitAnswers),
573 getSubmitButton => $self->can_recordAnswers(@args, $submitAnswers), 567 getSubmitButton => $self->can_recordAnswers(@args, $submitAnswers),
574 ); 568 );
575
576# # does the user have permission to use certain options?
577# my %can = (
578# showOldAnswers => 1,
579# showCorrectAnswers => canShowCorrectAnswers($permissionLevel, $set->answer_date),
580# showHints => 1,
581# showSolutions => canShowSolutions($permissionLevel, $set->answer_date),
582# recordAnswers => canRecordAnswers($permissionLevel, $set->open_date, $set->due_date,
583# $problem->max_attempts, $problem->num_correct + $problem->num_incorrect + 1),
584# # attempts=num_correct+num_incorrect+1, as this happens before updating $problem
585# checkAnswers => canCheckAnswers($permissionLevel, $set->due_date),
586# );
587#
588# # more complicated logic for showing check answer button:
589# # checkAnswers button shows up after due date -- once a student can't record anymore
590# # checkAnswers button always shows up when an instructor or TA is acting
591# # as someone else (the $user and $effectiveUserName aren't the same).
592# $can{checkAnswers} = (
593# # $can{recordAnswers} will be false if the due date has passed OR the
594# # student has used up all of her attempts
595# ($can{checkAnswers} and not $can{recordAnswers})
596# or
597# (
598# # FIXME: this is not the right way to check for this.
599# # also, canCheckAnswers() will show this button if the permission
600# # level is positive, which is always true when an instructor is
601# # acting as a student
602# defined($userName)
603# and
604# defined($effectiveUserName)
605# and
606# ($userName ne $effectiveUserName)
607# )
608# );
609#
610# # more complicated logic for showing "submit answer" button:
611# # We hide the submit answer button if someone is acting as a student
612# # This prevents errors where you accidently submit the answer for a student
613# # Not sure whether this a feature or a bug
614# $can{recordAnswers} = (
615# $can{recordAnswers}
616# and not
617# (
618# # FIXME: this is not the right way to check for this.
619# defined($userName)
620# and
621# defined($effectiveUserName)
622# and
623# ($userName ne $effectiveUserName)
624# )
625# );
626 569
627 # final values for options 570 # final values for options
628 my %will; 571 my %will;
629 foreach (keys %must) { 572 foreach (keys %must) {
630 $will{$_} = $can{$_} && ($want{$_} || $must{$_}); 573 $will{$_} = $can{$_} && ($want{$_} || $must{$_});
829 } 772 }
830 # unpack some useful variables 773 # unpack some useful variables
831 my $set = $self->{set}; 774 my $set = $self->{set};
832 my $problem = $self->{problem}; 775 my $problem = $self->{problem};
833 my $editMode = $self->{editMode}; 776 my $editMode = $self->{editMode};
834 my $permissionLevel = $self->{permissionLevel};
835 my $submitAnswers = $self->{submitAnswers}; 777 my $submitAnswers = $self->{submitAnswers};
836 my $checkAnswers = $self->{checkAnswers}; 778 my $checkAnswers = $self->{checkAnswers};
837 my $previewAnswers = $self->{previewAnswers}; 779 my $previewAnswers = $self->{previewAnswers};
838 my %want = %{ $self->{want} }; 780 my %want = %{ $self->{want} };
839 my %can = %{ $self->{can} }; 781 my %can = %{ $self->{can} };

Legend:
Removed from v.2761  
changed lines
  Added in v.2762

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9