--- loncom/interface/groupsort.pm 2005/06/10 02:19:51 1.34 +++ loncom/interface/groupsort.pm 2007/07/11 20:32:15 1.54 @@ -2,7 +2,7 @@ # The LON-CAPA group sort handler # Allows for sorting prior to import into RAT. # -# $Id: groupsort.pm,v 1.34 2005/06/10 02:19:51 www Exp $ +# $Id: groupsort.pm,v 1.54 2007/07/11 20:32:15 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,6 +37,7 @@ 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 @@ -45,55 +46,9 @@ my %hash; # variable to tie to user spec 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]; - } - $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 -# .... - -# Okay, find most recent existing + my $diropendb = + "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_sel_res.db"; - my $newest=0; - $diropendb=''; - for (my $i=0; $i<=$#dbfn; $i++) { - if ($dbst[$i]>$newest) { - $newest=$dbst[$i]; - $diropendb=$dbfn[$i]; - } - } - - } # ----------------------------- diropendb is now the filename of the db to open if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) { my $acts = $env{'form.acts'}; @@ -110,8 +65,9 @@ sub readfromdb { 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"; + if ($hash{'pre_'.$key.'_title'} eq 'Not_retrieved') { + $hash{'pre_'.$key.'_title'} = &Apache::lonnet::gettitle($hash{'pre_'.$key.'_link'}); + } $hash{'store_'.$hash{'pre_'.$key.'_link'}} = $hash{'pre_'.$key.'_title'}; $hash{'storectr_'.$hash{'pre_'.$key.'_link'}} = @@ -195,12 +151,13 @@ sub cleanup { &Apache::lonnet::logthis('Failed cleanup groupsort: hash'); } } + return OK; } # -------------------------------------------------------------- Read from file sub readfromfile { - my ($r,$shash,$thash)=@_; + my ($r,$shash,$thash,$nhash)=@_; my $cont=&Apache::lonnet::getfile (&Apache::lonnet::filelocation('',$env{'form.readfile'})); if ($cont==-1) { @@ -209,6 +166,7 @@ sub readfromfile { } else { my $parser = HTML::TokeParser->new(\$cont); my $token; + my $n=1; while ($token = $parser->get_token) { if ($token->[0] eq 'S') { if ($token->[1] eq 'resource') { @@ -217,15 +175,19 @@ sub readfromfile { } else { if ($token->[2]->{'type'} eq 'zombie') { next; } } - my $name=$token->[2]->{'title'}; + my $url=$token->[2]->{'src'}; - $name=~s/ \[\((\d+)\,(\w+)\,(\w+)\)\]$//; + my $name=$token->[2]->{'title'}; + $name=~s/ \[\((\d+)\,($LONCAPA::username_re)\,($LONCAPA::domain_re)\)\]$//; if ($1) { - $name.='
'.&mt('Removed by '). + $$nhash{$url}='
'.&mt('Removed by '). &Apache::loncommon::plainname($2,$3).', '. &Apache::lonlocal::locallocaltime($1); } - $r->print('
'.$name); + $name=~s/\&colon\;/\:/g; + $$thash{$url}=$name; + $$shash{$url}=$n; + $n++; } } } @@ -233,12 +195,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'; @@ -249,14 +231,22 @@ sub handler { # finish_import looks different for graphical or "simple" RAT my $finishimport=''; + my $begincondition=''; + my $endcondition=''; + if (($env{'form.readfile'}) || ($env{'form.bookmarks'})) { + $begincondition='if (eval("document.forms.groupsort.include"+num+".checked")) {'; + $endcondition='}'; + } if ($env{'form.mode'} eq 'simple' || $env{'form.mode'} eq '') { $finishimport=(< + my $js = < function insertRowInLastRow() { opener.insertrow(opener.maxrow); opener.addobj(opener.maxrow,'e&2'); @@ -318,7 +306,6 @@ function orderchange(val,newval) { document.forms.groupsort.submit(); } - END # read pertinent machine configuration my $domain = $r->dir_config('lonDefDomain'); @@ -326,27 +313,33 @@ END my %shash; # sort order (key is resource location, value is sort order) my %thash; # title (key is resource location, value is title) + my %nhash; # notes (key is resource location); if ($env{'form.readfile'}) { - &readfromfile($r,\%shash,\%thash); + &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) { + 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', - 'pa' => 'Path' + 'pa' => 'Path', + 'in' => 'Include' ); - $r->print(&Apache::loncommon::bodytag('Sort Imported Resources')); + $r->print(&Apache::loncommon::start_page('Sort Imported Resources', + $js)); $r->print(<$lt{'fin'}
+ + + 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"); - $r->print("\n"); + if (($env{'form.readfile'}) || ($env{'form.bookmarks'})) { + $r->print("\n"); + } else { + $r->print("\n"); + } $r->print("\n"); $r->print("\n"); } else { + $r->print(&Apache::loncommon::start_page(undef,$js, + {'only_body' => 1})); $r->print(< @@ -393,27 +396,37 @@ 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) { + if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) { $r->print(""); + unless (($env{'form.readfile'}) || ($env{'form.bookmarks'})) { + $r->print(""); + } + $r->print("\n"); } } - if ($clen > 1) { + if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) { $r->print("
$lt{'co'}$lt{'in'}$lt{'co'}$lt{'ti'}$lt{'pa'}
"); - $r->print(&movers($clen,$ctr)); + 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) { - $r->print(""); - $r->print(&select_box($clen,$ctr)); - $r->print(""); + if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) { + $r->print("". + &select_box($clen,$ctr). + ""); $r->print(""); $r->print(""); - $r->print("$thash{$key}\n"); + $r->print("$thash{$key}$nhash{$key}\n"); $r->print("$key
"); } else { $r->print(< END } - $r->print(< - -END + + $r->print(&Apache::loncommon::end_page()); return OK; } @@ -435,6 +446,7 @@ sub hidden { my ($sel,$title,$filelink) = @_; my $string = ''; + $filelink=~s|^/ext/|http://|; $string .= ''; return $string; @@ -465,7 +477,7 @@ sub select_box { my $string; $string = ''.&mt('Include').''; +} + 1; __END__