--- loncom/interface/groupsort.pm	2005/06/10 20:43:10	1.37
+++ loncom/interface/groupsort.pm	2006/09/12 22:13:05	1.49
@@ -2,7 +2,7 @@
 # The LON-CAPA group sort handler
 # Allows for sorting prior to import into RAT.
 #
-# $Id: groupsort.pm,v 1.37 2005/06/10 20:43:10 www Exp $
+# $Id: groupsort.pm,v 1.49 2006/09/12 22:13:05 albertel Exp $
 # 
 # Copyright Michigan State University Board of Trustees
 #
@@ -45,55 +45,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 $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'};
@@ -110,8 +64,6 @@ sub readfromdb {
 	foreach (sort {$achash{$a} <=> $achash{$b}} (keys %ahash)) {
 	    my $key = $_;
 	    if ($ahash{$key} eq '1') {
-#		my $keyz=join("<br />",keys %hash);
-#		print "<br />$key<br />$keyz".$hash{'pre_'.$key.'_link'}."<br />\n";
 		$hash{'store_'.$hash{'pre_'.$key.'_link'}} =
 		    $hash{'pre_'.$key.'_title'};
 		$hash{'storectr_'.$hash{'pre_'.$key.'_link'}} =
@@ -195,6 +147,7 @@ sub cleanup {
 	    &Apache::lonnet::logthis('Failed cleanup groupsort: hash');
         }
     }
+    return OK;
 }
 
 # -------------------------------------------------------------- Read from file
@@ -238,12 +191,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';
@@ -256,7 +229,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='}';
     }
@@ -300,12 +273,8 @@ ENDADV
     }
 
 # output start of web page
-    my $html=&Apache::lonxml::xmlbegin();
-    $r->print(<<END);
-$html
-<head>
-<title>The LearningOnline Network With CAPA Group Sorter</title>
-<script language='javascript'>
+    my $js = <<END;
+<script type="text/javascript">
 function insertRowInLastRow() {
     opener.insertrow(opener.maxrow);
     opener.addobj(opener.maxrow,'e&2');
@@ -333,7 +302,6 @@ function orderchange(val,newval) {
     document.forms.groupsort.submit();
 }
 </script>
-</head>
 END
     # read pertinent machine configuration
     my $domain  = $r->dir_config('lonDefDomain');
@@ -345,17 +313,19 @@ 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) {
+    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',
 		'ca' => 'Cancel',
 		'co' => 'Change Order',
@@ -363,7 +333,8 @@ END
 		'pa' => 'Path',
                 'in' => 'Include'
 		);
-	$r->print(&Apache::loncommon::bodytag('Sort Imported Resources'));
+	$r->print(&Apache::loncommon::start_page('Sort Imported Resources',
+						 $js));
 	$r->print(<<END);
 <b><font color="#888888">$lt{'fin'}</font></b>
 <form method='post' action='/adm/groupsort' name='groupsort'
@@ -373,23 +344,19 @@ END
 <input type="hidden" name="newval" value="" />
 <input type="hidden" name="mode" value="$env{'form.mode'}" />
 <input type="hidden" name="readfile" value="$env{'form.readfile'}" />
+<input type="hidden" name="bookmarks" value="$env{'form.bookmarks'}" />
 <input type="hidden" name="recover" value="$env{'form.recover'}" />
 END
 
-        # --- Expand here if "GO BACK" button desired
-        if ($env{'form.catalogmode'} eq 'groupimport') {
-            my $resurl = &Apache::loncommon::lastresurl();
-	    $r->print(<<END);
-<input type="button" name="alter" value="$lt{'gb'}"
- onClick="window.location='$resurl?catalogmode=groupimport'" />&nbsp;
+        # --- Continue Buttons
+        my $resurl = 
+	   &Apache::loncommon::escape_single(&Apache::loncommon::lastresurl());
+        $r->print(<<END);
+<input type="button" name="alter" value="$lt{'ci'}"
+ onClick="window.location='$resurl?catalogmode=import'" />&nbsp;
+<input type="button" name="altersearch" value="$lt{'cs'}"
+ onClick="window.location='/adm/searchcat?catalogmode=import'" />&nbsp;
 END
-        }
-	if ($env{'form.catalogmode'} eq 'groupsearch') {
-	    $r->print(<<END);
-<input type="button" name="alter" value="$lt{'ns'}"
- onClick="window.location='/adm/searchcat?catalogmode=groupsearch&cleargroupsort=1'" />&nbsp;
-END
-        }
         # ---
 
 	$r->print(<<END);
@@ -399,7 +366,7 @@ END
 END
         $r->print("<table border='0'><tr><td bgcolor='#eeeeee'>");
 	$r->print("<table border=0><tr>\n");
-	if ($env{'form.readfile'}) { 
+	if (($env{'form.readfile'}) || ($env{'form.bookmarks'})) { 
 	    $r->print("<td bgcolor='$titleclr'><b>$lt{'in'}</b></td>\n");
 	} else { 
 	    $r->print("<td colspan='2' bgcolor='$titleclr'><b>$lt{'co'}</b></td>\n"); 
@@ -407,8 +374,9 @@ END
 	$r->print("<td colspan='2' bgcolor='$titleclr'><b>$lt{'ti'}</b></td>\n");
 	$r->print("<td bgcolor='$titleclr'><b>$lt{'pa'}</b></td></tr>\n");
     } else {
+	$r->print(&Apache::loncommon::start_page(undef,$js,
+						 {'only_body' => 1}));
 	$r->print(<<END);
-<body>
 <form method='post' action='/adm/groupsort' name='groupsort'
       enctype='application/x-www-form-urlencoded'>
 <input type="hidden" name="fnum" value="$clen" />
@@ -421,18 +389,18 @@ END
 	my $key=$_;
 	$ctr++;
 	my $iconname=&Apache::loncommon::icon($key);
-	if ($clen > 1) {
+	if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
 	    $r->print("<tr><td bgcolor='$fileclr'>");
-            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) {
+	if (($clen > 1)  || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
 	    $r->print("</td>");
-            unless ($env{'form.readfile'}) {
+            unless (($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
 		$r->print("<td bgcolor='$fileclr'>".
 			  &select_box($clen,$ctr).
 			  "</td>");
@@ -444,7 +412,7 @@ END
 	    $r->print("$key</td></tr>\n");
 	} 
     }
-    if ($clen > 1) {
+    if (($clen > 1) || ($env{'form.readfile'}) || ($env{'form.bookmarks'})) {
 	$r->print("</table></td></tr></table></form>");
     } else {
 	$r->print(<<END);
@@ -453,10 +421,8 @@ END
 </script>
 END
     }
-    $r->print(<<END);
-</body>
-</html>
-END
+
+    $r->print(&Apache::loncommon::end_page());
 
     return OK;
 }
@@ -466,6 +432,7 @@ sub hidden {
     my ($sel,$title,$filelink) = @_;
     my $string = '<input type="hidden" name="title'.$sel.'" value="'.$title.
 	'" />';
+    $filelink=~s|^/ext/|http://|;
     $string .= '<input type="hidden" name="filelink'.$sel.'" value="'.
 	$filelink.'" />';
     return $string;