--- loncom/interface/Attic/londropadd.pm 2002/09/24 18:24:43 1.52
+++ loncom/interface/Attic/londropadd.pm 2003/05/21 16:06:09 1.66
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
-# $Id: londropadd.pm,v 1.52 2002/09/24 18:24:43 matthew Exp $
+# $Id: londropadd.pm,v 1.66 2003/05/21 16:06:09 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -41,6 +41,7 @@ use Apache::lonnet();
use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::Constants qw(:common :http REDIRECT);
+use Spreadsheet::WriteExcel;
###############################################################
###############################################################
@@ -92,7 +93,7 @@ sub modifystudent {
}
}
if ($result eq '') {
- $result eq 'Unable to find section for this student';
+ $result = 'Unable to find section for this student';
} else {
$result =~ s/(ok:)+/ok/g;
}
@@ -212,6 +213,7 @@ sub javascript_validations {
my %param = ( formname => 'studentform',
kerb_def_dom => $krbdefdom );
my $authheader = &Apache::loncommon::authform_header(%param);
+ my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
return (< Enrolling '.$ENV{'form.cuname'}." in domain ".
+ $r->print(' Enrolling '.$ENV{'form.cuname'}." \@ ".
$ENV{'form.lcdomain'}.' If active, the new role will be available ".
+ "when the student next logs in to LON-CAPA. ERROR '.
'Invalid login mode or password. '.
@@ -619,14 +628,17 @@ sub enroll_single_student {
sub print_enroll_single_student_form {
my $r=shift;
$r->print("
-Current Classlist
-CSV format
-Enrolling Student
');
- $r->print('Enroll One Student
");
- my ($krbdefdom) = $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;
- $krbdefdom=~tr/a-z/A-Z/;
my $today = time;
my $halfyear = $today+15552000;
my $defdom=$r->dir_config('lonDefDomain');
- my $javascript_validations=&javascript_validations($krbdefdom);
# Set up authentication forms
- my %param = ( formname => 'document.studentform');
+ my ($krbdef,$krbdefdom) =
+ &Apache::loncommon::get_kerberos_defaults($defdom);
+ my $javascript_validations=&javascript_validations($krbdefdom);
+ my %param = ( formname => 'document.studentform',
+ kerb_def_dom => $krbdefdom,
+ kerb_def_auth => $krbdef
+ );
my $krbform = &Apache::loncommon::authform_kerberos(%param);
my $intform = &Apache::loncommon::authform_internal(%param);
my $locform = &Apache::loncommon::authform_local(%param);
@@ -726,113 +738,173 @@ 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("Drop Students
");
my $cid=$ENV{'request.course.id'};
- my ($student_array,$student_data)=&get_current_classlist($r);
- if (! scalar(@$student_array)) {
+ my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist();
+ if (! defined($classlist)) {
$r->print("There are no students currently enrolled.\n");
return;
}
# Print out the available choices
- &show_drop_list($student_array,$student_data,$r);
+ &show_drop_list($r,$classlist,$keylist);
return;
}
# ============================================== view classlist
sub print_html_classlist {
my $r=shift;
+ if (! exists($ENV{'form.sortby'})) {
+ $ENV{'form.sortby'} = 'username';
+ }
+ if ($ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) {
+ $ENV{'form.Status'} = 'Active';
+ }
+ my $status_select = &Apache::lonhtmlcommon::StatusOptions
+ ($ENV{'form.Status'},'studentform');
$r->print(<
username | domain | ID | -student name | section | |
---|---|---|---|---|---|
+ username + | + domain + | + ID + | + student name + | + section + | +|
'. - 'Error'. - 'Error retrieving data for '. - join('@',split(/:/,$student)). - ', '.$error.' | |||||
\n "); if ($linkto eq 'nothing') { @@ -842,9 +914,13 @@ END $username, $domain)); } elsif ($linkto eq 'modify') { - $r->print(''.$username."\n"); + $r->print(''. + $username."\n"); } $r->print(<<"END"); | @@ -860,13 +936,25 @@ END foreach ($username,$domain,$id,$name,$section) { push @line,&Apache::loncommon::csv_translate($_); } + if ($statusmode eq 'Any') { + push @line,&Apache::loncommon::csv_translate($status); + } my $tmp = $"; $" = '","'; $r->print("\"@line\"\n"); $" = $tmp; + } elsif ($mode eq 'excel') { + $excel_sheet->write($row++,0,[$username,$domain,$id, + $name,$section,$status]); } } - $r->print('
'. + 'Your Excel spreadsheet is ready for download.
'."\n"); + } } @@ -876,10 +964,10 @@ END sub print_modify_student_form { my $r = shift(); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['sdom','sname']); - - my $sname = $ENV{'form.sname'}; - my $sdom = $ENV{'form.sdom'}; + ['sdom','sname']); + my $sname = $ENV{'form.sname'}; + my $sdom = $ENV{'form.sdom'}; + my $sortby = $ENV{'form.sortby'}; # determine the students name information my %info=&Apache::lonnet::get('environment', ['firstname','middlename', @@ -904,6 +992,11 @@ sub print_modify_student_form { my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform', 'enddate', $endtime); + # + if (! exists($ENV{'form.Status'}) || + $ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) { + $ENV{'form.Status'} = 'crap'; + } # Make sure student is enrolled in course $r->print(<@@ -930,6 +1026,10 @@ $info{'lastname'} $info{'generation'}, $
Student ID:
+ +Disable ID/Student Number Safeguard and Force Change of Conflicting IDs +(only do if you know what you are doing) +
Section:
First name | $firstname | |
Middle name | $middlename | |
Last name | $lastname | |
Generation | $generation |
Field | +Old Value | +New Value | +
---|---|---|
First name | +$old{'firstname'} | +$firstname | +
Middle name | +$old{'middlename'} | +$middlename | +
Last name | +$old{'lastname'} | +$lastname | +
Generation | +$old{'generation'} | +$generation | +
ID | +$old{'id'} | +$sid | +
Section | +$old{'section'} | +$section | +
Section | $section |
Start Time | $displayable_starttime |
End Time | $displayable_endtime |
END
- # Send request(s) to modify data
- # The '1' in the call to modifystudent is to force the students
- # id to be changed.
+ #
+ # Send request(s) to modify data (final undef is for 'desiredhost',
+ # which is a moot point because the student already has an account.
+ my $modify_section_results = &modifystudent($sdom,$slogin,
+ $ENV{'request.course.id'},
+ $section,undef);
+ if ($modify_section_results !~ /^ok/) {
+ $r->print("An error occured during the attempt to change the ".
+ "section for this student.
-Modify another students data
+
+
+
+Modify another students data
");
+ }
my $roleresults = &Apache::lonnet::modifystudent
- ($sdom,$sname,$sid,undef,undef,$firstname,$middlename,$lastname,
- $generation,$section,$endtime,$starttime,1);
- if ($roleresults =~/refused/) {
+ ($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname,
+ $generation,$section,$endtime,$starttime,$ENV{'form.forceid'});
+ if ($roleresults eq 'refused' ) {
$r->print("Your request to change the role information for this ".
- "student was refused.");
+ "student was refused. You do not appear to have ".
+ "sufficient authority to change student information.");
} elsif ($roleresults !~ /ok/) {
$r->print("An error occurred during the attempt to change the role".
" information for this student.
".
"The error reported was ".
$roleresults);
+ &Apache::lonnet::logthis("londropadd:failed attempt to modify student".
+ " data for ".$slogin." \@ ".$sdom." by ".
+ $ENV{'user.name'}." \@ ".$ENV{'user.domain'}.
+ ":".$roleresults);
} else { # everything is okay!
$r->print("Student information updated successfully.
".
"The student must log out and log in again to see ".
@@ -1003,7 +1170,10 @@ END
}
$r->print(<