[prev in list] [next in list] [prev in thread] [next in thread]
List: lon-capa-cvs
Subject: [LON-CAPA-cvs] cvs: loncom /interface courseprefs.pm lonrelrequtils.pm /misc releaseslist.xml
From: raeburn <raeburn () source ! lon-capa ! org>
Date: 2015-04-28 13:20:48
Message-ID: cvsraeburn1430227248 () cvsserver
[Download RAW message or body]
This is a MIME encoded message
raeburn Tue Apr 28 13:20:48 2015 EDT
Modified files:
/loncom/interface courseprefs.pm lonrelrequtils.pm
/loncom/misc releaseslist.xml
Log:
- LON-CAPA version requirement checking for IP/Name Access control ("deny
from" type) and relative weights in lenient grading.
- Version checking accommodate parameter values which match a regexp
(for acc and lenient parameters) as well as designated values.
["raeburn-20150428132048.txt" (text/plain)]
Index: loncom/interface/courseprefs.pm
diff -u loncom/interface/courseprefs.pm:1.69 loncom/interface/courseprefs.pm:1.70
--- loncom/interface/courseprefs.pm:1.69 Sat Mar 7 23:17:15 2015
+++ loncom/interface/courseprefs.pm Tue Apr 28 13:20:41 2015
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set configuration settings for a course
#
-# $Id: courseprefs.pm,v 1.69 2015/03/07 23:17:15 raeburn Exp $
+# $Id: courseprefs.pm,v 1.70 2015/04/28 13:20:41 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2325,109 +2325,128 @@
my $resourcedata = &Apache::lonparmset::readdata($cnum,$cdom);
if (ref($resourcedata) eq 'HASH') {
foreach my $key (keys(%{$resourcedata})) {
+ my %found;
foreach my $item (keys(%Apache::lonrelrequtils::checkparms)) {
if ($key =~ /(\Q$item\E)$/) {
- if (ref($Apache::lonrelrequtils::checkparms{$item}) eq 'ARRAY') \
{
- my $value = $resourcedata->{$key};
- if ($item eq 'examcode') {
- if (&Apache::lonnet::validCODE($value)) {
- $value = 'valid';
- } else {
- $value = '';
- }
- } elsif ($item eq 'printstartdate') {
+ if (ref($Apache::lonrelrequtils::checkparms{$item}) eq 'ARRAY') \
{ + my $value = $resourcedata->{$key};
+ if ($item eq 'examcode') {
+ if (&Apache::lonnet::validCODE($value)) {
+ $value = 'valid';
+ } else {
+ $value = '';
+ }
+ } elsif ($item eq 'printstartdate') {
if ($value =~ /^\d+$/) {
- if ($value > $now) {
- $value = 'future';
- }
- }
- } elsif ($item eq 'printenddate') {
- if ($value =~ /^\d+$/) {
- if ($value < $now) {
- $value = 'past';
- }
- }
- }
- my ($middle,$scope,$which,$level,$map,$resource);
- if \
(grep(/^\Q$value\E$/,@{$Apache::lonrelrequtils::checkparms{$item}})) \
{
- my $stdtype = \
&Apache::lonparmset::standard_parameter_types($item);
- my $stdname = \
&Apache::lonparmset::standard_parameter_names($item);
- my $valname = &get_param_description($stdtype,$value);
- my $rev = \
$Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value};
- my $start = $cid.'.';
- if ($key =~ \
/^\Q$start\E(\[useropt\:($match_username\:$match_domain)\]\.)/) {
- $middle = $1;
- $which = $2;
- $scope = 'user';
- } elsif ($key =~ /^\Q$start\E(\[(\w+)\]\.)/) {
- $middle = $1;
- $which = $2;
- $scope = 'section/group';
- } else {
- $scope = 'all';
- }
- my $what="$stdname=$valname";
- if ($key =~ /^\Q$start$middle\E\w+\.\Q$item\E$/) {
- $level = 'general';
- if ($scope eq 'all') {
- if (ref($fromparam{$rev}{$scope}) eq 'ARRAY') {
- \
unless(grep(/^\Q$what\E$/,@{$fromparam{$rev}{$scope}})) {
- \
push(@{$fromparam{$rev}{$scope}},$what);
- }
- } else {
- push(@{$fromparam{$rev}{$scope}},$what);
- }
- } else {
- if (ref($fromparam{$rev}{$scope}{$which}) eq \
'ARRAY') {
- unless \
(grep(/^\Q$what\E$/,@{$fromparam{$rev}{$scope}{$which}})) {
- \
push(@{$fromparam{$rev}{$scope}{$which}},$what);
- }
- } else {
- \
push(@{$fromparam{$rev}{$scope}{$which}},$what);
- }
- }
- $rowspan{$rev} ++;
- } elsif ($key =~ \
/^\Q$start$middle\E(.+)___\(all\).\w+\.\Q$item\E$/) {
- $level = 'folder';
- $map = $1;
- if ($scope eq 'all') {
- if (ref($bymap{$map}{$rev}{$scope}) eq 'ARRAY') \
{
- \
unless(grep(/^\Q$what\E$/,@{$bymap{$map}{$rev}{$scope}})) {
- \
push(@{$bymap{$map}{$rev}{$scope}},$what);
- }
- } else {
- push(@{$bymap{$map}{$rev}{$scope}},$what);
- }
- } else {
- if (ref($bymap{$map}{$rev}{$scope}{$which}) eq \
'ARRAY') {
- \
unless(grep(/^\Q$what\E$/,@{$bymap{$map}{$rev}{$scope}{$which}})) {
- \
push(@{$bymap{$map}{$rev}{$scope}{$which}},$what);
- }
- } else {
- \
push(@{$bymap{$map}{$rev}{$scope}{$which}},$what);
- }
- }
- } elsif ($key =~ \
/^\Q$start$middle\E(.+)\.\w+\.\Q$item\E$/) {
- $level = 'resource';
- $resource = $1;
- if ($scope eq 'all') {
- if (ref($byresource{$resource}{$rev}{$scope}) \
eq 'ARRAY') {
- \
unless(grep(/^\Q$what\E$/,@{$byresource{$resource}{$rev}{$scope}})) {
- \
push(@{$byresource{$resource}{$rev}{$scope}},$what);
- }
- } else {
- \
push(@{$byresource{$resource}{$rev}{$scope}},$what);
- }
- } else {
- if \
(ref($byresource{$resource}{$rev}{$scope}{$which}) eq 'ARRAY') {
- unless \
(grep(/^\Q$what\E$/,@{$byresource{$resource}{$rev}{$scope}{$which}})) \
{
- \
push(@{$byresource{$resource}{$rev}{$scope}{$which}},$what);
- }
- } else {
- \
push(@{$byresource{$resource}{$rev}{$scope}{$which}},$what);
- }
- }
- }
+ if ($value > $now) {
+ $value = 'future';
+ }
+ }
+ } elsif ($item eq 'printenddate') {
+ if ($value =~ /^\d+$/) {
+ if ($value < $now) {
+ $value = 'past';
+ }
+ }
+ }
+ if \
(grep(/^\Q$value\E$/,@{$Apache::lonrelrequtils::checkparms{$item}})) { + \
my $stdtype = &Apache::lonparmset::standard_parameter_types($item); + \
$found{$item}{'valname'} = &get_param_description($stdtype,$value); + \
$found{$item}{'rev'} = \
$Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value.':'}; + \
} + }
+ }
+ }
+ foreach my $item (keys(%Apache::lonrelrequtils::checkparmsmatch)) {
+ if (ref($Apache::lonrelrequtils::checkparmsmatch{$item}) eq 'ARRAY') \
{ + my $value = $resourcedata->{$key};
+ foreach my $valuematch \
(@{$Apache::lonrelrequtils::checkparmsmatch{$item}}) { + if \
($value =~ /$valuematch/) { + my $stdtype = \
&Apache::lonparmset::standard_parameter_types($item); + \
$found{$item}{'valname'} = &get_param_description($stdtype,$value,1); + \
$found{$item}{'rev'} = + \
$Apache::lonnet::needsrelease{'parameter:'.$item.'::'.$valuematch}; + \
last; + }
+ }
+ }
+ }
+ foreach my $item (keys(%found)) {
+ my $stdname = &Apache::lonparmset::standard_parameter_names($item);
+ my $rev = $found{$item}{'rev'};
+ my $valname = $found{$item}{'valname'};
+ my ($middle,$scope,$which,$level,$map,$resource);
+ my $start = $cid.'.';
+ if ($key =~ \
/^\Q$start\E(\[useropt\:($match_username\:$match_domain)\]\.)/) { + \
$middle = $1; + $which = $2;
+ $scope = 'user';
+ } elsif ($key =~ /^\Q$start\E(\[(\w+)\]\.)/) {
+ $middle = $1;
+ $which = $2;
+ $scope = 'section/group';
+ } else {
+ $scope = 'all';
+ }
+ my $what="$stdname=$valname";
+ if ($key =~ /^\Q$start$middle\E\w+\.\Q$item\E$/) {
+ $level = 'general';
+ if ($scope eq 'all') {
+ if (ref($fromparam{$rev}{$scope}) eq 'ARRAY') {
+ unless(grep(/^\Q$what\E$/,@{$fromparam{$rev}{$scope}})) \
{ + push(@{$fromparam{$rev}{$scope}},$what);
+ }
+ } else {
+ push(@{$fromparam{$rev}{$scope}},$what);
+ }
+ } else {
+ if (ref($fromparam{$rev}{$scope}{$which}) eq 'ARRAY') {
+ unless \
(grep(/^\Q$what\E$/,@{$fromparam{$rev}{$scope}{$which}})) { + \
push(@{$fromparam{$rev}{$scope}{$which}},$what); + }
+ } else {
+ push(@{$fromparam{$rev}{$scope}{$which}},$what);
+ }
+ }
+ $rowspan{$rev} ++;
+ } elsif ($key =~ /^\Q$start$middle\E(.+)___\(all\).\w+\.\Q$item\E$/) \
{ + $level = 'folder';
+ $map = $1;
+ if ($scope eq 'all') {
+ if (ref($bymap{$map}{$rev}{$scope}) eq 'ARRAY') {
+ \
unless(grep(/^\Q$what\E$/,@{$bymap{$map}{$rev}{$scope}})) { + \
push(@{$bymap{$map}{$rev}{$scope}},$what); + }
+ } else {
+ push(@{$bymap{$map}{$rev}{$scope}},$what);
+ }
+ } else {
+ if (ref($bymap{$map}{$rev}{$scope}{$which}) eq 'ARRAY') {
+ \
unless(grep(/^\Q$what\E$/,@{$bymap{$map}{$rev}{$scope}{$which}})) { + \
push(@{$bymap{$map}{$rev}{$scope}{$which}},$what); + }
+ } else {
+ push(@{$bymap{$map}{$rev}{$scope}{$which}},$what);
+ }
+ }
+ } elsif ($key =~ /^\Q$start$middle\E(.+)\.\w+\.\Q$item\E$/) {
+ $level = 'resource';
+ $resource = $1;
+ if ($scope eq 'all') {
+ if (ref($byresource{$resource}{$rev}{$scope}) eq 'ARRAY') {
+ \
unless(grep(/^\Q$what\E$/,@{$byresource{$resource}{$rev}{$scope}})) { + \
push(@{$byresource{$resource}{$rev}{$scope}},$what); + }
+ } else {
+ push(@{$byresource{$resource}{$rev}{$scope}},$what);
+ }
+ } else {
+ if (ref($byresource{$resource}{$rev}{$scope}{$which}) eq \
'ARRAY') { + unless \
(grep(/^\Q$what\E$/,@{$byresource{$resource}{$rev}{$scope}{$which}})) { + \
push(@{$byresource{$resource}{$rev}{$scope}{$which}},$what); + \
} + } else {
+ \
push(@{$byresource{$resource}{$rev}{$scope}{$which}},$what); }
}
}
@@ -2851,18 +2870,52 @@
}
sub get_param_description {
- my ($stdtype,$value) = @_;
- my $name = $value;
- my $paramstrings = &Apache::lonparmset::standard_string_options($stdtype);
- unless (ref($paramstrings) eq 'ARRAY') {
- return $name;
+ my ($stdtype,$value,$regexp) = @_;
+ my ($name,$parammatches,$paramstrings,@possibles);
+ $paramstrings = &Apache::lonparmset::standard_string_options($stdtype);
+ if ($regexp) {
+ $parammatches = &Apache::lonparmset::standard_string_matches($stdtype);
+ if (ref($parammatches) eq 'ARRAY') {
+ @possibles = @{$parammatches};
+ } else {
+ undef($regexp);
+ $name = $value;
+ }
+ }
+ unless ($regexp) {
+ $name = $value;
+ if (ref($paramstrings) eq 'ARRAY') {
+ @possibles = @{$paramstrings};
+ } else {
+ return $name;
+ }
}
- foreach my $possibilities (@{$paramstrings}) {
+ foreach my $possibilities (@possibles) {
next unless (ref($possibilities) eq 'ARRAY');
- my ($thing, $description) = @{ $possibilities };
- if ($thing eq $value) {
- $name = $description;
- last;
+ my $gotregexmatch = '';
+ if ($regexp) {
+ last if ($gotregexmatch);
+ my ($item,$pattern) = @{ $possibilities };
+ if ($value =~ /$pattern/) {
+ if (ref($paramstrings) eq 'ARRAY') {
+ foreach my $possibles (@{$paramstrings}) {
+ next unless (ref($possibles) eq 'ARRAY');
+ my ($thing,$description) = @{$possibles};
+ if ($thing eq $item) {
+ $name = $description;
+ $gotregexmatch = 1;
+ last;
+ }
+ }
+ last if ($gotregexmatch);
+ }
+ }
+ } else {
+ my ($thing,$description) = @{ $possibilities };
+ if ($thing eq $value) {
+ $name = $description;
+ last;
+ }
}
}
return $name;
Index: loncom/interface/lonrelrequtils.pm
diff -u loncom/interface/lonrelrequtils.pm:1.2 loncom/interface/lonrelrequtils.pm:1.3
--- loncom/interface/lonrelrequtils.pm:1.2 Fri Jun 13 01:48:26 2014
+++ loncom/interface/lonrelrequtils.pm Tue Apr 28 13:20:41 2015
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# The LearningOnline Network
#
-# $Id: lonrelrequtils.pm,v 1.2 2014/06/13 01:48:26 raeburn Exp $
+# $Id: lonrelrequtils.pm,v 1.3 2015/04/28 13:20:41 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -84,7 +84,7 @@
Returns major version and minor version requirements for a course,
based on parameters in use in the course. (Parameters which have
-version requirements are listed in /home/httpd/lonTabs/releaseslist.xml
+version requirements are listed in /home/httpd/lonTabs/releaseslist.xml).
Inputs: 2
@@ -265,20 +265,31 @@
sub init_global_hashes {
%Apache::lonrelrequtils::checkparms = ();
+ %Apache::lonrelrequtils::checkparmsmatch = ();
%Apache::lonrelrequtils::checkresponsetypes = ();
%Apache::lonrelrequtils::checkcrstypes = ();
%Apache::lonrelrequtils::anonsurvey = ();
%Apache::lonrelrequtils::randomizetry = ();
foreach my $key (keys(%Apache::lonnet::needsrelease)) {
- my ($item,$name,$value) = split(/:/,$key);
+ my ($item,$name,$value,$valuematch) = split(/:/,$key);
if ($item eq 'parameter') {
- if (ref($Apache::lonrelrequtils::checkparms{$name}) eq 'ARRAY') {
- unless(grep(/^\Q$name\E$/,@{$Apache::lonrelrequtils::checkparms{$name}})) \
{ + if ($value ne '') {
+ if (ref($Apache::lonrelrequtils::checkparms{$name}) eq 'ARRAY') {
+ \
unless(grep(/^\Q$name\E$/,@{$Apache::lonrelrequtils::checkparms{$name}})) { + \
push(@{$Apache::lonrelrequtils::checkparms{$name}},$value); + }
+ } else {
push(@{$Apache::lonrelrequtils::checkparms{$name}},$value);
}
- } else {
- push(@{$Apache::lonrelrequtils::checkparms{$name}},$value);
+ } elsif ($valuematch ne '') {
+ if (ref($Apache::lonrelrequtils::checkparmsmatch{$name}) eq 'ARRAY') \
{ + \
unless(grep(/^\Q$name\E$/,@{$Apache::lonrelrequtils::checkparmsmatch{$name}})) { + \
push(@{$Apache::lonrelrequtils::checkparmsmatch{$name}},$valuematch); + \
} + } else {
+ \
push(@{$Apache::lonrelrequtils::checkparmsmatch{$name}},$valuematch); + \
} }
} elsif ($item eq 'resourcetag') {
if ($name eq 'responsetype') {
@@ -350,13 +361,38 @@
}
}
if \
(grep(/^\Q$value\E$/,@{$Apache::lonrelrequtils::checkparms{$item}})) \
{
- my ($major,$minor) = \
split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value}); + \
my ($major,$minor) = + \
split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value.':'}); \
($reqdmajor,$reqdminor) =
\
&update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); }
}
}
}
+ foreach my $item (keys(%Apache::lonrelrequtils::checkparmsmatch)) {
+ if ($key =~ /(\Q$item\E)$/) {
+ if (ref($Apache::lonrelrequtils::checkparms{$item}) eq 'ARRAY') \
{ + my $value = $resourcedata->{$key};
+ foreach my $entry \
(@{$Apache::lonrelrequtils::checkparms{$item}}) { + my \
$regexp; + if (($item eq 'lenient') && ($entry eq \
'weighted')) { + $regexp = \
'^[\-\.\d]+,[\-\.\d]+,[\-\.\d]+,[\-\.\d]+$'; + } \
elsif (($item eq 'acc') && ($entry eq '_denyfrom_')) { + \
$regexp = '\!'; + }
+ if ($regexp ne '') {
+ if ($value =~ /$regexp/) {
+ my ($major,$minor) =
+ \
split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.'::'.$entry}); + \
($reqdmajor,$reqdminor) = + \
&update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor); + \
last; + }
+ }
+ }
+ }
+ }
+ }
}
}
return ($reqdmajor,$reqdminor);
Index: loncom/misc/releaseslist.xml
diff -u loncom/misc/releaseslist.xml:1.10 loncom/misc/releaseslist.xml:1.11
--- loncom/misc/releaseslist.xml:1.10 Fri Jun 13 01:48:31 2014
+++ loncom/misc/releaseslist.xml Tue Apr 28 13:20:48 2015
@@ -9,12 +9,14 @@
<parameter name="type" value="practice">2.2</parameter>
<parameter name="lenient" value="yes">2.11</parameter>
<parameter name="lenient" value="no">2.11</parameter>
+<parameter name="lenient" valuematch="weighted">2.12</parameter>
<parameter name="retrypartial" value="yes">2.11</parameter>
<parameter name="discussvote" value="yes">2.11</parameter>
<parameter name="discussvote" value="notended">2.11</parameter>
<parameter name="examcode" value="valid">2.11</parameter>
<parameter name="printstartdate" value="future">2.11</parameter>
<parameter name="printenddate" value="past">2.11</parameter>
+<parameter name="acc" valuematch="_denyfrom_">2.12</parameter>
<resourcetag name="responsetype" value="custom">2.1</resourcetag>
<resourcetag name="responsetype" value="math">2.2</resourcetag>
<resourcetag name="responsetype" value="functionplot">2.10</resourcetag>
_______________________________________________
LON-CAPA-cvs mailing list
LON-CAPA-cvs@mail.lon-capa.org
http://mail.lon-capa.org/mailman/listinfo/lon-capa-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic