--- loncom/interface/groupsort.pm 2005/06/09 22:06:09 1.33
+++ loncom/interface/groupsort.pm 2007/07/11 23:51:19 1.55
@@ -2,7 +2,7 @@
# The LON-CAPA group sort handler
# Allows for sorting prior to import into RAT.
#
-# $Id: groupsort.pm,v 1.33 2005/06/09 22:06:09 www Exp $
+# $Id: groupsort.pm,v 1.55 2007/07/11 23:51:19 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -37,93 +37,60 @@ use GDBM_File;
use Apache::loncommon;
use Apache::lonlocal;
use Apache::lonnet;
+use LONCAPA();
my $iconpath; # variable to be accessible to multiple subroutines
my %hash; # variable to tie to user specific database
-sub readfromdb {
- my ($r,$shash,$thash)=@_;
-
- my $diropendb;
-# ------------------------------ which file do we open? Easy if explictly given
- if ($env{'form.catalogmode'} eq 'groupsearch') {
- $diropendb =
- "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_searchcat.db";
- } elsif ($env{'form.catalogmode'} eq 'groupimport') {
- $diropendb =
- "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_indexer.db";
- } elsif ($env{'form.catalogmode'} eq 'groupsec') {
- $diropendb =
- "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_groupsec.db";
- } else {
-# --------------------- not explicitly given, choose the one most recently used
- my @dbfn;
- my @dbst;
-
- $dbfn[0] =
- "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_searchcat.db";
- $dbst[0]=-1;
- if (-e $dbfn[0]) {
- $dbst[0]=(stat($dbfn[0]))[9];
+sub update_actions_hash {
+ my ($hash) = @_;
+ my $acts=$env{'form.acts'};
+ my @Acts=split(/b/,$acts);
+ my %ahash;
+ my %achash;
+ my $ac=0;
+ # some initial hashes for working with data
+ foreach (@Acts) {
+ my ($state,$ref)=split(/a/);
+ $ahash{$ref}=$state;
+ $achash{$ref}=$ac;
+ $ac++;
+ }
+ # sorting through the actions and changing the global database hash
+ foreach my $key (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) {
+ if ($ahash{$key} eq '1') {
+ $hash->{'store_'.$hash{'pre_'.$key.'_link'}}=
+ $hash->{'pre_'.$key.'_title'};
+ $hash->{'storectr_'.$hash{'pre_'.$key.'_link'}}=
+ $hash->{'storectr'}+0;
+ $hash->{'storectr'}++;
}
- $dbfn[1] =
- "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_indexer.db";
- $dbst[1]=-1;
- if (-e $dbfn[1]) {
- $dbst[1]=(stat($dbfn[1]))[9];
- }
- $dbfn[2] =
- "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_groupsec.db";
- $dbst[2]=-1;
- if (-e $dbfn[2]) {
- $dbst[2]=(stat($dbfn[2]))[9];
- }
-# Expand here for more modes
-# ....
+ if ($ahash{$key} eq '0') {
+ if ($hash->{'store_'.$hash{'pre_'.$key.'_link'}}) {
+ delete($hash->{'store_'.$hash{'pre_'.$key.'_link'}});
+ }
+ }
+ }
+ # deleting the previously cached listing
+ foreach my $key (keys(%{ $hash })) {
+ next if ($key !~ /^pre_(\d+)_link/);
+ my $which = $1;
+ delete($hash->{'pre_'.$which.'_title'});
+ delete($hash->{'pre_'.$which.'_link'});
+ }
+}
-# Okay, find most recent existing
+sub readfromdb {
+ my ($r,$shash,$thash)=@_;
- my $newest=0;
- $diropendb='';
- for (my $i=0; $i<=$#dbfn; $i++) {
- if ($dbst[$i]>$newest) {
- $newest=$dbst[$i];
- $diropendb=$dbfn[$i];
- }
- }
+ my $diropendb =
+ "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_sel_res.db";
- }
# ----------------------------- diropendb is now the filename of the db to open
if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {
- my $acts = $env{'form.acts'};
- my @Acts = split(/b/,$acts);
- my %ahash;
- my %achash;
- my $ac = 0;
- foreach (@Acts) {
- my ($state,$ref) = split(/a/);
- $ahash{$ref} = $state;
- $achash{$ref} = $ac;
- $ac++;
- }
- foreach (sort {$achash{$a} <=> $achash{$b}} (keys %ahash)) {
- my $key = $_;
- if ($ahash{$key} eq '1') {
-# my $keyz=join("
",keys %hash);
-# print "
$key
$keyz".$hash{'pre_'.$key.'_link'}."
\n";
- $hash{'store_'.$hash{'pre_'.$key.'_link'}} =
- $hash{'pre_'.$key.'_title'};
- $hash{'storectr_'.$hash{'pre_'.$key.'_link'}} =
- $hash{'storectr'}+0;
- $hash{'storectr'}++;
- }
- if ($ahash{$key} eq '0') {
- if ($hash{'store_'.$hash{'pre_'.$key.'_link'}}) {
- delete $hash{'store_'.$hash{'pre_'.$key.'_link'}};
- }
- }
- }
+ &update_actions_hash(\%hash);
+
foreach (keys %hash) {
if ($_ =~ /^store_/) {
my $key = $_;
@@ -180,8 +147,7 @@ sub readfromdb {
}
}
} else {
- $r->print('Unable to tie hash to db file