Parent Directory
|
Revision Log
Revision 1233 - (view) (download) (as text)
| 1 : | malsyned | 832 | package WeBWorK::ContentGenerator::Instructor::UserList; |
| 2 : | use base qw(WeBWorK::ContentGenerator::Instructor); | ||
| 3 : | |||
| 4 : | =head1 NAME | ||
| 5 : | |||
| 6 : | WeBWorK::ContentGenerator::Instructor::UserList - Entry point for User-specific data editing | ||
| 7 : | |||
| 8 : | =cut | ||
| 9 : | |||
| 10 : | use strict; | ||
| 11 : | use warnings; | ||
| 12 : | use CGI qw(); | ||
| 13 : | |||
| 14 : | malsyned | 1015 | sub initialize { |
| 15 : | malsyned | 1211 | my ($self) = @_; |
| 16 : | my $r = $self->{r}; | ||
| 17 : | my $db = $self->{db}; | ||
| 18 : | my $ce = $self->{ce}; | ||
| 19 : | my $authz = $self->{authz}; | ||
| 20 : | my $user = $r->param('user'); | ||
| 21 : | |||
| 22 : | unless ($authz->hasPermissions($user, "modify_student_data")) { | ||
| 23 : | $self->{submitError} = "You are not authorized to modify student data"; | ||
| 24 : | return; | ||
| 25 : | } | ||
| 26 : | |||
| 27 : | if (defined($r->param('save_classlist'))) { | ||
| 28 : | my @userList = $db->listUsers; | ||
| 29 : | foreach my $user (@userList) { | ||
| 30 : | my $userRecord = $db->getUser($user); | ||
| 31 : | my $permissionLevelRecord = $db->getPermissionLevel($user); | ||
| 32 : | foreach my $field ($userRecord->NONKEYFIELDS()) { | ||
| 33 : | my $paramName = "user.${user}.${field}"; | ||
| 34 : | if (defined($r->param($paramName))) { | ||
| 35 : | $userRecord->$field($r->param($paramName)); | ||
| 36 : | } | ||
| 37 : | } | ||
| 38 : | foreach my $field ($permissionLevelRecord->NONKEYFIELDS()) { | ||
| 39 : | my $paramName = "permission.${user}.${field}"; | ||
| 40 : | if (defined($r->param($paramName))) { | ||
| 41 : | $permissionLevelRecord->$field($r->param($paramName)); | ||
| 42 : | } | ||
| 43 : | } | ||
| 44 : | $db->putUser($userRecord); | ||
| 45 : | $db->putPermissionLevel($permissionLevelRecord); | ||
| 46 : | } | ||
| 47 : | malsyned | 1214 | } elsif (defined($r->param('addStudent'))) { |
| 48 : | my $newUser = $db->newUser; | ||
| 49 : | my $newPermissionLevel = $db->newPermissionLevel; | ||
| 50 : | my $newPassword = $db->newPassword; | ||
| 51 : | $newUser->user_id($r->param('newUserID')); | ||
| 52 : | $newPermissionLevel->user_id($r->param('newUserID')); | ||
| 53 : | $newPassword->user_id($r->param('newUserID')); | ||
| 54 : | $newUser->status('C'); | ||
| 55 : | $newPermissionLevel->permission(0); | ||
| 56 : | $db->addUser($newUser); | ||
| 57 : | $db->addPermissionLevel($newPermissionLevel); | ||
| 58 : | $db->addPassword($newPassword); | ||
| 59 : | malsyned | 1211 | } |
| 60 : | malsyned | 1015 | } |
| 61 : | |||
| 62 : | malsyned | 1233 | sub fieldEditHTML { |
| 63 : | my ($self, $fieldName, $value, $properties) = @_; | ||
| 64 : | my $size = $properties->{size}; | ||
| 65 : | my $type = $properties->{type}; | ||
| 66 : | my $access = $properties->{access}; | ||
| 67 : | my $items = $properties->{items}; | ||
| 68 : | |||
| 69 : | if ($access eq "readonly") { | ||
| 70 : | return $value; | ||
| 71 : | } | ||
| 72 : | if ($type eq "number" or $type eq "text") { | ||
| 73 : | return CGI::input({type=>"text", name=>$fieldName, value=>$value, size=>$size}); | ||
| 74 : | } | ||
| 75 : | if ($type eq "enumerable") { | ||
| 76 : | return CGI::popup_menu({ | ||
| 77 : | name => $fieldName, | ||
| 78 : | values => [keys %$items], | ||
| 79 : | default => $value, | ||
| 80 : | labels => $items, | ||
| 81 : | }); | ||
| 82 : | } | ||
| 83 : | } | ||
| 84 : | |||
| 85 : | malsyned | 1014 | sub body { |
| 86 : | malsyned | 1015 | my ($self, $setID) = @_; |
| 87 : | malsyned | 1014 | my $r = $self->{r}; |
| 88 : | malsyned | 1017 | my $authz = $self->{authz}; |
| 89 : | my $user = $r->param('user'); | ||
| 90 : | malsyned | 1110 | my $db = $self->{db}; |
| 91 : | malsyned | 1218 | |
| 92 : | return CGI::em("You are not authorized to access the Instructor tools.") unless $authz->hasPermissions($user, "access_instructor_tools"); | ||
| 93 : | |||
| 94 : | malsyned | 1214 | my $userTemplate = $db->newUser; |
| 95 : | my $permissionLevelTemplate = $db->newPermissionLevel; | ||
| 96 : | malsyned | 1017 | |
| 97 : | malsyned | 1213 | # This code will require changing if the permission and user tables ever have different keys. |
| 98 : | malsyned | 1110 | my @users = $db->listUsers; |
| 99 : | malsyned | 1214 | |
| 100 : | # This table can be consulted when display-ready forms of field names are needed. | ||
| 101 : | my %prettyFieldNames = map {$_ => $_} ($userTemplate->FIELDS(), $permissionLevelTemplate->FIELDS()); | ||
| 102 : | @prettyFieldNames{qw( | ||
| 103 : | user_id | ||
| 104 : | first_name | ||
| 105 : | last_name | ||
| 106 : | email_address | ||
| 107 : | student_id | ||
| 108 : | status | ||
| 109 : | section | ||
| 110 : | recitation | ||
| 111 : | comment | ||
| 112 : | permission | ||
| 113 : | )} = ( | ||
| 114 : | "User ID", | ||
| 115 : | "First Name", | ||
| 116 : | "Last Name", | ||
| 117 : | "E-mail", | ||
| 118 : | "Student ID", | ||
| 119 : | "Status", | ||
| 120 : | "Section", | ||
| 121 : | "Recitation", | ||
| 122 : | "Comment", | ||
| 123 : | "Perm. Level" | ||
| 124 : | ); | ||
| 125 : | |||
| 126 : | malsyned | 1233 | my %fieldProperties = ( |
| 127 : | user_id => { | ||
| 128 : | type => "text", | ||
| 129 : | size => 8, | ||
| 130 : | access => "readonly", | ||
| 131 : | }, | ||
| 132 : | first_name => { | ||
| 133 : | type => "text", | ||
| 134 : | size => 10, | ||
| 135 : | access => "readwrite", | ||
| 136 : | }, | ||
| 137 : | last_name => { | ||
| 138 : | type => "text", | ||
| 139 : | size => 10, | ||
| 140 : | access => "readwrite", | ||
| 141 : | }, | ||
| 142 : | email_address => { | ||
| 143 : | type => "text", | ||
| 144 : | size => 20, | ||
| 145 : | access => "readwrite", | ||
| 146 : | }, | ||
| 147 : | student_id => { | ||
| 148 : | type => "text", | ||
| 149 : | size => 11, | ||
| 150 : | access => "readwrite", | ||
| 151 : | }, | ||
| 152 : | status => { | ||
| 153 : | type => "enumerable", | ||
| 154 : | size => 4, | ||
| 155 : | access => "readwrite", | ||
| 156 : | items => { | ||
| 157 : | "C" => "Enrolled", | ||
| 158 : | "D" => "Drop", | ||
| 159 : | } | ||
| 160 : | }, | ||
| 161 : | section => { | ||
| 162 : | type => "text", | ||
| 163 : | size => 4, | ||
| 164 : | access => "readwrite", | ||
| 165 : | }, | ||
| 166 : | recitation => { | ||
| 167 : | type => "text", | ||
| 168 : | size => 4, | ||
| 169 : | access => "readwrite", | ||
| 170 : | }, | ||
| 171 : | comment => { | ||
| 172 : | type => "text", | ||
| 173 : | size => 20, | ||
| 174 : | access => "readwrite", | ||
| 175 : | }, | ||
| 176 : | permission => { | ||
| 177 : | type => "number", | ||
| 178 : | size => 2, | ||
| 179 : | access => "readwrite", | ||
| 180 : | } | ||
| 181 : | ); | ||
| 182 : | |||
| 183 : | malsyned | 1211 | print CGI::start_form({method=>"post", action=>$r->uri()}); |
| 184 : | malsyned | 1110 | print CGI::start_table({}); |
| 185 : | malsyned | 1214 | |
| 186 : | # Table headings, prettied-up | ||
| 187 : | malsyned | 1110 | print CGI::Tr({}, |
| 188 : | malsyned | 1213 | CGI::th({}, [ |
| 189 : | malsyned | 1214 | map {$prettyFieldNames{$_}} ( |
| 190 : | $userTemplate->KEYFIELDS(), | ||
| 191 : | $userTemplate->NONKEYFIELDS(), | ||
| 192 : | $permissionLevelTemplate->NONKEYFIELDS(), | ||
| 193 : | ) | ||
| 194 : | malsyned | 1110 | ]) |
| 195 : | ); | ||
| 196 : | malsyned | 1211 | |
| 197 : | malsyned | 1110 | foreach my $currentUser (@users) { |
| 198 : | my $userRecord = $db->getUser($currentUser); | ||
| 199 : | my $permissionLevel = $db->getPermissionLevel($currentUser); | ||
| 200 : | malsyned | 1220 | die "No permissionLevel record for user $currentUser" unless defined $permissionLevel; |
| 201 : | malsyned | 1110 | |
| 202 : | malsyned | 1214 | # A concise way of printing a row containing a cell for each field, editable unless it's a key |
| 203 : | malsyned | 1110 | print CGI::Tr({}, |
| 204 : | CGI::td({}, [ | ||
| 205 : | malsyned | 1213 | (map {$userRecord->$_} $userRecord->KEYFIELDS), |
| 206 : | malsyned | 1233 | (map { |
| 207 : | # CGI::input({type=>"text", size=>"8", name=> "user.".$userRecord->user_id().".".$_, value=>$userRecord->$_}) | ||
| 208 : | $self->fieldEditHTML("user.".$userRecord->user_id().".".$_, $userRecord->$_, $fieldProperties{$_}); | ||
| 209 : | } $userRecord->NONKEYFIELDS()), | ||
| 210 : | (map { | ||
| 211 : | # CGI::input({type=>"text", size=>"8", name => "permission.".$permissionLevel->user_id().".".$_, value=>$permissionLevel->$_}) | ||
| 212 : | $self->fieldEditHTML("permission.".$permissionLevel->user_id().".".$_, $permissionLevel->$_, $fieldProperties{$_}); | ||
| 213 : | } $permissionLevel->NONKEYFIELDS()), | ||
| 214 : | malsyned | 1110 | ]) |
| 215 : | ); | ||
| 216 : | } | ||
| 217 : | malsyned | 1214 | |
| 218 : | malsyned | 1110 | print CGI::end_table(); |
| 219 : | malsyned | 1211 | print $self->hidden_authen_fields(); |
| 220 : | print CGI::submit({name=>"save_classlist", value=>"Save Changes to Users"}); | ||
| 221 : | print CGI::end_form(); | ||
| 222 : | malsyned | 1017 | |
| 223 : | malsyned | 1214 | # Add a student form |
| 224 : | print CGI::start_form({method=>"post", action=>$r->uri()}); | ||
| 225 : | print $self->hidden_authen_fields(); | ||
| 226 : | print "User ID:"; | ||
| 227 : | print CGI::input({type=>"text", name=>"newUserID", value=>"", size=>"20"}); | ||
| 228 : | print CGI::submit({name=>"addStudent", value=>"Add Student"}); | ||
| 229 : | print CGI::end_form(); | ||
| 230 : | |||
| 231 : | malsyned | 1014 | return ""; |
| 232 : | } | ||
| 233 : | |||
| 234 : | malsyned | 832 | 1; |
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |