Diff for /loncom/metadata_database/LONCAPA/lonmetadata.pm between versions 1.7 and 1.8

version 1.7, 2004/04/14 20:35:29 version 1.8, 2004/04/16 21:43:56
Line 410  sub metadata_col_to_hash { Line 410  sub metadata_col_to_hash {
   
 =pod  =pod
   
   =item nohist_resevaldata.db data structure
   
   The nohist_resevaldata.db file has the following possible keys:
   
    Statistics Data (values are integers, perl times, or real numbers)
    ------------------------------------------
    $course___$resource___avetries
    $course___$resource___count
    $course___$resource___difficulty
    $course___$resource___stdno
    $course___$resource___timestamp
   
    Evaluation Data (values are on a 1 to 5 scale)
    ------------------------------------------
    $username@$dom___$resource___clear
    $username@$dom___$resource___comments
    $username@$dom___$resource___depth
    $username@$dom___$resource___technical
    $username@$dom___$resource___helpful
   
    Course Context Data
    ------------------------------------------
    $course___$resource___course       course id
    $course___$resource___comefrom     resource preceeding this resource
    $course___$resource___goto         resource following this resource
    $course___$resource___usage        resource containing this resource
   
    New statistical data storage
    ------------------------------------------
    $course&$sec&$numstud___$resource___stats
       $sec is a string describing the sections: all, 1 2, 1 2 3,...
       Value is a '&' deliminated list of key=value pairs.
       Possible keys are (currently) disc,course,sections,difficulty, 
       stdno, timestamp
   
   =cut
   
   ######################################################################
   ######################################################################
   
   =pod
   
 =item &process_reseval_data   =item &process_reseval_data 
   
 Process a nohist_resevaldata hash into a more complex data structure.  Process a nohist_resevaldata hash into a more complex data structure.
Line 474  sub process_reseval_data { Line 516  sub process_reseval_data {
             # $source is $cid\_$sec\_$stdno              # $source is $cid\_$sec\_$stdno
             # $value is stat1=value&stat2=value&stat3=value,....              # $value is stat1=value&stat2=value&stat3=value,....
             #              #
             my ($cid,$sec,$stdno)=split('_',$source);              my ($cid,$sec,$stdno)=split('&',$source);
             my $crssec = $cid.'_'.$sec;              my $crssec = $cid.'&'.$sec;
             my @Data = split('&',$value);              my @Data = split('&',$value);
             my %Statistics;              my %Statistics;
             while (my ($key,$value) = split('=',pop(@Data))) {              while (my ($key,$value) = split('=',pop(@Data))) {
                 $Statistics{$key} = $value;                  $Statistics{$key} = $value;
             }              }
               $sec =~ s:("$|^")::g;
               $Statistics{'sections'} = $sec;
             #              #
             # Only store the data if the number of students is greater              # Only store the data if the number of students is greater
             # than the data already stored              # than the data already stored
Line 522  sub process_dynamic_metadata { Line 566  sub process_dynamic_metadata {
     my %data;      my %data;
     my $resdata = $DynamicData->{$url};      my $resdata = $DynamicData->{$url};
     #      #
     # Get the statistical data      # Get the statistical data - Use a weighted average
     foreach my $type (qw/avetries difficulty stdno/) {      foreach my $type (qw/avetries difficulty disc/) {
         my $count;          my $studentcount;
         my $sum;          my $sum;
         my @Values;          my @Values;
           my @Students;
         #          #
           # Old data
         foreach my $coursedata (values(%{$resdata->{'statistics'}}),          foreach my $coursedata (values(%{$resdata->{'statistics'}}),
                                 values(%{$resdata->{'stats'}})) {                                  values(%{$resdata->{'stats'}})) {
             if (ref($coursedata) eq 'HASH' && exists($coursedata->{$type})) {              if (ref($coursedata) eq 'HASH' && exists($coursedata->{$type})) {
                 $count++;                  $studentcount += $coursedata->{'stdno'};
                 $sum += $coursedata->{$type};                  $sum += ($coursedata->{$type}*$coursedata->{'stdno'});
                 push(@Values,$coursedata->{$type});                  push(@Values,$coursedata->{$type});
                   push(@Students,$coursedata->{'stdno'});
             }              }
         }          }
         if ($count) {          if (exists($resdata->{'stats'})) {
             $data{$type} = $sum/$count;              foreach my $identifier (sort(keys(%{$resdata->{'stats'}}))) {
                   my $coursedata = $resdata->{'stats'}->{$identifier};
                   $studentcount += $coursedata->{'stdno'};
                   $sum += $coursedata->{$type}*$coursedata->{'stdno'};
                   push(@Values,$coursedata->{$type});                
                   push(@Students,$coursedata->{'stdno'});
               }
           }
           #
           # New data
           if (defined($studentcount) && $studentcount>0) {
               $data{$type} = $sum/$studentcount;
             $data{$type.'_list'} = join(',',@Values);              $data{$type.'_list'} = join(',',@Values);
         }          }
     }      }
     #      #
       # Find out the number of students who have completed the resource...
       my $stdno;
       foreach my $coursedata (values(%{$resdata->{'statistics'}}),
                               values(%{$resdata->{'stats'}})) {
           if (ref($coursedata) eq 'HASH' && exists($coursedata->{'stdno'})) {
               $stdno += $coursedata->{'stdno'};
           }
       }
       if (exists($resdata->{'stats'})) {
           #
           # For the number of students, take the maximum found for the class
           my $current_course;
           my $coursemax=0;
           foreach my $identifier (sort(keys(%{$resdata->{'stats'}}))) {
               my $coursedata = $resdata->{'stats'}->{$identifier};
               if (! defined($current_course)) {
                   $current_course = $coursedata->{'course'};
               }
               if ($current_course ne $coursedata->{'course'}) {
                   $stdno += $coursemax;
                   $coursemax = 0;
                   $current_course = $coursedata->{'course'};                
               }
               if ($coursemax < $coursedata->{'stdno'}) {
                   $coursemax = $coursedata->{'stdno'};
               }
           }
           $stdno += $coursemax; # pick up the final course in the list
       }
       $data{'stdno'}=$stdno;
       #
     # Get the context data      # Get the context data
     foreach my $type (qw/course goto comefrom/) {      foreach my $type (qw/course goto comefrom/) {
         if (defined($resdata->{$type}) &&           if (defined($resdata->{$type}) && 
Line 581  sub process_dynamic_metadata { Line 670  sub process_dynamic_metadata {
     $comments .= '</div>';      $comments .= '</div>';
     $data{'comments'} = $comments;      $data{'comments'} = $comments;
     #      #
       if (exists($resdata->{'stats'})) {
           $data{'stats'} = $resdata->{'stats'};
       }
       #
     return %data;      return %data;
 }  }
   
   sub dynamic_metadata_storage {
       my ($data) = @_;
       my %Store;
       my $courseid = $data->{'course'};
       my $sections = $data->{'sections'};
       my $numstu = $data->{'num_students'};
       my $urlres = $data->{'urlres'};
       my $key = $courseid.'&'.$sections.'&'.$numstu.'___'.$urlres.'___stats';
       $Store{$key} =
           'course='.$courseid.'&'.
           'sections='.$sections.'&'.
           'timestamp='.time.'&'.
           'stdno='.$data->{'num_students'}.'&'.
           'avetries='.$data->{'mean_tries'}.'&'.
           'difficulty='.$data->{'deg_of_diff'};
       if (exists($data->{'deg_of_disc'})) {
           $Store{$key} .= '&'.'disc='.$data->{'deg_of_disc'};
       }
       return %Store;
   }
   
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################

Removed from v.1.7  
changed lines
  Added in v.1.8


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