[LON-CAPA-cvs] cvs: loncom /lonnet/perl lonnet.pm
raeburn
lon-capa-cvs-allow@mail.lon-capa.org
Wed, 30 Apr 2008 22:43:01 -0000
This is a MIME encoded message
--raeburn1209595381
Content-Type: text/plain
raeburn Wed Apr 30 18:43:01 2008 EDT
Modified files:
/loncom/lonnet/perl lonnet.pm
Log:
Bug 5176. keep a record of role changes in a course in nohist_rolelog.db and group membership changes in a course in nohist_groupslog.db.
- &instructor_log() takes additional (optional) args - $cnum and $cdom, for use in cases where role changes to be logged do not occur in course context (e.g., Auto-enrollment, Batch course creation.
- Additional arguments ($selfenroll and $context) added for following subroutines:
- &courserolelog() added to log changes in course roles or groups.
- &modify_group_roles()
- &modify_student_enrollment()
- &assigncustomrole()
- &revokerole()
- &revokecustomrole()
which all call &assignrole() so that information about selfenrollment, and calling context can be included in record in nohist_rolelog.db.
- Additional argument ($context) added for &assignrole.
- &courserolelog() called by &assignrole.
- Documentation updates.
- Add some missing apostrophes to documentation
--raeburn1209595381
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20080430184301.txt"
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.956 loncom/lonnet/perl/lonnet.pm:1.957
--- loncom/lonnet/perl/lonnet.pm:1.956 Mon Apr 21 11:58:12 2008
+++ loncom/lonnet/perl/lonnet.pm Wed Apr 30 18:42:59 2008
@@ -1,7 +1,7 @@
# The LearningOnline Network
# TCP networking package
#
-# $Id: lonnet.pm,v 1.956 2008/04/21 15:58:12 raeburn Exp $
+# $Id: lonnet.pm,v 1.957 2008/04/30 22:42:59 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -88,24 +88,26 @@
{
my $logid;
sub instructor_log {
- my ($hash_name,$storehash,$delflag,$uname,$udom)=@_;
+ my ($hash_name,$storehash,$delflag,$uname,$udom,$cnum,$cdom)=@_;
+ if (($cnum eq '') || ($cdom eq '')) {
+ $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ }
$logid++;
- my $id=time().'00000'.$$.'00000'.$logid;
+ my $now = time();
+ my $id=$now.'00000'.$$.'00000'.$logid;
return &Apache::lonnet::put('nohist_'.$hash_name,
{ $id => {
'exe_uname' => $env{'user.name'},
'exe_udom' => $env{'user.domain'},
- 'exe_time' => time(),
+ 'exe_time' => $now,
'exe_ip' => $ENV{'REMOTE_ADDR'},
'delflag' => $delflag,
'logentry' => $storehash,
'uname' => $uname,
'udom' => $udom,
}
- },
- $env{'course.'.$env{'request.course.id'}.'.domain'},
- $env{'course.'.$env{'request.course.id'}.'.num'}
- );
+ },$cdom,$cnum);
}
}
@@ -2480,6 +2482,36 @@
}
}
+sub courserolelog {
+ my ($trole,$username,$domain,$area,$tstart,$tend,$delflag,$selfenroll,$context)=@_;
+ if (($trole eq 'cc') || ($trole eq 'in') ||
+ ($trole eq 'ep') || ($trole eq 'ad') ||
+ ($trole eq 'ta') || ($trole eq 'st') ||
+ ($trole=~/^cr/) || ($trole eq 'gr')) {
+ if ($area =~ m-^/($match_domain)/($match_courseid)/?([^/]*)-) {
+ my $cdom = $1;
+ my $cnum = $2;
+ my $sec = $3;
+ my $namespace = 'rolelog';
+ my %storehash = (
+ role => $trole,
+ start => $tstart,
+ end => $tend,
+ selfenroll => $selfenroll,
+ context => $context,
+ );
+ if ($trole eq 'gr') {
+ $namespace = 'groupslog';
+ $storehash{'group'} = $sec;
+ } else {
+ $storehash{'section'} = $sec;
+ }
+ &instructor_log($namespace,\%storehash,$delflag,$username,$domain,$cnum,$cdom);
+ }
+ }
+ return;
+}
+
sub get_course_adv_roles {
my ($cid,$codes) = @_;
$cid=$env{'request.course.id'} unless (defined($cid));
@@ -5236,11 +5268,11 @@
}
sub modify_group_roles {
- my ($cdom,$cnum,$group_id,$user,$end,$start,$userprivs) = @_;
+ my ($cdom,$cnum,$group_id,$user,$end,$start,$userprivs,$selfenroll,$context) = @_;
my $url = '/'.$cdom.'/'.$cnum.'/'.$group_id;
my $role = 'gr/'.&escape($userprivs);
my ($uname,$udom) = split(/:/,$user);
- my $result = &assignrole($udom,$uname,$url,$role,$end,$start);
+ my $result = &assignrole($udom,$uname,$url,$role,$end,$start,'',$selfenroll,$context);
if ($result eq 'ok') {
&devalidate_getgroups_cache($udom,$uname,$cdom,$cnum);
}
@@ -5356,7 +5388,8 @@
# ----------------------------------------------------------------- Assign Role
sub assignrole {
- my ($udom,$uname,$url,$role,$end,$start,$deleteflag,$selfenroll)=@_;
+ my ($udom,$uname,$url,$role,$end,$start,$deleteflag,$selfenroll,
+ $context)=@_;
my $mrole;
if ($role =~ /^cr\//) {
my $cwosec=$url;
@@ -5415,6 +5448,7 @@
}
my $origstart = $start;
my $origend = $end;
+ my $delflag;
# actually delete
if ($deleteflag) {
if ((&allowed('dro',$udom)) || (&allowed('dro',$url))) {
@@ -5425,6 +5459,7 @@
# set start and finish to negative values for userrolelog
$start=-1;
$end=-1;
+ $delflag = 1;
}
}
# send command
@@ -5433,9 +5468,10 @@
if ($answer eq 'ok') {
&userrolelog($role,$uname,$udom,$url,$start,$end);
# for course roles, perform group memberships changes triggered by role change.
+ &courserolelog($role,$uname,$udom,$url,$origstart,$origend,$delflag,$selfenroll,$context);
unless ($role =~ /^gr/) {
&Apache::longroup::group_changes($udom,$uname,$url,$role,$origend,
- $origstart);
+ $origstart,$selfenroll,$context);
}
}
return $answer;
@@ -5572,7 +5608,8 @@
sub modifystudent {
my ($udom,$uname,$uid,$umode,$upass,$first,$middle,$last,$gene,$usec,
- $end,$start,$forceid,$desiredhome,$email,$type,$locktype,$cid)=@_;
+ $end,$start,$forceid,$desiredhome,$email,$type,$locktype,$cid,
+ $selfenroll,$context)=@_;
if (!$cid) {
unless ($cid=$env{'request.course.id'}) {
return 'not_in_class';
@@ -5587,12 +5624,12 @@
# students environment
$uid = undef if (!$forceid);
$reply = &modify_student_enrollment($udom,$uname,$uid,$first,$middle,$last,
- $gene,$usec,$end,$start,$type,$locktype,$cid);
+ $gene,$usec,$end,$start,$type,$locktype,$cid,$selfenroll,$context);
return $reply;
}
sub modify_student_enrollment {
- my ($udom,$uname,$uid,$first,$middle,$last,$gene,$usec,$end,$start,$type,$locktype,$cid,$selfenroll) = @_;
+ my ($udom,$uname,$uid,$first,$middle,$last,$gene,$usec,$end,$start,$type,$locktype,$cid,$selfenroll,$context) = @_;
my ($cdom,$cnum,$chome);
if (!$cid) {
unless ($cid=$env{'request.course.id'}) {
@@ -5650,7 +5687,7 @@
if ($usec) {
$uurl.='/'.$usec;
}
- return &assignrole($udom,$uname,$uurl,'st',$end,$start,undef,$selfenroll);
+ return &assignrole($udom,$uname,$uurl,'st',$end,$start,undef,$selfenroll,$context);
}
sub format_name {
@@ -5779,26 +5816,26 @@
# ---------------------------------------------------------- Assign Custom Role
sub assigncustomrole {
- my ($udom,$uname,$url,$rdom,$rnam,$rolename,$end,$start,$deleteflag)=@_;
+ my ($udom,$uname,$url,$rdom,$rnam,$rolename,$end,$start,$deleteflag,$selfenroll,$context)=@_;
return &assignrole($udom,$uname,$url,'cr/'.$rdom.'/'.$rnam.'/'.$rolename,
- $end,$start,$deleteflag);
+ $end,$start,$deleteflag,$selfenroll,$context);
}
# ----------------------------------------------------------------- Revoke Role
sub revokerole {
- my ($udom,$uname,$url,$role,$deleteflag)=@_;
+ my ($udom,$uname,$url,$role,$deleteflag,$selfenroll,$context)=@_;
my $now=time;
- return &assignrole($udom,$uname,$url,$role,$now,$deleteflag);
+ return &assignrole($udom,$uname,$url,$role,$now,$deleteflag,$selfenroll,$context);
}
# ---------------------------------------------------------- Revoke Custom Role
sub revokecustomrole {
- my ($udom,$uname,$url,$rdom,$rnam,$rolename,$deleteflag)=@_;
+ my ($udom,$uname,$url,$rdom,$rnam,$rolename,$deleteflag,$selfenroll,$context)=@_;
my $now=time;
return &assigncustomrole($udom,$uname,$url,$rdom,$rnam,$rolename,$now,
- $deleteflag);
+ $deleteflag,$selfenroll,$context);
}
# ------------------------------------------------------------ Disk usage
@@ -9043,7 +9080,7 @@
=item *
-assignrole($udom,$uname,$url,$role,$end,$start) : assign role; give a role to a
+assignrole($udom,$uname,$url,$role,$end,$start,$deleteflag,$selfenroll,$context) : assign role; give a role to a
user for the level given by URL. Optional start and end dates (leave empty
string or zero for "no date")
@@ -9067,7 +9104,7 @@
modifystudent
-modify a students enrollment and identification information.
+modify a student's enrollment and identification information.
The course id is resolved based on the current users environment.
This means the envoking user must be a course coordinator or otherwise
associated with a course.
@@ -9079,25 +9116,25 @@
=over 4
-=item B<$udom> Students loncapa domain
+=item B<$udom> Student's loncapa domain
-=item B<$uname> Students loncapa login name
+=item B<$uname> Student's loncapa login name
-=item B<$uid> Students id/student number
+=item B<$uid> Student's id/student number
-=item B<$umode> Students authentication mode
+=item B<$umode> Student's authentication mode
-=item B<$upass> Students password
+=item B<$upass> Student's password
-=item B<$first> Students first name
+=item B<$first> Student's first name
-=item B<$middle> Students middle name
+=item B<$middle> Student's middle name
-=item B<$last> Students last name
+=item B<$last> Student's last name
-=item B<$gene> Students generation
+=item B<$gene> Student's generation
-=item B<$usec> Students section in course
+=item B<$usec> Student's section in course
=item B<$end> Unix time of the roles expiration
@@ -9107,6 +9144,18 @@
=item B<$desiredhome> server to use as home server for student
+=item B<$email> Student's permanent e-mail address
+
+=item B<$type> Type of enrollment (auto or manual)
+
+=item B<$locktype>
+
+=item B<$cid>
+
+=item B<$selfenroll>
+
+=item B<$context>
+
=back
=item *
@@ -9140,6 +9189,16 @@
=item $start
+=item $type
+
+=item $locktype
+
+=item $cid
+
+=item $selfenroll
+
+=item $context
+
=back
--raeburn1209595381--