Parent Directory
|
Revision Log
You can now delete users
1 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 sub initialize { 15 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 foreach my $userID ($r->param('deleteUser')) { 48 $db->deleteUser($userID); 49 } 50 } elsif (defined($r->param('addStudent'))) { 51 my $newUser = $db->newUser; 52 my $newPermissionLevel = $db->newPermissionLevel; 53 my $newPassword = $db->newPassword; 54 $newUser->user_id($r->param('newUserID')); 55 $newPermissionLevel->user_id($r->param('newUserID')); 56 $newPassword->user_id($r->param('newUserID')); 57 $newUser->status('C'); 58 $newPermissionLevel->permission(0); 59 $db->addUser($newUser); 60 $db->addPermissionLevel($newPermissionLevel); 61 $db->addPassword($newPassword); 62 } 63 } 64 65 sub fieldEditHTML { 66 my ($self, $fieldName, $value, $properties) = @_; 67 my $size = $properties->{size}; 68 my $type = $properties->{type}; 69 my $access = $properties->{access}; 70 my $items = $properties->{items}; 71 my $synonyms = $properties->{synonyms}; 72 73 74 if ($access eq "readonly") { 75 return $value; 76 } 77 if ($type eq "number" or $type eq "text") { 78 return CGI::input({type=>"text", name=>$fieldName, value=>$value, size=>$size}); 79 } 80 if ($type eq "enumerable") { 81 my $matched = undef; # Whether a synonym match has occurred 82 83 # Process synonyms for enumerable objects 84 foreach my $synonym (keys %$synonyms) { 85 if ($synonym ne "*" and $value =~ m/$synonym/) { 86 $value = $synonyms->{$synonym}; 87 $matched = 1; 88 } 89 } 90 if (!$matched and exists $synonyms->{"*"}) { 91 $value = $synonyms->{"*"}; 92 } 93 return CGI::popup_menu({ 94 name => $fieldName, 95 values => [keys %$items], 96 default => $value, 97 labels => $items, 98 }); 99 } 100 } 101 102 sub body { 103 my ($self, $setID) = @_; 104 my $r = $self->{r}; 105 my $authz = $self->{authz}; 106 my $user = $r->param('user'); 107 my $db = $self->{db}; 108 109 return CGI::em("You are not authorized to access the Instructor tools.") unless $authz->hasPermissions($user, "access_instructor_tools"); 110 111 my $userTemplate = $db->newUser; 112 my $permissionLevelTemplate = $db->newPermissionLevel; 113 114 # This code will require changing if the permission and user tables ever have different keys. 115 my @users = $db->listUsers; 116 117 # This table can be consulted when display-ready forms of field names are needed. 118 my %prettyFieldNames = map {$_ => $_} ($userTemplate->FIELDS(), $permissionLevelTemplate->FIELDS()); 119 @prettyFieldNames{qw( 120 user_id 121 first_name 122 last_name 123 email_address 124 student_id 125 status 126 section 127 recitation 128 comment 129 permission 130 )} = ( 131 "User ID", 132 "First Name", 133 "Last Name", 134 "E-mail", 135 "Student ID", 136 "Status", 137 "Section", 138 "Recitation", 139 "Comment", 140 "Perm. Level" 141 ); 142 143 my %fieldProperties = ( 144 user_id => { 145 type => "text", 146 size => 8, 147 access => "readonly", 148 }, 149 first_name => { 150 type => "text", 151 size => 10, 152 access => "readwrite", 153 }, 154 last_name => { 155 type => "text", 156 size => 10, 157 access => "readwrite", 158 }, 159 email_address => { 160 type => "text", 161 size => 20, 162 access => "readwrite", 163 }, 164 student_id => { 165 type => "text", 166 size => 11, 167 access => "readwrite", 168 }, 169 status => { 170 type => "enumerable", 171 size => 4, 172 access => "readwrite", 173 items => { 174 "C" => "Enrolled", 175 "D" => "Drop", 176 "A" => "Audit", 177 }, 178 synonyms => { 179 qr/^[ce]/i => "C", 180 qr/^[dw]/i => "D", 181 qr/^a/i => "A", 182 "*" => "C", 183 } 184 }, 185 section => { 186 type => "text", 187 size => 4, 188 access => "readwrite", 189 }, 190 recitation => { 191 type => "text", 192 size => 4, 193 access => "readwrite", 194 }, 195 comment => { 196 type => "text", 197 size => 20, 198 access => "readwrite", 199 }, 200 permission => { 201 type => "number", 202 size => 2, 203 access => "readwrite", 204 } 205 ); 206 207 print CGI::start_form({method=>"post", action=>$r->uri()}); 208 print CGI::start_table({}); 209 210 # Table headings, prettied-up 211 print CGI::Tr({}, 212 CGI::th({}, [ 213 "Delete?", 214 map {$prettyFieldNames{$_}} ( 215 $userTemplate->KEYFIELDS(), 216 $userTemplate->NONKEYFIELDS(), 217 $permissionLevelTemplate->NONKEYFIELDS(), 218 ) 219 ]) 220 ); 221 222 foreach my $currentUser (@users) { 223 my $userRecord = $db->getUser($currentUser); 224 my $permissionLevel = $db->getPermissionLevel($currentUser); 225 die "No permissionLevel record for user $currentUser" unless defined $permissionLevel; 226 227 # A concise way of printing a row containing a cell for each field, editable unless it's a key 228 print CGI::Tr({}, 229 CGI::td({}, [ 230 CGI::input({type=>"checkbox", name=>"deleteUser", value=>$currentUser}), 231 (map {$userRecord->$_} $userRecord->KEYFIELDS), 232 (map { 233 # CGI::input({type=>"text", size=>"8", name=> "user.".$userRecord->user_id().".".$_, value=>$userRecord->$_}) 234 $self->fieldEditHTML("user.".$userRecord->user_id().".".$_, $userRecord->$_, $fieldProperties{$_}); 235 } $userRecord->NONKEYFIELDS()), 236 (map { 237 # CGI::input({type=>"text", size=>"8", name => "permission.".$permissionLevel->user_id().".".$_, value=>$permissionLevel->$_}) 238 $self->fieldEditHTML("permission.".$permissionLevel->user_id().".".$_, $permissionLevel->$_, $fieldProperties{$_}); 239 } $permissionLevel->NONKEYFIELDS()), 240 ]) 241 ); 242 } 243 244 print CGI::end_table(); 245 print $self->hidden_authen_fields(); 246 print CGI::submit({name=>"save_classlist", value=>"Save Changes to Users"}); 247 print CGI::end_form(); 248 249 # Add a student form 250 print CGI::start_form({method=>"post", action=>$r->uri()}); 251 print $self->hidden_authen_fields(); 252 print "User ID:"; 253 print CGI::input({type=>"text", name=>"newUserID", value=>"", size=>"20"}); 254 print CGI::submit({name=>"addStudent", value=>"Add Student"}); 255 print CGI::end_form(); 256 257 return ""; 258 } 259 260 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |