--- loncom/interface/Attic/londropadd.pm 2005/01/11 22:12:22 1.123
+++ loncom/interface/Attic/londropadd.pm 2006/03/21 18:34:23 1.138
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
-# $Id: londropadd.pm,v 1.123 2005/01/11 22:12:22 albertel Exp $
+# $Id: londropadd.pm,v 1.138 2006/03/21 18:34:23 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -32,7 +32,7 @@
package Apache::londropadd;
use strict;
-use Apache::lonnet();
+use Apache::lonnet;
use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::Constants qw(:common :http REDIRECT);
@@ -43,14 +43,9 @@ use Apache::lonlocal;
###############################################################
###############################################################
sub header {
- my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager');
- my $title = &mt('LON-CAPA Enrollment Manager');
+ my $start_page=&Apache::loncommon::start_page('Enrollment Manager');
return(<
-
-$title
-
-$bodytag
+$start_page
\n";
+ "\n";
$Str .= "".&mt('Student Number')." \n";
- $Str .= "\n".' ';
+ $Str .= "
\n".' ';
$Str .= &mt('Disable ID/Student Number Safeguard and Force Change '.
'of Conflicting IDs (only do if you know what you are doing)').
- "\n
\n";
+ "\n
\n";
$Str .= ' '." \n";
$Str .= &mt('Note: for large courses, this operation may be time '.
@@ -638,14 +655,14 @@ sub print_upload_manager_form {
my $firstLine;
my $datatoken;
- if (!$ENV{'form.datatoken'}) {
+ if (!$env{'form.datatoken'}) {
$datatoken=&Apache::loncommon::upfile_store($r);
} else {
- $datatoken=$ENV{'form.datatoken'};
+ $datatoken=$env{'form.datatoken'};
&Apache::loncommon::load_tmp_file($r);
}
my @records=&Apache::loncommon::upfile_record_sep();
- if($ENV{'form.noFirstLine'}){
+ if($env{'form.noFirstLine'}){
$firstLine=shift(@records);
}
my $total=$#records;
@@ -668,7 +685,7 @@ sub print_upload_manager_form {
});
#
# Determine kerberos parameters as appropriate
- my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ my $defdom=$env{'course.'.$env{'request.course.id'}.'.domain'};
my ($krbdef,$krbdefdom) =
&Apache::loncommon::get_kerberos_defaults($defdom);
#
@@ -677,17 +694,17 @@ sub print_upload_manager_form {
my $keyfields;
if ($total>=0) {
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') {
+ (['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,
\@field);
@@ -711,25 +728,25 @@ sub print_upload_manager_form {
sub enroll_single_student {
my $r=shift;
# Remove non alphanumeric values from section
- $ENV{'form.csec'}=~s/\W//g;
+ $env{'form.csec'}=~s/\W//g;
#
# We do the dates first because the action of making them the defaul
# 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();
- if ($ENV{'form.makedatesdefault'}) {
+ if ($env{'form.makedatesdefault'}) {
$r->print(&make_dates_default($startdate,$enddate));
}
$r->print('
'.&mt('Enrolling Student').' ');
- $r->print(''.&mt('Enrolling').' '.$ENV{'form.cuname'}." \@ ".
- $ENV{'form.lcdomain'}.'
');
- if (($ENV{'form.cuname'})&&($ENV{'form.cuname'}!~/\W/)&&
- ($ENV{'form.lcdomain'})&&($ENV{'form.lcdomain'}!~/\W/)) {
+ $r->print(''.&mt('Enrolling').' '.$env{'form.cuname'}." \@ ".
+ $env{'form.lcdomain'}.'
');
+ if (($env{'form.cuname'})&&($env{'form.cuname'}!~/\W/)&&
+ ($env{'form.lcdomain'})&&($env{'form.lcdomain'}!~/\W/)) {
# Deal with home server selection
- my $domain=$ENV{'form.lcdomain'};
- my $desiredhost = $ENV{'form.lcserver'};
+ my $domain=$env{'form.lcdomain'};
+ my $desiredhost = $env{'form.lcserver'};
if (lc($desiredhost) eq 'default') {
$desiredhost = undef;
} else {
@@ -744,33 +761,33 @@ sub enroll_single_student {
# End of home server selection logic
my $amode='';
my $genpwd='';
- if ($ENV{'form.login'} eq 'krb') {
+ if ($env{'form.login'} eq 'krb') {
$amode='krb';
- $amode.=$ENV{'form.krbver'};
- $genpwd=$ENV{'form.krbarg'};
- } elsif ($ENV{'form.login'} eq 'int') {
+ $amode.=$env{'form.krbver'};
+ $genpwd=$env{'form.krbarg'};
+ } elsif ($env{'form.login'} eq 'int') {
$amode='internal';
- $genpwd=$ENV{'form.intarg'};
- } elsif ($ENV{'form.login'} eq 'loc') {
+ $genpwd=$env{'form.intarg'};
+ } elsif ($env{'form.login'} eq 'loc') {
$amode='localauth';
- $genpwd=$ENV{'form.locarg'};
+ $genpwd=$env{'form.locarg'};
if (!$genpwd) { $genpwd=" "; }
}
- my $home = &Apache::lonnet::homeserver($ENV{'form.cuname'},
- $ENV{'form.lcdomain'});
+ my $home = &Apache::lonnet::homeserver($env{'form.cuname'},
+ $env{'form.lcdomain'});
if ((($amode) && ($genpwd)) || ($home ne 'no_host')) {
# Clean out any old roles the student has in this class.
- &modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'},
- $ENV{'request.course.id'},$ENV{'form.csec'},
+ &modifystudent($env{'form.lcdomain'},$env{'form.cuname'},
+ $env{'request.course.id'},$env{'form.csec'},
$desiredhost);
my $login_result = &Apache::lonnet::modifystudent
- ($ENV{'form.lcdomain'},$ENV{'form.cuname'},
- $ENV{'form.cstid'},$amode,$genpwd,
- $ENV{'form.cfirst'},$ENV{'form.cmiddle'},
- $ENV{'form.clast'},$ENV{'form.cgen'},
- $ENV{'form.csec'},$enddate,
- $startdate,$ENV{'form.forceid'},
- $desiredhost);
+ ($env{'form.lcdomain'},$env{'form.cuname'},
+ $env{'form.cstid'},$amode,$genpwd,
+ $env{'form.cfirst'},$env{'form.cmiddle'},
+ $env{'form.clast'},$env{'form.cgen'},
+ $env{'form.csec'},$enddate,
+ $startdate,$env{'form.forceid'},
+ $desiredhost,$env{'form.emailaddress'});
if ($login_result =~ /^ok/) {
$r->print($login_result);
$r->print(" ".&mt('If active, the new role will be available when the student next logs in to LON-CAPA.')."
");
@@ -784,7 +801,7 @@ sub enroll_single_student {
} else {
$r->print(&mt('Invalid login mode or password.').' ');
}
- $r->print(''.&mt('Unable to enroll').' '.$ENV{'form.cuname'}.'. ');
+ $r->print(''.&mt('Unable to enroll').' '.$env{'form.cuname'}.'. ');
}
} else {
$r->print(&mt('Invalid username or domain'));
@@ -796,9 +813,9 @@ sub setup_date_selectors {
if (! defined($starttime)) {
$starttime = time;
unless ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
- if (exists($ENV{'course.'.$ENV{'request.course.id'}.
+ if (exists($env{'course.'.$env{'request.course.id'}.
'.default_enrollment_start_date'})) {
- $starttime = $ENV{'course.'.$ENV{'request.course.id'}.
+ $starttime = $env{'course.'.$env{'request.course.id'}.
'.default_enrollment_start_date'};
}
}
@@ -806,9 +823,9 @@ sub setup_date_selectors {
if (! defined($endtime)) {
$endtime = time+(6*30*24*60*60); # 6 months from now, approx
unless ($mode eq 'createcourse') {
- if (exists($ENV{'course.'.$ENV{'request.course.id'}.
+ if (exists($env{'course.'.$env{'request.course.id'}.
'.default_enrollment_end_date'})) {
- $endtime = $ENV{'course.'.$ENV{'request.course.id'}.
+ $endtime = $env{'course.'.$env{'request.course.id'}.
'.default_enrollment_end_date'};
}
}
@@ -841,7 +858,7 @@ sub setup_date_selectors {
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'}) {
+ if ($env{'form.no_end_date'}) {
$enddate = 0;
}
return ($startdate,$enddate);
@@ -851,16 +868,16 @@ sub date_setting_table {
my ($starttime,$endtime,$mode) = @_;
my ($startform,$endform)=&setup_date_selectors($starttime,$endtime,$mode);
my $dateDefault = ''.
- ' '.
- &mt('make these dates the default for future enrollment');
+ ' '.
+ &mt('make these dates the default for future enrollment').' ';
if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
$dateDefault = ' ';
}
- my $perpetual = ' '.&mt('no ending date').' ';
+ $perpetual.= ' /> '.&mt('no ending date').' ';
if ($mode eq 'create_enrolldates') {
$perpetual = ' ';
}
@@ -879,8 +896,8 @@ sub date_setting_table {
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 $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);
@@ -888,7 +905,7 @@ sub make_dates_default {
$result .= "Set default start and end dates for course ";
#
# Refresh the course environment
- &Apache::lonnet::coursedescription($ENV{'request.course.id'});
+ &Apache::lonnet::coursedescription($env{'request.course.id'});
} else {
$result .= &mt('Unable to set default dates for course').":".$put_result.
' ';
@@ -902,7 +919,7 @@ sub make_dates_default {
sub get_student_username_domain_form {
my $r = shift;
my $domform = &Apache::loncommon::select_dom_form
- ($ENV{'course.'.$ENV{'request.course.id'}.'.domain'},'cudomain',0);
+ ($env{'course.'.$env{'request.course.id'}.'.domain'},'cudomain',0);
my %lt=&Apache::lonlocal::texthash(
'eos' => "Enroll One Student",
'usr' => "Username",
@@ -935,8 +952,8 @@ sub print_enroll_single_student_form {
my $r=shift;
$r->print("".&mt('Enroll One Student')." ");
#
- my $username = $ENV{'form.cuname'};
- my $domain = $ENV{'form.cudomain'};
+ my $username = $env{'form.cuname'};
+ my $domain = $env{'form.cudomain'};
$username=~s/\W//gs;
$domain=~s/\W//gs;
my $home = &Apache::lonnet::homeserver($username,$domain);
@@ -949,7 +966,7 @@ sub print_enroll_single_student_form {
my $user_data_html = '';
my $javascript_validations = '';
if ($new_user) {
- my $defdom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ my $defdom=$env{'course.'.$env{'request.course.id'}.'.domain'};
# Set up authentication forms
my ($krbdef,$krbdefdom) =
&Apache::loncommon::get_kerberos_defaults($domain);
@@ -983,7 +1000,9 @@ sub print_enroll_single_student_form {
'hs' => "Home Server",
'pswd' => "Password",
'psam' => "Please select an authentication mechanism",
+ 'mail' => "Email Address"
);
+ my $authhelp=&Apache::loncommon::help_open_topic('Auth_Options');
$user_data_html = <$lt{'udf'} $username\@$domain
$lt{'pswd'}
-$lt{'psam'}
+$lt{'psam'}$authhelp
END
}
@@ -1106,8 +1132,10 @@ $date_table
$lt{'idsn'}:
+
$lt{'disn'}
+
@@ -1119,7 +1147,7 @@ END
sub print_drop_menu {
my $r=shift;
$r->print("".&mt('Drop Students')." ");
- my $cid=$ENV{'request.course.id'};
+ 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");
@@ -1133,24 +1161,24 @@ sub print_drop_menu {
# ============================================== view classlist
sub print_html_classlist {
my ($r,$mode) = @_;
- if (! exists($ENV{'form.sortby'})) {
- $ENV{'form.sortby'} = 'username';
+ if (! exists($env{'form.sortby'})) {
+ $env{'form.sortby'} = 'username';
}
- if ($ENV{'form.Status'} !~ /^(Any|Expired|Active)$/) {
- $ENV{'form.Status'} = 'Active';
+ if ($env{'form.Status'} !~ /^(Any|Expired|Active)$/) {
+ $env{'form.Status'} = 'Active';
}
my $status_select = &Apache::lonhtmlcommon::StatusOptions
- ($ENV{'form.Status'});
- my $cid=$ENV{'request.course.id'};
- my $cdom=$ENV{'course.'.$cid.'.domain'};
- my $cnum=$ENV{'course.'.$cid.'.num'};
+ ($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';
+ if (! defined($env{'form.output'}) ||
+ $env{'form.output'} !~ /^(csv|excel|html)$/ ) {
+ $env{'form.output'} = 'html';
}
#
$r->print('');
@@ -1170,16 +1198,16 @@ sub print_html_classlist {
#
# Interface output
$r->print(' ');
+ $env{'form.action'}.'" />');
$r->print("\n");
- if ($ENV{'form.action'} ne 'modifystudent') {
+ if ($env{'form.action'} ne 'modifystudent') {
my %lt=&Apache::lonlocal::texthash('csv' => "CSV",
'excel' => "Excel",
'html' => 'HTML');
my $output_selector = '';
foreach my $outputformat ('html','csv','excel') {
my $option = '';
@@ -1199,12 +1227,12 @@ sub print_html_classlist {
$r->print(&mt('There are no students currently enrolled.')."\n");
} else {
# Print out the available choices
- if ($ENV{'form.action'} eq 'modifystudent') {
+ if ($env{'form.action'} eq 'modifystudent') {
&show_class_list($r,'view','modify',
- $ENV{'form.Status'},$classlist,$keylist);
+ $env{'form.Status'},$classlist,$keylist);
} else {
- &show_class_list($r,$ENV{'form.output'},'aboutme',
- $ENV{'form.Status'},$classlist,$keylist);
+ &show_class_list($r,$env{'form.output'},'aboutme',
+ $env{'form.Status'},$classlist,$keylist);
}
}
}
@@ -1212,7 +1240,7 @@ sub print_html_classlist {
# =================================================== Show student list to drop
sub show_class_list {
my ($r,$mode,$linkto,$statusmode,$classlist,$keylist)=@_;
- my $cid=$ENV{'request.course.id'};
+ my $cid=$env{'request.course.id'};
#
# Variables for excel output
my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format);
@@ -1220,18 +1248,24 @@ sub show_class_list {
# Variables for csv output
my ($CSVfile,$CSVfilename);
#
- my $sortby = $ENV{'form.sortby'};
+ my $sortby = $env{'form.sortby'};
if ($sortby !~ /^(username|domain|section|fullname|id|start|end|type)$/) {
$sortby = 'username';
}
+ if (! exists($env{'form.displayphotos'})) {
+ $env{'form.displayphotos'} = 'off';
+ }
+ my $displayphotos = $env{'form.displayphotos'};
+
# Print out header
unless ($mode eq 'autoenroll') {
$r->print(<
+
END
}
$r->print(<
+
END
if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') {
if ($linkto eq 'aboutme') {
@@ -1246,7 +1280,8 @@ END
'sec' => "section",
'start' => "start date",
'end' => "end date",
- 'type' => "enroll type/action"
+ 'type' => "enroll type/action",
+ 'photo' => "photo",
);
unless ($mode eq 'autoenroll') {
$r->print(<
END
}
+ if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {
+ $r->print('
+
+ ');
+ }
$r->print("
@@ -1284,13 +1332,28 @@ END
$lt{'end'}
-
END
+ if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {
+ my %photo_options = &Apache::lonlocal::texthash(
+ 'on' => 'Show',
+ 'off' => 'Hide',
+ );
+ my $photochg = 'on';
+ if ($displayphotos eq 'on') {
+ $photochg = 'off';
+ }
+ $r->print(' '."\n".' '.
+ ''.
+ $photo_options{$photochg}.' '.$lt{'photo'}."\n".
+ ' '."\n");
+ }
+ $r->print(" \n");
} elsif ($mode eq 'csv') {
#
# Open a file
$CSVfilename = '/prtspool/'.
- $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.
+ $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 $!");
@@ -1317,18 +1380,13 @@ END
}
} elsif ($mode eq 'excel') {
# Create the excel spreadsheet
- $excel_filename = '/prtspool/'.
- $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.
- time.'_'.rand(1000000000).'.xls';
- $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_workbook,$excel_filename,$format) =
+ &Apache::loncommon::create_workbook($r);
+ return if (! defined($excel_workbook));
$excel_sheet = $excel_workbook->addworksheet('classlist');
#
my $description = 'Class List for '.
- $ENV{'course.'.$ENV{'request.course.id'}.'.description'};
+ $env{'course.'.$env{'request.course.id'}.'.description'};
$excel_sheet->write($row++,0,$description,$format->{'h1'});
#
$excel_sheet->write($row++,0,["username","domain","ID",
@@ -1387,16 +1445,16 @@ END
$studentcount++;
my $cellentry;
if ($type eq 'auto') {
- $cellentry = ''.&mt('auto').' Change';
+ $cellentry = ''.&mt('auto').' Change ';
$autocount ++;
} else {
- $cellentry = ''.&mt('manual').' Change';
+ $cellentry = '';
@@ -1428,8 +1486,21 @@ END
$section
$start
$end
-
END
+ if ($env{'course.'.$env{'request.course.id'}.
+ '.internal.showphoto'}) {
+ if ($displayphotos eq 'on') {
+ my $imgurl =
+ &Apache::lonnet::retrievestudentphoto($domain,
+ $username,'gif',
+ 'thumbnail');
+
+ $r->print(' ');
+ } else {
+ $r->print(' ');
+ }
+ }
+ $r->print(' ');
} elsif ($mode eq 'csv') {
next if (! defined($CSVfile));
# no need to bother with $linkto
@@ -1456,9 +1527,13 @@ END
$name,$section]);
my $col = 5;
foreach my $time ($start,$end) {
- $excel_sheet->write($row,$col++,
+ if (defined($time) && $time != 0) {
+ $excel_sheet->write($row,$col++,
&Apache::lonstathelpers::calc_serial($time),
$format->{'date'});
+ } else {
+ $excel_sheet->write($row,$col++,'none');
+ }
}
$excel_sheet->write($row,$col++,$status);
$row++;
@@ -1491,9 +1566,9 @@ 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'};
- my $sortby = $ENV{'form.sortby'};
+ 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',
@@ -1505,7 +1580,7 @@ sub print_modify_student_form {
''.
&mt('Unable to retrieve environment data for').' '.$sname.
&mt('in domain').' '.$sdom.'
'.
- &mt('Please contact your LON-CAPA administrator regarding this situation.').'