--- loncom/interface/Attic/londropadd.pm 2002/09/26 13:29:44 1.54
+++ loncom/interface/Attic/londropadd.pm 2003/07/03 19:26:20 1.72
@@ -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.72 2003/07/03 19:26:20 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;
###############################################################
###############################################################
@@ -78,13 +79,16 @@ sub modifystudent {
# We are in this course
my $section=$1;
$section='' if ($course eq $courseid.'_st');
- if ( ((!$section) && (!$csec)) || ($section ne $csec) ) {
+ if ($section eq $csec) {
+ $result .= 'ok:';
+ } elsif ( ((!$section) && (!$csec)) || ($section ne $csec) ) {
my (undef,$end,$start)=split(/\_/,$roles{$course});
my $now=time;
# if this is an active role
if (!($start && ($now<$start)) || !($end && ($now>$end))) {
my $reply=&Apache::lonnet::modifystudent
- ($udom,$unam,'','','','','','','',
+ # dom name id mode pass f m l g
+ ($udom,$unam,'', '', '',undef,undef,undef,undef,
$section,time,undef,undef,$desiredhost);
$result .= $reply.':';
}
@@ -92,7 +96,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 +216,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 (< '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);
my $domform = &domain_form($defdom);
+ my $date_table = &date_setting_table();
$r->print(<
@@ -482,18 +453,9 @@ $locform
Full update
(also print list of users not enrolled anymore)
@@ -520,12 +482,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;
@@ -557,6 +518,16 @@ sub print_upload_manager_form {
# ======================================================= Enroll single student
sub enroll_single_student {
my $r=shift;
+ #
+ # We do the dates first because the action of making them the defaul
+ # in the course is entirely seperate from the action of enrolling the
+ # student. Also, a failure in setting the dates as default is not fatal
+ # to the process of enrolling / modifying a student.
+ my ($startdate,$enddate) = &get_dates_from_form();
+ if ($ENV{'form.makedatesdefault'}) {
+ $r->print(&make_dates_default($startdate,$enddate));
+ }
+
$r->print('
ERROR '.
'Invalid login mode or password. '.
@@ -615,23 +594,106 @@ sub enroll_single_student {
}
}
+sub setup_date_selectors {
+ my ($starttime,$endtime) = @_;
+ if (! defined($starttime)) {
+ $starttime = time;
+ if (exists($ENV{'course.'.$ENV{'request.course.id'}.
+ '.default_enrollment_start_date'})) {
+ $starttime = $ENV{'course.'.$ENV{'request.course.id'}.
+ '.default_enrollment_start_date'};
+ }
+ }
+ if (! defined($endtime)) {
+ $endtime = time+(6*30*24*60*60); # 6 months from now, approx
+ if (exists($ENV{'course.'.$ENV{'request.course.id'}.
+ '.default_enrollment_end_date'})) {
+ $endtime = $ENV{'course.'.$ENV{'request.course.id'}.
+ '.default_enrollment_end_date'};
+ }
+ }
+ my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform',
+ 'startdate',
+ $starttime);
+ my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',
+ 'enddate',
+ $endtime);
+ return ($startdateform,$enddateform);
+}
+
+sub get_dates_from_form {
+ my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate');
+ my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate');
+ if ($ENV{'form.no_end_date'}) {
+ $enddate = 0;
+ }
+ return ($startdate,$enddate);
+}
+
+sub date_setting_table {
+ my ($starttime,$endtime) = @_;
+ my ($startform,$endform)=&setup_date_selectors($starttime,$endtime);
+ my $dateDefault = ''.
+ ''.
+ ' make these dates the default for future enrollment';
+ my $perpetual = ''.' no ending date';
+ my $result = '';
+ $result .= "
\n";
+ $result .= '
Starting Date
'.
+ '
'.$startform.'
'.
+ '
'.$dateDefault.'
'."
\n";
+ $result .= '
Ending Date
'.
+ '
'.$endform.'
'.
+ '
'.$perpetual.'
'."
\n";
+ $result .= "
\n";
+ return $result;
+}
+
+sub make_dates_default {
+ my ($startdate,$enddate) = @_;
+ my $result = '';
+ my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
+ my $put_result = &Apache::lonnet::put('environment',
+ {'default_enrollment_start_date'=>$startdate,
+ 'default_enrollment_end_date' =>$enddate},$dom,$crs);
+ if ($put_result eq 'ok') {
+ $result .= "Set default start and end dates for course ";
+ #
+ # Refresh the course environment
+ &Apache::lonnet::coursedescription($ENV{'request.course.id'});
+ } else {
+ $result .= "Unable to set default dates for course:".$put_result.
+ ' ';
+ }
+ return $result;
+}
+
# ======================================================= Menu Phase Two Enroll
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);
# Set up domain selection form
my $domform = &domain_form($defdom);
+ my $date_table = &date_setting_table();
# Print it all out
$r->print(<
@@ -697,20 +759,7 @@ $locform
@@ -726,81 +775,89 @@ 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','modifystudent',
- 'any',$student_array,$student_data);
+ $ENV{'form.Status'},$classlist,$keylist);
} else {
&show_class_list($r,'view','aboutme','classlist',
- 'any',$student_array,$student_data);
+ $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','csv',
- '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,$action,$statusmode,$students,$s_data)=@_;
+ my ($r,$mode,$linkto,$action,$statusmode,$classlist,$keylist)=@_;
my $cid=$ENV{'request.course.id'};
- &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['sortby']);
+ #
+ # 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';
@@ -808,58 +865,83 @@ sub show_class_list {
# 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(<
+
+
'.
- 'Error'.
- 'Error retrieving data for '.
- join('@',split(/:/,$student)).
- ', '.$error.'
'."\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'};
- next if (($statusmode ne 'any') && ($status ne $statusmode));
+ 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 (($statusmode ne 'Any') && ($status ne $statusmode));
if ($mode eq 'view') {
$r->print("
'."\n");
+ }
}
@@ -904,7 +1001,7 @@ END
sub print_modify_student_form {
my $r = shift();
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['sdom','sname','sortby']);
+ ['sdom','sname']);
my $sname = $ENV{'form.sname'};
my $sdom = $ENV{'form.sdom'};
my $sortby = $ENV{'form.sortby'};
@@ -926,12 +1023,12 @@ sub print_modify_student_form {
# determine the students starting and ending times and section
my ($starttime,$endtime,$section) = &get_enrollment_data($sname,$sdom);
# Deal with date forms
- my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform',
- 'startdate',
- $starttime);
- my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',
- 'enddate',
- $endtime);
+ my $date_table = &date_setting_table($starttime,$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(<
@@ -944,6 +1041,8 @@ Only domain coordinators can change a us
+
+
Modify Enrollment for $info{'firstname'} $info{'middlename'}
$info{'lastname'} $info{'generation'}, $sname\@$sdom
@@ -964,12 +1063,8 @@ Disable ID/Student Number Safeguard and
(only do if you know what you are doing)