[LON-CAPA-cvs] cvs: loncom /enrollment Autoenroll.pl Enrollment.pm /interface lonpopulate.pm
raeburn
raeburn at source.lon-capa.org
Fri Mar 1 00:21:17 EST 2013
raeburn Fri Mar 1 05:21:17 2013 EDT
Modified files:
/loncom/enrollment Enrollment.pm Autoenroll.pl
/loncom/interface lonpopulate.pm
Log:
- Set institutional status when auto-enrollment adds a new LON-CAPA user.
- Store credits earned for a course in classlist.db for students for whom
credits are different from course default.
- Credits can be part of XML record for each student in course roster
retrieved from institutional data course via customized localenroll.pm
-------------- next part --------------
Index: loncom/enrollment/Enrollment.pm
diff -u loncom/enrollment/Enrollment.pm:1.43 loncom/enrollment/Enrollment.pm:1.44
--- loncom/enrollment/Enrollment.pm:1.43 Fri Aug 20 21:44:59 2010
+++ loncom/enrollment/Enrollment.pm Fri Mar 1 05:20:01 2013
@@ -1,5 +1,5 @@
# Automated Enrollment manager
-# $Id: Enrollment.pm,v 1.43 2010/08/20 21:44:59 raeburn Exp $
+# $Id: Enrollment.pm,v 1.44 2013/03/01 05:20:01 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -38,7 +38,9 @@
use strict;
sub update_LC {
- my ($dom,$crs,$adds,$drops,$startdate,$enddate,$authtype,$autharg,$classesref,$groupref,$logmsg,$newusermsg,$context,$phototypes) = @_;
+ my ($dom,$crs,$adds,$drops,$startdate,$enddate,$authtype,$autharg,
+ $showcredits,$defaultcredits,$classesref,$groupref,$logmsg,$newusermsg,
+ $context,$phototypes) = @_;
# Get institutional code and title of this class
my %courseinfo = ();
&get_courseinfo($dom,$crs,\%courseinfo);
@@ -53,6 +55,7 @@
my $status=&Apache::loncoursedata::CL_STATUS;
my $type=&Apache::loncoursedata::CL_TYPE;
my $lockedtype=&Apache::loncoursedata::CL_LOCKEDTYPE;
+ my $credidx=&Apache::loncoursedata::CL_CREDITS;
my @localstudents = ();
my @futurestudents = ();
my @activestudents = ();
@@ -203,7 +206,16 @@
unless ($uname eq '') {
my %uidhash=&Apache::lonnet::idrget($dom,$uname);
my @stuinfo = @{$enrollinfo{$uname}};
- my $access = '';
+ my ($access,$added,$inststatus);
+ my $credits;
+ if ($showcredits) {
+ $credits = $stuinfo[$place{'credits'}];
+ $credits =~ s/[^\d\.]//g;
+ if ($credits eq $defaultcredits) {
+ undef($credits);
+ }
+ }
+ $inststatus = $stuinfo[$place{inststatus}];
if (grep/^$uname$/, at localstudents) {
# Check for studentID changes
if ( ($uidhash{$uname}) && ($uidhash{$uname} !~ /error\:/) ) {
@@ -231,25 +243,31 @@
if ($usec eq '') {
$showsec = &mt('none');
}
- $switchresult .= &mt("Section for [_1] switched from '[_2]' to '[_3]'.",$uname,$showoldsec,$showsec).$linefeed;
+ $switchresult .= &mt('Section for [_1] switched from [_2] to [_3].',$uname,$showoldsec,$showsec).$linefeed;
if ($context eq 'automated') {
- $$logmsg .= &mt("Section switch for [_1] from '[_2]' to '[_3]'.",$uname,$showoldsec,$usec).$linefeed;
+ $$logmsg .= &mt('Section switch for [_1] from [_2] to [_3].',$uname,$showoldsec,$usec).$linefeed;
}
$switchcount ++;
}
- &execute_add($context,'switchtype',$uname,$dom,$auth,$authparam,$first,$middle,$last,$gene,$pid,$usec,$end,$start,$emailenc,$cid,\$addresult,\$enrollcount,$linefeed,$logmsg);
+ &execute_add($context,'switchtype',$uname,$dom,$auth,
+ $authparam,$first,$middle,$last,$gene,
+ $pid,$usec,$end,$start,$emailenc,
+ $credits,$cid,\$addresult,\$enrollcount,
+ $linefeed,$logmsg);
+ $added = 1;
}
- }
+ }
# Check for section changes
if ($$currlist{$uname}[$sec] eq $stuinfo[ $place{groupID} ]) {
# Check for access date changes for students with access starting in the future.
if ( (grep/^$uname$/, at futurestudents) && ($$currlist{$uname}[$type] eq "auto") && ($adds == 1) ) {
my $datechange = &datechange_check($$currlist{$uname}[$cstart],$$currlist{$uname}[$cend],$startdate,$enddate);
if ($datechange) {
- my $modify_access_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context);
+ my $modify_access_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits);
$access = &showaccess($enddate,$startdate);
if ($modify_access_result =~ /^ok/) {
$$logmsg .= &mt('Change in access dates for [_1].',$uname).$access.$linefeed;
+ $added = 1;
} else {
$$logmsg .= &mt('Error when attempting to change start and/or end access dates for [_1] in section: [_2] -error [_3].',$uname,$stuinfo[$place{groupID}],$modify_access_result).$linefeed;
}
@@ -268,15 +286,16 @@
if ($expire_role_result eq 'ok') {
my $modify_section_result;
if (grep/^$uname$/, at activestudents) {
- $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$$currlist{$uname}[$cend],$$currlist{$uname}[$cstart],'auto','',$cid,'',$context);
+ $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$$currlist{$uname}[$cend],$$currlist{$uname}[$cstart],'auto','',$cid,'',$context,$credits);
} else {
- $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context);
+ $modify_section_result = &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits);
$access = &showaccess($enddate,$startdate);
}
if ($modify_section_result =~ /^ok/) {
- $switchresult .= &mt("Section for [_1] switched from old section: '[_2]' to new section: '[_3]'.",$uname,$$currlist{$uname}[$sec],$stuinfo[ $place{groupID} ]).$access.$linefeed;
+ $switchresult .= &mt('Section for [_1] switched from old section: [_2] to new section: [_3].',$uname,$$currlist{$uname}[$sec],$stuinfo[ $place{groupID} ]).$access.$linefeed;
+ $added = 1;
if ($context eq 'automated') {
- $$logmsg .= &mt('Section switch for [_1] from [_2] to [_3]',$uname,$$currlist{$uname}[$sec],$stuinfo[ $place{groupID} ]).$linefeed;
+ $$logmsg .= &mt('Section switch for [_1] from [_2] to [_3].',$uname,$$currlist{$uname}[$sec],$stuinfo[ $place{groupID} ]).$linefeed;
}
$switchcount ++;
} else {
@@ -287,6 +306,21 @@
}
}
}
+# Check for credits changes
+ if (($showcredits) &&
+ ($$currlist{$uname}[$credidx] ne $credits) && (!$added)) {
+ my $modify_credits_result =
+ &Apache::lonnet::modify_student_enrollment($dom,$uname,undef,undef,undef,undef,undef,$stuinfo[ $place{groupID} ],$enddate,$startdate,'auto','',$cid,'',$context,$credits);
+ if ($modify_credits_result =~ /^ok/) {
+ if ($credits ne '') {
+ $$logmsg .= &mt('Credits change for [_1] from [_2] to [_3].',$uname,$$currlist{$uname}[$credidx],$credits).$linefeed;
+ } else {
+ $$logmsg .= &mt('Credits change for [_1] from [_2] to course default [_3].',$uname,$$currlist{$uname}[$credidx],$defaultcredits).$linefeed;
+ }
+ } else {
+ $$logmsg .= &mt('Error when attempting to change credits for [_1] in section: [_2] -error [_3].',$uname,$stuinfo[$place{groupID}],$modify_credits_result).$linefeed;
+ }
+ }
} else {
# Check for changed usernames by checking studentIDs
if ( ($stuinfo[ $place{studentID} ] ne '') && (grep/^$stuinfo[ $place{studentID} ]$/, at LCids) ) {
@@ -302,7 +336,7 @@
$$logmsg .= &mt('Because of this student/employee ID conflict, the new username - [_1] - has not been added to the LON-CAPA classlist',$uname).$linefeed;
}
} elsif ($adds == 1) {
- my ($auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,$emailaddr,$pid,$emailenc);
+ my ($auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,$emailaddr,$pid,$emailenc,$credithours);
&prepare_add($authtype,$autharg,$enddate,$startdate,\@stuinfo,\%place,\$dom,\$uname,\$auth,\$authparam,\$first,\$middle,\$last,\$gene,\$usec,\$end,\$start,\$emailaddr,\$pid,\$emailenc);
# Check for existing account in this LON-CAPA domain for this username
my $uhome=&Apache::lonnet::homeserver($uname,$dom);
@@ -326,11 +360,19 @@
'cdom' => $dom,
'context' => $context,
'linefeed' => $linefeed,
- 'role' => 'st'
+ 'inststatus' => $inststatus,
+ 'role' => 'st',
};
+ if ($credits) {
+ $args->{'credits'} = $credits;
+ }
my $outcome = &create_newuser($args,$logmsg,$newusermsg,\$enrollcount,\$addresult,\%longroles,\%courseinfo,$context);
} else {
- &execute_add($context,'newstudent',$uname,$dom,$auth,$authparam,$first,$middle,$last,$gene,$pid,$usec,$end,$start,$emailenc,$cid,\$addresult,\$enrollcount,$linefeed,$logmsg);
+ &execute_add($context,'newstudent',$uname,$dom,$auth,
+ $authparam,$first,$middle,$last,$gene,$pid,
+ $usec,$end,$start,$emailenc,$credits,
+ $cid,\$addresult,\$enrollcount,$linefeed,
+ $logmsg);
}
if ($courseinfo{'showphoto'}) {
my ($result,$resulttype) =
@@ -473,6 +515,8 @@
my $context = $args->{'context'};
my $linefeed = $args->{'linefeed'};
my $role = $args->{'role'};
+ my $inststatus = $args->{'inststatus'};
+ my $credits = $args->{'credits'};
my $create_passwd = 0;
my $authchk = '';
my $outcome;
@@ -517,7 +561,7 @@
$outcome = $result;
}
} else {
- $outcome=&Apache::lonnet::modifystudent($udom,$uname,$pid,$auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,'',undef,$emailaddr,'auto','',$cid,'',$called_context);
+ $outcome=&Apache::lonnet::modifystudent($udom,$uname,$pid,$auth,$authparam,$first,$middle,$last,$gene,$usec,$end,$start,'',undef,$emailaddr,'auto','',$cid,'',$called_context,$inststatus,$credits);
}
if ($outcome eq 'ok') {
my $access = &showaccess($end,$start);
@@ -631,9 +675,11 @@
}
sub execute_add {
- my ($context,$caller,$uname,$dom,$auth,$authparam,$first,$middle,$last,$gene,$pid,$usec,$end,$start,$emailenc,$cid,$addresult,$enrollcount,$linefeed,$logmsg) = @_;
+ my ($context,$caller,$uname,$dom,$auth,$authparam,$first,$middle,$last,
+ $gene,$pid,$usec,$end,$start,$emailenc,$credits,$cid,$addresult,
+ $enrollcount,$linefeed,$logmsg) = @_;
# Get the user's information and authentication
- my %userenv = &Apache::lonnet::get('environment',['firstname','middlename','lastname','generation','id','critnotification','notification','permanentemail'],$dom,$uname);
+ my %userenv = &Apache::lonnet::get('environment',['firstname','middlename','lastname','generation','id','critnotification','notification','permanentemail','inststatus'],$dom,$uname);
my ($tmp) = keys(%userenv);
if ($tmp =~ /^(con_lost|error)/i) {
%userenv = ();
@@ -702,7 +748,11 @@
}
# Assign the role of student in the course.
- my $classlist_reply = &Apache::lonnet::modify_student_enrollment($dom,$uname,$pid,$first,$middle,$last,$gene,$usec,$end,$start,'auto','',$cid,'',$context);
+ my $classlist_reply =
+ &Apache::lonnet::modify_student_enrollment($dom,$uname,$pid,$first,$middle,
+ $last,$gene,$usec,$end,$start,
+ 'auto','',$cid,'',$context,
+ $credits);
if ($classlist_reply eq 'ok') {
my $access = &showaccess($end,$start);
my $showsec = $usec;
@@ -765,7 +815,7 @@
my $xmlfile = $tmpdir."/tmp/".$dom."_".$crs."_".$class."_classlist.xml";
my $uname = '';
my @state;
- my @items = ('autharg','authtype','email','firstname','generation','lastname','middlename','studentID');
+ my @items = ('autharg','authtype','email','firstname','generation','lastname','middlename','studentID','credits','inststatus');
my $p = HTML::Parser->new
(
xml_mode => 1,
@@ -856,7 +906,7 @@
my ($dom,$crs,$courseinfo) = @_;
my $owner;
if (defined($dom) && defined($crs)) {
- my %settings = &Apache::lonnet::get('environment',['internal.coursecode','internal.showphoto','description'],$dom,$crs);
+ my %settings = &Apache::lonnet::get('environment',['internal.coursecode','internal.showphoto','description','internal.defaultcredits'],$dom,$crs);
if ( defined($settings{'internal.coursecode'}) ) {
$$courseinfo{'inst_code'} = $settings{'internal.coursecode'};
}
@@ -866,6 +916,9 @@
if ( defined($settings{'internal.showphoto'}) ) {
$$courseinfo{'showphoto'} = $settings{'internal.showphoto'};
}
+ if ( defined($settings{'internal.credithours'}) ) {
+ $$courseinfo{'defaultcredits'} = $settings{'internal.defaultcredits'};
+ }
}
return;
}
@@ -883,6 +936,8 @@
middlename => 8,
startdate => 9,
studentID => 10,
+ credits => 11,
+ inststatus => 12,
);
return %place;
}
Index: loncom/enrollment/Autoenroll.pl
diff -u loncom/enrollment/Autoenroll.pl:1.32 loncom/enrollment/Autoenroll.pl:1.33
--- loncom/enrollment/Autoenroll.pl:1.32 Thu Aug 19 22:36:59 2010
+++ loncom/enrollment/Autoenroll.pl Fri Mar 1 05:20:01 2013
@@ -1,7 +1,7 @@
#!/usr/bin/perl
#
#Automated Enrollment script
-# $Id: Autoenroll.pl,v 1.32 2010/08/19 22:36:59 raeburn Exp $
+# $Id: Autoenroll.pl,v 1.33 2013/03/01 05:20:01 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -54,7 +54,7 @@
my $run_enroll = 0;
my $domsettings;
my %domconfig =
- &Apache::lonnet::get_dom('configuration',['autoenroll'],$dom);
+ &Apache::lonnet::get_dom('configuration',['autoenroll','coursedefaults'],$dom);
if (ref($domconfig{'autoenroll'}) eq 'HASH') {
$domsettings = $domconfig{'autoenroll'};
if ($domsettings->{'run'} eq '1') {
@@ -74,6 +74,14 @@
my %enrollvar = ();
my %reply = ();
my %LC_code = ();
+ my ($showcredits,$domdefcredits);
+ if ((ref($domconfig{'coursedefaults'}) eq 'HASH') &&
+ (ref($domconfig{'coursedefaults'}{'coursecredits'}) eq 'HASH')) {
+ if ($domconfig{'coursedefaults'}{'coursecredits'}{'official'}) {
+ $showcredits = 1;
+ $domdefcredits = $domconfig{'coursedefaults'}{'coursecredits'}{'official'};
+ }
+ }
foreach my $key (sort keys %courses) {
my %args = (
one_time => 1,
@@ -92,7 +100,7 @@
$enrollvar{$crs}{$item} = &HTML::Entities::decode($settings{$item});
} elsif ($item eq 'default_enrollment_start_date') {
$enrollvar{$crs}{startdate} = $settings{$item};
- } elsif ($item eq 'default_enrollment_end_date') {
+ } elsif ($item eq 'default_enrollment_end_date') {
$enrollvar{$crs}{enddate} = $settings{$item};
}
}
@@ -148,7 +156,11 @@
if ($reply{$crs} > 0) {
if ( ($enrollvar{$crs}{autostart} < $timenow) && ( ($enrollvar{$crs}{autoend} > $timenow) || ($enrollvar{$crs}{autoend} == 0) ) ) {
if (($enrollvar{$crs}{autoadds} == 1) || ($enrollvar{$crs}{autodrops} == 1)) {
- my ($changecount,$response) = &LONCAPA::Enrollment::update_LC($dom,$crs,$enrollvar{$crs}{autoadds},$enrollvar{$crs}{autodrops},$enrollvar{$crs}{startdate},$enrollvar{$crs}{enddate},$enrollvar{$crs}{authtype},$enrollvar{$crs}{autharg},$affiliates{$crs},$LC_code{$crs},\$logmsg,\$newusermsg,'automated');
+ my $defaultcredits = $domdefcredits;
+ if ($enrollvar{$crs}{defaultcredits}) {
+ $defaultcredits = $enrollvar{$crs}{defaultcredits};
+ }
+ my ($changecount,$response) = &LONCAPA::Enrollment::update_LC($dom,$crs,$enrollvar{$crs}{autoadds},$enrollvar{$crs}{autodrops},$enrollvar{$crs}{startdate},$enrollvar{$crs}{enddate},$enrollvar{$crs}{authtype},$enrollvar{$crs}{autharg},$showcredits,$defaultcredits,$affiliates{$crs},$LC_code{$crs},\$logmsg,\$newusermsg,'automated');
print $fh &mt('Messages start for [_1]',$crs)."\n";
print $fh "$logmsg\n";
print $fh &mt('Messages end for [_1]',$crs)."\n";
Index: loncom/interface/lonpopulate.pm
diff -u loncom/interface/lonpopulate.pm:1.75 loncom/interface/lonpopulate.pm:1.76
--- loncom/interface/lonpopulate.pm:1.75 Fri Mar 1 05:10:09 2013
+++ loncom/interface/lonpopulate.pm Fri Mar 1 05:21:17 2013
@@ -1,5 +1,5 @@
# automated enrollment configuration handler
-# $Id: lonpopulate.pm,v 1.75 2013/03/01 05:10:09 raeburn Exp $
+# $Id: lonpopulate.pm,v 1.76 2013/03/01 05:21:17 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2726,12 +2726,25 @@
my %settings =
&Apache::lonnet::get('environment',
['internal.coursecode','internal.sectionnums','internal.crosslistings',
- 'internal.authtype','internal.autharg','internal.showphoto'],
+ 'internal.authtype','internal.autharg','internal.showphoto','internal.defaultcredits'],
$dom,$crs);
my $coursecode = $settings{'internal.coursecode'};
my $authtype = $settings{'internal.authtype'};
my $autharg = $settings{'internal.autharg'};
my $showphotos = $settings{'internal.showphoto'};
+ my ($showcredits,$defaultcredits);
+ my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
+ if ($domdefaults{'officialcredits'} || $domdefaults{'unofficialcredits'}) {
+ $showcredits = 1;
+ $defaultcredits = $settings{'internal.defaultcredits'};
+ if ($defaultcredits eq '') {
+ if ($coursecode ne '') {
+ $defaultcredits = $domdefaults{'officialcredits'};
+ } else {
+ $defaultcredits = $domdefaults{'unofficialcredits'};
+ }
+ }
+ }
my ($startaccess,$endaccess) = &get_dates_from_form();
if ( exists($env{'form.updateadds'}) ) {
$updateadds = $env{'form.updateadds'};
@@ -2766,7 +2779,7 @@
": ".$outcome);
}
if ($reply{$crs} > 0) {
- ($changecount,$response) = &LONCAPA::Enrollment::update_LC($dom,$crs,$updateadds,$updatedrops,$startaccess,$endaccess,$authtype,$autharg,\@allcourses,\%LC_code,\$logmsg,\$newusermsg,"updatenow",\%phototypes);
+ ($changecount,$response) = &LONCAPA::Enrollment::update_LC($dom,$crs,$updateadds,$updatedrops,$startaccess,$endaccess,$authtype,$autharg,$showcredits,$defaultcredits,\@allcourses,\%LC_code,\$logmsg,\$newusermsg,"updatenow",\%phototypes);
} else {
$response = &mt('There was a problem retrieving institutional class list data for the course sections and crosslisted courses which contribute enrollment to this course.').' '.
&mt('No updates have been carried out, and the roster remains unchanged.');
@@ -2811,6 +2824,7 @@
my $secidx=&Apache::loncoursedata::CL_SECTION;
my $typeidx=&Apache::loncoursedata::CL_TYPE;
my $lockedidx=&Apache::loncoursedata::CL_LOCKEDTYPE;
+ my $creditsidx=&Apache::loncoursedata::CL_CREDITS;
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['chgauto','chgmanual','lockchg','unlockchg']);
my @typechglist = (&Apache::loncommon::get_env_multiple('form.chgauto'),
@@ -2818,7 +2832,7 @@
my @lockchglist = (&Apache::loncommon::get_env_multiple('form.lockchg'),
&Apache::loncommon::get_env_multiple('form.unlockchg'));
- foreach my $student (sort @typechglist) {
+ foreach my $student (sort(@typechglist)) {
my ($uname,$udom) = split(/:/,$student);
my $sdata = $classlist->{$student};
my $section = $sdata->[$secidx];
@@ -2827,6 +2841,7 @@
my $end = $sdata->[$endidx];
my $type = $sdata->[$typeidx];
my $lock = $sdata->[$lockedidx];
+ my $credits = $sdata->[$creditsidx];
my $newlock = $lock;
$chgtotal ++;
my $newtype = 'auto';
@@ -2843,7 +2858,12 @@
} elsif ($newtype eq '') {
$newlock = '1';
}
- my $modreply = &Apache::lonnet::modify_student_enrollment($udom,$uname,$uid,'','','','',$section,$end,$start,$newtype,$newlock,$cid,'','chgtype');
+ my $modreply =
+ &Apache::lonnet::modify_student_enrollment($udom,$uname,$uid,'',
+ '','','',$section,$end,
+ $start,$newtype,
+ $newlock,$cid,'',
+ 'chgtype',$credits);
if ($modreply eq 'ok') {
$chgok ++;
$chg{$student} = &mt("Changed to $change");
@@ -2865,6 +2885,7 @@
my $end = $sdata->[$endidx];
my $type = $sdata->[$typeidx];
my $lock = $sdata->[$lockedidx];
+ my $credits = $sdata->[$creditsidx];
my $newlock = 1;
my $oldlockname = &mt('unlocked');
my $newlockname = &mt('locked');
@@ -2875,7 +2896,7 @@
$newlockname = &mt('unlocked');
$oldlockname = &mt('locked');
}
- my $lockreply = &Apache::lonnet::modify_student_enrollment($udom,$uname,$uid,'','','','',$section,$end,$start,$type,$newlock,$cid,'','chgtype');
+ my $lockreply = &Apache::lonnet::modify_student_enrollment($udom,$uname,$uid,'','','','',$section,$end,$start,$type,$newlock,$cid,'','chgtype',$credits);
if ($lockreply eq 'ok') {
$lockok ++;
$lockchg{$student} = &mt('Changed to [_1]',$newlockname);
More information about the LON-CAPA-cvs
mailing list