--- loncom/interface/groupsort.pm 2006/03/26 19:44:45 1.41
+++ 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.41 2006/03/26 19:44:45 banghart 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 = $_;
@@ -222,7 +189,7 @@ sub readfromfile {
my $url=$token->[2]->{'src'};
my $name=$token->[2]->{'title'};
- $name=~s/ \[\((\d+)\,(\w+)\,(\w+)\)\]$//;
+ $name=~s/ \[\((\d+)\,($LONCAPA::username_re)\,($LONCAPA::domain_re)\)\]$//;
if ($1) {
$$nhash{$url}='
'.&mt('Removed by ').
&Apache::loncommon::plainname($2,$3).', '.
@@ -239,12 +206,32 @@ sub readfromfile {
return ($shash,$thash);
}
+# --------------------------------------------------------- Read from bookmarks
+
+sub readfrombookmarks {
+ my ($r,$shash,$thash)=@_;
+ my %bookmarks=&Apache::lonnet::dump('bookmarks');
+# the bookmark "hash" is just one entry
+# it's a javascript program code with arguments like ('title','url');
+ my @bookmarks=($bookmarks{'bookmarks'}=~/\((?:\'([^\']+)\'\,\'([^\']+)\'|\"([^\"]+)\"\,\"([^\"]+)\")\)\;/g);
+ my $order=1;
+ for (my $index=0;$index<($#bookmarks+1)/2;$index++) {
+ if ($bookmarks[$index*2+1]) {
+ $$thash{$bookmarks[$index*2+1]}=$bookmarks[$index*2];
+ $$thash{$bookmarks[$index*2+1]}=~s/^LON\-CAPA\s+//;
+ $$shash{$bookmarks[$index*2+1]}=$order;
+ $order++;
+ }
+ }
+ return ($shash,$thash);
+}
+
# ---------------------------------------------------------------- Main Handler
sub handler {
my $r = shift;
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['acts','catalogmode','mode','readfile','recover']);
+ ['acts','mode','readfile','recover','bookmarks']);
# color scheme
my $fileclr = '#ffffe6';
my $titleclr = '#ddffff';
@@ -257,7 +244,7 @@ sub handler {
my $finishimport='';
my $begincondition='';
my $endcondition='';
- if ($env{'form.readfile'}) {
+ if (($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
$begincondition='if (eval("document.forms.groupsort.include"+num+".checked")) {';
$endcondition='}';
}
@@ -341,18 +328,21 @@ END
if ($env{'form.readfile'}) {
&readfromfile($r,\%shash,\%thash,\%nhash);
+ } elsif ($env{'form.bookmarks'}) {
+ &readfrombookmarks($r,\%shash,\%thash);
} else {
&readfromdb($r,\%shash,\%thash);
}
my $ctr = 0;
my $clen = scalar(keys %shash);
- if (($clen > 1) || ($env{'form.readfile'})) {
+ if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
my %lt=&Apache::lonlocal::texthash(
'fin'=> 'Finalize order of resources',
- 'gb' => 'Go Back',
- 'ns' => 'New Search',
+ 'ci' => 'Continue Import',
+ 'cs' => 'Continue Search',
'fi' => 'Finish Import',
+ 're' => 'Recover Checked',
'ca' => 'Cancel',
'co' => 'Change Order',
'ti' => 'Title',
@@ -370,33 +360,36 @@ END
+
END
- # --- Expand here if "GO BACK" button desired
- if ($env{'form.catalogmode'} eq 'groupimport') {
- my $resurl = &Apache::loncommon::lastresurl();
+ $r->print(&Apache::loncommon::inhibit_menu_check('input'));
+ # ---
+
+ if ($env{'form.recover'}) {
$r->print(<
+
+
END
- }
- if ($env{'form.catalogmode'} eq 'groupsearch') {
+ } else {
+ # --- Continue Buttons
+ my $resurl =
+ &Apache::loncommon::escape_single(&Apache::loncommon::lastresurl());
$r->print(<
-END
- }
- # ---
-
- $r->print(<
+
END
+ }
$r->print("
");
$r->print("\n");
- if ($env{'form.readfile'}) {
+ if (($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
$r->print("$lt{'in'} | \n");
} else {
$r->print("$lt{'co'} | \n");
@@ -414,23 +407,25 @@ END
END
+ $r->print(&Apache::loncommon::inhibit_menu_check('input'));
+
}
foreach (sort {$shash{$a}<=>$shash{$b}} (keys %shash)) {
my $key=$_;
$ctr++;
my $iconname=&Apache::loncommon::icon($key);
- if (($clen > 1) || ($env{'form.readfile'})) {
+ if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
$r->print(" ");
- if ($env{'form.readfile'}) {
+ if (($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
$r->print(&checkbox($ctr-1));
} else {
$r->print(&movers($clen,$ctr));
}
}
$r->print(&hidden($ctr-1,$thash{$key},$key));
- if (($clen > 1) || ($env{'form.readfile'})) {
+ if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
$r->print(" | ");
- unless ($env{'form.readfile'}) {
+ unless (($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
$r->print("".
&select_box($clen,$ctr).
" | ");
@@ -442,7 +437,7 @@ END
$r->print("$key \n");
}
}
- if (($clen > 1) || ($env{'form.readfile'})) {
+ if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
$r->print("
|
");
} else {
$r->print(<';
+ $filelink=~s|^/ext/|http://|;
$string .= '';
return $string;