File:  [LON-CAPA] / loncom / interface / statistics / lonproblemanalysis.pm
Revision 1.23: download - view: text, annotated - select for diffs
Mon Sep 29 21:09:27 2003 UTC (20 years, 9 months ago) by matthew
Branches: MAIN
CVS tags: HEAD
Gutted before rewrite.  Committing for coments and safety.  Does nothing
useful except: displays a list of option response problems and lets you
select one.  The selected one is then rendered at the top of the page
(with relative links broken).

    1: # The LearningOnline Network with CAPA
    2: #
    3: # $Id: lonproblemanalysis.pm,v 1.23 2003/09/29 21:09:27 matthew Exp $
    4: #
    5: # Copyright Michigan State University Board of Trustees
    6: #
    7: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
    8: #
    9: # LON-CAPA is free software; you can redistribute it and/or modify
   10: # it under the terms of the GNU General Public License as published by
   11: # the Free Software Foundation; either version 2 of the License, or
   12: # (at your option) any later version.
   13: #
   14: # LON-CAPA is distributed in the hope that it will be useful,
   15: # but WITHOUT ANY WARRANTY; without even the implied warranty of
   16: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   17: # GNU General Public License for more details.
   18: #
   19: # You should have received a copy of the GNU General Public License
   20: # along with LON-CAPA; if not, write to the Free Software
   21: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   22: #
   23: # /home/httpd/html/adm/gpl.txt
   24: #
   25: # http://www.lon-capa.org/
   26: #
   27: # (Navigate problems for statistical reports
   28: # YEAR=2002
   29: # 5/12,7/26,9/7,11/22 Behrouz Minaei
   30: #
   31: ###
   32: 
   33: package Apache::lonproblemanalysis;
   34: 
   35: use strict;
   36: use Apache::lonnet();
   37: use Apache::lonhtmlcommon();
   38: use Apache::loncoursedata();
   39: use Apache::lonstatistics;
   40: use Apache::lonlocal;
   41: 
   42: sub BuildProblemAnalysisPage {
   43:     my ($r,$c)=@_;
   44:     $r->print(&mt('<h2>Option Response Problem Analysis</h2>'));
   45:     if (exists($ENV{'form.problemchoice'})) {
   46:         # This is me getting around my own cleverness:
   47:         &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
   48:                                           undef);
   49:         #
   50:         my ($symb,$id) = &get_problem_symb(
   51:                      &Apache::lonnet::unescape($ENV{'form.problemchoice'})
   52:                                            );
   53:         $r->print('<hr />');
   54:         my $resource = &get_resource_from_symb($symb);
   55:         if (defined($resource)) {
   56:             $r->print('<table bgcolor="ffffff"><tr><td>'.
   57:                       # Oh this is dumb!  Need to rewrite relative links
   58:                       # otherwise images (for example) will not show.
   59:                       &Apache::lonnet::ssi_body($resource->{'src'}).
   60:                       '</td></tr></table>');
   61:         } else {
   62:             $r->print('resource is undefined');
   63:         }
   64:         $r->print('<ol>');
   65:         $r->print("<li />render problem\n");
   66:         $r->print("<li />image tag for plot\n");
   67:         $r->print("<li />plot key\n");
   68:         $r->print('</ol>');
   69:         $r->print("<pre>\nProblem choice = $symb $id\n</pre>\n");
   70:         $r->print('<hr />');
   71:     }
   72:     $r->print('<input type="hidden" name="analysisfirstcall" value="no" />');
   73:     $r->print(&CreateInterface());
   74:     if (! exists($ENV{'form.analysisfirstcall'})) {
   75:         return;
   76:     }
   77:     # Okay, they asked for data, so make sure we get the latest data.
   78:     &Apache::lonnet::logthis('got here for some reason');
   79: #    &Apache::lonstatistics::Gather_Full_Student_Data($r);
   80:     $r->print(&OptionResponseProblemSelector());
   81: }
   82: 
   83: sub get_problem_symb {
   84:     my $problemstring = shift();
   85:     my ($symb,$id) = ($problemstring=~ /^(.*):([^:]*)$/);
   86:     return ($symb,$id);
   87: }
   88: 
   89: sub CreateInterface {
   90:     my $Str = '';
   91:     $Str .= '<table cellspacing="5">'."\n";
   92:     $Str .= '<tr>';
   93:     $Str .= '<td align="center"><b>'.&mt('Sections').'</b></td>';
   94:     $Str .= '<td align="center"><b>'.&mt('Enrollment Status').'</b></td>';
   95:     $Str .= '<td align="center"><b>'.&mt('Sequences and Folders').'</b></td>';
   96:     $Str .= '</tr>'."\n";
   97:     #
   98:     $Str .= '<tr><td align="center">'."\n";
   99:     $Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
  100:     $Str .= '</td><td align="center">';
  101:     $Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
  102:     $Str .= '</td><td align="center">';
  103:     my $only_seq_with_assessments = sub { 
  104:         my $s=shift;
  105:         if ($s->{'num_assess'} < 1) { 
  106:             return 0;
  107:         } else { 
  108:             return 1;
  109:         }
  110:     };
  111:     $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
  112:                                               $only_seq_with_assessments);
  113:     $Str .= '</td></tr>'."\n";
  114:     $Str .= '</table>'."\n";
  115:     $Str .= '<input type="submit" name="ProblemAnalysis" value="'.
  116:         &mt('Analyze Problem').'" />';
  117:     $Str .= '&nbsp;'x5;
  118:     $Str .= '<input type="submit" name="ClearCache" value="'.
  119:         &mt('Clear Caches').'" />';
  120:     $Str .= '&nbsp;'x5;
  121:     return ($Str);
  122: }
  123: 
  124: sub OptionResponseProblemSelector {
  125:     my $Str;
  126:     $Str = "\n<table>\n";
  127:     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
  128:         next if ($seq->{'num_assess'}<1);
  129:         my $seq_str = '';
  130:         foreach my $res (@{$seq->{'contents'}}) {
  131: #            &Apache::lonnet::logthis('checking '.$res->{'title'});
  132: #            next if ($res->{'type'} ne 'assessment');
  133:             foreach my $part (@{$res->{'parts'}}) {
  134:                 my $partdata = $res->{'partdata'}->{$part};
  135:                 if (! exists($partdata->{'option'}) || 
  136:                     $partdata->{'option'} == 0) {
  137:                     next;
  138:                 }
  139:                 for (my $i=0;$i<scalar(@{$partdata->{'ResponseTypes'}});$i++){
  140:                     my $respid = $partdata->{'ResponseIds'}->[$i];
  141:                     my $resptype = $partdata->{'ResponseTypes'}->[$i];
  142:                     if ($resptype eq 'option') {
  143:                         my $value = &Apache::lonnet::escape($res->{'symb'}.':'.$respid);
  144:                         my $checked = '';
  145:                         if ($ENV{'form.problemchoice'} eq $value) {
  146:                             $checked = 'checked ';
  147:                         }
  148:                         $seq_str .= '<tr><td>'.
  149:   '<input type="radio" name="problemchoice" value="'.$value.'" '.$checked.'/>'.
  150:   '</td><td>'.
  151:   '<a href="'.$res->{'src'}.'">'.$res->{'title'}.'</a> ';
  152:                         if ($partdata->{'option'} > 1) {
  153:                             $seq_str .= &mt('response').' '.$respid;
  154:                         }
  155:                         $seq_str .= "</td></tr>\n";
  156:                     }
  157:                 }
  158:             }
  159:         }
  160:         if ($seq_str ne '') {
  161:             $Str .= '<tr><td>&nbsp</td><td><b>'.$seq->{'title'}.'</b></td>'.
  162:                 "</tr>\n".$seq_str;
  163:         }
  164:     }
  165:     $Str .= "</table>\n";
  166:     return $Str;
  167: }
  168: 
  169: sub get_resource_from_symb {
  170:     my ($symb) = @_;
  171:     &Apache::lonnet::logthis('target symb = :'.$symb.':');
  172:     foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
  173:         foreach my $res (@{$seq->{'contents'}}) {
  174:             &Apache::lonnet::logthis('symb = :'.$res->{'symb'}.':');
  175:             if ($res->{'symb'} eq $symb) {
  176:                 return $res;
  177:             }
  178:         }
  179:     }
  180:     return undef;
  181: }
  182: 
  183: =pod
  184: 
  185: sub InitAnalysis {
  186:     my ($resource,$sname,$sdom)=@_;
  187:     my $symb = $resource->
  188:     my $URI = $hash{'src_'.$rid};
  189: 
  190:     my $Answ=&Apache::lonnet::ssi($URI,('grade_target' => 'analyze',
  191:                                   'grade_username' => $sname,
  192:                                   'grade_domain' => $sdom,
  193:                                   'grade_courseid' => $cid,
  194:                                   'grade_symb' => $symb));
  195: #    my $Answ=&Apache::lonnet::ssi($URI,('grade_target' => 'analyze'));
  196: 
  197:     (my $garbage,$Answ)=split(/_HASH_REF__/,$Answ,2);
  198:     %Answer=();
  199:     %Answer=&Apache::lonnet::str2hash($Answ);
  200: 
  201:     my $parts='';
  202:     foreach my $elm (@{$Answer{"parts"}}) {
  203:         $parts.="$elm,";
  204:     }
  205:     chop($parts);
  206:     my $conc='';
  207:     foreach my $elm (@{$Answer{"$parts.concepts"}}) {
  208:         $conc.="$elm@";
  209:     }
  210:     chop($conc);
  211: 
  212:     @Concepts=split(/\@/,$conc);
  213:     foreach my $concept (@{$Answer{"$parts.concepts"}}) {
  214:         foreach my $foil (@{$Answer{"$parts.concept.$concept"}}) {
  215:             $foil_to_concept{$foil} = $concept;
  216:             #$ConceptData{$foil} = $Answer{"$parts.foil.value.$foil"};
  217:         }
  218:     }
  219:     return $symb;
  220: }
  221: 
  222: =cut
  223: 
  224: 1;
  225: 
  226: __END__

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