[LON-CAPA-cvs] cvs: loncom /lonnet/perl lonnet.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Tue, 16 May 2006 18:50:56 -0000
albertel Tue May 16 14:50:56 2006 EDT
Modified files:
/loncom/lonnet/perl lonnet.pm
Log:
- cascading of pacakge.tab defaults didn't take into account the specifity of the various packages (the default packages values are less importatnt than the part level ones)
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.737 loncom/lonnet/perl/lonnet.pm:1.738
--- loncom/lonnet/perl/lonnet.pm:1.737 Tue May 16 14:24:58 2006
+++ loncom/lonnet/perl/lonnet.pm Tue May 16 14:50:55 2006
@@ -1,7 +1,7 @@
# The LearningOnline Network
# TCP networking package
#
-# $Id: lonnet.pm,v 1.737 2006/05/16 18:24:58 albertel Exp $
+# $Id: lonnet.pm,v 1.738 2006/05/16 18:50:55 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -5319,9 +5319,29 @@
sub packages_tab_default {
my ($uri,$varname)=@_;
my (undef,$part,$name)=split(/\./,$varname);
- my $packages=&metadata($uri,'packages');
- foreach my $package (split(/,/,$packages)) {
+
+ my (@extension,@specifics,$do_default);
+ foreach my $package (split(/,/,&metadata($uri,'packages'))) {
my ($pack_type,$pack_part)=split(/_/,$package,2);
+ if ($pack_type eq 'default') {
+ $do_default=1;
+ } elsif ($pack_type eq 'extension') {
+ push(@extension,[$package,$pack_type,$pack_part]);
+ } else {
+ push(@specifics,[$package,$pack_type,$pack_part]);
+ }
+ }
+ # first look for a package that matches the requested part id
+ foreach my $package (@specifics) {
+ my (undef,$pack_type,$pack_part)=@{$package};
+ next if ($pack_part ne $part);
+ if (defined($packagetab{"$pack_type&$name&default"})) {
+ return $packagetab{"$pack_type&$name&default"};
+ }
+ }
+ # look for any possible matching non extension_ package
+ foreach my $package (@specifics) {
+ my (undef,$pack_type,$pack_part)=@{$package};
if (defined($packagetab{"$pack_type&$name&default"})) {
return $packagetab{"$pack_type&$name&default"};
}
@@ -5330,6 +5350,20 @@
return $packagetab{$pack_type."_".$pack_part."&$name&default"};
}
}
+ # look for any posible extension_ match
+ foreach my $package (@extension) {
+ my ($package,$pack_type)=@{$package};
+ if (defined($packagetab{"$pack_type&$name&default"})) {
+ return $packagetab{"$pack_type&$name&default"};
+ }
+ if (defined($packagetab{$package."&$name&default"})) {
+ return $packagetab{$package."&$name&default"};
+ }
+ }
+ # look for a global default setting
+ if ($do_default && defined($packagetab{"default&$name&default"})) {
+ return $packagetab{"default&$name&default"};
+ }
return undef;
}