--- loncom/interface/Attic/londropadd.pm 2002/05/03 16:30:48 1.38 +++ loncom/interface/Attic/londropadd.pm 2002/08/22 21:05:25 1.47 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.38 2002/05/03 16:30:48 matthew Exp $ +# $Id: londropadd.pm,v 1.47 2002/08/22 21:05:25 albertel 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(<<ENDHEAD); <html> <head> -<title>LON-CAPA Student Drop/Add</title> +<title>LON-CAPA Enrollment Manager</title> </head> -<body bgcolor="#FFFFFF"> -<img align=right src=/adm/lonIcons/lonlogos.gif> -<h1>Drop/Add Students</h1> -<form method="post" enctype="multipart/form-data" -action="/adm/dropadd" name="studentform"> -<h2>Course: $ENV{'course.'.$ENV{'request.course.id'}.'.description'}</h2> +$bodytag +<form method="post" enctype="multipart/form-data" + action="/adm/dropadd" name="studentform"> 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}"; @@ -145,18 +143,32 @@ sub domain_form { sub menu_phase_one { 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(<<ENDUPFORM); <input type=hidden name=phase value=two> <hr> <h3>Upload a courselist</h3> $upfile_select -<p><input type=submit name=fileupload value="Upload Courselist"> -<hr> +<p><input type=submit name="fileupload" value="Upload Courselist"> +<br /> +$create_classlist_help <br /> +$create_csv_help + +<hr /> <h3>Enroll a single student</h3> -<p><input type=submit name=enroll value="Enroll Student"> -<hr> +<p><input type=submit name="enroll" value="Enroll Student"></p> +<hr /> +<h3>Classlist</h3> +<p><input type=submit name="view" value="View Class List"> +<input type=submit name="viewcsv" value="Comma Separated Class List"></p> +<hr /> <h3>Drop students</h3> -<p><input type=submit name=drop value="Selection List"> +<p><input type=submit name="drop" value="Selection List"></p> ENDUPFORM } @@ -170,6 +182,7 @@ sub phase_two_header { } my $javascript_validations=&javascript_validations($krbdefdom); $r->print(<<ENDPICK); +<h3>Uploading Class List</h3> <hr> <h3>Identify fields</h3> Total number of records found in file: $distotal <hr /> @@ -521,7 +534,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('<font color="#ff0000">Error:</font>'. 'Invalid home server specified'); @@ -533,7 +546,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 +584,7 @@ sub enroll_single_student { # ======================================================= Menu Phase Two Enroll sub menu_phase_two_enroll { my $r=shift; + $r->print("<h3>Enroll One Student</h3>"); my ($krbdefdom) = $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/; $krbdefdom=~tr/a-z/A-Z/; my $today = time; @@ -695,11 +710,16 @@ sub get_current_classlist { # ========================================================= Menu Phase Two Drop sub menu_phase_two_drop { my $r=shift; + $r->print("<h3>Drop Students</h3>"); my $cid=$ENV{'request.course.id'}; my ($error,%currentlist)=&get_current_classlist ($ENV{'course.'.$cid.'.domain'},$ENV{'course.'.$cid.'.num'}); if (defined($error)) { - $r->print("<pre>ERROR:$error</pre>"); + if ($error =~ /^No such file or directory/) { + $r->print("There are no students currently enrolled.\n"); + } else { + $r->print("<pre>ERROR:$error</pre>"); + } } elsif (!defined(%currentlist)) { $r->print("There are no students currently enrolled.\n"); } else { @@ -708,6 +728,107 @@ sub menu_phase_two_drop { } } +# ============================================== view classlist +sub menu_phase_two_view { + my $r=shift; + $r->print("<h3>Current Classlist</h3>"); + 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("<pre>ERROR:$error</pre>"); + } + } 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("<pre>ERROR:$error</pre>"); + } + } 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); +<p> +<table border=2> +<tr><th>username</th><th>domain</th><th>ID</th> + <th>student name</th><th>generation</th><th>section</th></tr> +END + } elsif ($mode eq 'csv') { + $r->print(<<END); +username,domain,ID,last name,first name,middle name,generation,section +END + } + foreach (sort keys %currentlist) { + my ($sname,$sdom)=split(/\:/,$_); + my %reply=&Apache::lonnet::idrget($sdom,$sname); + my $ssec=&Apache::lonnet::usection($sdom,$sname,$cid); + my %info=&Apache::lonnet::get('environment', + ['firstname','middlename', + 'lastname','generation'], + $sdom, $sname); + my ($tmp) = keys(%info); + if ($tmp =~ /^(con_lost|error|no_such_host)/i) { + $r->print( ($mode eq 'view' ? + '<tr><td colspan="6"><font color="red">' :''). + 'Internal error: unable to get environment '. + 'for '.$sname.' in domain '.$sdom. + ( $mode eq 'view' ?'</font></td></tr>' :'')); + } else { + if ($mode eq 'view') { + $r->print(<<"END"); +<tr> + <td>$sname</td> + <td>$sdom</td> + <td>$reply{$sname}</td> + <td>$info{'lastname'}, $info{'firstname'} $info{'middlename'}</td> + <td>$info{'generation'}</td> + <td>$ssec</td> +</tr> +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('</table><br>') if ($mode eq 'view'); +} + # =================================================== Show student list to drop sub show_drop_list { my ($r,%currentlist)=@_; @@ -797,7 +918,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('<font color="#ff0000">Error:</font>'. 'Invalid home server specified'); @@ -808,7 +929,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'; @@ -980,9 +1102,9 @@ sub handler { 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); @@ -1003,6 +1125,10 @@ sub handler { &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 +1146,7 @@ sub handler { &enroll_single_student($r); } # End - $r->print('</form></body></html>'); + $r->print('</form></body></html>') if (! exists($ENV{'form.viewcsv'})); } else { # Not in a course, or not allowed to modify parms $ENV{'user.error.msg'}=