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

www lon-capa-cvs@mail.lon-capa.org
Tue, 23 Dec 2003 15:47:26 -0000


www		Tue Dec 23 10:47:26 2003 EDT

  Modified files:              
    /loncom/metadata_database	searchcat.pl 
  Log:
  Just saving my work on retrieving dynamic metadata - this does not work yet.
  
  
Index: loncom/metadata_database/searchcat.pl
diff -u loncom/metadata_database/searchcat.pl:1.43 loncom/metadata_database/searchcat.pl:1.44
--- loncom/metadata_database/searchcat.pl:1.43	Wed Oct  8 15:38:41 2003
+++ loncom/metadata_database/searchcat.pl	Tue Dec 23 10:47:26 2003
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # searchcat.pl "Search Catalog" batch script
 #
-# $Id: searchcat.pl,v 1.43 2003/10/08 19:38:41 www Exp $
+# $Id: searchcat.pl,v 1.44 2003/12/23 15:47:26 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -124,82 +124,85 @@
 # ------------------------------------------- Code to evaluate dynamic metadata
 
 sub dynamicmeta {
-
     my $url=&declutter(shift);
     $url=~s/\.meta$//;
     my %returnhash=();
     my ($adomain,$aauthor)=($url=~/^(\w+)\/(\w+)\//);
     my $prodir=&propath($adomain,$aauthor);
-    if ((tie(%evaldata,'GDBM_File',
-            $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',
-		      'goto'         => 'add',
-		      'comefrom'     => '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]+)$';
-       while (my ($esckey,$value)=each %evaldata) {
-	 $key=&unescape($esckey);
-	 if ($key=~/$regexp/) {
-	    my $ctype=$1;
-            if (defined($cnt{$ctype})) { 
-               $cnt{$ctype}++; 
-            } else { 
-               $cnt{$ctype}=1; 
-            }
-            unless ($listitems{$ctype} eq 'app') {
-               if (defined($sum{$ctype})) {
-                  $sum{$ctype}+=$value;
-   	       } else {
-                  $sum{$ctype}=$value;
-	       }
-            } else {
-               if (defined($sum{$ctype})) {
-                  if ($value) {
-                     $sum{$ctype}.='<hr>'.$value;
-	          }
- 	       } else {
-	             $sum{$ctype}=''.$value;
-	       }
+# Get metadata except counts
+    if (tie(%evaldata,'GDBM_File',
+            $prodir.'/nohist_resevaldata.db',&GDBM_READER(),0640)) {
+	my %sum=();
+	my %cnt=();
+	my %concat=();
+	my %listitems=(
+		       'course'       => 'add',
+		       'goto'         => 'add',
+		       'comefrom'     => '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]+)$';
+	while (my ($esckey,$value)=each %evaldata) {
+	    $key=&unescape($esckey);
+	    if ($key=~/$regexp/) {
+		my ($item,$purl,$cat)=split(/___/,$_);
+		if (defined($cnt{$cat})) { $cnt{$cat}++; } else { $cnt{$cat}=1; }
+		unless ($listitems{$cat} eq 'app') {
+		    if (defined($sum{$cat})) {
+			$sum{$cat}+=$evaldata{$_};
+			$concat{$cat}.=','.$item;
+		    } else {
+			$sum{$cat}=$evaldata{$_};
+			$concat{$cat}=$item;
+		    }
+		} else {
+		    if (defined($sum{$cat})) {
+			if ($evaldata{$_}) {
+			    $sum{$cat}.='<hr>'.$evaldata{$_};
+			}
+		    } else {
+			$sum{$cat}=''.$evaldata{$_};
+		    }
+		}
 	    }
-	    if ($ctype ne 'count') {
-	       $newevaldata{$esckey}=$value;
-	   }
-	 }
-      }
-      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;
+	}
+	untie(%evaldata);
+    }
+# construct the return hash for non-count data
+    my %returnhash=();
+    while ($_=each(%cnt)) {
+	if ($listitems{$_} eq 'avg') {
+	    $returnhash{$_}=int(($sum{$_}/$cnt{$_})*100.0+0.5)/100.0;
+	} elsif ($listitems{$_} eq 'cnt') {
+	    $returnhash{$_}=$cnt{$_};
+	} else {
+	    $returnhash{$_}=$sum{$_};
+	}
+	$returnhash{$_.'_list'}=$concat{$_};
+    }
+# get count
+    if (tie(%evaldata,'GDBM_File',
+            $prodir.'/nohist_accesscount.db',&GDBM_READER(),0640)) {
+	if (! exists($evaldata{$uri})) {
+	    $returnhash{'count'}='Not Available';
+	} else {
+	    $returnhash{'count'}=$evaldata{$uri};
+	}
+	untie %evaldata;
+    }
+    return %returnhash;
 }
   
 # ----------------- Code to enable 'find' subroutine listing of the .meta files
@@ -296,9 +299,8 @@
 
 foreach my $user (@homeusers) {
     print LOG "\n=== User: ".$user."\n\n";
-    # Remove left-over db-files from potentially crashed searchcat run
+
     my $prodir=&propath($perlvar{'lonDefDomain'},$user);
-    unlink($prodir.'/nohist_new_resevaldata.db');
     # Use find.pl
     undef @metalist;
     @metalist=();
@@ -340,12 +342,6 @@
     # Need to, perhaps, remove stale SQL database records.
     # ... not yet implemented
         
-    # ------------------------------------------- Copy over the new db-files
-    #
-
-	    system('mv '.$prodir.'/nohist_new_resevaldata.db '.
-		   $prodir.'/nohist_resevaldata.db');
-
 }
 # --------------------------------------------------- Close database connection
 $dbh->disconnect;