--- loncom/interface/Attic/londropadd.pm 2002/05/01 20:54:10 1.37 +++ loncom/interface/Attic/londropadd.pm 2002/09/09 20:54:52 1.48 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.37 2002/05/01 20:54:10 matthew Exp $ +# $Id: londropadd.pm,v 1.48 2002/09/09 20:54:52 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -59,17 +59,15 @@ use Apache::Constants qw(:common :http R # ================================================================ Print header sub header { + my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager'); return(< -LON-CAPA Student Drop/Add +LON-CAPA Enrollment Manager - - -

Drop/Add Students

-
-

Course: $ENV{'course.'.$ENV{'request.course.id'}.'.description'}

+$bodytag + ENDHEAD } @@ -129,7 +127,7 @@ sub domain_form { $select_menus{$dom}->{'default'}= 'default'; $select_menus{$dom}->{'select2'}->{'default'} = 'default'; # Now build up the other items in the second menu - my %servers = &Apache::loncommon::get_home_servers($dom); + my %servers = &Apache::loncommon::get_library_servers($dom); foreach my $server (keys(%servers)) { $select_menus{$dom}->{'select2'}->{$server} = "$server $servers{$server}"; @@ -144,20 +142,17 @@ sub domain_form { # ============================================================== Menu Phase One sub menu_phase_one { my $r=shift; - my $upfile_select=&Apache::loncommon::upfile_select_html(); - $r->print(< -
-

Upload a courselist

-$upfile_select -

-


-

Enroll a single student

-

-


-

Drop students

-

-ENDUPFORM + $r->print(< +Upload a course list +

+Enroll a single student +

+View Classlist +

+Drop Students +

+END } sub phase_two_header { @@ -170,6 +165,7 @@ sub phase_two_header { } my $javascript_validations=&javascript_validations($krbdefdom); $r->print(<Uploading Class List

Identify fields

Total number of records found in file: $distotal
@@ -521,7 +517,7 @@ sub enroll_single_student { if (lc($desiredhost) eq 'default') { $desiredhost = undef; } else { - my %home_servers = &Apache::loncommon::get_home_servers($domain); + my %home_servers =&Apache::loncommon::get_library_servers($domain); if (! exists($home_servers{$desiredhost})) { $r->print('Error:'. 'Invalid home server specified'); @@ -533,7 +529,8 @@ sub enroll_single_student { my $amode=''; my $genpwd=''; if ($ENV{'form.login'} eq 'krb') { - $amode='krb4'; + $amode='krb'; + $amode.=$ENV{'form.krbver'}; $genpwd=$ENV{'form.krbarg'}; } elsif ($ENV{'form.login'} eq 'int') { $amode='internal'; @@ -570,6 +567,7 @@ sub enroll_single_student { # ======================================================= Menu Phase Two Enroll sub menu_phase_two_enroll { my $r=shift; + $r->print("

Enroll One Student

"); my ($krbdefdom) = $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/; $krbdefdom=~tr/a-z/A-Z/; my $today = time; @@ -687,6 +685,7 @@ sub get_current_classlist { } return (undef,%currentlist); } else { + $tmp =~ s/^error://; return ($tmp,undef); } } @@ -694,13 +693,17 @@ sub get_current_classlist { # ========================================================= Menu Phase Two Drop sub menu_phase_two_drop { my $r=shift; + $r->print("

Drop Students

"); my $cid=$ENV{'request.course.id'}; - my ($error,%currentlist)=&get_current_classlist($ENV{'course.'.$cid.'.domain'}, - $ENV{'course.'.$cid.'.num'}); + my ($error,%currentlist)=&get_current_classlist + ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'}); if (defined($error)) { - $r->print('
ERROR:$error
'); - } - if (!defined(%currentlist)) { + if ($error =~ /^No such file or directory/) { + $r->print("There are no students currently enrolled.\n"); + } else { + $r->print("
ERROR:$error
"); + } + } elsif (!defined(%currentlist)) { $r->print("There are no students currently enrolled.\n"); } else { # Print out the available choices @@ -708,6 +711,110 @@ sub menu_phase_two_drop { } } +# ============================================== view classlist +sub menu_phase_two_view { + my $r=shift; + $r->print(<Current Classlist      +CSV format
+END + my $cid=$ENV{'request.course.id'}; + my ($error,%currentlist)=&get_current_classlist + ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'}); + if (defined($error)) { + if ($error =~ /^No such file or directory/) { + $r->print("There are no students currently enrolled.\n"); + } else { + $r->print("
ERROR:$error
"); + } + } elsif (!defined(%currentlist)) { + $r->print("There are no students currently enrolled.\n"); + } else { + # Print out the available choices + &show_class_list($r,'view',%currentlist); + } +} + +# ============================================== view classlist +sub menu_phase_two_viewcsv { + my $r=shift; + my $cid=$ENV{'request.course.id'}; + my ($error,%currentlist)=&get_current_classlist + ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'}); + if (defined($error)) { + if ($error =~ /^No such file or directory/) { + $r->print("There are no students currently enrolled.\n"); + } else { + $r->print("
ERROR:$error
"); + } + } elsif (!defined(%currentlist)) { + $r->print("There are no students currently enrolled.\n"); + } else { + &show_class_list($r,'csv',%currentlist); + } +} + +# =================================================== Show student list to drop +sub show_class_list { + my ($r,$mode,%currentlist)=@_; + my $cid=$ENV{'request.course.id'}; + # Print out header + if ($mode eq 'view') { + $r->print(< + + + +END + } elsif ($mode eq 'csv') { + $r->print(<print( ($mode eq 'view' ? + '' :'')); + } else { + if ($mode eq 'view') { + $r->print(<<"END"); + + + + + + + + +END + } elsif ($mode eq 'csv') { + my @line = (); + foreach ($sname,$sdom,$reply{$sname}, + $info{'lastname'},$info{'firstname'}, + $info{'middlename'},$info{'generation'},$ssec) { + push @line,&Apache::loncommon::csv_translate($_); + } + my $tmp = $"; + $" = '","'; + $r->print("\"@line\"\n"); + $" = $tmp; + } + } + } + $r->print('
usernamedomainIDstudent namegenerationsection
' :''). + 'Internal error: unable to get environment '. + 'for '.$sname.' in domain '.$sdom. + ( $mode eq 'view' ?'
$sname$sdom$reply{$sname}$info{'lastname'}, $info{'firstname'} $info{'middlename'}$info{'generation'}$ssec

') if ($mode eq 'view'); +} + # =================================================== Show student list to drop sub show_drop_list { my ($r,%currentlist)=@_; @@ -769,6 +876,32 @@ END END } +# +# Print out the initial form to get the courselist file +# +sub print_first_courselist_upload_form { + my $r=shift; + my $upfile_select=&Apache::loncommon::upfile_select_html(); + my $create_classlist_help = + &Apache::loncommon::help_open_topic("Course_Create_Class_List", + "How do I create a class list from a spreadsheet"); + my $create_csv_help = + &Apache::loncommon::help_open_topic("Course_Convert_To_CSV", + "How do I create a CSV file from a spreadsheet"); + $r->print(< +
+

Upload a courselist

+$upfile_select +

+
+$create_classlist_help
+$create_csv_help + +ENDUPFORM + return; +} + # ================================================= Drop/Add from uploaded file sub upfile_drop_add { my $r=shift; @@ -797,7 +930,7 @@ sub upfile_drop_add { if (lc($desiredhost) eq 'default') { $desiredhost = undef; } else { - my %home_servers = &Apache::loncommon::get_home_servers($domain); + my %home_servers = &Apache::loncommon::get_library_servers($domain); if (! exists($home_servers{$desiredhost})) { $r->print('Error:'. 'Invalid home server specified'); @@ -808,7 +941,8 @@ sub upfile_drop_add { my $amode = ''; my $genpwd = ''; if ($ENV{'form.login'} eq 'krb') { - $amode='krb4'; + $amode='krb'; + $amode.=$ENV{'form.krbver'}; $genpwd=$ENV{'form.krbarg'}; } elsif ($ENV{'form.login'} eq 'int') { $amode='internal'; @@ -976,13 +1110,16 @@ sub handler { $r->send_http_header; return OK; } + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['enroll','drop','view','phase', + 'viewcsv','uplist']); # Needs to be in a course if (($ENV{'request.course.fn'}) && (&Apache::lonnet::allowed('cst',$ENV{'request.course.id'}))) { # Start page - $r->content_type('text/html'); + $r->content_type('text/html') if (! exists($ENV{'form.viewcsv'})); $r->send_http_header; - $r->print(&header()); + $r->print(&header()) if (! exists($ENV{'form.viewcsv'})); # Phase one, initial screen unless ($ENV{'form.phase'}) { &menu_phase_one($r); @@ -997,12 +1134,18 @@ sub handler { } } if ($ENV{'form.phase'} eq 'two') { - if ($ENV{'form.fileupload'}) { + if ($ENV{'form.uplist'}) { + &print_first_courselist_upload_form($r); + } elsif ($ENV{'form.fileupload'}) { &menu_phase_two_upload($r); } elsif ($ENV{'form.enroll'}) { &menu_phase_two_enroll($r); } elsif ($ENV{'form.drop'}) { &menu_phase_two_drop($r); + } elsif ($ENV{'form.view'}) { + &menu_phase_two_view($r); + } elsif ($ENV{'form.viewcsv'}) { + &menu_phase_two_viewcsv($r); } } # Phase three @@ -1020,7 +1163,7 @@ sub handler { &enroll_single_student($r); } # End - $r->print('

'); + $r->print('') if (! exists($ENV{'form.viewcsv'})); } else { # Not in a course, or not allowed to modify parms $ENV{'user.error.msg'}=