--- loncom/interface/statistics/lonsubmissiontimeanalysis.pm	2004/01/08 19:20:12	1.9
+++ loncom/interface/statistics/lonsubmissiontimeanalysis.pm	2004/01/20 15:51:06	1.11
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonsubmissiontimeanalysis.pm,v 1.9 2004/01/08 19:20:12 matthew Exp $
+# $Id: lonsubmissiontimeanalysis.pm,v 1.11 2004/01/20 15:51:06 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -33,6 +33,7 @@ use Apache::loncommon();
 use Apache::lonhtmlcommon();
 use Apache::loncoursedata();
 use Apache::lonstatistics;
+use Apache::lonstathelpers;
 use Apache::lonlocal;
 use HTML::Entities();
 use Time::Local();
@@ -44,29 +45,16 @@ my $plotcolors = ['#33ff00',
                   ]; 
 
 my @SubmitButtons = (
-                     { name => 'ProblemAnalyis',
+                     { name => 'PrevProblemAnalysis',
+                       text => 'Previous Problem' },
+                     { name => 'ProblemAnalysis',
                        text => 'Analyze Problem Again' },
+                     { name => 'NextProblemAnalysis',
+                       text => 'Next Problem' },
                      { name => 'SelectAnother',
-                       text => 'Choose a different resource' },
+                       text => 'Choose a different Problem' },
                      );
 
-sub render_resource {
-    my ($resource) = @_;
-    ##
-    ## Render the problem
-    my $base;
-    ($base,undef) = ($resource->{'src'} =~ m|(.*/)[^/]*$|);
-    $base = "http://".$ENV{'SERVER_NAME'}.$base;
-    my $rendered_problem = 
-        &Apache::lonnet::ssi_body($resource->{'src'});
-    $rendered_problem =~ s/<\s*form\s*/<nop /g;
-    $rendered_problem =~ s|(<\s*/form\s*>)|<\/nop>|g;
-    return '<table bgcolor="ffffff"><tr><td>'.
-        '<base href="'.$base.'" />'.
-        $rendered_problem.
-        '</td></tr></table>';
-}
-
 sub BuildSubmissionTimePage {
     my ($r,$c)=@_;
     #
@@ -108,32 +96,50 @@ sub BuildSubmissionTimePage {
                   &mt('Graph Problem Submission Times').'" />');
         $r->print('&nbsp;'x5);
         $r->print('<h3>'.&mt('Please select a problem to analyze').'</h3>');
-        $r->print(&ProblemSelector());
+        $r->print(&Apache::lonstathelpers::ProblemSelector('.'));
     } else {
         foreach my $button (@SubmitButtons) {
             $r->print('<input type="submit" name="'.$button->{'name'}.'" '.
                       'value="'.&mt($button->{'text'}).'" />');
             $r->print('&nbsp;'x5);
         }
+        #
+        # Determine which problem we are to analyze
+        my $current_problem = &Apache::lonstathelpers::get_target_from_id
+            ($ENV{'form.problemchoice'});
+        #
+        my ($prev,$curr,$next) = 
+            &Apache::lonstathelpers::get_prev_curr_next($current_problem,
+                                                        '.',
+                                                        'part');
+        if (exists($ENV{'form.PrevProblemAnalysis'}) && defined($prev)) {
+            $current_problem = $prev;
+        } elsif (exists($ENV{'form.NextProblemAnalysis'}) && defined($next)) {
+            $current_problem = $next;
+        } else {
+            $current_problem = $curr;
+        }
+        #
+        # Store the current problem choice and send it out in the form
+        $ENV{'form.problemchoice'} = 
+            &Apache::lonstathelpers::make_target_id($current_problem);
         $r->print('<input type="hidden" name="problemchoice" value="'.
                   $ENV{'form.problemchoice'}.'" />');
         #
         $r->print('<hr />');
-        #
-        my ($symb,$part) = &get_problem_symb(
-                  &Apache::lonnet::unescape($ENV{'form.problemchoice'}));
         $r->rflush();
         #
-        my $resource = &get_resource_from_symb($symb);
+        my $resource = $current_problem->{'resource'};
         if (! defined($resource)) {
             $r->print('resource is undefined');
         } else {
             $r->print('<h1>'.$resource->{'title'}.'</h1>');
             $r->print('<h3>'.$resource->{'src'}.'</h3>');
             $r->rflush();
-            $r->print(&render_resource($resource));
+            $r->print(&Apache::lonstathelpers::render_resource($resource));
             $r->rflush();
-            $r->print(&analyze_times($r,$resource,\@Students,$part));
+            $r->print(&analyze_times($r,$resource,\@Students,
+                                     $current_problem->{'part'}));
         }
         $r->print('<hr />');
     }
@@ -361,86 +367,6 @@ sub CreateInterface {
     return $Str;
 }
 
-sub ProblemSelector {
-    my $Str;
-    $Str = "<table>\n";
-    foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
-        next if ($seq->{'num_assess'}<1);
-        my $seq_str = '';
-        foreach my $res (@{$seq->{'contents'}}) {
-            next if ($res->{'type'} ne 'assessment');
-            if (@{$res->{'parts'}} == 1) {
-                my $value = &Apache::lonnet::escape($res->{'symb'}.':'.
-                                                    $res->{'parts'}->[0]);
-                my $checked;
-                if ($ENV{'form.problemchoice'} eq $value) {
-                    $checked = 'checked ';
-                }
-                my $title = $res->{'title'};
-                if (! defined($title) || $title eq '') {
-                    ($title) = ($res->{'src'} =~ m:/([^/]*)$:);
-                }
-#                &Apache::lonnet::logthis('title = :'.$title.':');
-                $seq_str .= '<tr><td>'.
-  '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.
-  '</td><td>'.
-  '<a href="'.$res->{'src'}.'">'.$title.'</a> ';
-            } else {
-                my $title = $res->{'title'};
-                if (! defined($title) || $title eq '') {
-                    ($title) = ($res->{'src'} =~ m:/([^/]*)$:);
-                }
-                $seq_str .= '<tr><td>'.
-                    '&nbsp;'.'</td><td>'.
-                    '<a href="'.$res->{'src'}.'">'.$title.'</a>'.
-                    "</td></tr>\n";
-                foreach my $part (@{$res->{'parts'}}) {
-                    my $value = &Apache::lonnet::escape
-                                               ($res->{'symb'}.':'.$part);
-                    my $checked;
-                    if ($ENV{'form.problemchoice'} eq $value) {
-                        $checked = 'checked ';
-                    }
-                    $seq_str .= '<tr><td>'.
-  '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.
-  '</td><td>'.('&nbsp;'x5).'part '.$part."</td></tr>\n";
-                }
-            }
-        }
-        if ($seq_str ne '') {
-            $Str .= '<tr><td>&nbsp</td><td><b>'.$seq->{'title'}.'</b></td>'.
-                "</tr>\n".$seq_str;
-        }
-    }
-    $Str .= "</table>\n";
-    return $Str;
-}
-
-#########################################################
-#########################################################
-##
-##      Misc functions (ought to be put in a module)
-##
-#########################################################
-#########################################################
-sub get_problem_symb {
-    my $problemstring = shift();
-    my ($symb,$partid) = ($problemstring=~ /^(.*):([^:]*)$/);
-    return ($symb,$partid);
-}
-
-sub get_resource_from_symb {
-    my ($symb) = @_;
-    foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
-        foreach my $res (@{$seq->{'contents'}}) {
-            if ($res->{'symb'} eq $symb) {
-                return $res;
-            }
-        }
-    }
-    return undef;
-}
-
 1;
 
 __END__