Diff for /loncom/interface/lonstatistics.pm between versions 1.18 and 1.19

version 1.18, 2002/05/14 23:17:06 version 1.19, 2002/05/16 01:27:05
Line 31 Line 31
 # 11/1,11/4,11/16,12/14,12/16,12/18,12/20,12/31 Behrouz Minaei  # 11/1,11/4,11/16,12/14,12/16,12/18,12/20,12/31 Behrouz Minaei
 # YEAR=2002  # YEAR=2002
 # 1/22,2/1,2/6,2/25,3/2,3/6,3/17,3/21,3/22,3/26,4/7,5/6 Behrouz Minaei  # 1/22,2/1,2/6,2/25,3/2,3/6,3/17,3/21,3/22,3/26,4/7,5/6 Behrouz Minaei
 # 5/12, 5/14 Behrouz Minaei  # 5/12, 5/14, 5/15 Behrouz Minaei
 #  #
 ###  ###
   
Line 119  sub InitAnalysis { Line 119  sub InitAnalysis {
     foreach my $concept (@{$Answer{"$parts.concepts"}}) {      foreach my $concept (@{$Answer{"$parts.concepts"}}) {
  foreach my $foil (@{$Answer{"$parts.concept.$concept"}}) {   foreach my $foil (@{$Answer{"$parts.concept.$concept"}}) {
     $foil_to_concept{$foil} = $concept;      $foil_to_concept{$foil} = $concept;
       #$ConceptData{$foil} = $Answer{"$parts.foil.value.$foil"};
  }   }
     }      }
     return $symb;      return $symb;
Line 150  sub ShowOpGraph { Line 151  sub ShowOpGraph {
     my ($InpStr, $Int_No)=@_;      my ($InpStr, $Int_No)=@_;
     my ($rid,$part)=split(/\:/,substr($InpStr,8));      my ($rid,$part)=split(/\:/,substr($InpStr,8));
     $ConceptData{"Interval"}=$Int_No;      $ConceptData{"Interval"}=$Int_No;
       #Initialize the option response true answers
     my $symb=&InitAnalysis($rid,$students[0]);      my $symb=&InitAnalysis($rid,$students[0]);
       #compute the intervals
     &Interval($rid,$part,$symb);      &Interval($rid,$part,$symb);
     my $URI = $hash{'src_'.$rid};      my $URI = $hash{'src_'.$rid};
     my $Src = $hash{'title_'.$rid};      my $Src = $hash{'title_'.$rid};
Line 158  sub ShowOpGraph { Line 161  sub ShowOpGraph {
     $r->print('<br><b>'.$URI.'</b>');      $r->print('<br><b>'.$URI.'</b>');
     $r->rflush();      $r->rflush();
           
       #Java script Progress window
     &Create_PrgWin();      &Create_PrgWin();
     &Update_PrgWin("Starting to analyze problem");      &Update_PrgWin("Starting to analyze problem");
     for (my $index=0;$index<=$#students;$index++) {      for (my $index=0;$index<=$#students;$index++) {
Line 166  sub ShowOpGraph { Line 170  sub ShowOpGraph {
     }      }
     &Close_PrgWin();      &Close_PrgWin();
   
       $r->print('<br>');
     for (my $k=0; $k<$Int_No; $k++ ) {      for (my $k=0; $k<$Int_No; $k++ ) {
  &DrawGraph($k,$Src);   &DrawGraph($k,$Src);
     }      }
Line 218  sub DrawGraph { Line 223  sub DrawGraph {
                 "\n"."<td bgcolor=#FFDDDD> ".$data2[$n]." </td>".                  "\n"."<td bgcolor=#FFDDDD> ".$data2[$n]." </td>".
                 "\n"."</tr>";                  "\n"."</tr>";
     }      }
     $Str.='<td></td><td><b>From:['.localtime($ConceptData{'Int.'.($k-1)}).  #$Apache::lonxml::debug=1;
           '] To: ['.localtime($ConceptData{"Int.$k"}).  #&Apache::lonhomework::showhash(%ConceptData);
           "]</b></td><td>$Correct</td><td>$Wrong</td>";  #$Apache::lonxml::debug=0;
   
   #    $Str.='<td></td><td><b>From:['.localtime($ConceptData{'Int.$k'}).
   #          '] To: ['.localtime($ConceptData{'Int.'.($k+1)}).
   #          "]</b></td><td>$Correct</td><td>$Wrong</td>";#
   
     $Str .= "\n".'</table>';      $Str .= "\n".'</table>';
   
     $r->print($Str);  #    $r->print($Str);
   
     if ( $Max > 1 ) {       if ( $Max > 1 ) { 
  $Max += (10 - $Max % 10);   $Max += (10 - $Max % 10);
  $Max = int($Max);   $Max = int($Max);
     } else { $Max = 1; }      } else { $Max = 1; }
   
     if ( $Max > 1 ) {       
  $Max += (10 - $Max % 10);      my $Titr=($ConceptData{'Interval'}>1) ? $Src.'_interval_'.($k+1) : $Src;
  $Max = int($Max);  
     } else { $Max = 1; }  
     my $Titr=($ConceptData{'Interval'}>1) ? $Src.'_interval_'.$k : $Src;  
 #    $GData=$Titr.'&Concepts'.'&'.'Answers'.'&'.$Max.'&'.$P_No.'&'.$data1.'&'.$data2;  #    $GData=$Titr.'&Concepts'.'&'.'Answers'.'&'.$Max.'&'.$P_No.'&'.$data1.'&'.$data2;
     $GData="$Titr&Concepts&Answers&$Max&$P_No&".      $GData="$Titr&Concepts&Answers&$Max&$P_No&".
            (join(',',@data1)).'&'.(join(',',@data2));             (join(',',@data1)).'&'.(join(',',@data2));
   
     $r->print('<br><IMG src="/cgi-bin/graph.gif?'.$GData.'" />');      $r->print('<IMG src="/cgi-bin/graph.gif?'.$GData.'" border=1/>');
 }  }
   
   
 sub AnalyzeProblem {  sub AnalyzeProblem {
 # -------------------------------- Selecting the number of intervals      # selecting the number of intervals
     my $OpSel='';      my $OpSel='';
     my $CurInt = $ENV{'form.interval'};      my $CurInt = $ENV{'form.interval'};
     if ($CurInt eq '') {$CurMap = '1';}      if ($CurInt eq '') {$CurMap = '1';}
Line 259  sub AnalyzeProblem { Line 265  sub AnalyzeProblem {
     $Ptr .= '</select>'."\n";      $Ptr .= '</select>'."\n";
     $r->print( $Ptr );      $r->print( $Ptr );
   
       #the table of option response problems
     $r->print('<br><b> Option Response Problems in this course:</b><br><br>');      $r->print('<br><b> Option Response Problems in this course:</b><br><br>');
     my $Str = "\n".'<table border=2>'.      my $Str = "\n".'<table border=2>'.
               "\n".'<tr>'.                "\n".'<tr>'.
Line 289  sub AnalyzeProblem { Line 296  sub AnalyzeProblem {
   
   
 sub Decide {  sub Decide {
       #deciding the true or false answer belongs to each interval
     my ($type,$foil,$time)=@_;       my ($type,$foil,$time)=@_; 
     my $k=0;      my $k=0;
     while ($time>$ConceptData{'Int.'.($k+1)} &&       while ($time>$ConceptData{'Int.'.($k+1)} && 
Line 297  sub Decide { Line 305  sub Decide {
 }  }
   
   
   #restore the student submissions and finding the result
 sub OpStatus {  sub OpStatus {
     my ($rid,$student)=@_;      my ($rid,$student)=@_;
     my ($uname,$udom)=split(/\:/,$student);      my ($uname,$udom)=split(/\:/,$student);
Line 573  sub CloseTable { Line 582  sub CloseTable {
     
 # ------------------------------------------- Prepare Statistics Table  # ------------------------------------------- Prepare Statistics Table
 sub PreStatTable {  sub PreStatTable {
   
     my $CacheDB = "/home/httpd/perl/tmp/$ENV{'user.name'}".      my $CacheDB = "/home/httpd/perl/tmp/$ENV{'user.name'}".
                   "_$ENV{'user.domain'}_$cid\_statistics.db";                    "_$ENV{'user.domain'}_$cid\_statistics.db";
     my $GraphDB = "/home/httpd/perl/tmp/$ENV{'user.name'}".      my $GraphDB = "/home/httpd/perl/tmp/$ENV{'user.name'}".
Line 995  sub Build_Statistics { Line 1005  sub Build_Statistics {
   
     @list = sort (@list);      @list = sort (@list);
   
   
     &Discriminant();      &Discriminant();
   
     $OpSel2='';      $OpSel2='';
Line 1136  sub Cache_Statistics { Line 1145  sub Cache_Statistics {
     my $Useful;      my $Useful;
     my $UnUseful;      my $UnUseful;
     my %myHeader = reverse( %Header );      my %myHeader = reverse( %Header );
       #&Apache::lonnet::delenv('form_');
       #&Apache::lonnet::delenv('test'); 
     $Pos = $myHeader{$ENV{'form.sort'}};      $Pos = $myHeader{$ENV{'form.sort'}};
     if ($Pos > 0) {$Pos++;}      if ($Pos > 0) {$Pos++;}
     $p_count = 0;      $p_count = 0;
Line 1295  sub initial { Line 1306  sub initial {
   $HWN=$P_Order;    $HWN=$P_Order;
 }  }
   
   # my $CacheDB = "/home/httpd/perl/tmp/$ENV{'user.name'}".
   #                  "_$ENV{'user.domain'}_$cid\_classlist.db";
   # if (-e "$CacheDB") {
   #    if (tie(%students,'GDBM_File',"$CacheDB",&GDBM_READER,0640)) {
   # &CachClassList();
   #    }
   #            else {
   #        $r->print("Unable to tie hash to db file");
   #            }
   #        }
   #        else {
   #    if (tie(%students,'GDBM_File',$CacheDB,&GDBM_WRCREAT,0640)) {
   #        &MakeClassList();
   #    }
   #            else {
   #        $r->print("Unable to tie hash to db file");
   #            }
   #        }
   #        untie(%students);
   
   
 sub ClassList {  sub ClassList {
   
Line 1307  sub ClassList { Line 1338  sub ClassList {
     $firstres=$hash{'map_start_/res/'.$ENV{'request.course.uri'}};      $firstres=$hash{'map_start_/res/'.$ENV{'request.course.uri'}};
     $lastres=$hash{'map_finish_/res/'.$ENV{'request.course.uri'}};      $lastres=$hash{'map_finish_/res/'.$ENV{'request.course.uri'}};
     if (($firstres) && ($lastres)) {      if (($firstres) && ($lastres)) {
  #my %result = &Apache::lonnet::dump('classlist',$sdom,$sname);  # my %students = &Apache::lonnet::dump('classlist',$cdom,$cnum);
   #    $Apache::lonxml::debug=1;
   #    &Apache::lonhomework::showhash(%students);
   #    $Apache::lonxml::debug=0;
   # my $StudNo = 0;
   # my $now=time;
   # my ($temp)=keys(%students);
   # unless ($temp=~/^error\:/) {
   #    foreach my $KeyPoint(sort keys(%students)) {
  my $classlst=&Apache::lonnet::reply('dump:'.$cdom.':'.$cnum.':classlist',$chome);   my $classlst=&Apache::lonnet::reply('dump:'.$cdom.':'.$cnum.':classlist',$chome);
  my $StudNo = 0;   my $StudNo = 0;
  my $now=time;   my $now=time;
  unless ($classlst=~/^error\:/) {   unless ($classlst=~/^error\:/) {
     foreach (sort split(/\&/,$classlst)) {      foreach my $KeyPoint(sort split(/\&/,$classlst)) {
  my ($name,$value)=split(/\=/,$_);   my ($name,$value)=split(/\=/,$KeyPoint);
  my ($end,$start)=split(/\:/,&Apache::lonnet::unescape($value));   my ($end,$start)=split(/\:/,&Apache::lonnet::unescape($value));
  $name=&Apache::lonnet::unescape($name);  
  my ($sname,$sdom)=split(/\:/,$name);  
  my $active=1;   my $active=1;
  my $Status=$ENV{'form.status'};   my $Status=$ENV{'form.status'};
  $Status = ($Status) ? $Status : 'Active';   $Status = ($Status) ? $Status : 'Active';
  if ( ( ($end) && $now > $end ) &&    if ( ( ($end) && $now > $end ) && 
                      ( ($Status eq 'Active') ) ) { $active=0; }                       ( ($Status eq 'Active') ) ) { $active=0; }
   
  if ( ($Status eq 'Expired') &&    if ( ($Status eq 'Expired') && 
                      ($end == 0 || $now < $end) ) { $active=0; }                       ($end == 0 || $now < $end) ) { $active=0; }
   
  if ($active) {   if ($active) {
     my $thisindex=$#students+1;      my $thisindex=$#students+1;
     $name=&Apache::lonnet::unescape($name);      $name=&Apache::lonnet::unescape($name);
     $students[$thisindex]=$name;      $students[$thisindex]=$name;
     my ($sname,$sdom)=split(/\:/,$name);      my ($sname,$sdom)=split(/\:/,$name);
     #my %reply=&Apache::lonnet::idrget($sdom,$sname);  
     #my $reply=&Apache::lonnet::reply('get:'.$sdom.':'.$sname.  
     #         ':environment:lastname&generation&firstname&middlename',  
     #         &Apache::lonnet::homeserver($sname,$sdom));  
     my $ssec=&usection($sdom,$sname,$cid,$Status);      my $ssec=&usection($sdom,$sname,$cid,$Status);
 #    if ($ssec==-1 ) {next;}  
     if ($ssec==-1 || $ssec eq 'adm' ) {next;}      if ($ssec==-1 || $ssec eq 'adm' ) {next;}
     $ssec=($ssec) ? $ssec : '(none)';      $ssec=($ssec) ? $ssec : '(none)';
     #$ssec=(int($ssec)) ? int($ssec) : $ssec;      #$ssec=(int($ssec)) ? int($ssec) : $ssec;
Line 1374  sub ClassList { Line 1408  sub ClassList {
 }  }
   
   
   sub ClassListnew {
   
       &GetStatus();
   
       $cid=$ENV{'request.course.id'};
       my $chome=$ENV{'course.'.$cid.'.home'};
       my ($cdom,$cnum)=split(/\_/,$cid);
   # ----------------------- Get first and last resource, see if there is anything
       $firstres=$hash{'map_start_/res/'.$ENV{'request.course.uri'}};
       $lastres=$hash{'map_finish_/res/'.$ENV{'request.course.uri'}};
       if (($firstres) && ($lastres)) {
   
    my %students = &Apache::lonnet::dump('classlist',$cdom,$cnum);
    my $StudNo = 0;
    my $now=time;
    my ($temp)=keys(%students);
    unless ($temp=~/^error\:/) {
       foreach (sort keys(%students)) {
    my ($name,$value)=split(/\=/,$_);
    my ($end,$start)=split(/\:/,&Apache::lonnet::unescape($value));
    $name=&Apache::lonnet::unescape($name);
    my ($sname,$sdom)=split(/\:/,$name);
    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) {
       my $thisindex=$#students+1;
       $name=&Apache::lonnet::unescape($name);
       $students[$thisindex]=$name;
       my ($sname,$sdom)=split(/\:/,$name);
       #my %reply=&Apache::lonnet::idrget($sdom,$sname);
       #my $reply=&Apache::lonnet::reply('get:'.$sdom.':'.$sname.
       #         ':environment:lastname&generation&firstname&middlename',
       #         &Apache::lonnet::homeserver($sname,$sdom));
       my $ssec=&usection($sdom,$sname,$cid,$Status);
   #    if ($ssec==-1 ) {next;}
       if ($ssec==-1 || $ssec eq 'adm' ) {next;}
       $ssec=($ssec) ? $ssec : '(none)';
       #$ssec=(int($ssec)) ? int($ssec) : $ssec;
       $section{$ssec}=$ssec;
       if ($CurSec eq 'All Sections' || $ssec eq $CurSec) {
    $students[$StudNo]=$name;
    $StuBox{$sname}=$sdom;
       }
       $StudNo++;
           }
       }
    }
    else {
       $r->print('<h1>Could not access course data</h1>');
    } 
           $r->print("Total number of students : ".($#students+1));
           $r->rflush();
   # --------------- Find all assessments and put them into some linear-like order
    &tracetable($firstres,'&'.$lastres.'&');
       }
   
   # ------------------------------------------------------------- End render page 
       else {
    $r->print('<h3>Undefined course sequence</h3>');
       }
   }
   
   
 sub Title {  sub Title {
     $r->print('<html><head><title>LON-CAPA Statistics</title></head>');      $r->print('<html><head><title>LON-CAPA Statistics</title></head>');
     $r->print('<body bgcolor="#FFFFFF">'.      $r->print('<body bgcolor="#FFFFFF">'.
Line 1387  sub Title { Line 1489  sub Title {
     $r->rflush();      $r->rflush();
 }  }
   
   
 sub CreateForm {  sub CreateForm {
     $r->print("\n".'<form name=stat method=post action="/adm/statistics" >');      $r->print("\n".'<form name=stat method=post action="/adm/statistics" >');
     my $content = $ENV{'form.sort'};      my $content = $ENV{'form.sort'};
     if (!($ENV{'form.showcsv'}) && ($content eq '' || $content eq 'Return to Menu')) {      if (!($ENV{'form.showcsv'}) && #|| !($ENV{'csv'})) && 
            ($content eq '' || $content eq 'Return to Menu')) {
  my $Ptr = '<h3>';   my $Ptr = '<h3>';
  $Ptr .= '<input type=submit name=sort value="Problem Stats"/>';   $Ptr .= '<input type=submit name=sort value="Problem Stats"/>';
  $Ptr .= '<br><br>';   $Ptr .= '<br><br>';
Line 1401  sub CreateForm { Line 1505  sub CreateForm {
  $r->print( $Ptr );   $r->print( $Ptr );
     }      }
     else {      else {
    &ClassList();
  if ( $content eq 'Student Assessment' ||    if ( $content eq 'Student Assessment' || 
      $content eq 'Create Student Report' ) {       $content eq 'Create Student Report' ) {
     &MapSecOptions();      &MapSecOptions();
Line 1420  sub CreateForm { Line 1525  sub CreateForm {
   
 sub Menu {  sub Menu {
     &initial();      &initial();
     #$Apache::lonxml::debug=1;  #    $Apache::lonxml::debug=1;
     #&Apache::lonhomework::showhash(%ENV);  #    &Apache::lonhomework::showhash(%ENV);
     #$Apache::lonxml::debug=0;  #    $Apache::lonxml::debug=0;
     &Title();      &Title();
     &ClassList();  
     my $InpStr = $ENV{'form.sort'};      my $InpStr = $ENV{'form.sort'};
     if ($InpStr=~/^Analyze\_/) {      if ($InpStr=~/^Analyze\_/) {
    &ClassList();
  &ShowOpGraph($InpStr,$ENV{'form.interval'});   &ShowOpGraph($InpStr,$ENV{'form.interval'});
     }      }
     elsif ( $InpStr eq 'DoDiff Graph' || $InpStr eq '%Wrong Graph' ) {            elsif ( $InpStr eq 'DoDiff Graph' || $InpStr eq '%Wrong Graph' ) {      
Line 1497  sub GetStatus { Line 1602  sub GetStatus {
   
 sub MapSecOptions {  sub MapSecOptions {
 # ----------------------------------- Loading the Maps Combobox  # ----------------------------------- Loading the Maps Combobox
     my $Ptr = '';      my $Ptr = '<br>';
     $Ptr .= '<input type="submit" name="sort" value="Return to Menu" />';      $Ptr .= '<input type="submit" name="sort" value="Return to Menu" />';
     $Ptr .= '<br><b> Select &nbsp; Map &nbsp; &nbsp; </b>'."\n".      $Ptr .= '<br><b> Select &nbsp; Map &nbsp; &nbsp; </b>'."\n".
            '<select name="maps">'."\n".              '<select name="maps">'."\n". 

Removed from v.1.18  
changed lines
  Added in v.1.19


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