| … | |
… | |
| 54 | my $courseName = $ce->{courseName}; |
54 | my $courseName = $ce->{courseName}; |
| 55 | |
55 | |
| 56 | print CGI::strong("Problem Sets"), CGI::br(); |
56 | print CGI::strong("Problem Sets"), CGI::br(); |
| 57 | |
57 | |
| 58 | my $wwdb = $self->{wwdb}; |
58 | my $wwdb = $self->{wwdb}; |
| 59 | my $user = $self->{r}->param("user"); |
59 | my $effectiveUser = $self->{r}->param("effectiveUser"); |
| 60 | my @sets; |
60 | my @sets; |
| 61 | push @sets, $wwdb->getSet($user, $_) foreach ($wwdb->getSets($user)); |
61 | push @sets, $wwdb->getSet($effectiveUser, $_) foreach ($wwdb->getSets($effectiveUser)); |
| 62 | foreach my $set (sort { $a->open_date <=> $b->open_date } @sets) { |
62 | foreach my $set (sort { $a->open_date <=> $b->open_date } @sets) { |
| 63 | if (time >= $set->open_date) { |
63 | if (time >= $set->open_date) { |
| 64 | print CGI::a({-href=>"$root/$courseName/".$set->id."/?" |
64 | print CGI::a({-href=>"$root/$courseName/".$set->id."/?" |
| 65 | . $self->url_authen_args}, $set->id), CGI::br(); |
65 | . $self->url_authen_args}, $set->id), CGI::br(); |
| 66 | } else { |
66 | } else { |
| … | |
… | |
| 81 | my $r = $self->{r}; |
81 | my $r = $self->{r}; |
| 82 | my $ce = $self->{courseEnvironment}; |
82 | my $ce = $self->{courseEnvironment}; |
| 83 | |
83 | |
| 84 | my $wwdb = $self->{wwdb}; |
84 | my $wwdb = $self->{wwdb}; |
| 85 | my $cldb = $self->{cldb}; |
85 | my $cldb = $self->{cldb}; |
| 86 | my $user = $cldb->getUser($r->param("user")); |
86 | my $effectiveUser = $cldb->geteffectiveUser($r->param("effectiveUser")); |
| 87 | my $set = $wwdb->getSet($user->id, $setName); |
87 | my $set = $wwdb->getSet($effectiveUser->id, $setName); |
| 88 | my $psvn = $wwdb->getPSVN($user->id, $setName); |
88 | my $psvn = $wwdb->getPSVN($effectiveUser->id, $setName); |
| 89 | |
89 | |
| 90 | my $screenSetHeader = $set->problem_header || $ce->{webworkFiles}->{screenSnippets}->{setHeader}; |
90 | my $screenSetHeader = $set->problem_header || $ce->{webworkFiles}->{screenSnippets}->{setHeader}; |
| 91 | my $displayMode = $ce->{pg}->{options}->{displayMode}; |
91 | my $displayMode = $ce->{pg}->{options}->{displayMode}; |
| 92 | |
92 | |
| 93 | return "" unless defined $screenSetHeader and $screenSetHeader; |
93 | return "" unless defined $screenSetHeader and $screenSetHeader; |
| 94 | |
94 | |
| 95 | # decide what to do about problem number |
95 | # decide what to do about problem number |
| 96 | my $problem = WeBWorK::Problem->new( |
96 | my $problem = WeBWorK::Problem->new( |
| 97 | id => 0, |
97 | id => 0, |
| 98 | set_id => $set->id, |
98 | set_id => $set->id, |
| 99 | login_id => $user->id, |
99 | login_id => $effectiveUser->id, |
| 100 | source_file => $screenSetHeader, |
100 | source_file => $screenSetHeader, |
| 101 | # the rest of Problem's fields are not needed, i think |
101 | # the rest of Problem's fields are not needed, i think |
| 102 | ); |
102 | ); |
| 103 | |
103 | |
| 104 | my $pg = WeBWorK::PG->new( |
104 | my $pg = WeBWorK::PG->new( |
| 105 | $ce, |
105 | $ce, |
| 106 | $user, |
106 | $effectiveUser, |
| 107 | $r->param('key'), |
107 | $r->param('key'), |
| 108 | $set, |
108 | $set, |
| 109 | $problem, |
109 | $problem, |
| 110 | $psvn, |
110 | $psvn, |
| 111 | {}, # no form fields! |
111 | {}, # no form fields! |
| … | |
… | |
| 128 | |
128 | |
| 129 | sub body { |
129 | sub body { |
| 130 | my ($self, $setName) = @_; |
130 | my ($self, $setName) = @_; |
| 131 | my $r = $self->{r}; |
131 | my $r = $self->{r}; |
| 132 | my $courseEnvironment = $self->{courseEnvironment}; |
132 | my $courseEnvironment = $self->{courseEnvironment}; |
| 133 | my $user = $r->param('user'); |
133 | my $effectiveUser = $r->param('effectiveUser'); |
| 134 | my $wwdb = $self->{wwdb}; |
134 | my $wwdb = $self->{wwdb}; |
| 135 | |
135 | |
| 136 | my $hardcopyURL = |
136 | my $hardcopyURL = |
| 137 | $courseEnvironment->{webworkURLs}->{root} . "/" |
137 | $courseEnvironment->{webworkURLs}->{root} . "/" |
| 138 | . $courseEnvironment->{courseName} . "/" |
138 | . $courseEnvironment->{courseName} . "/" |
| … | |
… | |
| 146 | CGI::th("Attempts"), |
146 | CGI::th("Attempts"), |
| 147 | CGI::th("Remaining"), |
147 | CGI::th("Remaining"), |
| 148 | CGI::th("Status"), |
148 | CGI::th("Status"), |
| 149 | ); |
149 | ); |
| 150 | |
150 | |
| 151 | my $set = $wwdb->getSet($user, $setName); |
151 | my $set = $wwdb->getSet($effectiveUser, $setName); |
| 152 | my @problemNumbers = $wwdb->getProblems($user, $setName); |
152 | my @problemNumbers = $wwdb->getProblems($effectiveUser, $setName); |
| 153 | foreach my $problemNumber (sort { $a <=> $b } @problemNumbers) { |
153 | foreach my $problemNumber (sort { $a <=> $b } @problemNumbers) { |
| 154 | my $problem = $wwdb->getProblem($user, $setName, $problemNumber); |
154 | my $problem = $wwdb->getProblem($effectiveUser, $setName, $problemNumber); |
| 155 | print $self->problemListRow($set, $problem); |
155 | print $self->problemListRow($set, $problem); |
| 156 | } |
156 | } |
| 157 | |
157 | |
| 158 | print CGI::end_table(); |
158 | print CGI::end_table(); |
| 159 | |
159 | |