[LON-CAPA-cvs] cvs: loncom /homework bridgetask.pm /interface lonstatistics.pm /interface/statistics longradinganalysis.pm lonstathelpers.pm

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 14 Feb 2006 16:05:47 -0000


This is a MIME encoded message

--albertel1139933147
Content-Type: text/plain

albertel		Tue Feb 14 11:05:47 2006 EDT

  Added files:                 
    /loncom/interface/statistics	longradinganalysis.pm 

  Modified files:              
    /loncom/homework	bridgetask.pm 
    /loncom/interface	lonstatistics.pm 
    /loncom/interface/statistics	lonstathelpers.pm 
  Log:
  - adding a mode to do analysis of grading events for bridge tasks
  
  
--albertel1139933147
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20060214110547.txt"

Index: loncom/homework/bridgetask.pm
diff -u loncom/homework/bridgetask.pm:1.107 loncom/homework/bridgetask.pm:1.108
--- loncom/homework/bridgetask.pm:1.107	Fri Feb 10 13:37:00 2006
+++ loncom/homework/bridgetask.pm	Tue Feb 14 11:05:31 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # definition of tags that give a structure to a document
 #
-# $Id: bridgetask.pm,v 1.107 2006/02/10 18:37:00 albertel Exp $
+# $Id: bridgetask.pm,v 1.108 2006/02/14 16:05:31 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -426,12 +426,21 @@
 	    $body_tag_start.=$uri.'">'.&add_grading_button()."</form>";
 	    my $symb=&Apache::lonnet::symbread();
 	    if (&Apache::lonnet::allowed('mgq',$env{'request.course.id'})) {
-		$body_tag_start.='<form method="POST" action="/adm/slotrequest">'.
+		$body_tag_start.='<form method="POST" name="slotrequest" action="/adm/slotrequest">'.
 		    '<input type="hidden" name="symb" value="'.$symb.'" />'.
 		    '<input type="hidden" name="command" value="showslots" />'.
 		    '<input type="submit" name="requestattempt" value="'.
 		    &mt('Show Slot list').'" />'.
 		    '</form>';
+		my $target_id = 
+		    &Apache::lonstathelpers::make_target_id({symb => $symb,
+							     part => '0'});
+		$body_tag_start.='<form method="POST" name="gradingstatus" action="/adm/statistics">'.
+		    '<input type="hidden" name="problemchoice" value="'.$target_id.'" />'.
+		    '<input type="hidden" name="reportSelected" value="grading_analysis" />'.
+		    '<input type="submit" name="grading" value="'.
+		    &mt('Show Grading Status').'" />'.
+		    '</form>';
 	    }
 	}
     }
Index: loncom/interface/lonstatistics.pm
diff -u loncom/interface/lonstatistics.pm:1.127 loncom/interface/lonstatistics.pm:1.128
--- loncom/interface/lonstatistics.pm:1.127	Tue Dec 13 11:32:22 2005
+++ loncom/interface/lonstatistics.pm	Tue Feb 14 11:05:37 2006
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstatistics.pm,v 1.127 2005/12/13 16:32:22 albertel Exp $
+# $Id: lonstatistics.pm,v 1.128 2006/02/14 16:05:37 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -73,6 +73,7 @@
 use Apache::lonpercentage;
 use Apache::lonstudentsubmissions();
 use Apache::lonsurveyreports();
+use Apache::longradinganalysis();
 
 #######################################################
 #######################################################
@@ -914,6 +915,11 @@
                      short_description => 
     &mt('Display a histogram of student performance in the course.'),
                  },
+#                   { internal_name => 'grading_analysis',
+#                     name => &mt('Detailed Grading Analysis'),
+#                     short_description => 
+#    &mt('Display statistics about who graded who.'),
+#                 },
 #                   { internal_name => 'student_assessment',
 #                     name => &mt('Problem Status Chart'),
 #                     short_description => 
@@ -1078,7 +1084,12 @@
                 ({href=>'/adm/statistics?reportselected=student_assessment',
                   text=>'Chart'});
             &Apache::lonstudentassessment::BuildStudentAssessmentPage($r,$c);
-        }
+        } elsif($GoToPage eq 'grading_analysis') {
+            &Apache::lonhtmlcommon::add_breadcrumb
+                ({href=>'/adm/statistics?reportselected=grading_anaylsis',
+                  text=>'Grading Analysis'});
+            &Apache::longradinganalysis::build_grading_analysis_page($r,$c);
+	}
         #
         $r->print("</form>\n");
     }
Index: loncom/interface/statistics/lonstathelpers.pm
diff -u loncom/interface/statistics/lonstathelpers.pm:1.51 loncom/interface/statistics/lonstathelpers.pm:1.52
--- loncom/interface/statistics/lonstathelpers.pm:1.51	Fri Nov 11 22:58:55 2005
+++ loncom/interface/statistics/lonstathelpers.pm	Tue Feb 14 11:05:46 2006
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstathelpers.pm,v 1.51 2005/11/12 03:58:55 albertel Exp $
+# $Id: lonstathelpers.pm,v 1.52 2006/02/14 16:05:46 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -431,7 +431,7 @@
 Inputs: $target (see &Apache::lonstathelpers::get_target_from_id())
   $AcceptableResponseTypes, regular expression matching acceptable
                             response types,
-  $granularity, either 'part', 'response', or 'part_survey'
+  $granularity, either 'part', 'response', 'part_survey', or 'part_task'
 
 Returns: three hash references, $prev, $curr, $next, which refer to the
 preceeding, current, or following problem parts or responses, depending
@@ -467,6 +467,12 @@
                             part     => $part,
                             resource => $res,
                         } );
+		} elsif ($res->is_task($part) && ($granularity eq 'part_task')){
+                    push (@Resource,
+                          { symb     => $res->symb,
+                            part     => $part,
+                            resource => $res,
+                        } );
                 } elsif ($granularity eq 'part') {
                     push (@Resource,
                           { symb     => $res->symb,
@@ -499,7 +505,7 @@
     my $curr_idx;
     for ($curr_idx=0;$curr_idx<$#Resource;$curr_idx++) {
         my $curr_item = $Resource[$curr_idx];
-        if ($granularity eq 'part' || $granularity eq 'part_survey') {
+        if ($granularity =~ /^(part|part_survey|part_task)$/) {
             if ($curr_item->{'symb'} eq $target->{'symb'} &&
                 $curr_item->{'part'} eq $target->{'part'}) {
                 last;
@@ -514,7 +520,7 @@
         }
     }
     my $curr_item = $Resource[$curr_idx];
-    if ($granularity eq 'part' || $granularity eq 'part_survey') {
+    if ($granularity =~ /^(part|part_survey|part_task)$/) {
         if ($curr_item->{'symb'}     ne $target->{'symb'} ||
             $curr_item->{'part'}     ne $target->{'part'}) {
             # bogus symb - return nothing

Index: loncom/interface/statistics/longradinganalysis.pm
+++ loncom/interface/statistics/longradinganalysis.pm
# The LearningOnline Network with CAPA
#
# $Id: longradinganalysis.pm,v 1.1 2006/02/14 16:05:46 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#
package Apache::longradinganalysis;

use strict;
use Apache::lonnet;
use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::loncoursedata();
use Apache::lonstatistics;
use Apache::lonlocal;
use Apache::lonstathelpers();
use Apache::lonstudentsubmissions();
use HTML::Entities();
use Time::Local();
use Data::Dumper;

my @submit_buttons = ({ name => 'PrevProblemAnalysis',
			text => 'Previous Problem' },
		      { name => 'ProblemAnalysis',
			text => 'Analyze Problem Again' },
		      { name => 'NextProblemAnalysis',
			text => 'Next Problem' },
		      { name => 'break'},
		      { name => 'SelectAnother',
			text => 'Choose a different Problem' });

sub build_grading_analysis_page {
    my ($r,$c)=@_;
    #
    my %saveable_parameters = ('Status' => 'scalar',
                               'Section' => 'array',
                               );
    &Apache::loncommon::store_course_settings('grading_analysis',
                                              \%saveable_parameters);
    &Apache::loncommon::restore_course_settings('grading_analysis',
                                                \%saveable_parameters);
    #
    &Apache::lonstatistics::PrepareClasslist();
    #
    $r->print(&create_interface());
    #
    my @students = @Apache::lonstatistics::Students;
    #
    if (@students < 1 && exists($env{'form.firstrun'})) {
        $r->print('<h2>There are no students in the sections selected</h2>');
    }
    #
    #my @cache_button_HTML = 
    #    &Apache::lonstathelpers::manage_caches($r,'Statistics','stats_status');
    $r->rflush();
    #
    if (exists($env{'form.problemchoice'}) && 
        ! exists($env{'form.SelectAnother'})) {
        foreach my $button (@submit_buttons) {
            if ($button->{'name'} eq 'break') {
                $r->print("<br />\n");
            } else {
                $r->print('<input type="submit" name="'.$button->{'name'}.'" '.
                          'value="'.&mt($button->{'text'}).'" />');
                $r->print('&nbsp;'x5);
            }
        }
#        foreach my $html (@cache_button_HTML) {
#            $r->print($html.('&nbsp;'x5));
#        }
        #
        #$r->print(&Apache::lonstathelpers::submission_report_form('grading_analysis'));
        #
        $r->print('<hr />');
        $r->rflush();
        #
        # Determine which problem we are to analyze
        my $current_problem = &Apache::lonstathelpers::get_target_from_id
            ($env{'form.problemchoice'});
        #
        my ($navmap,$prev,$curr,$next) = 
            &Apache::lonstathelpers::get_prev_curr_next($current_problem,
							undef,
                                                        'part_task',
                                                        );
        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'}.'" />');
        #
	if (! defined($current_problem->{'resource'})) {
            $r->print('resource is undefined');
        } else {
            my $resource = $current_problem->{'resource'};
            $r->print('<h1>'.$resource->compTitle.'</h1>');
            $r->print('<h3>'.$resource->src.'</h3>');
            $r->print('<h4>'.&Apache::lonstatistics::section_and_enrollment_description().'</h4>');
            $r->rflush();
            if ($resource->is_task()) {
		&task_analysis($r,$resource,\@students);
            } else {
                $r->print('<h2>Analysis of '.$resource->src().' is not supported</h2>');
            }
        }
        $r->print('<hr />');
    } else {
        my $submit_button = '<input type="submit" '.
            'name="ProblemAnalysis" value="'.
            &mt('Analyze Problem').'" />';
        $r->print($submit_button);
        $r->print('&nbsp;'x5);
        $r->print('<h3>'.&mt('Please select a problem to analyze').'</h3>');
        #FIXME need a task only selector.
        $r->print(&Apache::lonstathelpers::problem_selector('.',
                                                            $submit_button));
    }
}

sub task_analysis {
    my ($r,$problem,$students) = @_;
    my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
        ($r,'Student Answer Compilation Status',
         'Student Answer Compilation Progress', scalar(@$students),
         'inline',undef,'Statistics','stats_status');
    my %graders;
    foreach my $student (@$students) {
	my $sname = $student->{'username'};
        my $sdom = $student->{'domain'};
	my %data =  &Apache::lonnet::restore($problem->symb(),
					     $env{'request.course.id'},
					     $sdom,$sname);
	foreach my $ver (0..$data{'version'}) {
	    if (exists($data{"$ver:resource.0.regrader"})
		&& $data{"$ver:resource.0.regrader"} =~ /\S/) {
		$graders{$data{"$ver:resource.0.regrader"}}++;
	    }
	}
	&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
                                                 &mt('last student'));

    }
    if ($env{'form.output'} eq 'csv') {
    } elsif ($env{'form.output'} eq 'excel') {
    } else {
	$r->print('<table class="thinborder">');
	foreach my $grader (sort(keys(%graders))) {
	    my ($gname,$gdom) = split('@',$grader,2);
	    my $name = &Apache::loncommon::plainname($gname,$gdom);
	    my $link = &Apache::loncommon::aboutmewrapper($name,$gname,$gdom);
	    $r->print("<tr><td>$link (<tt>$grader</tt>)</td><td>$graders{$grader}</td></tr>");
	}
	$r->print('</table>');
    }
    &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
}

#########################################################
#########################################################
##
##   Generic Interface Routines
##
#########################################################
#########################################################
sub create_interface {
    ##
    ## Build the menu
    my $output_selector = $/.'<select name="output">'.$/;
    foreach ('HTML','Excel','CSV') {
        $output_selector .= '    <option value="'.lc($_).'"';
        if ($env{'form.output'} eq lc($_)) {
            $output_selector .= ' selected ';
        }
        $output_selector .='>'.&mt($_).'</option>'.$/;
    } 
    $output_selector .= '</select>'.$/;

    my $str = '';
    $str .= &Apache::lonhtmlcommon::breadcrumbs
        (undef,'Detailed Grading Statistics');
    $str .= '<table cellspacing="5">'."\n";
    $str .= '<tr>';
    $str .= '<td align="center"><b>'.&mt('Sections').'</b></td>';
    $str .= '<td align="center"><b>'.&mt('Enrollment Status').'</b></td>';
    $str .= '<td>'.&mt('<b>Output as</b> [_1]',$output_selector).'</td>';
    $str .= '</tr>'."\n";
    ##
    ## 
    $str .= '<tr><td align="center">'."\n";
    $str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
    $str .= '</td>';
    #
    $str .= '<td align="center">';
    $str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
    $str .= '</td>';
    #
    $str .= '<td>';
    ##
    $str .= '<nobr><label>'.&mt('Status: [_1]',
                                 '<input type="text" '.
                                 'name="stats_status" size="60" value="" />'
                                 ).
                    '</label></nobr>';
    $str .= '</td>';
    ##
    ##
    $str .= '</tr>'."\n";
    $str .= '</table>'."\n";
    return $str;
}

1;

__END__

--albertel1139933147--