# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
# $Id: londropadd.pm,v 1.50 2002/09/17 15:52:44 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
#
###############################################################
###############################################################
package Apache::londropadd;
use strict;
use Apache::lonnet();
use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::Constants qw(:common :http REDIRECT);
###############################################################
###############################################################
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 may be time consuming.
ENDPICK
}
# ======================================================= Menu Phase Two Upload
sub print_upload_manager_form {
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');
&print_upload_manager_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)));
}
}
&print_upload_manager_footer($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 print_enroll_single_student_form { my $r=shift; $r->print("First Name: | |
Middle Name: | |
Last Name: | |
Generation: |
Username:
Domain: $domform
Note: login settings below will not take effect if the user already exists
$krbform
$intform
$locform
Group/Section:
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; } # =================================================== get the current classlist sub get_current_classlist { my ($domain,$identifier) = @_; # domain is the domain the class is being run in # identifier is the internal, unique identifier for the class. my %currentlist=(); my $now=time; my %results=&Apache::lonnet::dump('classlist',$domain,$identifier); my ($tmp) = keys(%results); if ($tmp !~ /^(con_lost|error|no_such_host)/i) { foreach my $student (keys(%results)) { # Extract the start and end dates my ($end,$start)=split(/\:/,$results{$student}); # If the class isn't over, put it in the list unless (($end) && ($now>$end)) { $currentlist{$student}=1; } } return (undef,%currentlist); } else { $tmp =~ s/^error://; return ($tmp,undef); } } # ========================================================= Menu Phase Two Drop sub menu_phase_two_drop { 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_drop_list($r,%currentlist); } } # ============================================== view classlist sub print_html_classlist { 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 if ($ENV{'form.action'} eq 'modifystudent') { &show_class_list($r,'view','modify',%currentlist); } else { &show_class_list($r,'view','aboutme',%currentlist); } } } # ============================================== view classlist sub print_csv_classlist { 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','nolink',%currentlist); } } # =================================================== Show student list to drop sub show_class_list { my ($r,$mode,$linkto,%currentlist)=@_; my $cid=$ENV{'request.course.id'}; # Print out header if ($mode eq 'view') { if ($linkto eq 'aboutme') { $r->print('Select a user name to view the users page.'); } elsif ($linkto eq 'modify') { $r->print('Select a user name to modify the students information'); } $r->print(<
username | domain | ID | student name | generation | section |
---|---|---|---|---|---|
'. 'Internal error: unable to get environment '. 'for '.$sname.' in domain '.$sdom.' | |||||
\n "); if ($linkto eq 'nothing') { $r->print($sname); } elsif ($linkto eq 'aboutme') { $r->print(&Apache::loncommon::aboutmewrapper($sname,$sname, $sdom)); } elsif ($linkto eq 'modify') { $r->print(''.$sname."\n"); } $r->print(<<"END"); | $sdom | $reply{$sname} | $info{'lastname'}, $info{'firstname'} $info{'middlename'} | $info{'generation'} | $ssec |
'. 'Unable to retrieve environment data for '.$sname. 'in domain '.$sdom.'
'. 'Please contact your LON-CAPA administrator '. 'regarding this situation.