--- loncom/interface/Attic/londropadd.pm 2002/09/24 18:24:43 1.52
+++ loncom/interface/Attic/londropadd.pm 2003/02/13 21:35:50 1.64
@@ -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.64 2003/02/13 21:35:50 albertel 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;
}
@@ -220,6 +221,7 @@ function verify_message (vf,founduname,f
alert('You need to specify the username field');
return;
}
+ // alert('current.radiovalue = '+current.radiovalue);
if (current.radiovalue == null || current.radiovalue == 'nochange') {
// They did not check any of the login radiobuttons.
alert('You must choose an authentication type');
@@ -459,7 +461,13 @@ ENDPICK
###############################################################
sub print_upload_manager_footer {
my ($r,$i,$keyfields,$defdom,$today,$halfyear)=@_;
- my %param = ( formname => 'document.studentform');
+
+ my ($krbdef,$krbdefdom) =
+ &Apache::loncommon::get_kerberos_defaults($defdom);
+ 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);
@@ -520,12 +528,11 @@ sub print_upload_manager_form {
my @records=&Apache::loncommon::upfile_record_sep();
my $total=$#records;
my $distotal=$total+1;
- $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;
- my $krbdefdom=$1;
- $krbdefdom=~tr/a-z/A-Z/;
my $today=time;
my $halfyear=$today+15552000;
my $defdom=$r->dir_config('lonDefDomain');
+ my ($krbdef,$krbdefdom) =
+ &Apache::loncommon::get_kerberos_defaults($defdom);
&print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom);
my $i;
my $keyfields;
@@ -558,7 +565,7 @@ sub print_upload_manager_form {
sub enroll_single_student {
my $r=shift;
$r->print('
Enrolling Student
');
- $r->print('
Enrolling '.$ENV{'form.cuname'}." in domain ".
+ $r->print('
ERROR '.
'Invalid login mode or password. '.
@@ -619,14 +634,17 @@ sub enroll_single_student {
sub print_enroll_single_student_form {
my $r=shift;
$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 +744,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(<
+
+Current Classlist
+
+END
+ if ($ENV{'form.action'} ne 'modifystudent') {
+ $r->print(<
+CSV format
+
+Excel format
+
+
+Student Status:
END
+ }
+ $r->print($status_select."\n");
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");
} else {
# Print out the available choices
if ($ENV{'form.action'} eq 'modifystudent') {
- &show_class_list($r,'view','modify','any',$student_array,$student_data);
+ &show_class_list($r,'view','modify','modifystudent',
+ $ENV{'form.Status'},$classlist,$keylist);
} else {
- &show_class_list($r,'view','aboutme','any',$student_array,$student_data);
+ &show_class_list($r,'view','aboutme','classlist',
+ $ENV{'form.Status'},$classlist,$keylist);
}
}
}
# ============================================== view classlist
-sub print_csv_classlist {
+sub print_formatted_classlist {
my $r=shift;
+ my $mode = shift;
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");
} else {
- &show_class_list($r,'csv','nolink','any',$student_array,$student_data);
+ &show_class_list($r,$mode,'nolink','csv',
+ $ENV{'form.Status'},$classlist,$keylist);
}
}
# =================================================== Show student list to drop
sub show_class_list {
- my ($r,$mode,$linkto,$statusmode,$students,$student_data)=@_;
+ my ($r,$mode,$linkto,$action,$statusmode,$classlist,$keylist)=@_;
my $cid=$ENV{'request.course.id'};
+ #
+ # Variables for excel output
+ my ($excel_workbook, $excel_sheet, $excel_filename,$row);
+ #
+ my $sortby = $ENV{'form.sortby'};
+ if ($sortby !~ /^(username|domain|section|fullname|id)$/) {
+ $sortby = 'username';
+ }
# Print out header
if ($mode eq 'view') {
if ($linkto eq 'aboutme') {
- $r->print('Select a user name to view the users page.');
+ $r->print('Select a user name to view the users personal page.');
} elsif ($linkto eq 'modify') {
$r->print('Select a user name to modify the students information');
}
$r->print(<
+
+
'."\n");
+ }
}
@@ -876,10 +970,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 +998,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(<
@@ -914,7 +1013,10 @@ Only domain coordinators can change a us
-
+
+
+
+
Modify Enrollment for $info{'firstname'} $info{'middlename'}
$info{'lastname'} $info{'generation'}, $sname\@$sdom
+
+Disable ID/Student Number Safeguard and Force Change of Conflicting IDs
+(only do if you know what you are doing)
+
Section:
@@ -948,15 +1054,37 @@ END
#
sub modify_single_student {
my $r = shift;
- # make sure user can modify student data?
+ # Get the 'sortby' and 'Status' variables so the user goes back to their
+ # previous screen
+ my $sortby = $ENV{'form.sortby'};
+ my $status = $ENV{'form.Status'};
+ #
+ # We always need this information
+ my $slogin = $ENV{'form.slogin'};
+ my $sdom = $ENV{'form.sdomain'};
+ #
+ # Get the old data
+ my %old=&Apache::lonnet::get('environment',
+ ['firstname','middlename',
+ 'lastname','generation','id'],
+ $sdom, $slogin);
+ $old{'section'} = &Apache::lonnet::getsection($sdom,$slogin,
+ $ENV{'request.course.id'});
+ my ($tmp) = keys(%old);
+ if ($tmp =~ /^(con_lost|error|no_such_host)/i) {
+ $r->print("There was an error determining the environment values ".
+ " for $slogin \@ $sdom.");
+ return;
+ }
+ undef $tmp;
+ #
+ # Get the new data
my $firstname = $ENV{'form.firstname'};
my $middlename = $ENV{'form.middlename'};
my $lastname = $ENV{'form.lastname'};
my $generation = $ENV{'form.generation'};
my $section = $ENV{'form.section'};
my $courseid = $ENV{'request.course.id'};
- my $sname = $ENV{'form.slogin'};
- my $sdom = $ENV{'form.sdomain'};
my $sid = $ENV{'form.id'};
my $starttime = &Apache::lonhtmlcommon::get_date_from_form('startdate',
time);
@@ -964,38 +1092,85 @@ sub modify_single_student {
time);
my $displayable_starttime = localtime($starttime);
my $displayable_endtime = localtime($endtime);
+ #
+ # check for forceid override
+ if ((defined($old{'id'})) && ($old{'id'} ne '') &&
+ ($sid ne $old{'id'}) && (! exists($ENV{'form.forceid'}))) {
+ $r->print("You changed the students id ".
+ " but did not disable the ID change safeguard.".
+ " The students id will not be changed.");
+ $sid = $old{'id'};
+ }
+ #
# talk to the user about what we are going to do
$r->print(<Modifying data for user $sname \@ $sdom
+
Modifying data for user $slogin \@ $sdom
Student Information
-
-
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
+
Role Information
-
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. ");
+ }
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 +1178,10 @@ END
}
$r->print(<