Diff for /loncom/interface/statistics/lonsubmissiontimeanalysis.pm between versions 1.1 and 1.8

version 1.1, 2003/10/29 15:22:04 version 1.8, 2004/01/08 19:18:50
Line 69  sub render_resource { Line 69  sub render_resource {
   
 sub BuildSubmissionTimePage {  sub BuildSubmissionTimePage {
     my ($r,$c)=@_;      my ($r,$c)=@_;
       #
       my %Saveable_Parameters = ('Status' => 'scalar',
                                  'Section' => 'array');
       &Apache::loncommon::store_course_settings('submissiontime_analysis',
                                                 \%Saveable_Parameters);
       &Apache::loncommon::restore_course_settings('submissiontime_analysis',
                                                   \%Saveable_Parameters);
       #
       &Apache::lonstatistics::PrepareClasslist();    
       #
     $r->print('<h2>'.&mt('Submission Time Plots').'</h2>');      $r->print('<h2>'.&mt('Submission Time Plots').'</h2>');
     $r->print(&CreateInterface());      $r->print(&CreateInterface());
     #      #
Line 149  sub get_week_start { Line 159  sub get_week_start {
   
 sub analyze_times {  sub analyze_times {
     my ($r,$resource,$students,$part) = @_;      my ($r,$resource,$students,$part) = @_;
       #
       # Convenience arrays
       my @FullWeekDay = (qw/Sunday Monday Tuesday Wednesday Thursday Friday
                          Saturday/);
       my @WeekDay = (qw/SUN MON TUE WED THU FRI SAT SUN/);
       my @Month = (qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/);
       #
     my $html; # holds results of analysis      my $html; # holds results of analysis
     # Get the data      # Get the data
     my $SubData = &Apache::loncoursedata::get_response_time_data      my $SubData = &Apache::loncoursedata::get_response_time_data
Line 163  sub analyze_times { Line 180  sub analyze_times {
         return $html;          return $html;
     }      }
     # Process the data      # Process the data
     #   Get first and last times  
     my $span = &get_time_from_row($SubData->[-1]) -   
                &get_time_from_row($SubData->[0]);  
     if ($span == 0) {  
         $html.= '<h2>There is no submission data for this resource</h2>';  
         return $html;  
     }  
     #      #
     my (undef,undef,undef,$mday,$month,$year,$wday,$yday,$isdst) =       my (undef,undef,undef,$mday,$month,$year,$wday,$yday,$isdst) = 
         localtime(&get_time_from_row($SubData->[0]));          localtime(&get_time_from_row($SubData->[0]));
     my $day_start = &Time::Local::timelocal(0,0,0,$mday,$month,$year);      my $day_start = &Time::Local::timelocal(0,0,0,$mday,$month,$year);
     my $start_day_of_week = $wday;  
     #  
     my @WeekDay = (qw/SUN MON TUE WED THU FRI SAT SUN/);  
     my @Month = (qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/);  
     #  
     my $cumulative_answers = 0;  
     #  
     my @Ydata;  
     my @AnsData;  
     my @Xlabel;  
     #      #
       # Configure the bins used to store the data.
     my $binsize = 3600; # seconds      my $binsize = 3600; # seconds
     my $bins_per_day = 86400/$binsize;      my $bins_per_day = 86400/$binsize;
     my $bincount = 0;      my $bincount = 0;
     my $endtime = $day_start;      my $endtime = $day_start;
     #      #
       # Initialize loop variables
     my $max;      my $max;
       my @Ydata=(0);
       my @AnsData=(0);
       my @Xlabel=($WeekDay[$wday]);
       my $cumulative_answers = 0;
       #
     foreach my $row (@$SubData) {      foreach my $row (@$SubData) {
         my $subtime = &get_time_from_row($row);          my $subtime = &get_time_from_row($row);
         while ($subtime > $endtime && $endtime < time) {          while ($subtime > $endtime && $endtime < time) {
Line 200  sub analyze_times { Line 207  sub analyze_times {
             $AnsData[$bincount]=$AnsData[$bincount-1];              $AnsData[$bincount]=$AnsData[$bincount-1];
             $endtime += $binsize;              $endtime += $binsize;
             if ($bincount % (86400/$binsize) == 0) {              if ($bincount % (86400/$binsize) == 0) {
                 $Xlabel[$bincount] = $WeekDay[$wday++];                  $wday++;
                 $wday %= 7;                  $wday %= 7;
                   $Xlabel[$bincount] = $WeekDay[$wday];
             } else {              } else {
                 $Xlabel[$bincount] = '';                  $Xlabel[$bincount] = '';
             }              }
Line 226  sub analyze_times { Line 234  sub analyze_times {
         $AnsData[$bincount]=$AnsData[$bincount-1];          $AnsData[$bincount]=$AnsData[$bincount-1];
         $endtime += $binsize;          $endtime += $binsize;
         if ($bincount % (86400/$binsize) == 0) {          if ($bincount % (86400/$binsize) == 0) {
               $wday ++;
               $wday %= 7;
             $Xlabel[$bincount] = $WeekDay[$wday];              $Xlabel[$bincount] = $WeekDay[$wday];
         } else {          } else {
             $Xlabel[$bincount] = '';              $Xlabel[$bincount] = '';
         }          }
     }      }
       my $numstudents = scalar(@$students);
       for (my $i=0;$i<=$#AnsData;$i++) {
           $AnsData[$i] = int(100*($AnsData[$i]/$numstudents));
       }
     my $title = 'Number of Submissions and Number Correct';      my $title = 'Number of Submissions and Number Correct';
     my $xlabel;      my $xlabel;
     (undef,undef,undef,$mday,$month,$year) = localtime($day_start);      (undef,undef,undef,$mday,$month,$year,$wday) = localtime($day_start);
     $xlabel .= 'Sunday '.join(' ',($Month[$month],$mday,1900+$year)).' - ';      $xlabel .= $FullWeekDay[$wday].' '.
     (undef,undef,undef,$mday,$month,$year) = localtime($endtime);          join(' ',($Month[$month],$mday,1900+$year)).' - ';
     $xlabel .= 'Sunday '.join(' ',($Month[$month],$mday,1900+$year));      (undef,undef,undef,$mday,$month,$year,$wday) = localtime($endtime);
       $xlabel .= $FullWeekDay[$wday].' '.
           join(' ',($Month[$month],$mday,1900+$year));
       my $width = 50+2*$bincount;
       if ($width < 250) {
           $width = 250;
       }
     $html .= &Apache::loncommon::DrawXYYGraph($title,      $html .= &Apache::loncommon::DrawXYYGraph($title,
                                               $xlabel,                                                $xlabel,
                                               'Number of Submissions',                                                'Submissions vs Time',
                                               $plotcolors,                                                $plotcolors,
                                               \@Xlabel,                                                \@Xlabel,
                                               \@Ydata,                                                \@Ydata,
                                               0,$max,                                                0,$max,
                                               \@AnsData,                                                \@AnsData,
                                               0,scalar(@$students),                                                0,100,
                                               (xskip => $bins_per_day,                                                (xskip => $bins_per_day,
                                                x_ticks => $bins_per_day,                                                 x_ticks => $bins_per_day,
                                                x_tick_offset => $bins_per_day,                                                 x_tick_offset => $bins_per_day,
                                                width => 50+2*$bincount)                                                 width => $width,
                         y1_label=>'Number of Submissions per hour',
                         y2_label=>'Percent of Students answering Correctly',
                        'data.1.label'=>'Submissions per hour',
                        'data.2.label'=>'Percent correct',
                                                  )
                                               );                                                );
     $html .= '<br />';      $html .= '<br />';
     return $html;      return $html;
Line 259  sub analyze_times { Line 283  sub analyze_times {
 sub successful_submission {  sub successful_submission {
     my ($row) = @_;      my ($row) = @_;
     if (ref($row) eq 'ARRAY') {      if (ref($row) eq 'ARRAY') {
         return $row->[1];          return $row->[&Apache::loncoursedata::RT_awarded()];
     }      }
     return undef;      return undef;
     return 0;      return 0;
Line 268  sub successful_submission { Line 292  sub successful_submission {
 sub get_time_from_row {  sub get_time_from_row {
     my ($row) = @_;      my ($row) = @_;
     if (ref($row) eq 'ARRAY') {      if (ref($row) eq 'ARRAY') {
         return $row->[3];          return $row->[&Apache::loncoursedata::RT_timestamp()];
     }       } 
     return undef;      return undef;
 }  }
Line 276  sub get_time_from_row { Line 300  sub get_time_from_row {
 sub get_tries_from_row {  sub get_tries_from_row {
     my ($row) = @_;      my ($row) = @_;
     if (ref($row) eq 'ARRAY') {      if (ref($row) eq 'ARRAY') {
         return $row->[2];          return $row->[&Apache::loncoursedata::RT_tries()];
     }      }
     return undef;      return undef;
 }  }
Line 352  sub ProblemSelector { Line 376  sub ProblemSelector {
                 if ($ENV{'form.problemchoice'} eq $value) {                  if ($ENV{'form.problemchoice'} eq $value) {
                     $checked = 'checked ';                      $checked = 'checked ';
                 }                  }
                   my $title = $res->{'title'};
                   if (! defined($title) || $title eq '') {
                       ($title) = ($res->{'src'} =~ m:/([^/]*)$:);
                   }
   #                &Apache::lonnet::logthis('title = :'.$title.':');
                 $seq_str .= '<tr><td>'.                  $seq_str .= '<tr><td>'.
   '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.    '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.
   '</td><td>'.    '</td><td>'.
   '<a href="'.$res->{'src'}.'">'.$res->{'title'}.'</a> ';    '<a href="'.$res->{'src'}.'">'.$title.'</a> ';
             } else {              } else {
                   my $title = $res->{'title'};
                   if (! defined($title) || $title eq '') {
                       ($title) = ($res->{'src'} =~ m:/([^/]*)$:);
                   }
                 $seq_str .= '<tr><td>'.                  $seq_str .= '<tr><td>'.
                     '&nbsp;'.'</td><td>'.                      '&nbsp;'.'</td><td>'.
                     '<a href="'.$res->{'src'}.'">'.$res->{'title'}.'</a>'.                      '<a href="'.$res->{'src'}.'">'.$title.'</a>'.
                     "</td></tr>\n";                      "</td></tr>\n";
                 foreach my $part (@{$res->{'parts'}}) {                  foreach my $part (@{$res->{'parts'}}) {
                     my $value = &Apache::lonnet::escape                      my $value = &Apache::lonnet::escape

Removed from v.1.1  
changed lines
  Added in v.1.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>