Annotation of loncom/interface/statistics/lonproblemanalysis.pm, revision 1.23

1.1       stredwic    1: # The LearningOnline Network with CAPA
                      2: #
1.23    ! matthew     3: # $Id: lonproblemanalysis.pm,v 1.22 2003/06/18 17:34:02 albertel Exp $
1.1       stredwic    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
1.11      minaeibi   29: # 5/12,7/26,9/7,11/22 Behrouz Minaei
1.1       stredwic   30: #
                     31: ###
                     32: 
1.11      minaeibi   33: package Apache::lonproblemanalysis;
1.1       stredwic   34: 
                     35: use strict;
                     36: use Apache::lonnet();
1.7       stredwic   37: use Apache::lonhtmlcommon();
1.23    ! matthew    38: use Apache::loncoursedata();
        !            39: use Apache::lonstatistics;
        !            40: use Apache::lonlocal;
1.2       stredwic   41: 
1.1       stredwic   42: sub BuildProblemAnalysisPage {
1.23    ! matthew    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');
1.7       stredwic   63:         }
1.23    ! matthew    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'})) {
1.5       stredwic   75:         return;
1.1       stredwic   76:     }
1.23    ! matthew    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());
1.1       stredwic   81: }
                     82: 
1.23    ! matthew    83: sub get_problem_symb {
        !            84:     my $problemstring = shift();
        !            85:     my ($symb,$id) = ($problemstring=~ /^(.*):([^:]*)$/);
        !            86:     return ($symb,$id);
1.1       stredwic   87: }
                     88: 
1.23    ! matthew    89: sub CreateInterface {
1.7       stredwic   90:     my $Str = '';
1.23    ! matthew    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";
1.11      minaeibi  156:                     }
                    157:                 }
                    158:             }
                    159:         }
1.23    ! matthew   160:         if ($seq_str ne '') {
        !           161:             $Str .= '<tr><td>&nbsp</td><td><b>'.$seq->{'title'}.'</b></td>'.
        !           162:                 "</tr>\n".$seq_str;
        !           163:         }
1.11      minaeibi  164:     }
1.23    ! matthew   165:     $Str .= "</table>\n";
        !           166:     return $Str;
1.11      minaeibi  167: }
                    168: 
1.23    ! matthew   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;
1.2       stredwic  177:             }
1.1       stredwic  178:         }
                    179:     }
1.23    ! matthew   180:     return undef;
1.1       stredwic  181: }
                    182: 
1.23    ! matthew   183: =pod
1.11      minaeibi  184: 
1.23    ! matthew   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"};
1.1       stredwic  217:         }
                    218:     }
1.23    ! matthew   219:     return $symb;
1.1       stredwic  220: }
                    221: 
1.23    ! matthew   222: =cut
1.1       stredwic  223: 
1.23    ! matthew   224: 1;
1.1       stredwic  225: 
                    226: __END__

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