[system] / trunk / webwork-modperl / lib / WeBWorK / ContentGenerator / Instructor / UserList.pm Repository:
ViewVC logotype

Annotation of /trunk/webwork-modperl/lib/WeBWorK/ContentGenerator/Instructor/UserList.pm

Parent Directory Parent Directory | Revision Log 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