[system] / branches / rel-2-2-dev / webwork2 / lib / WeBWorK / ContentGenerator / Instructor / UserList.pm Repository:
ViewVC logotype

View of /branches/rel-2-2-dev/webwork2/lib/WeBWorK/ContentGenerator/Instructor/UserList.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1289 - (download) (as text) (annotate)
Thu Jun 26 21:56:36 2003 UTC (9 years, 11 months ago) by malsyned
Original Path: trunk/webwork2/lib/WeBWorK/ContentGenerator/Instructor/UserList.pm
File size: 6787 byte(s)
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