--- loncom/interface/Attic/londropadd.pm 2002/09/26 13:29:44 1.54 +++ loncom/interface/Attic/londropadd.pm 2002/10/15 14:41:31 1.56 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.54 2002/09/26 13:29:44 matthew Exp $ +# $Id: londropadd.pm,v 1.56 2002/10/15 14:41:31 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -594,17 +594,25 @@ sub enroll_single_student { my $home = &Apache::lonnet::homeserver($ENV{'form.cuname'}, $ENV{'form.lcdomain'}); if ((($amode) && ($genpwd)) || ($home ne 'no_host')) { + # Clean out any old roles the student has in this class. &modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'}, $ENV{'request.course.id'},$ENV{'form.csec'}, $desiredhost); - $r->print(&Apache::lonnet::modifystudent( - $ENV{'form.lcdomain'},$ENV{'form.cuname'}, - $ENV{'form.cstid'},$amode,$genpwd, - $ENV{'form.cfirst'},$ENV{'form.cmiddle'}, - $ENV{'form.clast'},$ENV{'form.cgen'}, - $ENV{'form.csec'},$ENV{'form.enddate'}, - $ENV{'form.startdate'},$ENV{'form.forceid'}, - $desiredhost)); + my $login_result = &Apache::lonnet::modifystudent + ($ENV{'form.lcdomain'},$ENV{'form.cuname'}, + $ENV{'form.cstid'},$amode,$genpwd, + $ENV{'form.cfirst'},$ENV{'form.cmiddle'}, + $ENV{'form.clast'},$ENV{'form.cgen'}, + $ENV{'form.csec'},$ENV{'form.enddate'}, + $ENV{'form.startdate'},$ENV{'form.forceid'}, + $desiredhost); + if ($login_result =~ /^ok/) { + $r->print($login_result); + $r->print("
If active, the new role will be available ". + "when the student next logs in to LON-CAPA.
"); + } else { + $r->print("unable to enroll: ".$login_result); + } } else { $r->print('ERROR '. 'Invalid login mode or password. '. @@ -726,34 +734,18 @@ END return; } -# =================================================== get the current classlist -sub get_current_classlist { - my $r = shift; - # Call DownloadClasslist - my $cid = $ENV{'request.course.id'}; - my $c = $r->connection; - my $classlisthash = &Apache::loncoursedata::DownloadClasslist - ($cid,'Not downloaded',$c); - # Call ProcessClasslist - my %cache; - my @students = &Apache::loncoursedata::ProcessClasslist(\%cache, - $classlisthash, - $cid,$c); - return (\@students,\%cache); -} - # ========================================================= Menu Phase Two Drop sub print_drop_menu { my $r=shift; $r->print("
+END
+
+ if ($nosort) {
+ $r->print(< Processed Students: '.$count);
+ $r->print(' Processed Students: '.$count.' If active, the new role will be available when the ".
+ "students next log in to LON-CAPA.
+
+END
+
+ } else {
+ $r->print(<
+ username
+ domain
+ ID
+ student name
+ section
+
END
+ }
+ #
+ # Sort the students
+ my %index;
+ my $i;
+ foreach (@$keylist) {
+ $index{$_} = $i++;
+ }
+ my $index = $index{$sortby};
+ my $second = $index{'username'};
+ my $third = $index{'domain'};
my @Sorted_Students = sort {
- lc($s_data->{$a.':'.$sortby}) cmp lc($s_data->{$b.':'.$sortby})
- ||
- lc($s_data->{$a.':username'}) cmp lc($s_data->{$b.':username'})
- ||
- lc($s_data->{$a.':domain'}) cmp lc($s_data->{$b.':domain'})
- } @$students;
+ lc($classlist->{$a}->[$index]) cmp lc($classlist->{$b}->[$index])
+ ||
+ lc($classlist->{$a}->[$second]) cmp lc($classlist->{$b}->[$second])
+ ||
+ lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third])
+ } (keys(%$classlist));
foreach my $student (@Sorted_Students) {
my $error;
- if (exists($s_data->{$student.':error'})) {
- $error = $s_data->{$student.':error'};
- }
- if ($error) {
- $r->print('
@@ -1171,32 +1205,32 @@ function uncheckAll(field) {
'."\n");
- next;
- }
- my $username = $s_data->{$student.':username'};
- my $domain = $s_data->{$student.':domain'};
- my $section = $s_data->{$student.':section'};
- my $name = $s_data->{$student.':fullname'};
- my $status = $s_data->{$student.':Status'};
- my $id = $s_data->{$student.':id'};
+ my $username = $classlist->{$student}->[$index{'username'}];
+ my $domain = $classlist->{$student}->[$index{'domain'}];
+ my $section = $classlist->{$student}->[$index{'section'}];
+ my $name = $classlist->{$student}->[$index{'fullname'}];
+ my $id = $classlist->{$student}->[$index{'id'}];
+ my $status = $classlist->{$student}->[$index{'status'}];
next if ($status ne 'Active');
#
$r->print(<<"END");
@@ -1365,6 +1399,11 @@ sub upfile_drop_add {
}
}
}
+ # Clean up whitespace
+ foreach (\$domain,\$username,\$id,\$fname,\$mname,
+ \$lname,\$gen,\$sec) {
+ $$_ =~ s/(\s+$|^\s+)//g;
+ }
if ($password) {
&modifystudent($domain,$username,$cid,$sec,
$desiredhost);
@@ -1391,73 +1430,35 @@ sub upfile_drop_add {
}
}
} # end of foreach (@studentdata)
- $r->print(''.
- 'Error'.
- 'Error retrieving data for '.
- join('@',split(/:/,$student)).
- ', '.$error.' Dropping Students
');
# Get current classlist
- my ($error,%currentlist)=&get_current_classlist($r);
- if (defined($error)) {
- $r->print('ERROR:$error
');
- }
- if (defined(%currentlist)) {
- # Drop the students
+ my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist();
+ if (! defined($classlist)) {
+ $r->print("There are no students currently enrolled.\n");
+ } else {
+ # Remove the students we just added from the list of students.
foreach (@studentdata) {
my %entries=&Apache::loncommon::record_sep($_);
unless (($entries{$fields{'username'}} eq '') ||
(!defined($entries{$fields{'username'}}))) {
- delete($currentlist{$entries{$fields{'username'}}.
+ delete($classlist->{$entries{$fields{'username'}}.
':'.$domain});
}
}
- # Print out list of dropped students
- &show_drop_list($r,%currentlist);
- } else {
- $r->print("There are no students currently enrolled.\n");
+ # Print out list of dropped students.
+ &show_drop_list($r,$classlist,$keylist,'nosort');
}
}
} # end of unless
}
-###################################################################
-###################################################################
-
-=pod
-
-=item &drop_students
-
-Inputs: \@droplist, a pointer to an array of students to drop.
-Students should be in format of studentname:studentdomain
-
-Returns: $errors, a string describing any errors encountered.
-$successes, a string describing the successful dropping of students.
-
-=cut
-
-###################################################################
-###################################################################
-sub drop_students {
- my @droplist = @{shift()};
- my $courseid = $ENV{'request.course.id'};
- my $successes = '';
- my $errors = '';
- foreach (@droplist) {
- my ($sname,$sdom)=split(/:/,$_);
- my $result = &drop_student($sname,$sdom,$courseid);
- if ($result !~ /ok/) {
- $errors .= "Error dropping $sname\@$sdom: $result\n";
- } else {
- $successes .= "Dropped $sname\@$sdom\n";
- }
- }
- return ($errors,$successes);
-}
-###################################################################
-###################################################################
-
-
# ================================================================== Phase four
sub drop_student_list {
my $r=shift;
@@ -1470,6 +1471,7 @@ sub drop_student_list {
}
foreach (@droplist) {
my ($uname,$udom)=split(/\:/,$_);
+ # drop student
my $result = &modifystudent($udom,$uname,$ENV{'request.course.id'});
if ($result eq 'ok' || $result eq 'ok:') {
$r->print('Dropped '.$uname.' @ '.$udom.'
');
@@ -1568,7 +1570,7 @@ sub handler {
} elsif ($ENV{'form.state'} eq 'done') {
&drop_student_list($r);
} else {
- &menu_phase_two_drop($r);
+ &print_drop_menu($r);
}
} elsif ($ENV{'form.action'} eq 'enrollstudent') {
if (! exists($ENV{'form.state'})) {