[LON-CAPA-cvs] cvs: loncom /metadata_database searchcat.pl

www lon-capa-cvs@mail.lon-capa.org
Wed, 25 Jun 2003 14:42:00 -0000


www		Wed Jun 25 10:42:00 2003 EDT

  Modified files:              
    /loncom/metadata_database	searchcat.pl 
  Log:
  Part of bug #1638: Rollback of changes to dynamic_metadata routine to version
  1.32. New routine had been corrupting the data file.
  
  
Index: loncom/metadata_database/searchcat.pl
diff -u loncom/metadata_database/searchcat.pl:1.34 loncom/metadata_database/searchcat.pl:1.35
--- loncom/metadata_database/searchcat.pl:1.34	Thu Jun 19 16:24:57 2003
+++ loncom/metadata_database/searchcat.pl	Wed Jun 25 10:42:00 2003
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # searchcat.pl "Search Catalog" batch script
 #
-# $Id: searchcat.pl,v 1.34 2003/06/19 20:24:57 matthew Exp $
+# $Id: searchcat.pl,v 1.35 2003/06/25 14:42:00 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -104,75 +104,75 @@
     my ($adomain,$aauthor)=($url=~/^(\w+)\/(\w+)\//);
     my $prodir=&propath($adomain,$aauthor);
     if ((tie(%evaldata,'GDBM_File',
-             $prodir.'/nohist_resevaldata.db',&GDBM_READER(),0640)) &&
+            $prodir.'/nohist_resevaldata.db',&GDBM_READER(),0640)) &&
         (tie(%newevaldata,'GDBM_File',
-             $prodir.'/nohist_new_resevaldata.db',&GDBM_WRCREAT(),0640))) {
-        my %sum=();
-        my %cnt=();
-        my %listitems=('count'        => 'add',
-                       'course'       => 'add',
-                       'avetries'     => 'avg',
-                       'stdno'        => 'add',
-                       'difficulty'   => 'avg',
-                       'clear'        => 'avg',
-                       'technical'    => 'avg',
-                       'helpful'      => 'avg',
-                       'correct'      => 'avg',
-                       'depth'        => 'avg',
-                       'comments'     => 'app',
-                       'usage'        => 'cnt'
-                       );
-        my $regexp=$url;
-        $regexp=~s/(\W)/\\$1/g;
-        $regexp='___'.$regexp.'___([a-z]+)$';
-        study($regexp);
-        while (my ($key,$value) = each(%evaldata)) {
-            $key=&unescape($key);
-            next if ($key !~ /$regexp/);
-            my $ctype=$1;
+            $prodir.'/nohist_new_resevaldata.db',&GDBM_WRCREAT(),0640))) {
+       my %sum=();
+       my %cnt=();
+       my %listitems=('count'        => 'add',
+                      'course'       => 'add',
+                      'avetries'     => 'avg',
+                      'stdno'        => 'add',
+                      'difficulty'   => 'avg',
+                      'clear'        => 'avg',
+                      'technical'    => 'avg',
+                      'helpful'      => 'avg',
+                      'correct'      => 'avg',
+                      'depth'        => 'avg',
+                      'comments'     => 'app',
+                      'usage'        => 'cnt'
+                      );
+       my $regexp=$url;
+       $regexp=~s/(\W)/\\$1/g;
+       $regexp='___'.$regexp.'___([a-z]+)$';
+       foreach (keys %evaldata) {
+	 my $key=&unescape($_);
+	 if ($key=~/$regexp/) {
+	    my $ctype=$1;
             if (defined($cnt{$ctype})) { 
-                $cnt{$ctype}++; 
+               $cnt{$ctype}++; 
             } else { 
-                $cnt{$ctype}=1; 
+               $cnt{$ctype}=1; 
             }
             unless ($listitems{$ctype} eq 'app') {
-                if (defined($sum{$ctype})) {
-                    $sum{$ctype}+=$value;
-                } else {
-                    $sum{$ctype}=$value;
-                }
+               if (defined($sum{$ctype})) {
+                  $sum{$ctype}+=$evaldata{$_};
+   	       } else {
+                  $sum{$ctype}=$evaldata{$_};
+	       }
             } else {
-                if (defined($sum{$ctype})) {
-                    if ($value) {
-                        $sum{$ctype}.='<hr>'.$value;
-                    }
-                } else {
-                    $sum{$ctype}=''.$value;
-                }
-            }
-            if ($ctype ne 'count') {
-                $newevaldata{$_}=$value;
-            }
-        }
-        while (my($key,$value) = each(%cnt)) {
-            if ($listitems{$key} eq 'avg') {
-                $returnhash{$key}=int(($sum{$key}/$value)*100.0+0.5)/100.0;
-            } elsif ($listitems{$key} eq 'cnt') {
-                $returnhash{$key}=$value;
-            } else {
-                $returnhash{$key}=$sum{$key};
-            }
-        }
-        if ($returnhash{'count'}) {
-            my $newkey=$$.'_'.time.'_searchcat___'.&escape($url).'___count';
-            $newevaldata{$newkey}=$returnhash{'count'};
-        }
-        untie(%evaldata);
-        untie(%newevaldata);
-    }
-    return %returnhash;
+               if (defined($sum{$ctype})) {
+                  if ($evaldata{$_}) {
+                     $sum{$ctype}.='<hr>'.$evaldata{$_};
+	          }
+ 	       } else {
+	             $sum{$ctype}=''.$evaldata{$_};
+	       }
+	    }
+	    if ($ctype ne 'count') {
+	       $newevaldata{$_}=$evaldata{$_};
+	   }
+	 }
+      }
+      foreach (keys %cnt) {
+         if ($listitems{$_} eq 'avg') {
+	     $returnhash{$_}=int(($sum{$_}/$cnt{$_})*100.0+0.5)/100.0;
+         } elsif ($listitems{$_} eq 'cnt') {
+             $returnhash{$_}=$cnt{$_};
+         } else {
+             $returnhash{$_}=$sum{$_};
+         }
+     }
+     if ($returnhash{'count'}) {
+         my $newkey=$$.'_'.time.'_searchcat___'.&escape($url).'___count';
+         $newevaldata{$newkey}=$returnhash{'count'};
+     }
+     untie(%evaldata);
+     untie(%newevaldata);
+   }
+   return %returnhash;
 }
-
+  
 # ----------------- Code to enable 'find' subroutine listing of the .meta files
 require "find.pl";
 sub wanted {