[LON-CAPA-cvs] cvs: rat / lonpage.pm
raeburn
raeburn at source.lon-capa.org
Sun May 29 23:02:38 EDT 2016
raeburn Mon May 30 03:02:38 2016 EDT
Modified files:
/rat lonpage.pm
Log:
- Bug 6763. "Done" button.
- "Done" button supported in composite page (if all items with time left
in the page have the same amount remaining).
-------------- next part --------------
Index: rat/lonpage.pm
diff -u rat/lonpage.pm:1.113 rat/lonpage.pm:1.114
--- rat/lonpage.pm:1.113 Tue Sep 29 06:27:49 2015
+++ rat/lonpage.pm Mon May 30 03:02:37 2016
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Page Handler
#
-# $Id: lonpage.pm,v 1.113 2015/09/29 06:27:49 musolffc Exp $
+# $Id: lonpage.pm,v 1.114 2016/05/30 03:02:37 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -192,8 +192,11 @@
# ------------------------------------------------------------- Countdown Timer
my $now = time;
my ($pagefirstaccess,%hastimeleft,%countdowndisp,%donebutton,
- $donetime,$symbtosetdone);
+ %donebtnextra,%buttonbytime,$donetime,$symbtosetdone);
my ($pagesymb,$courseid,$domain,$name)=&Apache::lonnet::whichuser();
+ unless ($pagesymb) {
+ $pagesymb=&Apache::lonnet::symbread($requrl);
+ }
if ($pagesymb && ($courseid ne '') && ($domain ne '') && ($name ne '')) {
my %times=&Apache::lonnet::get('firstaccesstimes',
[$courseid."\0".$pagesymb],
@@ -233,9 +236,12 @@
if ($src =~ /$LONCAPA::assess_re/) {
my @interval=&Apache::lonnet::EXT("resource.0.interval",$symb);
if (@interval > 1) {
- if ($interval[1] eq 'map') {
- if ($pagefirstaccess + $interval[0] > $now) {
- $symbtosetdone = $symb;
+ if (($interval[1] eq 'map') && ($pagefirstaccess)) {
+ my ($timelimit) = ($interval[0] =~ /^(\d+)/);
+ if ($timelimit) {
+ if ($pagefirstaccess + $timelimit > $now) {
+ $symbtosetdone = $symb;
+ }
}
}
}
@@ -473,11 +479,12 @@
$type = 'Task';
}
my ($status,$accessmsg,$slot_name,$slot) =
- &Apache::lonhomework::check_slot_access('0',$type,$symb);
+ &Apache::lonhomework::check_slot_access('0',$type,$symb,$pagesymb);
undef(%Apache::lonhomework::history);
my $probstatus = &Apache::lonnet::EXT("resource.0.problemstatus",$symb);
if (($status eq 'CAN_ANSWER') || (($status eq 'CANNOT_ANSWER') &&
- (($probstatus eq 'no') || ($probstatus eq 'no_feedback_ever')))) {
+ (($probstatus eq 'no') || ($probstatus eq 'no_feedback_ever'))) ||
+ (($status eq 'NOT_YET_VIEWED') && ($posthash{'markaccess'} eq 'yes'))) {
my ($slothastime,$timerhastime);
if ($slot_name ne '') {
if (ref($slot) eq 'HASH') {
@@ -490,9 +497,31 @@
my $duedate = &Apache::lonnet::EXT("resource.0.duedate",$symb);
my @interval=&Apache::lonnet::EXT("resource.0.interval",$symb);
if (@interval > 1) {
- my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb);
+ my $first_access;
if ($first_access > 0) {
- my $timeremains = $first_access+$interval[0] - $now;
+ if ($interval[1] eq 'map') {
+ my $ignorecache;
+ if ($env{'form.'.$prefix.'markaccess'} eq 'yes') {
+ $ignorecache = 1;
+ }
+ $first_access=&Apache::lonnet::get_first_access($interval[1],undef,$pagesymb,$ignorecache);
+ if (($first_access) && (!$pagefirstaccess)) {
+ $pagefirstaccess = $first_access;
+ }
+ } else {
+ $first_access=&Apache::lonnet::get_first_access($interval[1],$symb);
+ }
+ if ($first_access > 0) {
+ my ($timelimit) = ($interval[0] =~ /^(\d+)/);
+ if ($timelimit) {
+ my $timeremains = $timelimit + $first_access - $now;
+ if ($timeremains > 0) {
+ $timerhastime = $timeremains;
+ }
+ }
+ }
+ my ($timelimit) = ($interval[0] =~ /^(\d+)/);
+ my $timeremains = $first_access+$timelimit - $now;
if ($timeremains > 0) {
$timerhastime = $timeremains;
}
@@ -507,7 +536,26 @@
if ((@interval > 1) && ($timerhastime)) {
$hastimeleft{$symb} = $timerhastime;
if ($pagefirstaccess) {
- $donebutton{$symb} = $interval[1];
+ my ($timelimit,$usesdone,$donebuttontext,$proctor,$secret);
+ ($timelimit,my $donesuffix) = split(/_/,$interval[0],2);
+ if ($donesuffix =~ /^done\:([^\:]+)\:(.*)$/) {
+ $usesdone = 'done';
+ $donebuttontext = $1;
+ (undef,$proctor,$secret) = split(/_/,$2);
+ } elsif ($donesuffix =~ /^done(|_.+)$/) {
+ $donebuttontext = &mt('Done');
+ ($usesdone,$proctor,$secret) = split(/_/,$donesuffix);
+ }
+ if ($usesdone eq 'done') {
+ $donebutton{$symb} = $timelimit;
+ push(@{$buttonbytime{$timelimit}},$symb);
+ $donebtnextra{$symb} = {
+ text => $donebuttontext,
+ proctor => $proctor,
+ secret => $secret,
+ type => $interval[1],
+ };
+ }
}
} else {
$hastimeleft{$symb} = $slothastime;
@@ -517,7 +565,7 @@
$countdowndisp{$symb} = 'none';
}
unless ($donebutton{$symb}) {
- $donebutton{$symb} = 0;
+ $donebutton{$symb} = 0;
}
}
}
@@ -598,8 +646,9 @@
$uniquetimes{$item} = 1;
}
}
- if (keys(%uniquetimes) == 1) {
- my (%uniquedisplays,%uniquedones,$currdisp,$donebuttontime);
+ if (scalar(keys(%uniquetimes)) == 1) {
+ my (%uniquedisplays,%uniquedones,$currdisp,$donebuttontime,
+ $donebuttonextras);
if (keys(%countdowndisp)) {
foreach my $item (values(%countdowndisp)) {
if (exists($uniquedisplays{$item})) {
@@ -625,10 +674,13 @@
if (scalar(@donebuttons) == 1) {
if ($donebuttons[0]) {
$donebuttontime = $donebuttons[0];
+ if (ref($buttonbytime{$donebuttontime}) eq 'ARRAY') {
+ $donebuttonextras = $donebtnextra{$buttonbytime{$donebuttontime}->[0]};
+ }
}
}
}
- &add_countdown_timer($currdisp,$donebuttontime);
+ &add_countdown_timer($currdisp,$donebuttontime,$donebuttonextras);
}
}
# ------------------------------------------------------------------ Start body
@@ -902,7 +954,7 @@
}
sub add_countdown_timer {
- my ($currdisp,$donebuttontime) = @_;
+ my ($currdisp,$donebuttontime,$donebuttonextras) = @_;
my ($collapse,$expand,$alttxt,$title,$donebutton);
if ($currdisp eq 'inline') {
$collapse = '► ';
@@ -910,7 +962,16 @@
$expand = '◄ ';
}
if ($donebuttontime) {
- $donebutton = &Apache::lonmenu::done_button_js($donebuttontime);
+ my ($type,$proctor,$donebuttontext);
+ if (ref($donebuttonextras) eq 'HASH') {
+ $proctor = $donebuttonextras->{'proctor'};
+ $donebuttontext = $donebuttonextras->{'text'};
+ $type = $donebuttonextras->{'type'};
+ } else {
+ $donebuttontext = &mt('Done');
+ }
+ $donebutton =
+ &Apache::lonmenu::done_button_js($type,'','',$proctor,$donebuttontext);
}
unless ($env{'environment.icons'} eq 'iconsonly') {
$alttxt = &mt('Timer');
More information about the LON-CAPA-cvs
mailing list