--- loncom/interface/Attic/londropadd.pm 2003/12/12 18:04:38 1.94 +++ loncom/interface/Attic/londropadd.pm 2004/06/09 17:08:27 1.113 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to drop and add students in courses # -# $Id: londropadd.pm,v 1.94 2003/12/12 18:04:38 sakharuk Exp $ +# $Id: londropadd.pm,v 1.113 2004/06/09 17:08:27 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,11 +25,6 @@ # # http://www.lon-capa.org/ # -# (Handler to set parameters for assessments -# -# (Handler to resolve ambiguous file locations -# -# (TeX Content Handler # ############################################################### ############################################################## @@ -42,6 +37,7 @@ use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::Constants qw(:common :http REDIRECT); use Spreadsheet::WriteExcel; +use Apache::lonstathelpers(); use Apache::lonlocal; ############################################################### @@ -148,33 +144,44 @@ sub print_main_menu { 'view' => 'View Class List', 'drop' => 'Drop Students', 'populate' => 'Automated Enrollment Manager'); + my %help=(); + foreach ('Course_Drop_Student','Course_Add_Student', + 'Course_Modify_Student_Data','Course_View_Class_List', + 'Course_Create_Class_List') { + $help{$_}=&Apache::loncommon::help_open_topic($_); + } $r->print(< - $Text{'upload'} - +$Text{'upload'} +$help{'Course_Create_Class_List'}

$Text{'enrollone'} - + $help{'Course_Add_Student'}

$Text{'modify'} - + $help{'Course_Modify_Student_Data'}

$Text{'view'} - + $help{'Course_View_Class_List'}

$Text{'drop'} - + $help{'Course_Drop_Student'}

+END + my ($cdom,$cnum) = split/_/,$ENV{'request.course.id'}; + if (&Apache::lonnet::auto_run($cnum,$cdom) ) { + $r->print(< $Text{'populate'} END + } } ############################################################### @@ -187,6 +194,7 @@ sub hidden_input { sub print_upload_manager_header { my ($r,$datatoken,$distotal,$krbdefdom)=@_; my $javascript; + # if (! exists($ENV{'form.upfile_associate'})) { $ENV{'form.upfile_associate'} = 'forward'; } @@ -202,7 +210,20 @@ sub print_upload_manager_header { } else { $javascript=&upload_manager_javascript_forward_associate(); } - my $javascript_validations=&javascript_validations('auth',$krbdefdom); + # + # Deal with restored settings + my $password_choice = ''; + if (exists($ENV{'form.ipwd_choice'}) && + $ENV{'form.ipwd_choice'} ne '') { + # If a column was specified for password, assume it is for an + # internal password. This is a bug waiting to be filed (could be + # local or krb auth instead of internal) but I do not have the + # time to mess around with this now. + $password_choice = 'int'; + } + # + my $javascript_validations=&javascript_validations('auth',$krbdefdom, + $password_choice); my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':''); $r->print('

'.&mt('Uploading Class List')."

\n". "
\n". @@ -232,17 +253,27 @@ sub print_upload_manager_header { ############################################################### ############################################################### sub javascript_validations { - my ($mode,$krbdefdom)=@_; + my ($mode,$krbdefdom,$curr_authtype,$curr_authfield)=@_; my $authheader; if ($mode eq 'auth') { my %param = ( formname => 'studentform', - kerb_def_dom => $krbdefdom ); + kerb_def_dom => $krbdefdom, + curr_authtype => $curr_authtype); $authheader = &Apache::loncommon::authform_header(%param); } elsif ($mode eq 'createcourse') { my %param = ( formname => 'ccrs', - kerb_def_dom => $krbdefdom ); + kerb_def_dom => $krbdefdom, + curr_authtype => $curr_authtype ); + $authheader = &Apache::loncommon::authform_header(%param); + } elsif ($mode eq 'modifycourse') { + my %param = ( formname => 'cmod', + kerb_def_dom => $krbdefdom, + mode => 'modifycourse', + curr_authtype => $curr_authtype, + curr_autharg => $curr_authfield ); $authheader = &Apache::loncommon::authform_header(%param); } + my %alert = &Apache::lonlocal::texthash (username => 'You need to specify the username field.', @@ -260,24 +291,59 @@ sub javascript_validations { my $function_name =(< $krbdefdom, kerb_def_auth => $krbdef ); + if (exists($ENV{'form.ipwd_choice'}) && + defined($ENV{'form.ipwd_choice'}) && + $ENV{'form.ipwd_choice'} ne '') { + $param{'curr_authtype'} = 'int'; + } my $krbform = &Apache::loncommon::authform_kerberos(%param); my $intform = &Apache::loncommon::authform_internal(%param); my $locform = &Apache::loncommon::authform_local(%param); @@ -543,7 +615,7 @@ sub print_upload_manager_footer { 'of Conflicting IDs (only do if you know what you are doing)'). "\n

\n"; $Str .= ''."
\n"; + 'value="Update Class List" />'."
\n"; $Str .= &mt('Note: for large courses, this operation may be time '. 'consuming'); $r->print($Str); @@ -554,6 +626,7 @@ sub print_upload_manager_footer { ############################################################### sub print_upload_manager_form { my $r=shift; + my $firstLine; my $datatoken; if (!$ENV{'form.datatoken'}) { @@ -570,23 +643,41 @@ sub print_upload_manager_form { my $distotal=$total+1; my $today=time; my $halfyear=$today+15552000; + # + # Restore memorized settings + &Apache::loncommon::restore_course_settings + ('enrollment_upload',{ 'username_choice' => 'scalar', # column settings + 'names_choice' => 'scalar', + 'fname_choice' => 'scalar', + 'mname_choice' => 'scalar', + 'lname_choice' => 'scalar', + 'gen_choice' => 'scalar', + 'id_choice' => 'scalar', + 'sec_choice' => 'scalar', + 'ipwd_choice' => 'scalar', + 'email_choice' => 'scalar', + }); + # + # Determine kerberos parameters as appropriate my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; my ($krbdef,$krbdefdom) = &Apache::loncommon::get_kerberos_defaults($defdom); + # &print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom); my $i; my $keyfields; if ($total>=0) { - my @field=(['username',&mt('Username')], - ['names',&mt('Last Name, First Names')], - ['fname',&mt('First Name')], - ['mname',&mt('Middle Names/Initials')], - ['lname',&mt('Last Name')], - ['gen',&mt('Generation')], - ['id',&mt('ID/Student Number')], - ['sec',&mt('Group/Section')], - ['ipwd',&mt('Initial Password')], - ['email',&mt('EMail Address')]); + my @field= + (['username',&mt('Username'), $ENV{'form.username_choice'}], + ['names',&mt('Last Name, First Names'),$ENV{'form.names_choice'}], + ['fname',&mt('First Name'), $ENV{'form.fname_choice'}], + ['mname',&mt('Middle Names/Initials'),$ENV{'form.mname_choice'}], + ['lname',&mt('Last Name'), $ENV{'form.lname_choice'}], + ['gen', &mt('Generation'), $ENV{'form.gen_choice'}], + ['id', &mt('ID/Student Number'),$ENV{'form.id_choice'}], + ['sec', &mt('Group/Section'), $ENV{'form.sec_choice'}], + ['ipwd', &mt('Initial Password'),$ENV{'form.ipwd_choice'}], + ['email',&mt('EMail Address'), $ENV{'form.email_choice'}]); if ($ENV{'form.upfile_associate'} eq 'reverse') { &Apache::loncommon::csv_print_samples($r,\@records); $i=&Apache::loncommon::csv_print_select_table($r,\@records, @@ -614,7 +705,7 @@ sub enroll_single_student { $ENV{'form.csec'}=~s/\W//g; # # 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 + # in the course is entirely separate 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(); @@ -1015,7 +1106,7 @@ sub print_drop_menu { # ============================================== view classlist sub print_html_classlist { - my $r=shift; + my ($r,$mode) = @_; if (! exists($ENV{'form.sortby'})) { $ENV{'form.sortby'} = 'username'; } @@ -1023,94 +1114,117 @@ sub print_html_classlist { $ENV{'form.Status'} = 'Active'; } my $status_select = &Apache::lonhtmlcommon::StatusOptions - ($ENV{'form.Status'},'studentform'); - my $CCL=&mt('Current Class List'); - $r->print(< - -

-$CCL -      -END + ($ENV{'form.Status'}); + my $cid=$ENV{'request.course.id'}; + my $cdom=$ENV{'course.'.$cid.'.domain'}; + my $cnum=$ENV{'course.'.$cid.'.num'}; + # + # List course personnel + my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum); + # + if (! defined($ENV{'form.output'}) || + $ENV{'form.output'} !~ /^(csv|excel|html)$/ ) { + $ENV{'form.output'} = 'html'; + } + # + $r->print('
'); + foreach my $role (sort keys %coursepersonnel) { + next if ($role =~ /^\s*$/); + $r->print(''); + } + $r->print('
'.$role.''); + foreach my $user (split(',',$coursepersonnel{$role})) { + my ($puname,$pudom)=split(':',$user); + $r->print(' '.&Apache::loncommon::aboutmewrapper( + &Apache::loncommon::plainname($puname, + $pudom), + $puname,$pudom)); + } + $r->print('
'); + # + # Interface output + $r->print(''); + $r->print("

\n"); if ($ENV{'form.action'} ne 'modifystudent') { - my %lt=&Apache::lonlocal::texthash( - 'ef' => "Excel format", - 'ss' => "Student Status", - ); - $r->print(< -CSV format -         -$lt{'ef'} - -      -$lt{'ss'}: -END + my %lt=&Apache::lonlocal::texthash('csv' => "CSV", + 'excel' => "Excel", + 'html' => 'HTML'); + my $output_selector = ''; + $r->print(&mt('Output Format: [_1]',$output_selector).(' 'x3)); } - $r->print($status_select."

\n"); - my $cid=$ENV{'request.course.id'}; + $r->print(&mt('Student Status: [_1]',$status_select)."\n"); + $r->print(''. + "\n

\n"); + # + # Print the classlist + $r->print('

'.&mt('Current Class List').'

'); my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); if (! defined($classlist)) { $r->print(&mt('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', + &show_class_list($r,'view','modify', $ENV{'form.Status'},$classlist,$keylist); } else { - &show_class_list($r,'view','aboutme','classlist', + &show_class_list($r,$ENV{'form.output'},'aboutme', $ENV{'form.Status'},$classlist,$keylist); } } } -# ============================================== view classlist -sub print_formatted_classlist { - my $r=shift; - my $mode = shift; - my $cid=$ENV{'request.course.id'}; - my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); - if (! defined($classlist)) { - $r->print(&mt('There are no students currently enrolled.')."\n"); - } else { - &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,$classlist,$keylist)=@_; + my ($r,$mode,$linkto,$statusmode,$classlist,$keylist)=@_; my $cid=$ENV{'request.course.id'}; # # Variables for excel output - my ($excel_workbook, $excel_sheet, $excel_filename,$row); + my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format); + # + # Variables for csv output + my ($CSVfile,$CSVfilename); # my $sortby = $ENV{'form.sortby'}; - if ($sortby !~ /^(username|domain|section|fullname|id)$/) { + if ($sortby !~ /^(username|domain|section|fullname|id|start|end)$/) { $sortby = 'username'; } # Print out header - if ($mode eq 'view') { + $r->print(< + +END + if ($mode eq 'html' || $mode eq 'view') { if ($linkto eq 'aboutme') { $r->print(&mt('Select a user name to view the users personal page.')); } elsif ($linkto eq 'modify') { $r->print(&mt('Select a user name to modify the students information')); } my %lt=&Apache::lonlocal::texthash( - 'usrn' => "username", - 'dom' => "domain", - 'sn' => "student name", - 'sec' => "section", + 'usrn' => "username", + 'dom' => "domain", + 'sn' => "student name", + 'sec' => "section", + 'start' => "start date", + 'end' => "end date", ); $r->print(<

- END } elsif ($mode eq 'csv') { + # + # Open a file + $CSVfilename = '/prtspool/'. + $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. + time.'_'.rand(1000000000).'.csv'; + unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) { + $r->log_error("Couldn't open $CSVfilename for output $!"); + $r->print("Problems occured in writing the csv file. ". + "This error has been logged. ". + "Please alert your LON-CAPA administrator."); + $CSVfile = undef; + } + # + # Write headers and data to file if($statusmode eq 'Expired') { - $r->print(&mt('Students with expired roles')); + print $CSVfile '"'.&mt('Students with expired roles').'"'."\n"; } if ($statusmode eq 'Any') { - $r->print('"'.join('","',(&mt("username"),&mt("domain"),"ID", - &mt("student name"),&mt("section"),&mt("status"))). - '"'."\n"); + print $CSVfile '"'.join('","',map { + &Apache::loncommon::csv_translate(&mt($_)) + } ("username","domain","ID","student name", + "section","start date","end date","status")).'"'."\n"; } else { - $r->print('"'.join('","',(&mt("username"),&mt("domain"),"ID", - &mt("student name"),&mt("section"))).'"'."\n"); + print $CSVfile '"'.join('","',map { + &Apache::loncommon::csv_translate(&mt($_)) + } ("username","domain","ID","student name", + "section","start date","end date")).'"'."\n"; } } elsif ($mode eq 'excel') { # Create the excel spreadsheet @@ -1143,14 +1278,18 @@ END $excel_workbook = Spreadsheet::WriteExcel->new('/home/httpd'. $excel_filename); $excel_workbook->set_tempdir('/home/httpd/perl/tmp'); + # + $format = &Apache::loncommon::define_excel_formats($excel_workbook); $excel_sheet = $excel_workbook->addworksheet('classlist'); # my $description = 'Class List for '. $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; - $excel_sheet->write($row++,0,$description); + $excel_sheet->write($row++,0,$description,$format->{'h1'}); # $excel_sheet->write($row++,0,["username","domain","ID", - "student name","section","status"]); + "student name","section", + "start date","end date","status"], + $format->{'bold'}); } # # Sort the students @@ -1169,16 +1308,22 @@ END || lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third]) } (keys(%$classlist)); + my $studentcount = 0; foreach my $student (@Sorted_Students) { - 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'}]; + my $sdata = $classlist->{$student}; + my $username = $sdata->[$index{'username'}]; + my $domain = $sdata->[$index{'domain'}]; + my $section = $sdata->[$index{'section'}]; + my $name = $sdata->[$index{'fullname'}]; + my $id = $sdata->[$index{'id'}]; + my $status = $sdata->[$index{'status'}]; + my $start = $sdata->[$index{'start'}]; + my $end = $sdata->[$index{'end'}]; next if (($statusmode ne 'Any') && ($status ne $statusmode)); - if ($mode eq 'view') { - $r->print("\n \n + + END } elsif ($mode eq 'csv') { + next if (! defined($CSVfile)); # no need to bother with $linkto + $start = &Apache::lonlocal::locallocaltime($start); + $end = &Apache::lonlocal::locallocaltime($end); my @line = (); - foreach ($username,$domain,$id,$name,$section) { + foreach ($username,$domain,$id,$name,$section,$start,$end) { push @line,&Apache::loncommon::csv_translate($_); } if ($statusmode eq 'Any') { push @line,&Apache::loncommon::csv_translate($status); } - my $tmp = $"; - $" = '","'; - $r->print("\"@line\"\n"); - $" = $tmp; + print $CSVfile '"'.join('","',@line).'"'."\n"; } elsif ($mode eq 'excel') { - $excel_sheet->write($row++,0,[$username,$domain,$id, - $name,$section,$status]); + $excel_sheet->write($row,0,[$username,$domain,$id, + $name,$section]); + my $col = 5; + foreach my $time ($start,$end) { + $excel_sheet->write($row,$col++, + &Apache::lonstathelpers::calc_serial($time), + $format->{'date'}); + } + $excel_sheet->write($row,$col++,$status); + $row++; } } - if ($mode eq 'view') { + if ($mode eq 'view' || $mode eq 'html') { $r->print('
+
Count + $lt{'usrn'} $lt{'dom'} @@ -1120,20 +1234,41 @@ sub show_class_list { $lt{'sn'} $lt{'sec'} + + $lt{'start'} + + $lt{'end'}
\n "); + if ($mode eq 'view' || $mode eq 'html') { + $start = &Apache::lonlocal::locallocaltime($start); + $end = &Apache::lonlocal::locallocaltime($end); + $r->print("
".(++$studentcount)."\n "); if ($linkto eq 'nothing') { $r->print($username); } elsif ($linkto eq 'aboutme') { @@ -1200,32 +1345,48 @@ END $id $name $section$start$end

'); } elsif ($mode eq 'excel') { $excel_workbook->close(); $r->print('

'. &mt('Your Excel spreadsheet').' '.&mt('is ready for download').'.

'."\n"); + } elsif ($mode eq 'csv') { + close($CSVfile); + $r->print(''. + &mt('Your CSV file').' is ready for download.'. + "\n"); + $r->rflush(); } } @@ -1261,7 +1422,28 @@ sub print_modify_student_form { $r->print('

'.$starttime.'

'); return; } + # # Deal with date forms + my $current_date_description = ''; + my $textdate = ''; + + if (! defined($starttime) || $starttime == 0) { + $current_date_description = &mt('Current Starting Date: not set'). + '
'; + } else { + $current_date_description = + &mt('Current Starting Date: [_1]', + &Apache::lonlocal::locallocaltime($starttime)).'
'; + } + if (! defined($endtime) || $endtime == 0) { + $current_date_description.= &mt('Current Ending Date: not set'). + '
'; + } else { + $current_date_description.= + &mt('Current Ending Date: [_1]', + &Apache::lonlocal::locallocaltime($endtime)).'
'; + + } my $date_table = &date_setting_table($starttime,$endtime); # if (! exists($ENV{'form.Status'}) || @@ -1294,7 +1476,6 @@ $lt{'odcc'} -

$lt{'mef'} $info{'firstname'} $info{'middlename'} $info{'lastname'} $info{'generation'}, $sname\@$sdom

@@ -1313,8 +1494,9 @@ $info{'lastname'} $info{'generation'}, $ $lt{'disn'}

-$lt{'sec'}: +$lt{'sec'}:

+

$current_date_description

$date_table

@@ -1540,7 +1722,7 @@ sub show_drop_list { ['sortby']); } my $sortby = $ENV{'form.sortby'}; - if ($sortby !~ /^(username|domain|section|fullname|id)$/) { + if ($sortby !~ /^(username|domain|section|fullname|id|start|end)$/) { $sortby = 'username'; } # @@ -1564,13 +1746,14 @@ function uncheckAll(field) { END +my %lt=&Apache::lonlocal::texthash('usrn' => "username", + 'dom' => "domain", + 'sn' => "student name", + 'sec' => "section", + 'start' => "start date", + 'end' => "end date", + ); if ($nosort) { - my %lt=&Apache::lonlocal::texthash( - 'usrn' => "username", - 'dom' => "domain", - 'sn' => "student name", - 'sec' => "section", - ); $r->print(< @@ -1580,16 +1763,12 @@ END ID $lt{'sn'} $lt{'sec'} + $lt{'start'} + $lt{'end'} END } else { - my %lt=&Apache::lonlocal::texthash( - 'usrn' => "username", - 'dom' => "domain", - 'sn' => "student name", - 'sec' => "section", - ); $r->print(<   @@ -1603,6 +1782,10 @@ END $lt{'sn'} $lt{'sec'} + + $lt{'start'} + + $lt{'end'} END @@ -1626,12 +1809,25 @@ END } (keys(%$classlist)); foreach my $student (@Sorted_Students) { my $error; - 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'}]; + my $sdata = $classlist->{$student}; + my $username = $sdata->[$index{'username'}]; + my $domain = $sdata->[$index{'domain'}]; + my $section = $sdata->[$index{'section'}]; + my $name = $sdata->[$index{'fullname'}]; + my $id = $sdata->[$index{'id'}]; + my $start = $sdata->[$index{'start'}]; + my $end = $sdata->[$index{'end'}]; + if (! defined($start) || $start == 0) { + $start = &mt('none'); + } else { + $start = &Apache::lonlocal::locallocaltime($start); + } + if (! defined($end) || $end == 0) { + $end = &mt('none'); + } else { + $end = &Apache::lonlocal::locallocaltime($end); + } + my $status = $sdata->[$index{'status'}]; next if ($status ne 'Active'); # $r->print(<<"END"); @@ -1642,11 +1838,13 @@ END $id $name $section + $start + $end END } $r->print('
'); - my %lt=&Apache::lonlocal::texthash( + %lt=&Apache::lonlocal::texthash( 'dp' => "Drop Students", 'ca' => "check all", 'ua' => "uncheck all", @@ -1706,6 +1904,24 @@ sub upfile_drop_add { } } # + # Store the field choices away + foreach my $field (qw/username names + fname mname lname gen id sec ipwd email/) { + $ENV{'form.'.$field.'_choice'}=$fields{$field}; + } + &Apache::loncommon::store_course_settings('enrollment_upload', + { 'username_choice' => 'scalar', + 'names_choice' => 'scalar', + 'fname_choice' => 'scalar', + 'mname_choice' => 'scalar', + 'lname_choice' => 'scalar', + 'gen_choice' => 'scalar', + 'id_choice' => 'scalar', + 'sec_choice' => 'scalar', + 'ipwd_choice' => 'scalar', + 'email_choice' => 'scalar' }); + + # my ($startdate,$enddate) = &get_dates_from_form(); if ($ENV{'form.makedatesdefault'}) { $r->print(&make_dates_default($startdate,$enddate)); @@ -1961,6 +2177,12 @@ sub handler { } &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['action','state']); + + &Apache::lonhtmlcommon::clear_breadcrumbs(); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/dropadd", + text=>"Enrollment Manager", + faq=>9,bug=>'Instructor Interface',}); # Needs to be in a course if (! (($ENV{'request.course.fn'}) && (&Apache::lonnet::allowed('cst',$ENV{'request.course.id'})))) { @@ -1972,19 +2194,24 @@ sub handler { # # Only output the header information if they did not request csv format # - if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) { - $r->content_type('text/csv'); - } else { - # Start page - &Apache::loncommon::content_type($r,'text/html'); - $r->send_http_header; - $r->print(&header()); - } + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['state','action']); + # Start page + &Apache::loncommon::content_type($r,'text/html'); + $r->send_http_header; + $r->print(&header()); # # Main switch on form.action and form.state, as appropriate if (! exists($ENV{'form.action'})) { + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Enrollment Manager')); &print_main_menu($r); } elsif ($ENV{'form.action'} eq 'upload') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/dropadd?action=upload&state=', + text=>"Upload Classlist"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Upload Classlist')); if (! exists($ENV{'form.state'})) { &print_first_courselist_upload_form($r); } elsif ($ENV{'form.state'} eq 'got_file') { @@ -1999,6 +2226,11 @@ sub handler { &print_first_courselist_upload_form($r); } } elsif ($ENV{'form.action'} eq 'drop') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/dropadd?action=drop', + text=>"Drop Students"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Drop Students')); if (! exists($ENV{'form.state'})) { &print_drop_menu($r); } elsif ($ENV{'form.state'} eq 'done') { @@ -2007,6 +2239,11 @@ sub handler { &print_drop_menu($r); } } elsif ($ENV{'form.action'} eq 'enrollstudent') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/dropadd?action=enrollstudent', + text=>"Enroll Student"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Enroll Student')); if (! exists($ENV{'form.state'})) { &get_student_username_domain_form($r); } elsif ($ENV{'form.state'} eq 'gotusername') { @@ -2017,16 +2254,26 @@ sub handler { &get_student_username_domain_form($r); } } elsif ($ENV{'form.action'} eq 'classlist') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/dropadd?action=classlist', + text=>"View Classlist"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'View Classlist')); if (! exists($ENV{'form.state'})) { - &print_html_classlist($r); + &print_html_classlist($r,undef); } elsif ($ENV{'form.state'} eq 'csv') { - &print_formatted_classlist($r,'csv'); + &print_html_classlist($r,'csv'); } elsif ($ENV{'form.state'} eq 'excel') { - &print_formatted_classlist($r,'excel'); + &print_html_classlist($r,'excel'); } else { - &print_html_classlist($r); + &print_html_classlist($r,undef); } } elsif ($ENV{'form.action'} eq 'modifystudent') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/dropadd?action=modifystudent', + text=>"Modify Student Data"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Modify Student Data')); if (! exists($ENV{'form.state'})) { &print_html_classlist($r); } elsif ($ENV{'form.state'} eq 'selected') { @@ -2041,15 +2288,13 @@ sub handler { &Apache::lonnet::logthis("Undetermined state in londropadd.pm. ". "form.action = ".$ENV{'form.action'}. "Someone should fix this."); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Enrollment Manager')); &print_main_menu($r); } # # Finish up - if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) { - $r->print("\n"); - } else { - $r->print(''); - } + $r->print(''); return OK; }