Diff for /loncom/interface/Attic/lonchart.pm between versions 1.35 and 1.42

version 1.35, 2002/02/28 23:35:31 version 1.42, 2002/06/04 19:59:34
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 #  
 # Homework Performance Chart  # Homework Performance Chart
 #  #
 # (Navigate Maps Handler  # (Navigate Maps Handler
Line 70  my $r; Line 69  my $r;
 sub ExtractStudentData {  sub ExtractStudentData {
     my ($index,$coid)=@_;      my ($index,$coid)=@_;
     my ($sname,$sdom) = split( /\:/, $students[$index] );      my ($sname,$sdom) = split( /\:/, $students[$index] );
     my $shome=&Apache::lonnet::homeserver( $sname,$sdom );                my %result=&Apache::lonnet::dump($coid,$sdom,$sname);
     my $reply=&Apache::lonnet::reply('dump:'.$sdom.':'.$sname.':'.$coid,$shome );  
     my %result=();  
     my $ResId;      my $ResId;
     my $Code;      my $Code;
     my $Tries;      my $Tries;
Line 87  sub ExtractStudentData { Line 84  sub ExtractStudentData {
             '                                                        ',0,14).' ! '.              '                                                        ',0,14).' ! '.
             substr($rowlabels[$index].              substr($rowlabels[$index].
             '                                                        ',0,45).' ! ';              '                                                        ',0,45).' ! ';
     unless ($reply=~/^error\:/) {  
         foreach (split(/\&/,$reply)) {      my($checkForError)=keys (%result);
             my ($name,$value)=split(/\=/,&Apache::lonnet::unescape($_));      if($checkForError =~ /^(con_lost|error|no_such_host)/i) {
             $result{$name}=$value;   my $PrTot = sprintf( "%5d", $ProbTotal );
         }   my $PrSvd = sprintf( "%5d", $ProbSolved );
  $ProbNo = 0;   $Str .= ' '.'<font color="#000088">'.$PrSvd.'  /'.$PrTot.'</font> ';
  $ProbTotal = 0;   return $Str;
         $ProbSolved = 0;      }
  my $IterationNo = 0;  
         foreach $ResId (@cols) {      $ProbNo = 0;
     if ($IterationNo == 0) {$IterationNo++; next;}      $ProbTotal = 0;
     if (!$ResId) {       $ProbSolved = 0;
  my $PrNo = sprintf( "%3d", $ProbNo );      my $IterationNo = 0;
  $Str .= ' '.'<font color="#007700">'.$PrNo.'</font> ';      foreach $ResId (@cols) {
  $ProbSolved += $ProbNo;   if ($IterationNo == 0) {$IterationNo++; next;}
  $ProbNo=0;   if (!$ResId) { 
  next;       my $PrNo = sprintf( "%3d", $ProbNo );
     }      $Str .= ' '.'<font color="#007700">'.$PrNo.'</font> ';
             $ResId=~/(\d+)\.(\d+)/;      $ProbSolved += $ProbNo;
     my $meta=$hash{'src_'.$ResId};      $ProbNo=0;
     my $PartNo = 0;      next; 
     undef %TempHash;   }
     foreach (split(/\,/,&Apache::lonnet::metadata($meta,'keys'))) {   $ResId=~/(\d+)\.(\d+)/;
  if ($_=~/^stores\_(\d+)\_tries$/) {   my $meta=$hash{'src_'.$ResId};
                     my $Part=&Apache::lonnet::metadata($meta,$_.'.part');   my $PartNo = 0;
     if ( $TempHash{"$Part"} eq '' ) {    undef %TempHash;
  $TempHash{"$Part"} = $Part;   foreach (split(/\,/,&Apache::lonnet::metadata($meta,'keys'))) {
  $TempHash{$PartNo}=$Part;      if ($_=~/^stores\_(\d+)\_tries$/) {
  $TempHash{"$Part.Code"} = ' ';     my $Part=&Apache::lonnet::metadata($meta,$_.'.part');
  $PartNo++;   if ( $TempHash{"$Part"} eq '' ) { 
     }      $TempHash{"$Part"} = $Part;
       $TempHash{$PartNo}=$Part;
       $TempHash{"$Part.Code"} = ' ';  
       $PartNo++;
  }   }
             }      }
    }
   
             my $Prob = &Apache::lonnet::declutter( $hash{'map_id_'.$1} ).   my $Prob = &Apache::lonnet::symbclean(
          &Apache::lonnet::declutter($hash{'map_id_'.$1} ).
                        '___'.$2.'___'.                         '___'.$2.'___'.
                        &Apache::lonnet::declutter( $hash{'src_'.$ResId} );                         &Apache::lonnet::declutter( $hash{'src_'.$ResId} ));
             $Code=' ';   $Code=' ';
             $Tries = 0;   $Tries = 0;
      $LatestVersion = $result{"version:$Prob"};   $LatestVersion = $result{"version:$Prob"};
   
             if ( $LatestVersion ) {   if ( $LatestVersion ) {
  for ( my $Version=1; $Version<=$LatestVersion; $Version++ ) {      for ( my $Version=1; $Version<=$LatestVersion; $Version++ ) {
     my $vkeys = $result{"$Version:keys:$Prob"};   my $vkeys = $result{"$Version:keys:$Prob"};
     my @keys = split(/\:/,$vkeys);     my @keys = split(/\:/,$vkeys);  
   
     foreach my $Key (@keys) {     foreach my $Key (@keys) {  
  if (($Key=~/\.(\w+)\.solved$/) && ($Key!~/^\d+\:/)) {      if (($Key=~/\.(\w+)\.solved$/) && ($Key!~/^\d+\:/)) {
     my $Part = $1;   my $Part = $1;
     $Tries = $result{"$Version:$Prob:resource.$Part.tries"};   $Tries = $result{"$Version:$Prob:resource.$Part.tries"};
     $TempHash{"$Part.Tries"}=($Tries) ? $Tries : 0;   $TempHash{"$Part.Tries"}=($Tries) ? $Tries : 0;
     my $Val = $result{"$Version:$Prob:resource.$Part.solved"};   my $Val = $result{"$Version:$Prob:resource.$Part.solved"};
     if ($Val eq 'correct_by_student'){$Code='*';}    if ($Val eq 'correct_by_student'){$Code='*';} 
     elsif ($Val eq 'correct_by_override'){$Code = '+';}                           elsif ($Val eq 'correct_by_override'){$Code = '+';}
     elsif ($Val eq 'incorrect_attempted'){$Code = '.';}    elsif ($Val eq 'incorrect_attempted'){$Code = '.';} 
     elsif ($Val eq 'incorrect_by_override'){$Code = '-';}   elsif ($Val eq 'incorrect_by_override'){$Code = '-';}
     elsif ($Val eq 'excused'){$Code = 'x';}   elsif ($Val eq 'excused'){$Code = 'x';}
     elsif ($Val eq 'ungraded_attempted'){$Code = '#';}   elsif ($Val eq 'ungraded_attempted'){$Code = '#';}
     else {$Code = ' ';}   else {$Code = ' ';}
     $TempHash{"$Part.Code"} = $Code;  
  }   $TempHash{"$Part.Code"} = $Code;
          }      }
                 }   
  for ( my $n = 0; $n < $PartNo; $n++ ) {    
     my $part = $TempHash{$n};  
     my $Code = $TempHash{"$part.Code"};  
                     if ( $Code eq '*') {  
  $ProbNo++;  
                         if (($TempHash{"$part.Tries"}<10) ||  
                             ($TempHash{"$part.Tries"} eq '')) {  
     $TempHash{"$part.Code"}=$TempHash{"$part.Tries"};  
  }  
                     }  
     elsif ( $Code eq '+' ) {$ProbNo++;}  
     $Str .= $TempHash{"$part.Code"};  
     if ( $Code ne 'x' ) {$ProbTotal++;}  
  }   }
             }         }
     else {  # Actually append problem to output (all parts)
  for(my $n=0; $n<$PartNo; $n++) {      $Str.='<a href="/adm/grades?symb='.
     $Str.=' ';                  &Apache::lonnet::escape($Prob).
     $ProbTotal++;                  '&student='.$sname.'&domain='.$sdom.'&command=submission">'; 
       for ( my $n = 0; $n < $PartNo; $n++ ) {  
    my $part = $TempHash{$n};
    my $Code = $TempHash{"$part.Code"};
    if ( $Code eq '*') {
       $ProbNo++;
       if (($TempHash{"$part.Tries"}<10) ||
    ($TempHash{"$part.Tries"} eq '')) {
    $TempHash{"$part.Code"}=$TempHash{"$part.Tries"};
       }
  }   }
    elsif ( $Code eq '+' ) {$ProbNo++;}
    $Str .= $TempHash{"$part.Code"};
    if ( $Code ne 'x' ) {$ProbTotal++;}
       }
       $Str.='</a>';
    } else {
       for(my $n=0; $n<$PartNo; $n++) {
    $Str.=' ';
    $ProbTotal++;
     }      }
         }    }
     }      }
   
     my $PrTot = sprintf( "%5d", $ProbTotal );      my $PrTot = sprintf( "%5d", $ProbTotal );
     my $PrSvd = sprintf( "%5d", $ProbSolved );      my $PrSvd = sprintf( "%5d", $ProbSolved );
     $Str .= ' '.'<font color="#000088">'.$PrSvd.'  /'.$PrTot.'</font> ';      $Str .= ' '.'<font color="#000088">'.$PrSvd.'  /'.$PrTot.'</font> ';
Line 224  sub tracetable { Line 231  sub tracetable {
     }      }
 }  }
   
   sub usection {
 sub usection2 {  
     my ($udom,$unam,$courseid,$ActiveFlag)=@_;      my ($udom,$unam,$courseid,$ActiveFlag)=@_;
     $courseid=~s/\_/\//g;      $courseid=~s/\_/\//g;
     $courseid=~s/^(\w)/\/$1/;      $courseid=~s/^(\w)/\/$1/;
     foreach my $elem(split(/\&/,&Apache::lonnet::reply('dump:'.$udom.':'.$unam.':roles',  
                      &Apache::lonnet::homeserver($unam,$udom)))) {  
         my ($key,$value)=split(/\=/,$elem);  
         $key=&Apache::lonnet::unescape($key);  
         if ($key=~/^$courseid(?:\/)*(\w+)*\_st$/) {  
             my $section=$1;  
             if ($key eq $courseid.'_st') { $section=''; }  
     my ($dummy,$end,$start)=split(/\_/,&Apache::lonnet::unescape($value));  
             my $now=time;  
             my $notactive=0;  
             if ($start) {  
  if ($now<$start) { $notactive=1; }  
             }  
             if ($end) {  
                 if ($now>$end) { $notactive=1; }  
             }   
     if ($ActiveFlag == 1) { $notactive=0; }  
             unless ($notactive) { return $section; }  
         }  
     }  
     return '-1';  
 }  
   
       my %result=&Apache::lonnet::dump('roles',$udom,$unam);
   
 sub usection {      my($checkForError)=keys (%result);
     my ($udom,$unam,$courseid)=@_;      if($checkForError =~ /^(con_lost|error|no_such_host)/i) {
     $courseid=~s/\_/\//g;   return -1;
     $courseid=~s/^(\w)/\/$1/;      }
     foreach (split(/\&/,&Apache::lonnet::reply('dump:'.      my $cursection='-1';
              $udom.':'.$unam.':roles',      my $oldsection='-1';
              &Apache::lonnet::homeserver($unam,$udom)))){      my $status='Expired';
         my ($key,$value)=split(/\=/,$_);      foreach my $key (keys (%result)) {
         $key=&Apache::lonnet::unescape($key);   my $value = $result{$key};
         if ($key=~/^$courseid(?:\/)*(\w+)*\_st$/) {          if ($key=~/^$courseid(?:\/)*(\w+)*\_st$/) {
             my $section=$1;              my $section=$1;
             if ($key eq $courseid.'_st') { $section=''; }              if ($key eq $courseid.'_st') { $section=''; }
     my ($dummy,$end,$start)=split(/\_/,&Apache::lonnet::unescape($value));      my ($dummy,$end,$start)=split(/\_/,$value);
 #            $section=($section) ? $section : '(none)';      my $now=time;
 #            $section=(int($section)) ? int($section) : $section;      my $notactive=0;
 #            $r->print($unam.'...'.$section.'<br>');      if ($start) { if ($now<$start) { $notactive=1; } }
     return $section;      if ($end) { if ($now>$end) { $notactive=1; } }
       if ($notactive == 0) { $status='Active';$cursection=$section;}
       if ($notactive == 1) { $oldsection=$section;}
         }          }
     }      }
     #} split(/\&/,&Apache::lonnet::reply('dump:'.$udom.':'.$unam.':roles',      if ($status eq $ActiveFlag) {
     #                    &Apache::lonnet::homeserver($unam,$udom)));        if ($cursection eq '-1') { return $oldsection; }
     return '';        return $cursection;
       }
       if ($ActiveFlag eq 'Any') { 
         if ($cursection eq '-1') { return $oldsection; }
         return $cursection;
       }
       return '-1';
 }  }
   
 sub BuildChart {  sub BuildChart {
Line 287  sub BuildChart { Line 280  sub BuildChart {
         my $chome=$ENV{'course.'.$cid.'.home'};          my $chome=$ENV{'course.'.$cid.'.home'};
         my ($cdom,$cnum)=split(/\_/,$cid);          my ($cdom,$cnum)=split(/\_/,$cid);
 # ---------------------------------------------- Read class list and row labels  # ---------------------------------------------- Read class list and row labels
  my $classlst=&Apache::lonnet::reply   my %classlist=&Apache::lonnet::dump('classlist',$cdom,$cnum);
                             ('dump:'.$cdom.':'.$cnum.':classlist',$chome);  
  my $now=time;  
  unless ($classlst=~/^error\:/) {  
     foreach my $KeyPoint(sort split(/\&/,$classlst)) {  
  my ($name,$value)=split(/\=/,$KeyPoint);  
  my ($end,$start)=split(/\:/,&Apache::lonnet::unescape($value));  
  my $active=1;  
  if (($end) && ($now>$end)) { $active=0; }  
   
  if ($ENV{'form.active'} eq 'All Students') { $active=1; }  
   
    my($checkForError)=keys (%classlist);
    if($checkForError =~ /^(con_lost|error|no_such_host)/i) {
       $r->print('<h1>Could not access course data</h1>');
    } else {
       my $now=time;
       foreach my $name (sort(keys(%classlist))) {
    my $value=$classlist{$name};
    my ($end,$start)=split(/\:/,$value);
    my $active=1;
    my $Status=$ENV{'form.status'};
    $Status = ($Status) ? $Status : 'Active';
    if ( ( ($end) && $now > $end ) && 
        ( ($Status eq 'Active') ) ) { $active=0; }
    if ( ($Status eq 'Expired') && 
        ($end == 0 || $now < $end) ) { $active=0; }
  if ($active) {   if ($active) {
     my $thisindex=$#students+1;      my $thisindex=$#students+1;
     $name=&Apache::lonnet::unescape($name);  
     $students[$thisindex]=$name;      $students[$thisindex]=$name;
     my ($sname,$sdom)=split(/\:/,$name);      my ($sname,$sdom)=split(/\:/,$name);
     $PreCol[$thisindex]=$sname.':';      $PreCol[$thisindex]=$sname.':';
       my $ssec=&usection($sdom,$sname,$cid,$Status);
     my $ssec=&usection($sdom,$sname,$cid);#,$active);  
   
     if ($ssec==-1) {      if ($ssec==-1) {
  $rowlabels[$thisindex]=   $rowlabels[$thisindex]=
     'Data not available: '.$name;      'Data not available: '.$name;
     } else {      } else {
  my %reply=&Apache::lonnet::idrget($sdom,$sname);   my %reply=&Apache::lonnet::idrget($sdom,$sname);
  my $reply=&Apache::lonnet::reply('get:'.$sdom.':'.$sname.   my %name=&Apache::lonnet::get('environment',
                                   ':environment:lastname&generation&firstname&middlename',         ['lastname','generation'
                                   &Apache::lonnet::homeserver($sname,$sdom));         ,'firstname'
          ,'middlename'],
          $sdom,$sname);
    my $name=$name{'lastname'};
    if ($name{'generation'}) {$name.=" $name{generation}";}
    $name.=',';
    if ($name{'firstname'}) {$name.=" $name{firstname}";}
    if ($name{'middlename'}) {$name.=" $name{middlename}";}
    if ($name eq ',') {$name='';}
  #$ssec=(int($ssec)) ? int($ssec) : $ssec;   #$ssec=(int($ssec)) ? int($ssec) : $ssec;
  my $sec=sprintf('%3s',$ssec);   my $sec=sprintf('%3s',$ssec);
  $rowlabels[$thisindex]=$sec.' '.$reply{$sname}.' ';   $rowlabels[$thisindex]=$sec.' '.$reply{$sname}.' ';
  $PreCol[$thisindex] .= $reply.':'.$sec;   $PreCol[$thisindex] .= $name.':'.$sec;
  my $i=0;   $rowlabels[$thisindex].=$name.' ';
  foreach (split(/\&/,$reply)) {  
     $i++;  
     if ( $_ ne '') {  
  $rowlabels[$thisindex].=&Apache::lonnet::unescape($_).' ';  
     }  
     if ($i == 2) {  
  chop($rowlabels[$thisindex]);  
  $rowlabels[$thisindex].=', ';  
     }  
  }  
     }      }
  }   }
     }      }
   
  } else {  
     $r->print('<h1>Could not access course data</h1>');  
  }   }
   
  my $allstudents=$#students+1;   my $allstudents=$#students+1;
Line 365  sub BuildChart { Line 355  sub BuildChart {
 sub CreateForm {  sub CreateForm {
     my $OpSel1='';      my $OpSel1='';
     my $OpSel2='';      my $OpSel2='';
     if ( $ENV{'form.active'} eq 'All Students' ) { $OpSel2='selected'; }      my $OpSel3='';
       my $Status = $ENV{'form.status'};
       if ( $Status eq 'Any' ) { $OpSel3='selected'; }
       elsif ($Status eq 'Expired' ) { $OpSel2 = 'selected'; }
     else { $OpSel1 = 'selected'; }      else { $OpSel1 = 'selected'; }
   
     my $Ptr = '<form name=stat method=post action="/adm/chart" >'."\n";      my $Ptr = '<form name=stat method=post action="/adm/chart" >'."\n";
Line 377  sub CreateForm { Line 370  sub CreateForm {
     $Ptr .= '&nbsp;&nbsp;&nbsp;';      $Ptr .= '&nbsp;&nbsp;&nbsp;';
     $Ptr .= '<input type=submit name=sort value="Section"/>'."\n";      $Ptr .= '<input type=submit name=sort value="Section"/>'."\n";
     $Ptr .= '<br><br>';      $Ptr .= '<br><br>';
     $Ptr .= '<b> Activation Area: &nbsp; </b>'."\n".      $Ptr .= '<b> Student Status: &nbsp; </b>'."\n".
             '<select name="active"> <option '.$OpSel1.' >Active Students</option>'."\n".              '<select name="status">'. 
     '<option '.$OpSel2.'>All Students</option> </select> '."\n";              '<option '.$OpSel1.' >Active</option>'."\n".
               '<option '.$OpSel2.' >Expired</option>'."\n".
       '<option '.$OpSel3.' >Any</option> </select> '."\n";
     $Ptr .= '&nbsp;&nbsp;&nbsp;';      $Ptr .= '&nbsp;&nbsp;&nbsp;';
     $Ptr .= '<input type=submit name=sort value="Recalculate Chart"/>'."\n";      $Ptr .= '<input type=submit name=sort value="Recalculate Chart"/>'."\n";
     $Ptr .= '</form>'."\n";      $Ptr .= '</form>'."\n";
Line 524  sub handler { Line 519  sub handler {
 }  }
 1;  1;
 __END__  __END__
   
   
   
   
   
   
   

Removed from v.1.35  
changed lines
  Added in v.1.42


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