Diff for /loncom/interface/loncoursedata.pm between versions 1.62 and 1.66

version 1.62, 2003/03/26 16:25:06 version 1.66, 2003/04/01 16:53:50
Line 104  sub get_sequence_assessment_data { Line 104  sub get_sequence_assessment_data {
     my $fn=$ENV{'request.course.fn'};      my $fn=$ENV{'request.course.fn'};
     ##      ##
     ## use navmaps      ## use navmaps
     my $navmap = Apache::lonnavmaps::navmap->new(Apache->request,$fn.".db",      my $navmap = Apache::lonnavmaps::navmap->new($fn.".db",
                                                  $fn."_parms.db",1,0);                                                   $fn."_parms.db",1,0);
     if (!defined($navmap)) {      if (!defined($navmap)) {
         return 'Can not open Coursemap';          return 'Can not open Coursemap';
Line 506  sub init_dbs { Line 506  sub init_dbs {
                       type => 'TINYTEXT' },                        type => 'TINYTEXT' },
                     { name => 'timestamp',                      { name => 'timestamp',
                       type => 'INT UNSIGNED'},                        type => 'INT UNSIGNED'},
                     { name => 'weight',  
                       type => 'INT UNSIGNED'},  
                     ],                      ],
         'PRIMARY KEY' => ['symb_id','student_id','part_id'],          'PRIMARY KEY' => ['symb_id','student_id','part_id'],
         'KEY' => [{ columns=>['student_id'] },          'KEY' => [{ columns=>['student_id'] },
Line 859  sub update_student_data { Line 857  sub update_student_data {
         my $symb_id = &get_symb_id($current_symb);          my $symb_id = &get_symb_id($current_symb);
         #          #
         # Load data into the tables          # Load data into the tables
         foreach my $parameter (keys(%$param_hash)) {          while (my ($parameter,$value) = each(%$param_hash)) {
             my $value = $param_hash->{$parameter};  
             my $newstring;              my $newstring;
             if ($parameter !~ /(timestamp|resource\.(.*)\.(solved|tries|awarded|award|awarddetail|previous|weight))/) {              if ($parameter !~ /(timestamp|resource\.(.*)\.(solved|tries|awarded|award|awarddetail|previous))/) {
                 $newstring = "('".join("','",                  $newstring = "('".join("','",
                                        $symb_id,$student_id,                                         $symb_id,$student_id,
                                        $parameter,$value)."'),\n";                                         $parameter,$value)."'),\n";
Line 883  sub update_student_data { Line 880  sub update_student_data {
             my $award   = $param_hash->{'resource.'.$part.'.award'};              my $award   = $param_hash->{'resource.'.$part.'.award'};
             my $awarddetail = $param_hash->{'resource.'.$part.'.awarddetail'};              my $awarddetail = $param_hash->{'resource.'.$part.'.awarddetail'};
             my $timestamp = $param_hash->{'timestamp'};              my $timestamp = $param_hash->{'timestamp'};
             # use EXT to get the weight  
             my $weight  = &Apache::lonnet::EXT('resource.'.$part.'.weight',  
                                                $current_symb,$sdom,$sname);  
             # Give the weight back to the user  
             $param_hash->{'resource.'.$part.'.weight'}=$weight;  
             #              #
             $solved      = '' if (! defined($awarded));              $solved      = '' if (! defined($awarded));
             $tries       = '' if (! defined($tries));              $tries       = '' if (! defined($tries));
Line 896  sub update_student_data { Line 888  sub update_student_data {
             $awarddetail = '' if (! defined($awarddetail));              $awarddetail = '' if (! defined($awarddetail));
             $newstring = "('".join("','",$symb_id,$student_id,$part_id,              $newstring = "('".join("','",$symb_id,$student_id,$part_id,
                                    $solved,$tries,$awarded,$award,                                     $solved,$tries,$awarded,$award,
                                    $awarddetail,$timestamp,$weight)."'),\n";                                     $awarddetail,$timestamp)."'),\n";
             $store_performance_command .= $newstring;              $store_performance_command .= $newstring;
             $rows_stored++;              $rows_stored++;
         }          }
Line 1039  sub get_student_data_from_performance_ca Line 1031  sub get_student_data_from_performance_ca
     my $dbh = &Apache::lonmysql::get_dbh();      my $dbh = &Apache::lonmysql::get_dbh();
     my $request = "SELECT ".      my $request = "SELECT ".
         "d.symb,c.part,a.solved,a.tries,a.awarded,a.award,a.awarddetail,".          "d.symb,c.part,a.solved,a.tries,a.awarded,a.award,a.awarddetail,".
             "a.timestamp,a.weight ";              "a.timestamp ";
     if (defined($student)) {      if (defined($student)) {
         $request .= "FROM $student_table AS b ".          $request .= "FROM $student_table AS b ".
             "LEFT JOIN $performance_table AS a ON b.student_id=a.student_id ".              "LEFT JOIN $performance_table AS a ON b.student_id=a.student_id ".
Line 1068  sub get_student_data_from_performance_ca Line 1060  sub get_student_data_from_performance_ca
     }      }
     foreach my $row (@{$sth->fetchall_arrayref}) {      foreach my $row (@{$sth->fetchall_arrayref}) {
         $rows_retrieved++;          $rows_retrieved++;
         my ($symb,$part,$solved,$tries,$awarded,$award,$awarddetail,$time,$weight) =           my ($symb,$part,$solved,$tries,$awarded,$award,$awarddetail,$time) = 
             (@$row);              (@$row);
         my $base = 'resource.'.$part;          my $base = 'resource.'.$part;
         $studentdata->{$symb}->{$base.'.solved'}  = $solved;          $studentdata->{$symb}->{$base.'.solved'}  = $solved;
Line 1077  sub get_student_data_from_performance_ca Line 1069  sub get_student_data_from_performance_ca
         $studentdata->{$symb}->{$base.'.award'}   = $award;          $studentdata->{$symb}->{$base.'.award'}   = $award;
         $studentdata->{$symb}->{$base.'.awarddetail'} = $awarddetail;          $studentdata->{$symb}->{$base.'.awarddetail'} = $awarddetail;
         $studentdata->{$symb}->{'timestamp'} = $time if (defined($time) && $time ne '');          $studentdata->{$symb}->{'timestamp'} = $time if (defined($time) && $time ne '');
         $studentdata->{$symb}->{'resource.'.$part.'.weight'}=$weight;  
     }      }
     return $studentdata;      return $studentdata;
 }  }
Line 1159  the students you are concerned with prio Line 1150  the students you are concerned with prio
   
 Inputs: $students, $symb, $part, $courseid  Inputs: $students, $symb, $part, $courseid
   
   =over 4
   
   =item $students is an array of hash references.  
   Each hash must contain at least the 'username' and 'domain' of a student.
   
   =item $symb is the symb for the problem.
   
   =item $part is the part id you need statistics for
   
   =item $courseid is the course id, of course!
   
   =back
   
   Outputs: See the code for up to date information.  A hash reference is
   returned.  The hash has the following keys defined:
   
   =over 4
   
   =item num_students The number of students attempting the problem
         
   =item tries The total number of tries for the students
         
   =item max_tries The maximum number of tries taken
         
   =item mean_tries The average number of tries
         
   =item num_solved The number of students able to solve the problem
         
   =item num_override The number of students whose answer is 'correct_by_override'
         
   =item deg_of_diff The degree of difficulty of the problem
         
   =item std_tries The standard deviation of the number of tries
         
   =item skew_tries The skew of the number of tries
   
   =item per_wrong The number of students attempting the problem who were not
   able to answer it correctly.
   
   =back
   
 =cut  =cut
   
 ################################################  ################################################
Line 1191  sub get_problem_statistics { Line 1223  sub get_problem_statistics {
         'CREATE TEMPORARY TABLE '.$stats_table.          'CREATE TEMPORARY TABLE '.$stats_table.
             ' SELECT student_id,solved,award,tries FROM '.$performance_table.              ' SELECT student_id,solved,award,tries FROM '.$performance_table.
                 ' WHERE symb_id='.$symb_id.' AND part_id='.$part_id;                  ' WHERE symb_id='.$symb_id.' AND part_id='.$part_id;
       if (defined($students)) {
           $request .= ' AND ('.
               join(' OR ', map {'student_id='.
                                     &get_student_id($_->{'username'},
                                                     $_->{'domain'})
                                     } @$students
                    ).')';
       }
 #    &Apache::lonnet::logthis($request);  #    &Apache::lonnet::logthis($request);
     $dbh->do($request);      $dbh->do($request);
     my ($num,$tries,$mod,$mean,$STD) = &execute_SQL_request      my ($num,$tries,$mod,$mean,$STD) = &execute_SQL_request
Line 1211  sub get_problem_statistics { Line 1251  sub get_problem_statistics {
     $solved = 0 if (! defined($solved));      $solved = 0 if (! defined($solved));
     #      #
     my $DegOfDiff = 'nan';      my $DegOfDiff = 'nan';
     $DegOfDiff = 1-($Solved + $solved)/$tries if ($tries>0);      $DegOfDiff = 1-($Solved)/$tries if ($tries>0);
   
     my $SKEW = 'nan';      my $SKEW = 'nan';
       my $wrongpercent = 0;
     if ($num > 0) {      if ($num > 0) {
         ($SKEW) = &execute_SQL_request($dbh,'SELECT SQRT(SUM('.          ($SKEW) = &execute_SQL_request($dbh,'SELECT SQRT(SUM('.
                                      'POWER(tries - '.$STD.',3)'.                                       'POWER(tries - '.$STD.',3)'.
                                      '))/'.$num.' FROM '.$stats_table);                                       '))/'.$num.' FROM '.$stats_table);
           $wrongpercent=int(10*100*($num-$Solved+$solved)/$num)/10;
     }      }
     #      #
     $dbh->do('DROP TABLE '.$stats_table);  # May return an error      $dbh->do('DROP TABLE '.$stats_table);  # May return an error
     return ($num,$tries,$mod,$mean,$Solved,$solved,$DegOfDiff,$STD,$SKEW);      return { num_students => $num,
                tries        => $tries,
                max_tries    => $mod,
                mean_tries   => $mean,
                std_tries    => $STD,
                skew_tries   => $SKEW,
                num_solved   => $Solved,
                num_override => $solved,
                per_wrong    => $wrongpercent,
                deg_of_diff  => $DegOfDiff }
 }  }
   
 sub execute_SQL_request {  sub execute_SQL_request {

Removed from v.1.62  
changed lines
  Added in v.1.66


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