[LON-CAPA-cvs] cvs: rat / lonpage.pm

raeburn raeburn at source.lon-capa.org
Fri Jul 17 15:48:52 EDT 2015


raeburn		Fri Jul 17 19:48:52 2015 EDT

  Modified files:              
    /rat	lonpage.pm 
  Log:
  - Include "done" button if composite page includes countdown
    timer, and interval parameter is set for resource(s) at map level.
  
  
-------------- next part --------------
Index: rat/lonpage.pm
diff -u rat/lonpage.pm:1.111 rat/lonpage.pm:1.112
--- rat/lonpage.pm:1.111	Fri Jul 17 19:11:03 2015
+++ rat/lonpage.pm	Fri Jul 17 19:48:51 2015
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Page Handler
 #
-# $Id: lonpage.pm,v 1.111 2015/07/17 19:11:03 raeburn Exp $
+# $Id: lonpage.pm,v 1.112 2015/07/17 19:48:51 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -41,6 +41,7 @@
 use Apache::lonlocal;
 use Apache::lonmenu;
 use Apache::lonhomework;
+use Apache::lonparmset;
 use HTML::TokeParser;
 use GDBM_File;
 use Apache::lonsequence;
@@ -190,7 +191,8 @@
               if (($firstres) && ($lastres)) {
 # ------------------------------------------------------------- Countdown Timer
                   my $now = time;
-                  my ($pagefirstaccess,%hastimeleft,%countdowndisp);
+                  my ($pagefirstaccess,%hastimeleft,%countdowndisp,%donebutton,
+                      $donetime,$symbtosetdone);
                   my ($pagesymb,$courseid,$domain,$name)=&Apache::lonnet::whichuser();
                   if (($pagesymb && ($courseid ne '') && ($domain ne '') && ($name ne '')) {
                       my %times=&Apache::lonnet::get('firstaccesstimes',
@@ -198,8 +200,12 @@
                                                      $domain,$name);
                       if ($times{$courseid."\0".$pagesymb} =~ /^\d+$/) {
                           $pagefirstaccess = $times{$courseid."\0".$pagesymb};
+                          if ($pagefirstaccess && $env{'form.LC_interval_done'} eq 'true') {
+                              $donetime = $now - $pagefirstaccess;
+                          }
                       }
                   }
+
 # ----------------------------------------------------------------- Render page
 
                   @rows=();
@@ -217,6 +223,24 @@
 			    my ($mapid,$resid)=split(/\./,$rid);
 			    $symbhash{$hash{'src_'.$rid}}=
 				[$hash{'src_'.$rid},$resid];
+                            if (($donetime) && ($symbtosetdone eq '')) {
+                                my $src = $hash{'src_'.$rid};
+                                if ($hash{'encrypted_'.$rid}) {
+                                    $src=&Apache::lonenc::encrypted($src);
+                                }
+                                my ($mapid,$resid)=split(/\./,$rid);
+                                my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$src);
+                                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;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
 		        }
 		     }
 		  }
@@ -251,6 +275,16 @@
                   my $xmlheader='';
                   my $xmlbody='';
 
+# ---------------------------------------------------------- Handle Done button
+
+                  # Set the event timer to zero if the "done button" was clicked.
+                  if ($donetime && $symbtosetdone) {
+                      &Apache::lonparmset::storeparm_by_symb_inner($symbtosetdone,'0_interval',
+                                                                   2,$donetime,'date_interval',
+                                                                   $name,$domain);
+                      undef($env{'form.LC_interval_done'});
+                  }
+
 # --------------------------------------------- Get SSI output, post parameters
 
                   for ($i=0;$i<=$#rows;$i++) {
@@ -472,6 +506,9 @@
                                                       $countdowndisp{$symb} = 'inline';
                                                       if ((@interval > 1) && ($timerhastime)) {
                                                           $hastimeleft{$symb} = $timerhastime;
+                                                          if ($pagefirstaccess) {
+                                                              $donebutton{$symb} = $interval[1];
+                                                          }
                                                       } else {
                                                           $hastimeleft{$symb} = $slothastime;
                                                       }
@@ -479,6 +516,9 @@
                                                       $hastimeleft{$symb} = $duedate - $now;
                                                       $countdowndisp{$symb} = 'none';
                                                   }
+                                                  unless ($donebutton{$symb}) {
+                                                     $donebutton{$symb} = 0;
+                                                  }
                                               }
                                           }
                                       }
@@ -559,7 +599,7 @@
                                   }
                               }
                               if (keys(%uniquetimes) == 1) {
-                                  my (%uniquedisplays,%uniquedones,$currdisp);
+                                  my (%uniquedisplays,%uniquedones,$currdisp,$donebuttontime);
                                   if (keys(%countdowndisp)) {
                                       foreach my $item (values(%countdowndisp)) {
                                           if (exists($uniquedisplays{$item})) {
@@ -573,7 +613,22 @@
                                           $currdisp = $countdowndisplay[0];
                                       }
                                   }
-                                  &add_countdown_timer($currdisp);
+                                  if (keys(%donebutton)) {
+                                      foreach my $item (values(%donebutton)) {
+                                          if (exists($uniquedones{$item})) {
+                                              $uniquedones{$item} ++;
+                                          } else {
+                                              $uniquedones{$item} = 1;
+                                          }
+                                      }
+                                      my @donebuttons = sort { $ <=> $b } (keys(%uniquedones));
+                                      if (scalar(@donebuttons) == 1) {
+                                          if ($donebuttons[0]) {
+                                              $donebuttontime = $donebuttons[0];
+                                          }
+                                      }
+                                  }
+                                  &add_countdown_timer($currdisp,$donebuttontime);
                               }
                           }
 # ------------------------------------------------------------------ Start body
@@ -847,19 +902,23 @@
 }
 
 sub add_countdown_timer {
-    my ($currdisp) = @_;
-    my ($collapse,$expand,$alttxt,$title);
+    my ($currdisp,$donebuttontime) = @_;
+    my ($collapse,$expand,$alttxt,$title,$donebutton);
     if ($currdisp eq 'inline') {
         $collapse = '► ';
     } else {
         $expand = '◄ ';
     }
+    if ($donebuttontime) {
+        $donebutton = &Apache::lonmenu::done_button_js($donebuttontime);
+    }
     unless ($env{'environment.icons'} eq 'iconsonly') {
         $alttxt = &mt('Timer');
         $title = $alttxt.' ';
     }
     my $desc = &mt('Countdown to due date/time');
     my $output = <<END;
+$donebutton
 <a href="javascript:toggleCountdown();" class="LC_menubuttons_link">
 <span id="ddcountcollapse" class="LC_menubuttons_inline_text">
 $collapse


More information about the LON-CAPA-cvs mailing list