# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
# $Id: londropadd.pm,v 1.48 2002/09/09 20:54:52 matthew 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
#
# YEAR=2000
# 05/29/00,05/30,10/11 Gerd Kortemeyer)
#
# 10/11,10/12,10/16 Gerd Kortemeyer)
#
# 11/20,11/21,11/22,11/23,11/24,11/25,11/27,11/28,
# 12/08,12/12 Gerd Kortemeyer)
#
# 12/26,12/27,12/28,
# YEAR=2001
# 01/01/01,01/15,02/10,02/13,02/14,02/22 Gerd Kortemeyer
# 8/6 Scott Harrison
# Guy Albertelli
# 9/25 Gerd Kortemeyer
# 12/19 Guy Albertelli
# YEAR=2002
# 1/4 Gerd Kortemeyer
package Apache::londropadd;
use strict;
use Apache::lonnet();
use Apache::loncommon();
use Apache::Constants qw(:common :http REDIRECT);
# ================================================================ Print header
sub header {
my $bodytag=&Apache::loncommon::bodytag('Enrollment Manager');
return(<
Note: this will not take effect if the user already exists
$krbform
$intform
$locform
Note: for large courses, this operation might be time consuming.
ENDPICK
}
# ======================================================= Menu Phase Two Upload
sub menu_phase_two_upload {
my $r=shift;
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();
my $total=$#records;
my $distotal=$total+1;
$ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/;
my $krbdefdom=$1;
$krbdefdom=~tr/a-z/A-Z/;
my $today=time;
my $halfyear=$today+15552000;
my $defdom=$r->dir_config('lonDefDomain');
&phase_two_header($r,$datatoken,$distotal,$krbdefdom);
my $i;
my $keyfields;
if ($total>=0) {
my @d=(['username','Username'],['names','Last Name, First Names'],
['fname','First Name'],['mname','Middle Names/Initials'],
['lname','Last Name'],['gen','Generation'],
['id','ID/Student Number'],['sec','Group/Section'],
['ipwd','Initial Password']);
if ($ENV{'form.upfile_associate'} eq 'reverse') {
&Apache::loncommon::csv_print_samples($r,\@records);
$i=&Apache::loncommon::csv_print_select_table($r,\@records,\@d);
foreach (@d) { $keyfields.=$_->[0].','; }
chop($keyfields);
} else {
unshift(@d,['none','']);
$i=&Apache::loncommon::csv_samples_select_table($r,\@records,\@d);
my %sone=&Apache::loncommon::record_sep($records[0]);
$keyfields=join(',',sort(keys(%sone)));
}
}
&phase_two_end($r,$i,$keyfields,$defdom,$today,$halfyear);
}
# ======================================================= Enroll single student
sub enroll_single_student {
my $r=shift;
$r->print('
Enrolling '.$ENV{'form.cuname'}." in domain ". $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')) { &modifystudent($ENV{'form.lcdomain'},$ENV{'form.cuname'}, $ENV{'request.course.id'},$ENV{'form.csec'}, $desiredhost); $r->print(&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'},$ENV{'form.enddate'}, $ENV{'form.startdate'},$ENV{'form.forceid'}, $desiredhost)); } else { $r->print('ERROR '. 'Invalid login mode or password. '. 'Unable to enroll '.$ENV{'form.cuname'}.'.
'); } } else { $r->print('Invalid username or domain'); } } # ======================================================= Menu Phase Two Enroll sub menu_phase_two_enroll { my $r=shift; $r->print("ID/Student Number:
Group/Section:
Username:
Domain: $domform
Note: login settings below will not take effect if the user already exists
$krbform
$intform
$locform
ERROR:$error"); } } elsif (!defined(%currentlist)) { $r->print("There are no students currently enrolled.\n"); } else { # Print out the available choices &show_drop_list($r,%currentlist); } } # ============================================== view classlist sub menu_phase_two_view { my $r=shift; $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(<
username | domain | ID | student name | generation | section |
---|---|---|---|---|---|
' :''). '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 |
username | domain | ID | student name | generation | section | |
---|---|---|---|---|---|---|
'. 'Internal error: unable to get environment '. 'for '.$sname.' in domain '.$sdom.' | ||||||
$sname | $sdom | $reply{$sname} | $info{'lastname'}, $info{'firstname'} $info{'middlename'} | $info{'generation'} | $ssec |
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(<
$create_classlist_help
$create_csv_help