--- loncom/interface/lonparmset.pm 2007/11/02 23:29:49 1.384
+++ loncom/interface/lonparmset.pm 2008/01/22 22:37:18 1.389
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set parameters for assessments
#
-# $Id: lonparmset.pm,v 1.384 2007/11/02 23:29:49 albertel Exp $
+# $Id: lonparmset.pm,v 1.389 2008/01/22 22:37:18 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2503,7 +2503,7 @@ sub storedata {
if ($tuname) {
$tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./;
}
- if ($cmd eq 'set' || $cmd eq 'datepointer') {
+ if ($cmd eq 'set' || $cmd eq 'datepointer' || $cmd eq 'dateinterval') {
my ($data, $typeof, $text);
if ($cmd eq 'set') {
$data=$env{$_};
@@ -2513,6 +2513,10 @@ sub storedata {
$data=&Apache::lonhtmlcommon::get_date_from_form($env{$_});
$typeof=$env{'form.typeof_'.$thiskey};
$text = &mt('Saved modified date for');
+ } elsif ($cmd eq 'dateinterval') {
+ $data=&get_date_interval_from_form($thiskey);
+ $typeof=$env{'form.typeof_'.$thiskey};
+ $text = &mt('Saved modified date for');
}
if (defined($data) and $$olddata{$thiskey} ne $data) {
if ($tuname) {
@@ -2595,8 +2599,8 @@ sub parse_listdata_key {
$realm=~s/\.type//;
}
# split into resource+part and parameter name
- my ($res, $parm) = ($realm=~/^(.*)\.(.*)$/);
- my ($res, $part) = ($res =~/^(.*)\.(.*)$/);
+ my ($res, $parm) = ($realm=~/^(.*)\.(.*)$/);
+ ($res, my $part) = ($res =~/^(.*)\.(.*)$/);
return ($student,$res,$part,$parm);
}
@@ -2727,6 +2731,9 @@ sub listdata {
''.
&date_sanity_info($$resourcedata{$thiskey})
);
+ } elsif ($thistype eq 'date_interval') {
+ $r->print(&date_interval_selector($thiskey,
+ $$resourcedata{$thiskey}));
} elsif ($thistype =~ m/^string/) {
$r->print(&string_selector($thistype,$thiskey,
$$resourcedata{$thiskey}));
@@ -2741,9 +2748,47 @@ sub listdata {
return $foundkeys;
}
+
+sub date_interval_selector {
+ my ($thiskey, $showval) = @_;
+ my $result;
+ foreach my $which (['days', 86400, 31],
+ ['hours', 3600, 23],
+ ['minutes', 60, 59],
+ ['seconds', 1, 59]) {
+ my ($name, $factor, $max) = @{ $which };
+ my $amount = int($showval/$factor);
+ $showval %= $factor;
+ my %select = ((map {$_ => $_} (0..$max)),
+ 'select_form_order' => [0..$max]);
+ $result .= &Apache::loncommon::select_form($amount,$name.'_'.$thiskey,
+ %select);
+ $result .= ' '.&mt($name);
+ }
+ $result .= '';
+ return $result;
+
+}
+
+sub get_date_interval_from_form {
+ my ($key) = @_;
+ my $seconds = 0;
+ foreach my $which (['days', 86400],
+ ['hours', 3600],
+ ['minutes', 60],
+ ['seconds', 1]) {
+ my ($name, $factor) = @{ $which };
+ if (defined($env{'form.'.$name.'_'.$key})) {
+ $seconds += $env{'form.'.$name.'_'.$key} * $factor;
+ }
+ }
+ return $seconds;
+}
+
+
sub default_selector {
my ($thiskey, $showval) = @_;
- return '' ;
+ return '';
}
my %strings =
@@ -2753,6 +2798,7 @@ my %strings =
[ 'no', 'No' ]],
'string_problemstatus'
=> [[ 'yes', 'Yes' ],
+ [ 'answer', 'Yes, and show correct answer if they exceed the maxium number of tries.' ],
[ 'no', 'No, don\'t show correct/incorrect feedback.' ],
[ 'no_feedback_ever', 'No, show no feedback at all.' ]],
);
@@ -2778,6 +2824,33 @@ sub string_selector {
return $result;
}
+#
+# Shift all start and end dates by $shift
+#
+
+sub dateshift {
+ my ($shift)=@_;
+ my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my %data=&Apache::lonnet::dump('resourcedata',$dom,$crs);
+# ugly retro fix for broken version of types
+ foreach my $key (keys %data) {
+ if ($key=~/\wtype$/) {
+ my $newkey=$key;
+ $newkey=~s/type$/\.type/;
+ $data{$newkey}=$data{$key};
+ delete $data{$key};
+ }
+ }
+# go through all parameters and look for dates
+ foreach my $key (keys %data) {
+ if ($data{$key.'.type'}=~/^date_(start|end)$/) {
+ my $newdate=$data{$key}+$shift;
+ &Apache::lonnet::put('resourcedata',{$key => $newdate},$dom,$crs);
+ }
+ }
+}
+
sub newoverview {
my ($r) = @_;