# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
# $Id: londropadd.pm,v 1.91 2003/12/05 21:27:59 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#
# (Handler to set parameters for assessments
#
# (Handler to resolve ambiguous file locations
#
# (TeX Content Handler
#
###############################################################
##############################################################
package Apache::londropadd;
use strict;
use Apache::lonnet();
use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::Constants qw(:common :http REDIRECT);
use Spreadsheet::WriteExcel;
use Apache::lonlocal;
###############################################################
###############################################################
sub header {
my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager');
my $title = &mt('LON-CAPA Enrollment Manager');
return(<
$Text{'populate'} END } ############################################################### ############################################################### sub hidden_input { my ($name,$value) = @_; return ''."\n"; } sub print_upload_manager_header { my ($r,$datatoken,$distotal,$krbdefdom)=@_; my $javascript; if (! exists($ENV{'form.upfile_associate'})) { $ENV{'form.upfile_associate'} = 'forward'; } if ($ENV{'form.associate'} eq 'Reverse Association') { if ( $ENV{'form.upfile_associate'} ne 'reverse' ) { $ENV{'form.upfile_associate'} = 'reverse'; } else { $ENV{'form.upfile_associate'} = 'forward'; } } if ($ENV{'form.upfile_associate'} eq 'reverse') { $javascript=&upload_manager_javascript_reverse_associate(); } else { $javascript=&upload_manager_javascript_forward_associate(); } my $javascript_validations=&javascript_validations('auth',$krbdefdom); my $checked=(($ENV{'form.noFirstLine'})?' checked="1"':''); $r->print('
\n". &mt('Total number of records found in file: [_1].',$distotal). "\n". "
\n". &mt('Note: this will not take effect if the user already exists'). "
\n"; $Str .= $krbform."\n
\n". $intform."\n
\n". $locform."\n
\n"; $Str .= '\n".&mt('LON-CAPA domain: [_1]',$domform)."\n
\n"; $Str .= "\n".$date_table."
\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";
$Str .= ''."
\n";
$Str .= &mt('Note: for large courses, this operation may be time '.
'consuming');
$r->print($Str);
return;
}
###############################################################
###############################################################
sub print_upload_manager_form {
my $r=shift;
my $firstLine;
my $datatoken;
if (!$ENV{'form.datatoken'}) {
$datatoken=&Apache::loncommon::upfile_store($r);
} else {
$datatoken=$ENV{'form.datatoken'};
&Apache::loncommon::load_tmp_file($r);
}
my @records=&Apache::loncommon::upfile_record_sep();
if($ENV{'form.noFirstLine'}){
$firstLine=shift(@records);
}
my $total=$#records;
my $distotal=$total+1;
my $today=time;
my $halfyear=$today+15552000;
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')]);
if ($ENV{'form.upfile_associate'} eq 'reverse') {
&Apache::loncommon::csv_print_samples($r,\@records);
$i=&Apache::loncommon::csv_print_select_table($r,\@records,
\@field);
foreach (@field) {
$keyfields.=$_->[0].',';
}
chop($keyfields);
} else {
unshift(@field,['none','']);
$i=&Apache::loncommon::csv_samples_select_table($r,\@records,
\@field);
my %sone=&Apache::loncommon::record_sep($records[0]);
$keyfields=join(',',sort(keys(%sone)));
}
}
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear);
}
###############################################################
###############################################################
sub enroll_single_student {
my $r=shift;
# Remove non alphanumeric values from section
$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
# 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('
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'}; if (lc($desiredhost) eq 'default') { $desiredhost = undef; } else { my %home_servers =&Apache::loncommon::get_library_servers($domain); if (! exists($home_servers{$desiredhost})) { $r->print('Error:'. 'Invalid home server specified'); return; } } $r->print(" with server $desiredhost :") if (defined($desiredhost)); # End of home server selection logic my $amode=''; my $genpwd=''; if ($ENV{'form.login'} eq 'krb') { $amode='krb'; $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') { $amode='localauth'; $genpwd=$ENV{'form.locarg'}; if (!$genpwd) { $genpwd=" "; } } 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'}, $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); if ($login_result =~ /^ok/) { $r->print($login_result); $r->print("If active, the new role will be available ". "when the student next logs in to LON-CAPA.
"); } else { $r->print("unable to enroll: ".$login_result); } } else { $r->print('ERROR '); if ($amode =~ /^krb/) { $r->print('Missing Kerberos domain information. '); } else { $r->print('Invalid login mode or password. '); } $r->print('Unable to enroll '.$ENV{'form.cuname'}.'.
'); } } else { $r->print('Invalid username or domain'); } } sub setup_date_selectors { my ($starttime,$endtime,$mode) = @_; if (! defined($starttime)) { $starttime = time; unless ($mode eq 'createcourse') { 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 unless ($mode eq 'createcourse') { 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); if ($mode eq 'createcourse') { $startdateform = &Apache::lonhtmlcommon::date_setter('ccrs', 'startdate', $starttime); $enddateform = &Apache::lonhtmlcommon::date_setter('ccrs', '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,$mode) = @_; my ($startform,$endform)=&setup_date_selectors($starttime,$endtime,$mode); my $dateDefault = 'Starting Date | '. ''.$startform.' | '. ''.$dateDefault.' | '."
Ending Date | '. ''.$endform.' | '. ''.$perpetual.' | '."
Username: | |
---|---|
Domain: | $domform |
First Name: | |
---|---|
Middle Name: | |
Last Name: | |
Generation: | |
Home Server: | $homeserver_form |
First Name: | |
---|---|
Middle Name: | |
Last Name: | |
Generation: |
Group/Section:
$date_table
ID/Student Number:
Disable ID/Student Number Safeguard and Force Change of Conflicting IDs (only do if you know what you are doing)
END return; } # ========================================================= Menu Phase Two Drop sub print_drop_menu { my $r=shift; $r->print("
Current Class List
END
if ($ENV{'form.action'} ne 'modifystudent') {
$r->print(<
username | domain | ID | student name | section |
---|---|---|---|---|
\n "); if ($linkto eq 'nothing') { $r->print($username); } elsif ($linkto eq 'aboutme') { $r->print(&Apache::loncommon::aboutmewrapper($username, $username, $domain)); } elsif ($linkto eq 'modify') { $r->print(''. $username."\n"); } $r->print(<<"END"); | $domain | $id | $name | $section |
'. 'Your Excel spreadsheet is ready for download.
'."\n"); } } # # print out form for modification of a single students data # 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'}; # determine the students name information my %info=&Apache::lonnet::get('environment', ['firstname','middlename', 'lastname','generation','id'], $sdom, $sname); my ($tmp) = keys(%info); if ($tmp =~ /^(con_lost|error|no_such_host)/i) { $r->print('Error'. ''. 'Unable to retrieve environment data for '.$sname. 'in domain '.$sdom.'
'. 'Please contact your LON-CAPA administrator '. 'regarding this situation.