[LON-CAPA-cvs] cvs: loncom /misc refresh_courseids_db.pl
raeburn
raeburn@source.lon-capa.org
Mon, 15 Mar 2010 20:13:14 -0000
This is a MIME encoded message
--raeburn1268683994
Content-Type: text/plain
raeburn Mon Mar 15 20:13:14 2010 EDT
Modified files:
/loncom/misc refresh_courseids_db.pl
Log:
- Eliminate calls to &lonnet::courseiddump() for individual courses if date created is missing (use hash retrieved from call for all courses in domain instead).
- If auto-assignment of co-ownership for official courses is enabled:
update co-owners based on co-ownership prerequisites:
(a) active CC role
(b) validated as official course personnel
--raeburn1268683994
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20100315201314.txt"
Index: loncom/misc/refresh_courseids_db.pl
diff -u loncom/misc/refresh_courseids_db.pl:1.1 loncom/misc/refresh_courseids_db.pl:1.2
--- loncom/misc/refresh_courseids_db.pl:1.1 Sun Mar 14 23:17:54 2010
+++ loncom/misc/refresh_courseids_db.pl Mon Mar 15 20:13:14 2010
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# The LearningOnline Network
#
-# $Id: refresh_courseids_db.pl,v 1.1 2010/03/14 23:17:54 raeburn Exp $
+# $Id: refresh_courseids_db.pl,v 1.2 2010/03/15 20:13:14 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -78,7 +78,9 @@
my @ids=&Apache::lonnet::current_machine_ids();
my %currhash = &Apache::lonnet::courseiddump($dom,'.',1,'.','.','.',1,\@ids,'.');
my $dir = $Apache::lonnet::perlvar{lonUsersDir}.'/'.$dom;
- &recurse_courses($dom,$dir,0,\%courseshash,\%currhash,$fh);
+ my %domdesign = &Apache::loncommon::get_domainconf($dom);
+ my $autoassign = $domdesign{$dom.'.autoassign.co-owners'};
+ &recurse_courses($dom,$dir,0,\%courseshash,\%currhash,$autoassign,$fh);
foreach my $lonhost (keys(%courseshash)) {
if (ref($courseshash{$lonhost}) eq 'HASH') {
if (&Apache::lonnet::courseidput($dom,$courseshash{$lonhost},$lonhost,'notime') eq 'ok') {
@@ -95,7 +97,7 @@
close($fh);
sub recurse_courses {
- my ($cdom,$dir,$depth,$courseshash,$currhash,$fh) = @_;
+ my ($cdom,$dir,$depth,$courseshash,$currhash,$autoassign,$fh) = @_;
next unless (ref($currhash) eq 'HASH');
if (-d $dir) {
opendir(DIR,$dir);
@@ -104,7 +106,8 @@
$depth ++;
foreach my $item (@contents) {
if ($depth < 4) {
- &recurse_courses($cdom,$dir.'/'.$item,$depth,$courseshash,$currhash,$fh);
+ &recurse_courses($cdom,$dir.'/'.$item,$depth,$courseshash,
+ $currhash,$autoassign,$fh);
} elsif ($item =~ /^$match_courseid$/) {
my $cnum = $item;
my $cid = $cdom.'_'.$cnum;
@@ -137,8 +140,10 @@
}
my $chome = &Apache::lonnet::homeserver($cnum,$cdom);
my $owner = $courseinfo{'internal.courseowner'};
+ my (%roleshash,$gotcc);
if ($owner eq '') {
- my %roleshash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef,undef,['cc'],undef,undef,1);
+ %roleshash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef,undef,['cc'],undef,undef,1);
+ $gotcc = 1;
if (keys(%roleshash) == 1) {
foreach my $key (keys(%roleshash)) {
if ($key =~ /^($match_username\:$match_domain)\:cc$/) {
@@ -163,11 +168,10 @@
$inst_code = '' if (!defined($inst_code));
$owner = '' if (!defined($owner));
if ($created eq '') {
- my %currdump = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',$cnum,undef,undef,'.');
- if (ref($currdump{$cid}) eq 'HASH') {
- $created = $currdump{$cid}{'created'};
- $creator = $currdump{$cid}{'creator'};
- $creationcontext = $currdump{$cid}{'context'};
+ if (ref($currhash->{$cid}) eq 'HASH') {
+ $created = $currhash->{$cid}{'created'};
+ $creator = $currhash->{$cid}{'creator'};
+ $creationcontext = $currhash->{$cid}{'context'};
unless ($created eq '') {
$changes{'internal.created'} = $created;
}
@@ -204,9 +208,6 @@
owner => $owner,
type => $crstype,
};
- if ($courseinfo{'internal.co-owners'} ne '') {
- $courseshash->{$chome}{$cid}{'co-owners'} = $courseinfo{'internal.co-owners'};
- }
if ($creator ne '') {
$courseshash->{$chome}{$cid}{'creator'} = $creator;
}
@@ -216,16 +217,62 @@
if ($creationcontext ne '') {
$courseshash->{$chome}{$cid}{'context'} = $creationcontext;
}
+ if (($inst_code ne '') && ($autoassign)) {
+ unless ($gotcc) {
+ %roleshash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef,undef,['cc'],undef,undef,1);
+ }
+ my @currcoowners;
+ my @newcoowners;
+ if ($courseinfo{'internal.co-owners'} ne '') {
+ @currcoowners = split(',',$courseinfo{'internal.co-owners'});
+ }
+ foreach my $key (keys(%roleshash)) {
+ if ($key =~ /^($match_username\:$match_domain)\:cc$/) {
+ my $cc = $1;
+ unless ($cc eq $owner) {
+ my ($result,$desc) = &Apache::lonnet::auto_validate_instcode($cnum,$cdom,$inst_code,$cc);
+ if ($result eq 'valid') {
+ if (@newcoowners > 0) {
+ unless (grep(/^\Q$cc\E$/,@newcoowners)) {
+ push(@newcoowners,$cc);
+ }
+ } else {
+ push(@newcoowners,$cc);
+ }
+ }
+ }
+ }
+ }
+ my @diffs = &Apache::loncommon::compare_arrays(\@currcoowners,\@newcoowners);
+ if (@diffs > 0) {
+ if (@newcoowners > 0) {
+ $changes{'internal.co-owners'} = join(',',@newcoowners);
+ $courseshash->{$chome}{$cid}{'co-owners'} = $changes{'internal.co-owners'};
+ } else {
+ if ($courseinfo{'internal.co-owners'} ne '') {
+ if (&Apache::lonnet::del('environment',['internal.co-owners'],$cdom,$cnum) eq 'ok') {
+ print $fh "Former co-owner(s): $courseinfo{'internal.co-owners'} for official course: $inst_code (".$cdom."_".$cnum.") no longer active CCs, co-ownership status deleted.\n";
+ }
+ } else {
+ print $fh "Error occurred when updating co-ownership in course's environment.db for ".$cdom."_".$cnum."\n";
+ }
+ }
+ } elsif (@currcoowners > 0) {
+ $courseshash->{$chome}{$cid}{'co-owners'} = $courseinfo{'internal.co-owners'};
+ }
+ } elsif ($courseinfo{'internal.co-owners'} ne '') {
+ $courseshash->{$chome}{$cid}{'co-owners'} = $courseinfo{'internal.co-owners'};
+ }
if (keys(%changes)) {
- if (&Apache::lonnet::put('environment',\%changes,$cdom,$cnum) eq 'ok') {
- print $fh "Course's environment.db for ".$cdom."_".$cnum." successfully updated with following entries: ";
- foreach my $key (sort(keys(%changes))) {
- print $fh "$key => $changes{$key} ";
- }
- print $fh "\n";
- } else {
- print $fh "Error occurred when updating course's environment.db for ".$cdom."_".$cnum."\n";
- }
+ if (&Apache::lonnet::put('environment',\%changes,$cdom,$cnum) eq 'ok') {
+ print $fh "Course's environment.db for ".$cdom."_".$cnum." successfully updated with following entries: ";
+ foreach my $key (sort(keys(%changes))) {
+ print $fh "$key => $changes{$key} ";
+ }
+ print $fh "\n";
+ } else {
+ print $fh "Error occurred when updating course's environment.db for ".$cdom."_".$cnum."\n";
+ }
}
}
}
@@ -234,3 +281,5 @@
return;
}
+
+
--raeburn1268683994--