--- loncom/interface/Attic/londropadd.pm 2002/04/04 20:41:17 1.23
+++ loncom/interface/Attic/londropadd.pm 2007/10/22 22:16:38 1.173
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to drop and add students in courses
#
-# $Id: londropadd.pm,v 1.23 2002/04/04 20:41:17 albertel Exp $
+# $Id: londropadd.pm,v 1.173 2007/10/22 22:16:38 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -25,321 +25,531 @@
#
# 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::lonhtmlcommon();
use Apache::Constants qw(:common :http REDIRECT);
+use Spreadsheet::WriteExcel;
+use Apache::lonstathelpers();
+use Apache::lonlocal;
+use Apache::longroup;
+use LONCAPA();
-# ================================================================ Print header
-
+###############################################################
+###############################################################
sub header {
- my $r=shift;
- $r->print(<
-
Drop/Add Students
-
+$lt{'email'}: +
+$lt{'sid'}: +
+ +
+$lt{'sec'}:
--
-
-
-ENDSENROLL
+
$current_date_description
+$date_table
+ +END + $r->print(&Apache::loncommon::end_page()); + return; } -# ========================================================= Menu Phase Two Drop - -sub menu_phase_two_drop { - my $r=shift; - my $cid=$ENV{'request.course.id'}; - my $classlst=&Apache::lonnet::reply - ('dump:'.$ENV{'course.'.$cid.'.domain'}.':'. - $ENV{'course.'.$cid.'.num'}.':classlist', - $ENV{'course.'.$cid.'.home'}); - my %currentlist=(); - my $now=time; - unless ($classlst=~/^error\:/) { - foreach (split(/\&/,$classlst)) { - my ($name,$value)=split(/\=/,$_); - my ($end,$start)=split(/\:/, - &Apache::lonnet::unescape($value)); - my $active=1; - if (($end) && ($now>$end)) { $active=0; } - if ($active) { - $currentlist{&Apache::lonnet::unescape($name)}=1; - } - } -# ----------------------------------------------------------- Print out choices - &show_drop_list($r,%currentlist); - } else { - $r->print( - '$lt{si} | +||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+
|
+
$lt{'ri'} | +||||
---|---|---|---|---|
+
|
+
+END
+ #
+ # Send request(s) to modify data (final undef is for 'desiredhost',
+ # which is a moot point because the student already has an account.
+ my $modify_section_results =
+ &Apache::lonuserutils::modifystudent($sdom,$slogin,
+ $env{'request.course.id'},
+ $section,undef);
+ if ($modify_section_results !~ /^ok/) {
+ $r->print(&mt('An error occured during the attempt to change the section for this student.')."
+
+
+
+$Masd
+END
+ $r->print(&Apache::loncommon::end_page());
+ return;
+}
+
+sub get_enrollment_data {
+ my ($sname,$sdomain) = @_;
+ my $courseid = $env{'request.course.id'};
+ my $cdom = $env{'course.'.$courseid.'.domain'};
+ my $cnum = $env{'course.'.$courseid.'.num'};
+ my %roles = &Apache::lonnet::dump('roles',$sdomain,$sname);
+ my ($tmp) = keys(%roles);
+ # Bail out if we were unable to get the students roles
+ return ('error'.$tmp) if ($tmp =~ /^(con_lost|error|no_such_host)/i);
+ # Go through the roles looking for enrollment in this course
+ my ($end,$start) = (undef,undef);
+ my $section = '';
+ my $count = scalar(keys(%roles));
+ while (my ($course,$role) = each(%roles)) {
+ if ($course=~m{^/\Q$cdom\E/\Q$cnum\E/*\s*(\w+)*_st$} ) {
+ #
+ # Get active role
+ $section=$1;
+ (undef,$end,$start)=split(/\_/,$role);
+ my $now=time;
+ my $notactive=0;
+ if ($start) {
+ if ($now<$start) { $notactive=1; }
+ }
+ if ($end) {
+ if ($now>$end) { $notactive=1; }
+ }
+ unless ($notactive) { return ($start,$end,$section); }
+ }
+ }
+ return ($start,$end,$section);
}
-# =================================================== Show student list to drop
+#################################################
+#################################################
+
+=pod
+
+=item show_drop_list
+
+Display a list of students to drop
+Inputs:
+
+=over 4
+
+=item $r, Apache request
+
+=item $classlist, hash pointer returned from loncoursedata::get_classlist();
+
+=item $keylist, array pointer returned from loncoursedata::get_classlist()
+which describes the order elements are stored in the %$classlist values.
+
+=item $nosort, if true, sorting links are omitted.
+
+=back
+=cut
+
+#################################################
+#################################################
sub show_drop_list {
- my ($r,%currentlist)=@_;
- my $cid=$ENV{'request.course.id'};
+ my ($r,$classlist,$keylist,$nosort)=@_;
+ my $cid=$env{'request.course.id'};
+ if (! exists($env{'form.sortby'})) {
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+ ['sortby']);
+ }
+ my $sortby = $env{'form.sortby'};
+ if ($sortby !~ /^(username|domain|section|groups|fullname|id|start|end)$/) {
+ $sortby = 'username';
+ }
+ my $cdom = $env{'course.'.$cid.'.domain'};
+ my $cnum = $env{'course.'.$cid,'.num'};
+ my ($classgroups) = &Apache::loncoursedata::get_group_memberships(
+ $classlist,$keylist,$cdom,$cnum);
+ #
+ my $action = "drop";
+ $r->print(<
+
+END
-# ================================================= Drop/Add from uploaded file
+my %lt=&Apache::lonlocal::texthash('usrn' => "username",
+ 'dom' => "domain",
+ 'sn' => "student name",
+ 'sec' => "section",
+ 'start' => "start date",
+ 'end' => "end date",
+ 'groups' => "active groups",
+ );
+ if ($nosort) {
+ $r->print(&Apache::loncommon::start_data_table());
+ $r->print(<
+
+
+ \n";
+ $str .= ''."\n";
+ $str .= ' Unacceptable username: '.
- $entries{$fields{'username'}}.' for user '.
- $fname.' '.$mname.' '.$lname.' '.$gen.' ');
- } else {
- my $sec='';
- my $username=$entries{$fields{'username'}};
- if (defined($fields{'sec'})) {
- if (defined($entries{$fields{'sec'}})) {
- $sec=$entries{$fields{'sec'}};
- }
- }
- my $id='';
- if (defined($fields{'id'})) {
- if (defined($entries{$fields{'id'}})) {
- $id=$entries{$fields{'id'}};
- }
- $id=~tr/A-Z/a-z/;
- }
- my $password='';
- if ($genpwd) {
- $password=$genpwd;
- } else {
- if (defined($fields{'ipwd'})) {
- if ($entries{$fields{'ipwd'}}) {
- $password=$entries{$fields{'ipwd'}};
- }
- }
- }
- if ($password) {
- &dropstudent($domain,$username,$cid,$sec);
- my $reply=&Apache::lonnet::modifystudent(
- $domain,$username,$id,$amode,$password,
- $fname,$mname,$lname,$gen,$sec,$enddate,$startdate,
- $ENV{'form.forceid'});
- unless ($reply eq 'ok') {
- $r->print(
- " Error enrolling $username: $reply ");
+# ================================================= Drop/Add from uploaded file
+sub upfile_drop_add {
+ my $r=shift;
+ &Apache::loncommon::load_tmp_file($r);
+ my @studentdata=&Apache::loncommon::upfile_record_sep();
+ if($env{'form.noFirstLine'}){shift(@studentdata);}
+ my @keyfields = split(/\,/,$env{'form.keyfields'});
+ my $cid = $env{'request.course.id'};
+ my %fields=();
+ for (my $i=0; $i<=$env{'form.nfields'}; $i++) {
+ if ($env{'form.upfile_associate'} eq 'reverse') {
+ if ($env{'form.f'.$i} ne 'none') {
+ $fields{$keyfields[$i]}=$env{'form.f'.$i};
+ }
+ } else {
+ $fields{$env{'form.f'.$i}}=$keyfields[$i];
+ }
+ }
+ #
+ # 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));
+ }
+ # Determine domain and desired host (home server)
+ my $domain=$env{'form.lcdomain'};
+ my $desiredhost = $env{'form.lcserver'};
+ if (lc($desiredhost) eq 'default') {
+ $desiredhost = undef;
+ } else {
+ my %home_servers = &Apache::lonnet::get_servers($domain,'library');
+ if (! exists($home_servers{$desiredhost})) {
+ $r->print(''.&mt('Error').''.
+ &mt('Invalid home server specified'));
+ $r->print(&Apache::loncommon::end_page());
+ return;
+ }
+ }
+ # Determine authentication mechanism
+ 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';
+ if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) {
+ $genpwd=$env{'form.intarg'};
+ }
+ } elsif ($env{'form.login'} eq 'loc') {
+ $amode='localauth';
+ if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) {
+ $genpwd=$env{'form.locarg'};
+ }
+ }
+ if ($amode =~ /^krb/) {
+ if (! defined($genpwd) || $genpwd eq '') {
+ $r->print(''.
+ &mt('Unable to enroll students').' '.
+ &mt('No Kerberos domain was specified.').' \n");
+ my $count=0;
+ my $flushc=0;
+ my %student=();
+ # Get information about course groups
+ my %curr_groups = &Apache::longroup::coursegroups();
+ # Get new classlist
+ foreach (@studentdata) {
+ my %entries=&Apache::loncommon::record_sep($_);
+ # Determine student name
+ unless (($entries{$fields{'username'}} eq '') ||
+ (!defined($entries{$fields{'username'}}))) {
+ my ($fname, $mname, $lname,$gen) = ('','','','');
+ if (defined($fields{'names'})) {
+ ($lname,$fname,$mname)=($entries{$fields{'names'}}=~
+ /([^\,]+)\,\s*(\w+)\s*(.*)$/);
+ } else {
+ if (defined($fields{'fname'})) {
+ $fname=$entries{$fields{'fname'}};
+ }
+ if (defined($fields{'mname'})) {
+ $mname=$entries{$fields{'mname'}};
+ }
+ if (defined($fields{'lname'})) {
+ $lname=$entries{$fields{'lname'}};
+ }
+ if (defined($fields{'gen'})) {
+ $gen=$entries{$fields{'gen'}};
+ }
+ }
+ if ($entries{$fields{'username'}}
+ ne &LONCAPA::clean_username($entries{$fields{'username'}})) {
+ $r->print(' No password for $username ");
- }
- }
- }
- }
- $r->print(' Processed Students: '.$count);
-# --------------------------------------------------------------- Drop students
- if ($ENV{'form.fullup'} eq 'yes') {
- $r->print('
");
+ }
+ my $roleresults = &Apache::lonnet::modifystudent
+ ($sdom,$slogin,$sid,undef,undef,$firstname,$middlename,$lastname,
+ $generation,$section,$endtime,$starttime,$env{'form.forceid'},
+ undef,$permanentemail);
+ if ($old{'permanentemail'} ne $permanentemail) {
+ &Apache::loncommon::flush_email_cache($slogin,$sdom);
+ }
+ if ($roleresults eq 'refused' ) {
+ $r->print(&mt('Your request to change the role information for this student was refused. You do not appear to have sufficient authority to change student information.'));
+ } elsif ($roleresults !~ /ok/) {
+ $r->print(&mt('An error occurred during the attempt to change the role information for this student.')."
".
+ &mt('The error reported was')." ".
+ $roleresults);
+ &Apache::lonnet::logthis("londropadd:failed attempt to modify student".
+ " data for ".$slogin." : ".$sdom." by ".
+ $env{'user.name'}." : ".$env{'user.domain'}.
+ ":".$roleresults);
+ } else { # everything is okay!
+ $r->print(&mt('Student information updated successfully.')."
".
+ &mt('The student must log out and log in again to see these changes.'));
+ }
+ my $Masd=&mt('Modify another students data');
+ $r->print(<
+ $lt{'usrn'}
+ $lt{'dom'}
+ ID
+ $lt{'sn'}
+ $lt{'sec'}
+ $lt{'start'}
+ $lt{'end'}
+ $lt{'groups'}
+
+END
+
+ } else {
+ $r->print(&Apache::loncommon::start_data_table());
+ $r->print(<
+
+ $lt{'usrn'}
+
+ $lt{'dom'}
+
+ ID
+
+ $lt{'sn'}
+
+ $lt{'sec'}
+
+ $lt{'start'}
+
+ $lt{'end'}
+
+ $lt{'groups'}
+
+
+END
+ }
+ #
+ # Sort the students
+ my %index;
+ my $i;
+ foreach (@$keylist) {
+ $index{$_} = $i++;
+ }
+ $index{'groups'} = scalar(@$keylist);
+ my $index = $index{$sortby};
+ my $second = $index{'username'};
+ my $third = $index{'domain'};
+ my @Sorted_Students = sort {
+ lc($classlist->{$a}->[$index]) cmp lc($classlist->{$b}->[$index])
+ ||
+ lc($classlist->{$a}->[$second]) cmp lc($classlist->{$b}->[$second])
+ ||
+ lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third])
+ } (keys(%$classlist));
+ foreach my $student (@Sorted_Students) {
+ my $error;
+ 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'}];
+ my $groups = $classgroups->{$student};
+ my $active_groups;
+ if (ref($groups->{active}) eq 'HASH') {
+ $active_groups = join(', ',keys(%{$groups->{'active'}}));
+ }
+ 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(&Apache::loncommon::start_data_table_row());
+ $r->print(<<"END");
+
+ $username
+ $domain
+ $id
+ $name
+ $section
+ $start
+ $end
+ $active_groups
+END
+ $r->print(&Apache::loncommon::end_data_table_row());
+ }
+ $r->print(&Apache::loncommon::end_data_table().'
');
+ %lt=&Apache::lonlocal::texthash(
+ 'dp' => "Drop Students",
+ 'ca' => "check all",
+ 'ua' => "uncheck all",
+ );
+ $r->print(<<"END");
+".&mt('Upload a class list')."
\n";
+ $str .= &Apache::loncommon::upfile_select_html();
+ $str .= "
\n";
+ $str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV",
+ &mt("How do I create a CSV file from a spreadsheet")).
+ "
\n";
+ $str .= &Apache::loncommon::end_page();
+ $r->print($str);
+ return;
+}
- &load_tmp_file($r);
- my @studentdata=&upfile_record_sep();
-
- my @keyfields=split(/\,/,$ENV{'form.keyfields'});
- my $cid=$ENV{'request.course.id'};
-
- my %fields=();
- for (my $i=0;$i<=$ENV{'form.nfields'};$i++) {
- $fields{$ENV{'form.f'.$i}}=$keyfields[$i];
- }
- my $startdate=$ENV{'form.startdate'};
- my $enddate=$ENV{'form.enddate'};
- if ($startdate=~/\D/) { $startdate=''; }
- if ($enddate=~/\D/) { $enddate=''; }
- my $domain=$ENV{'form.lcdomain'};
- my $amode='';
- my $genpwd='';
- if ($ENV{'form.login'} eq 'krb') {
- $amode='krb4';
- $genpwd=$ENV{'form.krbdom'};
- } elsif ($ENV{'form.login'} eq 'int') {
- $amode='internal';
- if ((defined($ENV{'form.intpwd'})) && ($ENV{'form.intpwd'})) {
- $genpwd=$ENV{'form.intpwd'};
- }
- } elsif ($ENV{'form.login'} eq 'loc') {
- $amode='localauth';
- if ((defined($ENV{'form.locarg'})) && ($ENV{'form.locarg'})) {
- $genpwd=$ENV{'form.locarg'};
- }
- }
- unless (($domain=~/\W/) || ($amode eq '')) {
- $r->print('Enrolling Students
');
- my $count=0;
- my $flushc=0;
- my %student=();
-# ----------------------------------------------------------- Get new classlist
-# --------------------------------------------------------- Enroll new students
- foreach (@studentdata) {
- my %entries=&record_sep($_);
-
- unless (($entries{$fields{'username'}} eq '') ||
- (!defined($entries{$fields{'username'}}))) {
- my $fname=''; my $mname=''; my $lname=''; my $gen='';
- if (defined($fields{'names'})) {
- ($lname,$fname,$mname)=
- ($entries{$fields{'names'}}=~/([^\,]+)\,\s*(\w+)\s*(.*)$/);
- } else {
- if (defined($fields{'fname'})) {
- $fname=$entries{$fields{'fname'}};
- }
- if (defined($fields{'mname'})) {
- $mname=$entries{$fields{'mname'}};
- }
- if (defined($fields{'lname'})) {
- $lname=$entries{$fields{'lname'}};
- }
- if (defined($fields{'gen'})) {
- $gen=$entries{$fields{'gen'}};
- }
- }
- if ($entries{$fields{'username'}}=~/\W/) {
- $r->print(''.&mt('Enrolling Students')."
\n
'.
+ &mt('[_1]: Unacceptable username for user [_2] [_3] [_4] [_5]',
+ $entries{$fields{'username'}},$fname,$mname,$lname,$gen).
+ '');
+ } else {
+ # determine section number
+ my $sec='';
+ my $username=$entries{$fields{'username'}};
+ if (defined($fields{'sec'})) {
+ if (defined($entries{$fields{'sec'}})) {
+ $sec=$entries{$fields{'sec'}};
+ }
+ }
+ # remove non alphanumeric values from section
+ $sec =~ s/\W//g;
+ if ($sec eq "none" || $sec eq 'all') {
+ $r->print('
'.
+ &mt('[_1]: Unable to enroll: section name "[_2]" for user [_3] [_4] [_5] [_6] is a reserved word.',
+ $username,$sec,$fname,$mname,$lname,$gen));
+ next;
+ } elsif (($sec ne '') && (exists($curr_groups{$sec}))) {
+ $r->print('
'.
+ &mt('[_1]: Unable to enroll: section name "[_2]" for user [_3] [_4] [_5] [_6] is a course group. Section names and group names must be distinct.',
+ $username,$sec,$fname,$mname,$lname,$gen));
+ next;
+ }
+ # determine student id number
+ my $id='';
+ if (defined($fields{'id'})) {
+ if (defined($entries{$fields{'id'}})) {
+ $id=$entries{$fields{'id'}};
+ }
+ $id=~tr/A-Z/a-z/;
+ }
+ # determine email address
+ my $email='';
+ if (defined($fields{'email'})) {
+ if (defined($entries{$fields{'email'}})) {
+ $email=$entries{$fields{'email'}};
+ unless ($email=~/^[^\@]+\@[^\@]+$/) { $email=''; }
+ }
+ }
+ # determine student password
+ my $password='';
+ if ($genpwd) {
+ $password=$genpwd;
+ } else {
+ if (defined($fields{'ipwd'})) {
+ if ($entries{$fields{'ipwd'}}) {
+ $password=$entries{$fields{'ipwd'}};
+ }
+ }
+ }
+ # Clean up whitespace
+ foreach (\$domain,\$username,\$id,\$fname,\$mname,
+ \$lname,\$gen,\$sec) {
+ $$_ =~ s/(\s+$|^\s+)//g;
+ }
+ if ($password || $env{'form.login'} eq 'loc') {
+ &Apache::lonuserutils::modifystudent($domain,
+ $username,$cid,
+ $sec,$desiredhost);
+ my $reply=&Apache::lonnet::modifystudent
+ ($domain,$username,$id,$amode,$password,
+ $fname,$mname,$lname,$gen,$sec,$enddate,
+ $startdate,$env{'form.forceid'},$desiredhost,
+ $email);
+ if ($reply ne 'ok') {
+ $reply =~ s/^error://;
+ $r->print('
'.
+ &mt('[_1]: Unable to enroll: [_2]',$username,$reply));
} else {
$count++; $flushc++;
$student{$username}=1;
@@ -947,142 +2530,370 @@ sub upfile_drop_add {
$flushc=0;
}
}
- } else {
- $r->print(
- "Dropping Students
');
-# ------------------------------------------------------- Get current classlist
- my $classlst=&Apache::lonnet::reply
- ('dump:'.$ENV{'course.'.$cid.'.domain'}.':'.
- $ENV{'course.'.$cid.'.num'}.':classlist',
- $ENV{'course.'.$cid.'.home'});
- my %currentlist=();
- my $now=time;
- unless ($classlst=~/^error\:/) {
- foreach (split(/\&/,$classlst)) {
- my ($name,$value)=split(/\=/,$_);
- my ($end,$start)=split(/\:/,
- &Apache::lonnet::unescape($value));
- my $active=1;
- if (($end) && ($now>$end)) { $active=0; }
- if ($active) {
- $currentlist{&Apache::lonnet::unescape($name)}=1;
- }
- }
-# ------------------------------------------------ Now got up-to-date classlist
- foreach (@studentdata) {
- my %entries=&record_sep($_);
- unless (($entries{$fields{'username'}} eq '') ||
- (!defined($entries{$fields{'username'}}))) {
- delete($currentlist{
- $entries{$fields{'username'}}.':'.
- $domain});
- }
- }
-# ----------------------------------------------------------- Print out choices
- &show_drop_list($r,%currentlist);
- } else {
- $r->print(
- 'Could not access classlist: '.$classlst.
- '
');
- }
- }
-# ------------------------------------------------------------------------ Done
-
- }
+ } else {
+ $r->print('
'.
+ &mt('[_1]: Unable to enroll. No password specified.',$username)
+ );
+ }
+ }
+ }
+ } # end of foreach (@studentdata)
+ $r->print("
\n".&mt('Processed [_1] student(s).',$count). + "
\n"); + $r->print("\n". + &mt('If active, the new role will be available when the '. + 'students next log in to LON-CAPA.')."
\n"); + ##################################### + # Drop students # + ##################################### + if ($env{'form.fullup'} eq 'yes') { + $r->print('Dropped '.$count.' student(s).'); - $r->print('
Re-enrollment will re-activate data.'); + $r->print('
'.&mt('Dropped [_1] student(s).',$count).'
'); + $r->print(''.&mt('Re-enrollment will re-activate data.')) if ($count);
}
-# ================================================================ Main Handler
-
-sub handler {
- my $r=shift;
-
- if ($r->header_only) {
- $r->content_type('text/html');
- $r->send_http_header;
- return OK;
- }
-
-# ----------------------------------------------------- Needs to be in a course
+sub section_check_js {
+ my $groupslist;
+ my %curr_groups = &Apache::longroup::coursegroups();
+ if (%curr_groups) {
+ $groupslist = join('","',sort(keys(%curr_groups)));
+ }
+ return <<"END";
+function validate(caller) {
+ var groups = new Array("$groupslist");
+ var secname = caller.value;
+ if ((secname == 'all') || (secname == 'none')) {
+ alert("'"+secname+"' may not be used as the name for a section, as it is a reserved word.\\nPlease choose a different section name.");
+ return 'error';
+ }
+ if (secname != '') {
+ for (var k=0; k